Commit graph

5215 commits

Author SHA1 Message Date
mark-nielsen
9ae4e9f5de Fix in addpage.php when one deletes all pages in a lesson then adds a new one
Fix numerical questions were not displaying the student's answer in the feedback
2006-09-19 04:45:18 +00:00
mark-nielsen
b14123498f Saw several problems with lesson_choose_from_menu, so finally replaced its use with choose_from_menu in lib/weblib.php 2006-09-19 04:06:32 +00:00
mark-nielsen
f08769317f Removed hard-coded strings and fixed labels 2006-09-19 03:47:49 +00:00
mark-nielsen
63d4c906c7 Removed a hard-coded string and added PHPdoc comments for the page 2006-09-19 02:54:57 +00:00
mark-nielsen
7adb975062 removed some unecessary comments 2006-09-19 02:48:29 +00:00
mark-nielsen
2817bc1aed Fixed a bug when detecting a user as eligible for posting their name for high scores 2006-09-19 02:41:10 +00:00
mark-nielsen
8271e5cec8 Fixed alignment problem with the buttons for password protected lessons 2006-09-19 02:29:42 +00:00
toyomoyo
d76a5a7fed replacing references to user_* tables 2006-09-19 01:44:33 +00:00
tomflannaghan
f33beb0b3d Preset added. This is a basic javascript based preset. 2006-09-19 01:21:13 +00:00
skodak
21b6db6eff added capabilty risks into access.php and GUI for define role and override; minor fixes for capability types in forum 2006-09-18 21:32:49 +00:00
vyshane
20821a1266 Added new capabilities, renamed mod/data:readentry to mod/data:viewentry to make capability name more consistent with the rest of moodle. 2006-09-18 13:46:09 +00:00
vyshane
e51e3fcb34 Fixed notice 2006-09-18 12:48:00 +00:00
tomflannaghan
b8fb348277 Adds Javascript Support for the presets. 2006-09-18 11:45:12 +00:00
tomflannaghan
d6ef0526f3 <?php // $Id: preset.php,v 1.5 2006/08/30 09:17:40 skodak Exp $
/* Preset Menu
 *
 * This is the page that is the menu item in the config database
 * pages.
 */

require_once('../../config.php');
require_once('lib.php');
require_once($CFG->libdir.'/uploadlib.php');
require_once($CFG->libdir.'/xmlize.php');


$id      = optional_param('id', 0, PARAM_INT);    // course module id
$d       = optional_param('d', 0, PARAM_INT);     // database activity id
$action  = optional_param('action', 'base', PARAM_RAW); // current action
$file    = optional_param('file', false, PARAM_PATH); // path of file to upload

if ($id) {
    if (! $cm = get_record('course_modules', 'id', $id)) {
        error('Course Module ID Incorrect');
    }
    if (! $course = get_record('course', 'id', $cm->course)) {
        error('Course is misconfigured');
    }
    if (! $data = get_record('data', 'id', $cm->instance)) {
        error('Module Incorrect');
    }
} else if ($d) {
    if (! $data = get_record('data', 'id', $d)) {
        error('Database ID Incorrect');
    }
    if (! $course = get_record('course', 'id', $data->course)) {
        error('Course is misconfigured');
    }
    if (! $cm = get_coursemodule_from_instance('data', $data->id, $course->id)) {
        error('Course Module ID was incorrect');
    }
} else {
    error('Parameter missing');
}

require_login($course->id);

require_capability('mod/data:managetemplates', get_context_instance(CONTEXT_MODULE, $cm->id));

/* get the list of standard presets found in /mod/data/preset */
$presets = array();


