Example #1
0
 public function ___import($page, $data = null)
 {
     if (is_null($data)) {
         $data = $page;
         $page = new Page();
     }
     if (empty($data['core_version'])) {
         throw new WireException("Invalid import data");
     }
     $page->of(false);
     $page->resetTrackChanges(true);
     if (!is_array($data)) {
         throw new WireException("Data passed to import() must be an array");
     }
     if (!$page->parent_id) {
         $parent = $this->wire('pages')->get($data['parent']);
         if (!$parent->id) {
             throw new WireException("Unknown parent: {$data['parent']}");
         }
         $page->parent = $parent;
     }
     if (!$page->templates_id) {
         $template = $this->wire('templates')->get($data['template']);
         if (!$template) {
             throw new WireException("Unknown template: {$data['template']}");
         }
         $page->template = $template;
     }
     $page->name = $data['name'];
     $page->sort = $data['sort'];
     $page->sortfield = $data['sortfield'];
     $page->status = $data['status'];
     $page->guid = $data['id'];
     if (!$page->id) {
         $page->save();
     }
     foreach ($data['data'] as $name => $value) {
         $field = $this->wire('fields')->get($name);
         if (!$field) {
             $this->error("Unknown field: {$name}");
             continue;
         }
         if ($data['types'][$name] != $field->type->className()) {
             $this->error("Import data for field '{$field->name}' has different fieldtype '" . $data['types'][$name] . "' != '" . $field->type->className() . "', skipping...");
             continue;
         }
         $newStr = var_export($value, true);
         $oldStr = var_export($this->exportValue($page, $field, $page->get($field->name)), true);
         if ($newStr === $oldStr) {
             continue;
         }
         // value has not changed, so abort
         $value = $this->importValue($page, $field, $value);
         $page->set($field->name, $value);
     }
     return $page;
 }