public function copy(NodeRef $nodeRef, Element $newNodeElement) { $node = $this->NodeLookupDAO->getByNodeRef($nodeRef, new NodePartials('all', 'all', 'all'), true); $newNodeRef = new NodeRef($newNodeElement, $node->Slug); $newNode = $newNodeRef->generateNode(); $cFields = array_intersect_key($node->toArray(), array_flip($this->NodeDBMeta->getPersistentFields())); $newNode->setFromArray($cFields); $newNode->setNodePartials($node->getNodePartials()); $schema = $newNodeElement->getSchema(); foreach ($schema->getTagDefs() as $tagDef) { // echo "Tag [{$tagDef->Direction}]: {$tagDef->Id}\n"; if ($tagDef->Direction == 'in') { $newNode->replaceInTags($tagDef->Id, $node->getInTags($tagDef->Id)); } else { $newNode->replaceOutTags($tagDef->Id, $node->getOutTags($tagDef->Id)); } } foreach ($schema->getMetaDefs() as $metaDef) { $newNode->updateMeta($metaDef->Id, $node->getMetaValue($metaDef->Id)); } return $this->add($newNode); }
public function replace() { $this->checkNonce(); if (empty($this->params['Title'])) { throw new Exception('Title parameter is required', 210); } if (empty($this->params['ElementSlug'])) { throw new Exception('ElementSlug parameter is required', 220); } $title = $this->params['Title']; $slug = SlugUtils::createSlug($title); $noderef = new NodeRef($this->ElementService->getBySlug($this->Request->getParameter('ElementSlug')), $slug); // create node $node = $noderef->generateNode(); $this->NodeMapper->defaultsOnNode($node); $node->Title = $title; $node->Slug = $slug; $this->getErrors()->throwOnError(); // edit existing record if ($this->RegulatedNodeService->refExists($noderef)) { $existing = $this->RegulatedNodeService->getByNodeRef($noderef); $existing->setNodePartials($node->getNodePartials()); $existing->setMetas($node->getMetas()); $existing->setOutTags($node->getOutTags()); $node = $this->RegulatedNodeService->edit($node); //create new record } else { $node = $this->RegulatedNodeService->quickAdd($node); } $node = $this->RegulatedNodeService->getByNodeRef($node->getNodeRef(), new NodePartials()); $this->bindToActionDatasource(array($node)); return new View($this->successView()); }
protected function bindArray($nodeArray, $errors, $bindAll = false, $ignoreInTags = false) { $nodeRef = new NodeRef($this->ElementService->getBySlug($nodeArray['ElementSlug']), $nodeArray['Slug']); $node = $nodeRef->generateNode(); $this->NodeMapper->defaultsOnNode($node); $this->NodeBinder->bindPersistentFields($node, $errors, $nodeArray, $nodeArray); if ($bindAll) { if ($ignoreInTags) { $this->NodeBinder->bindAllMetaForNode($node, $errors, $nodeArray, $nodeArray); $schema = $node->getNodeRef()->getElement()->getSchema(); foreach ($schema->getTagDefs() as $tagDef) { if ($tagDef->Direction == 'out') { $this->NodeBinder->bindOutTags($node, $errors, $nodeArray, $nodeArray, $tagDef->Id, true); } } } else { $this->NodeBinder->bindAllTagsForNode($node, $errors, $nodeArray, $nodeArray, $increasePartials = true); } } else { $this->NodeBinder->bindAllMetaForNode($node, $errors, $nodeArray, $nodeArray); } $errors->throwOnError(); return $node; }