if ($presetdir = opendir($CFG->dirroot.'/mod/data/preset')) {

    while ($userdir = readdir($presetdir)) {

        $fulluserdir = '/mod/data/preset/'.$userdir;

        if ($userdir == '.' || $userdir == '..') {
            continue;
        }

        /* Global Standard Presets */
        if (is_directory_a_preset($CFG->dirroot.$fulluserdir)) {
            $preset = new StdClass;
            $preset->path = $fulluserdir;
            $preset->name = $userdir;
            if (file_exists($fulluserdir.'/screenshot.jpg')) {
                $preset->screenshot = $CFG->wwwroot.'/mod/data/preset/'.$userdir.'/screenshot.jpg';
            }
            $presets[] = $preset;
            unset($preset);
        }

        /* User made presets stored in user folders */
        else if (get_record('user', 'id', $userdir)) {
            $userdirh = opendir($CFG->dirroot.$fulluserdir);
            while ($userpresetdir = readdir($userdirh)) {
                $fulluserpresetdir = $fulluserdir.'/'.$userpresetdir;
                if ($userpresetdir != '.' && $userpresetdir != '..' && is_directory_a_preset($CFG->dirroot.$fulluserpresetdir)) {
                    $preset = new StdClass;
                    $preset->path = $fulluserpresetdir;
                    $preset->name = $userpresetdir;
                    $preset->user = $userdir;
                    if (file_exists($fulluserpresetdir.'/screenshot.jpg')) {
                        $preset->screenshot = $CFG->wwwroot.'/mod/data/preset/'.$userdir.'/'.$userpresetdir.'/screenshot.jpg';
                    }
                    $presets[] = $preset;
                    unset($preset);
                }
            }
        }
    }
    closedir($presetdir);
}

/* Need sesskey security check here for import instruction */
$sesskey = sesskey();

/********************************************************************/
/* Output */
data_presets_print_header($course, $cm, $data);

