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; }