Commit graph

5034 commits

Author SHA1 Message Date
tjhunt
15995c4ab6 Fix typos in string concatenation. 2006-09-20 17:01:19 +00:00
vyshane
7f2586640e Upgrade to roles code, as well as restoring from 1.6 on a 1.7 install code. 2006-09-20 16:57:01 +00:00
vyshane
2a1b4af377 Added course module groupmodes in convertion to roles logic 2006-09-20 16:54:50 +00:00
stronk7
a6e0172869 renaming question_dataset_items->number to itemnumber (reserved word) and
question->commentarytext to question->generalfeedback
2006-09-20 16:22:19 +00:00
tjhunt
40cc892b6a Fix bug with getting the capability. 2006-09-20 16:17:27 +00:00
skodak
43a8ceeaf1 fixed missing ; 2006-09-20 15:04:01 +00:00
toyomoyo
dc5586907d replacing deprecated calls and references to capability calls 2006-09-20 09:00:04 +00:00
skodak
1d126f4fe4 mostly removed old isadmin() calls 2006-09-20 06:59:32 +00:00
vyshane
6adc1e975d Added more overrides during restore process for forums from 1.6. Plus some bug fixes. 2006-09-20 02:59:43 +00:00
vyshane
689b19297f Fixed notice 2006-09-20 02:47:57 +00:00
tjhunt
15677ae4a5 Fix JavaScript problem reported in this thread: http://moodle.org/mod/forum/discuss.php?d=54432. Merged from MOODLE_16_STABLE. 2006-09-19 21:48:16 +00:00
toyomoyo
9ce384ba1e relacing deprecated functions with capability checks 2006-09-19 14:16:40 +00:00
tjhunt
a4514d91de Renamed new commentary feature to 'general feedback'. 2006-09-19 13:35:42 +00:00
tjhunt
717cfb0a7b Rename column question_dataset_items->number to itemnumber, to avoid reserved word. 2006-09-19 10:56:00 +00:00
toyomoyo
9c37662f22 replacing deprecated funciton calls with capability calls 2006-09-19 09:16:24 +00:00
mark-nielsen
096a664c01 Attempted to improve the display of the table in collapsed view 2006-09-19 05:57:57 +00:00
mark-nielsen
7c03355aab Fix for the instance mentioned in MDL-3058 2006-09-19 05:11:57 +00:00
mark-nielsen
4bea0828a2 Got ahead of myself, fixed by bug fix 2006-09-19 04:49:45 +00:00
mark-nielsen
51c870d253 Notice fix in report for numerical question types 2006-09-19 04:48:13 +00:00
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