echo "<center>";
switch ($action) {
    /* Main selection menu - default mode also. */
 default:
 case 'base':
     $strimport = get_string('import');
     $strfromfile = get_string('fromfile', 'data');
     $strchooseorupload = get_string('chooseorupload', 'data');
     $strok = get_string('ok');
     $strusestandard = get_string('usestandard', 'data');
     $strchoose = get_string('choose');
     $strexport = get_string('export', 'data');
     $strexportaszip = get_string('exportaszip', 'data');
     $strsaveaspreset = get_string('saveaspreset', 'data');
     $strdelete = get_string('delete');

     echo "<table cellpadding=7>";
     echo "<tr><td><h3>$strimport</h3></td>";
     echo "<td><form name='form' method='POST' action='?d=$data->id&action=importzip&sesskey=$sesskey' enctype='multipart/form-data'>";
     helpbutton('importfromfile', '', 'data');
     echo " $strfromfile:</td><td><input name=\"file\" size=\"20\" value=\"\" alt=\"file\" type=\"text\"><input name=\"coursefiles\" title=\"Choose or upload a file\" value=\"$strchooseorupload\" onclick=\"return openpopup('/files/index.php?id=2&choose=form.file', 'coursefiles', 'menubar=0,location=0,scrollbars,resizable,width=750,height=500', 0);\" type=\"button\">";
     echo "<input type=\"submit\" value=\"$strok\"/>";
     echo "</form></td></tr>";

     echo "<tr valign=top><td></td><td>";
     helpbutton('usepreset', '', 'data');
     echo " $strusestandard: </td><td>";
     echo "<table width=100%>";
     foreach ($presets as $id => $preset) {
	 echo "<tr><form action='' method='POST'>";
	 echo "<input type='hidden' name='file' value=\"$preset->path\">";
	 echo "<input type='hidden' name='action' value='importpreset'>";
	 echo "<input type='hidden' name='d' value='$data->id'>";
	 echo "<input type='hidden' name='sesskey' value='$sesskey'>";
	 echo "<td>";
	 if ($preset->screenshot) {
	     echo "<img src='$preset->screenshot' alt='$preset->screenshot' />";
	 }
	 echo "</td><td>$preset->name";
	 if ($preset->user) {
	     $user = get_record('user', 'id', $preset->user);
	     echo " by $user->firstname $user->lastname";
	 }
	 echo "</td><td><input type='submit' value='$strchoose'></td></form>";
	 echo "<td>";
	 if ($preset->user == $USER->id || isadmin()) {
	     echo "<form action='' method='POST'>";
	     echo "<input type='hidden' name='d' value='$data->id' />";
	     echo "<input type='hidden' name='action' value='confirmdelete' />";
	     echo "<input type='hidden' name='sesskey' value='$sesskey' />";
	     echo "<input type='hidden' name='deleteid' value='$id' />";
	     echo "<input type='hidden' name='deletename' value=\"$preset->name\" />";
	     echo "<input type='submit' value='$strdelete' /></form>";
	 }
	 echo "</td></tr>";
     }
     echo "</table></td></tr>";

     echo "<tr><td valign=top><h3>$strexport</h3></td>";
     echo "<td><form action='' method='POST'>";
     helpbutton('exportzip', '', 'data');
     echo " <input type='hidden' name='action' value='export' />";
     echo "<input type='hidden' name='d' value='$data->id' />";
     echo "<input type='submit' value='$strexportaszip' />";
     echo "</form>";

     echo "<form action='' method='POST'>";
     helpbutton('savepreset', '', 'data');
     echo " <input type='hidden' name='action' value='save1' />";
     echo "<input type='hidden' name='d' value='$data->id' />";
     echo "<input type='hidden' name='sesskey' value='$sesskey' />";
     echo "<input type='submit' value='$strsaveaspreset' />";
     echo "</form>";

     echo "</table>";
     break;



     /***************** Deleting *****************/
 case 'confirmdelete' :
     if (!confirm_sesskey()) {
	 error("Sesskey Invalid");
     }

     $deletename = required_param('deletename', PARAM_RAW);
     $deleteid = required_param('deleteid', PARAM_INT);

     $strwarning = get_string('deletewarning', 'data');
     $strdelete = get_string('delete');
     notify($strwarning);
     echo "<form action='' method='POST'>";
     echo "<input type='hidden' name='d' value='$data->id' />";
     echo "<input type='hidden' name='action' value='delete' />";
     echo "<input type='hidden' name='sesskey' value='$sesskey' />";
     echo "<input type='hidden' name='deleteid' value='$deleteid' />";
     echo "<input type='hidden' name='deletename' value=\"$deletename\" />";
     echo "<input type='submit' value='$strdelete' /></form>";
     break;

 case 'delete' :
     if (!confirm_sesskey()) {
	 error('Sesskey Invalid');
     }

     $deletename = required_param('deletename', PARAM_RAW);
     $deleteid = required_param('deleteid', PARAM_INT);

     if (!empty($presets[$deleteid])) {
	 if ($presets[$deleteid]->name == $deletename) {
	     if (!clean_preset($CFG->dirroot.$presets[$deleteid]->path)) error("Error deleting");
	 }
	 rmdir($CFG->dirroot.$presets[$deleteid]->path);
     }
     else {
	 error('Invalid delete');
     }

     $strdelete = get_string('deleted', 'data');
     notify("$deletename $strdeleted");

     break;



     /***************** Importing *****************/
 case 'importpreset' :
     if (!confirm_sesskey()) {
	 error("Sesskey Invalid");
     }

     $pimporter = new PresetImporter($course, $cm, $data, $CFG->dirroot.$file);
     $pimporter->import_options();
     break;

     /* Imports a zip file. */
 case 'importzip' :
     if (!confirm_sesskey()) {
	 error("Sesskey Invalid");
     }

     if (!make_upload_directory('temp/data/'.$USER->id)) {
	 error("Can't Create Directory");
     }

     $presetfile = $CFG->dataroot."/temp/data/".$USER->id;
     clean_preset($presetfile);

     if (!unzip_file($CFG->dataroot."/$course->id/$file",
		     $presetfile, false))
	 error("Can't unzip file");

     $pimporter = new PresetImporter($course, $cm, $data, $presetfile);
     $pimporter->import_options();
     break;

 case 'finishimport':
     if (!confirm_sesskey()) {
	 error('Sesskey Invalid');
     }

     $pimporter = new PresetImporter($course, $cm, $data, $file);
     $pimporter->import();

     $strimportsuccess = get_string('importsuccess', 'data');
     $straddentries = get_string('addentries', 'data');
     $strtodatabase = get_string('todatabase', 'data');
     if (!get_records('data_records', 'dataid', $data->id)) {
	 notify("$strimportsuccess <a href='edit.php?d=$data->id'>$straddentries</a> $strtodatabase", 'notifysuccess');
     }
     else {
	 notify("$strimportsuccess", 'notifysuccess');
     }
     break;

     /* Exports as a zip file ready for download. */
 case 'export':
     $file = data_presets_export($course, $cm, $data);
     echo get_string('exportedtozip', 'data')."<br>";
     $perminantfile = $CFG->dataroot."/$course->id/moddata/data/$data->id/preset.zip";
     @unlink($perminantfile);
     /* is this created elsewhere? sometimes its not present... */
     make_upload_directory("$course->id/moddata/data/$data->id");

     /* now just move the zip into this folder to allow a nice download */
     if (!rename($file, $perminantfile)) error("Can't move zip");
     echo "<a href='$CFG->wwwroot/file.php/$course->id/moddata/data/$data->id/preset.zip'>".get_string('download', 'data')."</a>";
     break;



     /***************** Exporting *****************/
 case 'save1':
     if (!confirm_sesskey()) {
	 error("Sesskey Invalid");
     }

     $strcontinue = get_string('continue');
     $strwarning = get_string('presetwarning', 'data');

     echo "<div align=center>";
     echo "<p>$strwarning</p>";
     echo "<form action='' method='POST'>";
     echo "Name: <input type='textbox' name='name' value=\"$data->name\" />";
     echo "<input type='hidden' name='action' value='save2' />";
     echo "<input type='hidden' name='d' value='$data->id' />";
     echo "<input type='hidden' name='sesskey' value='$sesskey' />";
     echo "<input type='submit' value='$strcontinue' /></form></div>";
     break;

 case 'save2':
     if (!confirm_sesskey()) {
	 error("Sesskey Invalid");
     }

     $strcontinue = get_string('continue');
     $stroverwrite = get_string('overwrite');

     $name = optional_param('name', $data->name, PARAM_FILE);

     if (is_directory_a_preset("$CFG->dirroot/mod/data/preset/$USER->id/$name")) {
	 notify("Preset already exists: Pick another name or overwrite");

	 echo "<div align=center>";
	 echo "<form action='' method='POST'>";
	 echo "New name: <input type='textbox' name='name' value=\"$name\" />";
	 echo "<input type='hidden' name='action' value='save2' />";
	 echo "<input type='hidden' name='d' value='$data->id' />";
	 echo "<input type='hidden' name='sesskey' value='$sesskey' />";
	 echo "<input type='submit' value='$strcontinue' /></form>";

	 echo "<form action='' method='POST'>";
	 echo "<input type='hidden' name='name' value=\"$name\" />";
	 echo "<input type='hidden' name='action' value='save3' />";
	 echo "<input type='hidden' name='d' value='$data->id' />";
	 echo "<input type='hidden' name='sesskey' value='$sesskey' />";
	 echo "<input type='submit' value='$stroverwrite' /></form>";
	 echo "</div>";
	 break;
     }

 case 'save3':
     if (!confirm_sesskey()) {
	 error("Sesskey Invalid");
     }

     $name = optional_param('name', $data->name, PARAM_FILE);
     $presetdirectory = "$CFG->dirroot/mod/data/preset/$USER->id/$name";

     if (!is_dir($presetdirectory)) {
	 @mkdir("$CFG->dirroot/mod/data/preset/$USER->id");
	 mkdir($presetdirectory);
     }
     else {
	 clean_preset($presetdirectory);
     }

     $file = data_presets_export($course, $cm, $data);
     if (!unzip_file($file, $presetdirectory, false)) error("Can't unzip to the preset directory");
     notify(get_string('savesuccess', 'data'), 'notifysuccess');
     break;

}
echo "</center>";
print_footer($course);


