]> git.mjollnir.org Git - moodle.git/commitdiff
MDL-14336 defaultsort now stored as field name in preset.xml; merged from MOODLE_19_S...
authorskodak <skodak>
Sun, 20 Apr 2008 19:22:06 +0000 (19:22 +0000)
committerskodak <skodak>
Sun, 20 Apr 2008 19:22:06 +0000 (19:22 +0000)
mod/data/lib.php

index da29b6dadfbdd51f44a98285ba8b7df57f6b164c..63bbc958db67d276aa00a04518ede75dd346e034 100755 (executable)
@@ -1840,16 +1840,23 @@ function data_presets_export($course, $cm, $data) {
     $presetfile = fopen($tempfolder.'/preset.xml', 'w');
     $presetxml = "<preset>\n\n";
 
-    /* Database settings first. Name not included? */
-    $settingssaved = array('intro', 'comments',
-            'requiredentries', 'requiredentriestoview', 'maxentries',
-            'rssarticles', 'approval', 'scale', 'assessed',
-            'defaultsort', 'defaultsortdir', 'editany');
+    // raw settings are not preprocessed during saving of presets
+    $raw_settings = array('intro', 'comments', 'requiredentries', 'requiredentriestoview',
+                          'maxentries', 'rssarticles', 'approval', 'defaultsortdir');
 
     $presetxml .= "<settings>\n";
-    foreach ($settingssaved as $setting) {
+    // first settings that do not require any conversion
+    foreach ($raw_settings as $setting) {
         $presetxml .= "<$setting>".htmlspecialchars($data->$setting)."</$setting>\n";
     }
+
+    // now specific settings
+    if ($data->defaultsort > 0 and $sortfield = data_get_field_from_id($data->defaultsort, $data)) {
+        $presetxml .= "<defaultsort>".htmlspecialchars($sortfield->field->name)."</defaultsort>\n";
+    } else {
+        $presetxml .= "<defaultsort>0</defaultsort>\n";
+    }
+    // note: grading settings are not exported intentionally
     $presetxml .= "</settings>\n\n";
 
     /* Now for the fields. Grabs all settings that are non-empty */
@@ -1922,6 +1929,9 @@ class PresetImporter {
         $presetxml = file_get_contents($this->folder.'/preset.xml');
         $parsedxml = xmlize($presetxml, 0);
 
+        $allowed_settings = array('intro', 'comments', 'requiredentries', 'requiredentriestoview',
+                                  'maxentries', 'rssarticles', 'approval', 'defaultsortdir', 'defaultsort');
+
         /* First, do settings. Put in user friendly array. */
         $settingsarray = $parsedxml['preset']['#']['settings'][0]['#'];
         $settings = new StdClass();
@@ -1930,6 +1940,10 @@ class PresetImporter {
             if (!is_array($value)) {
                 continue;
             }
+            if (!in_array($setting, $allowed_settings)) {
+                // unsupported setting
+                continue;
+            }
             $settings->$setting = $value[0]['#'];
         }
 
@@ -1973,8 +1987,9 @@ class PresetImporter {
 
         /* 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);
+        if (!$currentfields = get_records('data_fields', 'dataid', $this->data->id)) {
+            $currentfields = array();
+        }
 
         return array($settings, $fields, $currentfields);
     }
@@ -2115,18 +2130,30 @@ class PresetImporter {
             }
         }
 
-        // do we want to overwrite current database settings?
+    /// handle special settings here
+        if (!empty($settings->defaultsort)) {
+            if (is_numeric($settings->defaultsort)) {
+                //old broken value
+                $settings->defaultsort = 0;
+            } else {
+                $settings->defaultsort = (int)get_field('data_fields', 'id', 'dataid', $this->data->id, 'name', addslashes($settings->defaultsort));
+            }
+        } else {
+            $settings->defaultsort = 0;
+        }
+
+        // do we want to overwrite all current database settings?
         if ($overwritesettings) {
-            // all settings
+            // all supported settings
             $overwrite = array_keys((array)$settings);
         } else {
-            // only templates
+            // only templates and sorting
             $overwrite = array('singletemplate', 'listtemplate', 'listtemplateheader', 'listtemplatefooter',
                                'addtemplate', 'rsstemplate', 'rsstitletemplate', 'csstemplate', 'jstemplate',
-                               'asearchtemplate');
+                               'asearchtemplate', 'defaultsortdir', 'defaultsort');
         }
 
-        // existing values MUST be sent too - it can not work without them!
+        // now overwrite current data settings
         foreach ($this->data as $prop=>$unused) {
             if (in_array($prop, $overwrite)) {
                 $this->data->$prop = $settings->$prop;
@@ -2135,7 +2162,11 @@ class PresetImporter {
 
         data_update_instance(addslashes_object($this->data));
 
-        if (strstr($this->folder, '/temp/')) clean_preset($this->folder); /* Removes the temporary files */
+        if (strstr($this->folder, '/temp/')) {
+        // Removes the temporary files
+            clean_preset($this->folder); 
+        }
+
         return true;
     }
 }