$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 */
$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();
if (!is_array($value)) {
continue;
}
+ if (!in_array($setting, $allowed_settings)) {
+ // unsupported setting
+ continue;
+ }
$settings->$setting = $value[0]['#'];
}
/* 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);
}
}
}
- // 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;
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;
}
}