function is_directory_a_preset($directory) {
    $directory = rtrim($directory, '/\\') . '/';
    if (file_exists($directory.'singletemplate.html') &&
	file_exists($directory.'listtemplate.html') &&
	file_exists($directory.'listtemplateheader.html') &&
	file_exists($directory.'listtemplatefooter.html') &&
	file_exists($directory.'addtemplate.html') &&
	file_exists($directory.'rsstemplate.html') &&
	file_exists($directory.'rsstitletemplate.html') &&
	file_exists($directory.'csstemplate.css') &&
	file_exists($directory.'jstemplate.js') &&
	file_exists($directory.'preset.xml')) return true;
    else return false;
}

function data_presets_print_header($course, $cm, $data, $showtabs=true) {

    global $CFG, $displaynoticegood, $displaynoticebad;

    $strdata = get_string('modulenameplural','data');

    print_header_simple($data->name, '', "<a href='index.php?id=$course->id'>$strdata</a> -> $data->name",
			'', '', true, '', navmenu($course, $cm));

    print_heading(format_string($data->name));

    /// Print the tabs

    if ($showtabs) {
        $currenttab = 'presets';
        include_once('tabs.php');
    }

    /// Print any notices

    if (!empty($displaynoticegood)) {
        notify($displaynoticegood, 'notifysuccess');    // good (usually green)
    } else if (!empty($displaynoticebad)) {
        notify($displaynoticebad);                     // bad (usuually red)
    }
}


