function import() { global $CFG; list($settings, $newfields, $currentfields) = $this->get_settings(); $preservedfields = array(); $overwritesettings = optional_param('overwritesettings', 0, PARAM_BOOL); /* Maps fields and makes new ones */ if (!empty($newfields)) { /* 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 and isset($currentfields[$cid])) { $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); } else { include_once "field/{$newfield->type}/field.class.php"; if (!isset($newfield->description)) { $newfield->description = ''; } $classname = 'data_field_' . $newfield->type; $fieldclass = new $classname($newfield, $this->data); $fieldclass->insert_field(); unset($fieldclass); } } } /* Get rid of all old unused data */ if (!empty($preservedfields)) { 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; //Why delete existing data records and related comments/ratings?? /* 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); } } } // 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 supported settings $overwrite = array_keys((array) $settings); } else { // only templates and sorting $overwrite = array('singletemplate', 'listtemplate', 'listtemplateheader', 'listtemplatefooter', 'addtemplate', 'rsstemplate', 'rsstitletemplate', 'csstemplate', 'jstemplate', 'asearchtemplate', 'defaultsortdir', 'defaultsort'); } // 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/')) { // Removes the temporary files clean_preset($this->folder); } return true; }
echo '<input type="hidden" name="d" value="' . $data->id . '" />'; echo '<input type="hidden" name="sesskey" value="' . $sesskey . '" />'; echo '<input type="submit" value="' . $stroverwrite . '" /></div></form>'; echo '</div>'; print_footer($course); exit; break; } case 'save3': if (!data_submitted() or !confirm_sesskey()) { error("Invalid request"); } $name = optional_param('name', $data->name, PARAM_FILE); $presetdirectory = "/data/preset/{$USER->id}/{$name}"; make_upload_directory($presetdirectory); clean_preset($CFG->dataroot . $presetdirectory); $file = data_presets_export($course, $cm, $data); if (!unzip_file($file, $CFG->dataroot . $presetdirectory, false)) { error("Can't unzip to the preset directory"); } notify(get_string('savesuccess', 'data'), 'notifysuccess'); break; } $presets = data_get_available_presets($context); $strimport = get_string('import'); $strfromfile = get_string('fromfile', 'data'); $strchooseorupload = get_string('chooseorupload', 'data'); $strusestandard = get_string('usestandard', 'data'); $strchoose = get_string('choose'); $strexport = get_string('export', 'data'); $strexportaszip = get_string('exportaszip', 'data');
/** * import() * TODO document */ function import() { global $CFG; list($settings, $newfields, $currentfields) = $this->load_from_file(); $preservedfields = array(); /* Maps fields and makes new ones */ if (!empty($newfields)) { /* 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)) { print_error('notinjectivemap', 'data'); } 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 and isset($currentfelds[$cid])) { $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); } else { include_once "field/{$newfield->type}/field.class.php"; if (!isset($newfield->description)) { $newfield->description = ''; } $classname = 'data_field_' . $newfield->type; $fieldclass = new $classname($newfield, $this->data); $fieldclass->insert_field(); unset($fieldclass); } } } /* Get rid of all old unused data */ if (!empty($preservedfields)) { 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; // Why delete existing data records and related comments/ratings ?? /* 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->directory, '/temp/')) { clean_preset($this->directory); } /* Removes the temporary files */ return true; }