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; }
/** * Import the preset into the given database module * @return bool */ function import($overwritesettings) { global $DB, $CFG; $params = $this->get_preset_settings(); $settings = $params->settings; $newfields = $params->importfields; $currentfields = $params->currentfields; $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($currentfields[$cid])) { $fieldobject = data_get_field_from_id($currentfields[$cid]->id, $this->module); foreach ($newfield as $param => $value) { if ($param != "id") { $fieldobject->field->$param = $value; } } unset($fieldobject->field->similarfield); $fieldobject->update_field(); unset($fieldobject); } else { /* Make a new field */ include_once("field/$newfield->type/field.class.php"); if (!isset($newfield->description)) { $newfield->description = ''; } $classname = 'data_field_'.$newfield->type; $fieldclass = new $classname($newfield, $this->module); $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?? $DB->delete_records('data_content', array('fieldid'=>$id)); $DB->delete_records('data_fields', array('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)$DB->get_field('data_fields', 'id', array('dataid'=>$this->module->id, 'name'=>$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->module as $prop=>$unused) { if (in_array($prop, $overwrite)) { $this->module->$prop = $settings->$prop; } } data_update_instance($this->module); return $this->cleanup(); }
/** * 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; }