function clean_preset($folder) {
    if (unlink($folder.'/singletemplate.html') &&
	unlink($folder.'/listtemplate.html') &&
	unlink($folder.'/listtemplateheader.html') &&
	unlink($folder.'/listtemplatefooter.html') &&
	unlink($folder.'/addtemplate.html') &&
	unlink($folder.'/rsstemplate.html') &&
	unlink($folder.'/rsstitletemplate.html') &&
	unlink($folder.'/csstemplate.css') &&
	unlink($folder.'/jstemplate.js') &&
	unlink($folder.'/preset.xml')) return true;
    else return false;
}


function data_presets_export($course, $cm, $data) {
    global $CFG;
    /* Info Collected. Now need to make files in moodledata/temp */
    $tempfolder = $CFG->dataroot.'/temp';
    $singletemplate     = fopen($tempfolder.'/singletemplate.html', 'w');
    $listtemplate       = fopen($tempfolder.'/listtemplate.html', 'w');
    $listtemplateheader = fopen($tempfolder.'/listtemplateheader.html', 'w');
    $listtemplatefooter = fopen($tempfolder.'/listtemplatefooter.html', 'w');
    $addtemplate        = fopen($tempfolder.'/addtemplate.html', 'w');
    $rsstemplate        = fopen($tempfolder.'/rsstemplate.html', 'w');
    $rsstitletemplate   = fopen($tempfolder.'/rsstitletemplate.html', 'w');
    $csstemplate        = fopen($tempfolder.'/csstemplate.css', 'w');
    $jstemplate         = fopen($tempfolder.'/jstemplate.js', 'w');

    fwrite($singletemplate, $data->singletemplate);
    fwrite($listtemplate, $data->listtemplate);
    fwrite($listtemplateheader, $data->listtemplateheader);
    fwrite($listtemplatefooter, $data->listtemplatefooter);
    fwrite($addtemplate, $data->addtemplate);
    fwrite($rsstemplate, $data->rsstemplate);
    fwrite($rsstitletemplate, $data->rsstitletemplate);
    fwrite($csstemplate, $data->csstemplate);
    fwrite($jstemplate, $data->jstemplate);

    fclose($singletemplate);
    fclose($listtemplate);
    fclose($listtemplateheader);
    fclose($listtemplatefooter);
    fclose($addtemplate);
    fclose($rsstemplate);
    fclose($rsstitletemplate);
    fclose($csstemplate);
    fclose($jstemplate);

    /* All the display data is now done. Now assemble preset.xml */
    $fields = get_records('data_fields', 'dataid', $data->id);
    $presetfile = fopen($tempfolder.'/preset.xml', 'w');
    $presetxml = "<preset>\n\n";

    /* Database settings first. Name not included? */
    $settingssaved = array('intro', 'comments', 'ratings', 'participants',
			   'requiredentries', 'requiredentriestoview', 'maxentries',
			   'rssarticles', 'approval', 'scale', 'assessed', 'assessedpublic',
			   'defaultsort', 'defaultsortdir', 'editany');

    $presetxml .= "<settings>\n";
    foreach ($settingssaved as $setting) {
	$presetxml .= "<$setting>{$data->$setting}</$setting>\n";
    }
    $presetxml .= "</settings>\n\n";

    /* Now for the fields. Grabs all settings that are non-empty */
    if (!empty($fields)) {
	foreach ($fields as $field) {
	    $presetxml .= "<field>\n";
	    foreach ($field as $key => $value) {
		if ($value != '' && $key != 'id' && $key != 'dataid') {
		    $presetxml .= "<$key>$value</$key>\n";
		}
	    }
	    $presetxml .= "</field>\n\n";
	}
    }

    $presetxml .= "</preset>";
    fwrite($presetfile, $presetxml);
    fclose($presetfile);

    /* Check all is well */
    if (!is_directory_a_preset($tempfolder)) {
        error("Not all files generated!");
    }

    $filelist = array(
                      "singletemplate.html",
                      "listtemplate.html",
                      "listtemplateheader.html",
                      "listtemplatefooter.html",
                      "addtemplate.html",
                      "rsstemplate.html",
                      "rsstitletemplate.html",
                      "csstemplate.css",
		      "jstemplate.js",
                      "preset.xml");

    foreach ($filelist as $key => $file) {
        $filelist[$key] = $tempfolder.'/'.$filelist[$key];
    }

    @unlink($tempfolder.'/export.zip');
    $status = zip_files($filelist, $tempfolder.'/export.zip');

    /* made the zip... now return the filename for storage.*/
    return $tempfolder.'/export.zip';
}



