예제 #1
0
 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;
 }