public function createNodePartialsFromExistsClauses(NodeQuery $nodeQuery)
 {
     $nodePartials = new NodePartials();
     foreach ($nodeQuery->getParameters() as $key => $value) {
         switch ($key) {
             case 'Meta.exist':
                 $nodePartials->increaseMetaPartials($value);
                 break;
             case 'OutTags.exist':
                 $nodePartials->increaseOutPartials($value);
                 break;
             case 'InTags.exist':
                 $nodePartials->increaseInPartials($value);
                 break;
                 //                    case 'Sections.exist':
                 //                        $nodePartials->increaseSectionPartials($value);
                 //                        break;
         }
     }
     $metaParams = $this->getMetaFilters($nodeQuery);
     foreach ($metaParams as $mArgs) {
         $nodePartials->increaseMetaPartials($mArgs[0]);
     }
     return $nodePartials;
 }
 public function delete(NodeRef $nodeRef, $mergeSlug = null)
 {
     // validate for delete
     $this->NodeValidator->validateFor('delete', $nodeRef)->throwOnError();
     $this->NodeEvents->fireNodeEvents(__FUNCTION__, 'pre', $nodeRef);
     // if merging, rename tag links to new record
     if (!empty($mergeSlug)) {
         $mergeRef = new NodeRef($nodeRef->getElement(), $mergeSlug);
         $oldNode = $this->NodeLookupDAO->getByNodeRef($nodeRef, new NodePartials('', '', 'all'), true);
         if (empty($oldNode)) {
             throw new NodeException('Unable to merge deleted node to non-existent slug [' . $mergeSlug . ']');
         }
         $inTags = $oldNode->getInTags();
         $newPartials = new NodePartials();
         foreach ($inTags as $inTag) {
             $newPartials->increaseInPartials($inTag->getTagRole());
         }
         $mergeNode = $this->NodeLookupDAO->getByNodeRef($mergeRef, $newPartials);
         $mergeNode->addInTags($inTags);
         // add all node's in tags to the merged node as in tags (aka copy in tags)
         $this->editInternal($mergeNode);
     }
     $existingNode = $this->NodeLookupDAO->getByNodeRef($nodeRef);
     if ($existingNode->Status == 'published') {
         $this->NodeEvents->fireNodeEvents('unpublish', 'pre', $nodeRef, $existingNode);
     }
     $this->deleteInternal($nodeRef);
     // fire events
     $this->NodeEvents->fireNodeEvents(__FUNCTION__, 'post', $nodeRef);
     if ($existingNode->Status == 'published') {
         $this->NodeEvents->fireNodeEvents('unpublish', 'post', $nodeRef, $existingNode);
     }
     return;
 }
 /**
  * Updates a node with fields specified in params.
  *
  * @param array $params The user-supplied parameters/fields
  * @throws MediaServiceException
  * @throws ValidationException
  */
 public function edit($params)
 {
     $node = $this->getNode($params);
     // will spit error if not found
     // set any persistent fields
     $this->NodeBinder->bindPersistentFields($node, $this->getErrors(), $params, $params);
     $this->NodeBinder->fireEditBindEvents($node, $this->getErrors(), $params, $params);
     // throw any validation errors
     $this->getErrors()->throwOnError();
     $nodePartials = new NodePartials();
     // add any meta fields
     foreach ($params as $name => $value) {
         if (substr($name, 0, 1) == '#') {
             $node->setMeta($name, $value);
             $nodePartials->increaseMetaPartials($name);
         }
     }
     // add any out tags
     $outTagParam = !empty($params['AddOutTags']) ? $params['AddOutTags'] : null;
     if ($outTagParam) {
         $outTags = $this->buildTags($outTagParam);
         $node->addOutTags($outTags);
         foreach ($outTags as $tag) {
             $role = $tag->getTagRole();
             $val = $tag->getTagValue();
             $nodePartials->increaseOutPartials($role . '=' . $val);
         }
     }
     // add any in tags
     $inTagParam = !empty($params['AddInTags']) ? $params['AddInTags'] : null;
     if ($inTagParam) {
         $inTags = $this->buildTags($inTagParam);
         $node->addInTags($inTags);
         foreach ($inTags as $tag) {
             $role = $tag->getTagRole();
             $val = $tag->getTagValue();
             $nodePartials->increaseInPartials($role . '=' . $val);
         }
     }
     // set node partials to specify exactly what's added/updated
     $node->setNodePartials($nodePartials);
     // do the update
     $this->RegulatedNodeService->edit($node);
 }