class PresetImporter {
    function PresetImporter($course, $cm, $data, $folder) {
        global $CFG;
        $this->course = $course;
        $this->cm = $cm;
        $this->data = $data;
        $this->folder = $folder;
        $this->postfolder = $folder;
    }


    function get_settings() {
        global $CFG;

        if (!is_directory_a_preset($this->folder)) {
            error("$this->folder Not a preset");
        }

        /* Grab XML */
        $presetxml = file_get_contents($this->folder.'/preset.xml');
        $parsedxml = xmlize($presetxml);

        /* First, do settings. Put in user friendly array. */
        $settingsarray = $parsedxml['preset']['#']['settings'][0]['#'];
        $settings = new StdClass();

        foreach ($settingsarray as $setting => $value) {
            $settings->$setting = $value[0]['#'];
        }

        /* Now work out fields to user friendly array */
        $fieldsarray = $parsedxml['preset']['#']['field'];
        $fields = array();
        foreach ($fieldsarray as $field) {
            $f = new StdClass();
            foreach ($field['#'] as $param => $value) {
                $f->$param = $value[0]['#'];
            }
            $f->dataid = $this->data->id;
            $fields[] = $f;
        }

        /* Now add the HTML templates to the settings array so we can update d */
        $settings->singletemplate     = file_get_contents($this->folder."/singletemplate.html");
        $settings->listtemplate       = file_get_contents($this->folder."/listtemplate.html");
        $settings->listtemplateheader = file_get_contents($this->folder."/listtemplateheader.html");
        $settings->listtemplatefooter = file_get_contents($this->folder."/listtemplatefooter.html");
        $settings->addtemplate        = file_get_contents($this->folder."/addtemplate.html");
        $settings->rsstemplate        = file_get_contents($this->folder."/rsstemplate.html");
        $settings->rsstitletemplate   = file_get_contents($this->folder."/rsstitletemplate.html");
        $settings->csstemplate        = file_get_contents($this->folder."/csstemplate.css");
        $settings->jstemplate         = file_get_contents($this->folder."/jstemplate.js");

        $settings->instance = $this->data->id;

        /* Now we look at the current structure (if any) to work out whether we need to clear db
           or save the data */
        $currentfields = array();
        $currentfields = get_records('data_fields', 'dataid', $this->data->id);

        return array($settings, $fields, $currentfields);
    }

    function import_options() {
        if (!confirm_sesskey()) {
            error("Sesskey Invalid");
        }

        $strblank = get_string('blank', 'data');
        $strnofields = get_string('nofields', 'data');
        $strcontinue = get_string("continue");
        $sesskey = sesskey();
        $strwarning = get_string('mappingwarning', 'data');
        $strfieldmappings = get_string('fieldmappings', 'data');
        $strnew = get_string("new");
        $strold = get_string("old");

        list($settings, $newfields,  $currentfields) = $this->get_settings();

        echo "<div align='center'><form action='' method='POST'>";
        echo "<input type='hidden' name='sesskey' value='$sesskey' />";
        echo "<input type='hidden' name='d' value='{$this->data->id}' />";
        echo "<input type='hidden' name='action' value='finishimport' />";
        echo "<input type='hidden' name='file' value=\"$this->postfolder\" />";

        if ($currentfields != array() && $newfields != array()) {
            echo "<h3>$strfieldmappings ";
            echo helpbutton('fieldmappings', '', 'data');
            echo "</h3><table>";

            foreach ($newfields as $nid => $newfield) {
                echo "<tr><td>$newfield->name </td>";
                echo "<td><select name='field_$nid'>";

                foreach ($currentfields as $cid => $currentfield) {
                    if ($currentfield->type == $newfield->type) {
                        if ($currentfield->name == $newfield->name) {
                            echo "<option value='$cid' selected='true'>$currentfield->name</option>";
                            $selected=true;
                        }
                        else {
			    echo "<option value='$cid'>$currentfield->name</option>";
			}
		    }
                }

                if ($selected)
                    echo "<option value='-1'>-</option>";
                else
                    echo "<option value='-1' selected='true'>-</option>";
                echo "</select></td></tr>";
            }
            echo "</table>";
            echo "<p>$strwarning</p>";
        }
        else if ($newfields == array()) {
            error("New preset has no defined fields!");
        }
        echo "<input type='submit' value='$strcontinue' /></form></div>";

    }

    function import() {
        global $CFG;

        list($settings, $newfields, $currentfields) = $this->get_settings();
        $preservedfields = array();

        /* Maps fields and makes new ones */
        if ($newfields != array()) {
            /* We require an injective mapping, and need to know what to protect */
            foreach ($newfields as $nid => $newfield) {
                $cid = optional_param("field_$nid", -1, PARAM_INT);
                if ($cid == -1) continue;

                if (array_key_exists($cid, $preservedfields)) error("Not an injective map");
                else $preservedfields[$cid] = true;

            }

            foreach ($newfields as $nid => $newfield) {
                $cid = optional_param("field_$nid", -1, PARAM_INT);

                /* A mapping. Just need to change field params. Data kept. */
                if ($cid != -1) {
                    $fieldobject = data_get_field_from_id($currentfields[$cid]->id, $this->data);
                    foreach ($newfield as $param => $value) {
                        if ($param != "id") {
                            $fieldobject->field->$param = $value;
                        }
                    }
                    unset($fieldobject->field->similarfield);
                    $fieldobject->update_field();
                    unset($fieldobject);
                }
                /* Make a new field */
                else {
                    include_once("field/$newfield->type/field.class.php");

                    $classname = 'data_field_'.$newfield->type;
                    $fieldclass = new $classname($newfield, $this->data);
                    $fieldclass->insert_field();
                    unset($fieldclass);
                }
            }
        }

        /* Get rid of all old unused data */
        if ($preservedfields != array()) {
            foreach ($currentfields as $cid => $currentfield) {
                if (!array_key_exists($cid, $preservedfields)) {
                    /* Data not used anymore so wipe! */
                    print "Deleting field $currentfield->name<br>";
                    $id = $currentfield->id;

                    if ($content = get_records('data_content', 'fieldid', $id)) {
                        foreach ($content as $item) {
                            delete_records('data_ratings', 'recordid', $item->recordid);
                            delete_records('data_comments', 'recordid', $item->recordid);
                            delete_records('data_records', 'id', $item->recordid);
                        }
                    }
                    delete_records('data_content', 'fieldid', $id);
                    delete_records('data_fields', 'id', $id);

                }
            }
        }

        data_update_instance(addslashes_object($settings));

        if (strstr($this->folder, "/temp/")) clean_preset($this->folder); /* Removes the temporary files */
        return true;
    }
}

?>
2006-09-18 11:42:28 +00:00
moodler
fdb1cf2cc1 FIxed to use the new debugging function 2006-09-18 09:13:04 +00:00
moodler
0bb391b7a0 Fixed some debugging statements 2006-09-18 08:57:23 +00:00
vyshane
24bf6cc196 Replaced isteacher() in fullname() call. 2006-09-18 02:28:57 +00:00
mark-nielsen
62bb11d837 Added display default feedback in lesson settings
Led to reducing some redundant code in action/continue.php
Also, a bug fix in locallib.php for function lesson_print_submit_link (needed to add slashes or else js would break)
2006-09-18 01:31:35 +00:00
skodak
7f5bc80b78 backupdata folder is no longer displayed in list of directories when setting up Directory Resource - partially related to MDL-6280 ; and some other typo fixes; get_directory_list() no accepts also array of exluded files 2006-09-17 06:49:26 +00:00
martinlanghoff
5a39def902 re-merge of "Merged fix from 1.6 for Bug #5131 - RSS Feeds and Moving Discussions."
Originally by vyshane - got dropped accidentally in one of the biiiiig roles
commits.
2006-09-17 02:27:13 +00:00
skodak
0d5a9a94c1 fixed recursive backing up of backup folder when resource diretory reference is course files root - MDL-6280 ; merged from MOODLE_16_STABLE 2006-09-16 18:15:40 +00:00
skodak
5434bacabe backupdata folder is not visible in directory resource any more, the backup files were not downloadable, but they might be stored in browser cache when teacher and student were logged from the same browser and computer account - MDL-6280 ; merged from MOODLE_16_STABLE 2006-09-16 17:15:18 +00:00
moodler
b977b0a365 Fixed some subscription typos 2006-09-15 06:15:01 +00:00
vyshane
67875aa108 Fixed bug in forum_search_posts(). More testing needed still. 2006-09-15 06:04:23 +00:00
gbateson
e69c04db5a do not add $restore->course_startdateoffset to ANY empty dates 2006-09-14 21:50:37 +00:00
gbateson
de2ded1a43 moved restorelog code to "hotpot_restore_mods", so it is only executed when backing up a HotPot record. Also, modified restorelog code so that "course_startdateoffset" is not added to TIMEOPEN or TIMECLOSE if those fields are currently empty (empty has a special meaning for those fields) 2006-09-14 11:10:54 +00:00
toyomoyo
ea8158c118 changing sql calls from user_students table to role_assignments table 2006-09-14 09:08:07 +00:00
vyshane
b1342e1869 Minor formatting tidyup 2006-09-14 08:57:41 +00:00
vyshane
42fb3c858f Converted forum searches so that they take into account the new Roles system. Search results will only include what the searcher should be able to see based on his/her capabilities. 2006-09-14 08:44:45 +00:00
bobopinna
9b3496f265 Removed two style definitions (bug MDL-6209) 2006-09-14 08:28:26 +00:00
gbateson
29f4a60ffe add get_coursemodule_from_id/instance functions for compatability with Moodles <1.7 2006-09-14 07:29:22 +00:00
gbateson
2a532aa68c reduce length of worksheet name to 31 chars if running under Moodle 1.5 2006-09-14 07:17:53 +00:00
gbateson
3c4f45c2d9 remove &nbsp; from blank cells when generating Excel sheet 2006-09-14 07:16:14 +00:00
moodler
966620586e Better handling of forum id/object 2006-09-14 07:13:08 +00:00
vyshane
8d9a0ae64b Fix for MDL-6517. Patch by David Mudrak. 2006-09-14 03:18:37 +00:00
gbateson
e9be584810 fix for overly advanced version numbers in HotPot module in Moodle 1.5 (see bug MDL-6538) 2006-09-13 23:59:38 +00:00
tjhunt
404518eb85 Fix ordering problem with question number column headings. 2006-09-13 15:00:58 +00:00
thompson697
163ff97e84 Complete work on Roll Forwards - Restore from previous semester (MDL-5532)
* Add fields to restore form to enable changes to Short Name, Full Name and Start Date
* Start Date offset added to Restore process
* Created Restorelog file in Course files area
* Activity Modules use offset to change dates
* Activity Modules write changes to Restorelog
2006-09-13 13:19:39 +00:00
toyomoyo
17d6a25e5c adding capabilitiies 2006-09-13 09:08:14 +00:00
moodler
d6cc763f73 Added forum_role_assign and forum_role_unassign 2006-09-13 08:11:34 +00:00
moodler
8d630fda5a Expanded forum_add_user_default_subscriptions() for more contexts
Added    forum_remove_user_subscriptions()
2006-09-13 06:40:30 +00:00
mark-nielsen
260a56b114 Added some more stats to reports, added more actions to collapsed view and increased speed of lesson by using lesson_set_message() and redirects with 0 second delays. 2006-09-13 03:42:16 +00:00
skodak
c15f680424 partially fixed group management in workshop 2006-09-12 21:09:43 +00:00
skodak
33e7885ee0 fixed group management in wiki 2006-09-12 21:07:54 +00:00
moodler
0f9602085b Small bump for guest role fix 2006-09-12 08:22:14 +00:00
moodler
8d158ed44f Reload the guest role using new defaults 2006-09-12 07:10:49 +00:00
moodler
00adf177ad Changed some default permissions for the guest role 2006-09-12 05:58:42 +00:00
skodak
4da8ff666b wiki now using new groups parameter in get_users_by_capability() 2006-09-11 20:01:17 +00:00
skodak
5f02cb4b44 lams conversion to new roles framework 2006-09-11 19:54:11 +00:00
stronk7
a05452e942 teachergraded belongs to workshop_assessments, not to workshop. ;-) 2006-09-11 15:38:51 +00:00