Ejemplo n.º 1
0
 protected function checkInternal($action, NodeRef &$nodeRef, &$newData = null, $throw = true, $isRead = false)
 {
     $obj = new Transport();
     $obj->Permitted = true;
     $obj->CachePermission = true;
     $checkedCache = false;
     $elementSlug = $nodeRef->getElement()->getSlug();
     if (array_key_exists($elementSlug, $this->byElementPermissions) && array_key_exists($action, $this->byElementPermissions[$elementSlug])) {
         $obj->Permitted = $this->byElementPermissions[$nodeRef->getElement()->getSlug()][$action];
         $checkedCache = true;
     }
     if (!$checkedCache) {
         //        if(!$isRead)
         //            $this->Events->trigger('Node.permit.write', $obj, $nodeRef, $newData);
         //
         //        if ($obj->isPermitted()) {
         //            $this->Events->trigger('Node.permit.'.$action, $obj, $nodeRef, $newData);
         //        }
         //        if ($obj->isPermitted())
         foreach ((array) $nodeRef->getElement()->getAspects() as $aspect) {
             if (!$isRead) {
                 $this->Events->trigger('Node.@' . $aspect->Slug . '.permit.write', $obj, $nodeRef, $newData);
             }
             if (!$obj->isPermitted()) {
                 break;
             }
             $this->Events->trigger('Node.@' . $aspect->Slug . '.permit.' . $action, $obj, $nodeRef, $newData);
             if (!$obj->isPermitted()) {
                 break;
             }
         }
         if ($obj->isCachePermission()) {
             if (!array_key_exists($elementSlug, $this->byElementPermissions)) {
                 $this->byElementPermissions[$elementSlug] = array();
             }
             $this->byElementPermissions[$elementSlug][$action] = $obj->Permitted;
         }
     }
     if (!$obj->isPermitted() && $throw) {
         throw new PermissionsException('Permission denied to ' . $action . ' ' . $nodeRef->getElement()->getName());
     }
     return $obj->isPermitted();
 }
 public function deleteOrphanedFile(NodeRef &$originNodeRef, NodeRef &$inboundNodeRef)
 {
     if ($inboundNodeRef->getElement()->hasAspect('@media')) {
         if (in_array("" . $originNodeRef, $this->currentlyDeleting)) {
             return;
         }
         $this->currentlyDeleting[] = "" . $originNodeRef;
         $this->bindToShutdown();
         $this->NodeService->delete($originNodeRef);
     }
 }
Ejemplo n.º 3
0
 public function requirePrimaryImage(Errors &$errors, NodeRef $nodeRef, Node &$node)
 {
     $element = $nodeRef->getElement();
     $schema = $element->getSchema();
     if (!PartialUtils::isTagRoleInOutTagsScope($schema, $node->getNodePartials(), '#primary-image')) {
         // this should only occur during bulk cms actions
         return;
     }
     if ($schema->hasTagDef('#primary-image')) {
         $primaryImageTag = $node->getOutTag('#primary-image');
         $errors->rejectIfEmpty('#primary-image', 'tag', 'Primary Image', $primaryImageTag);
     }
 }
 public function loadAudioTags(NodeRef $nodeRef, NodePartials &$nodePartials = null)
 {
     if (!is_null($nodePartials)) {
         if ($nodePartials->getOutPartials() != "") {
             $tagDefs = $nodeRef->getElement()->Schema->getTagDefs();
             foreach ($tagDefs as $k => $tagDef) {
                 if ($tagDef->Partial->TagAspect == 'audio') {
                     $nodePartials->increaseOutPartials('#' . $tagDef->Partial->TagRole . '.#original.#url');
                 }
             }
         }
     }
 }
Ejemplo n.º 5
0
 public function getPrimaryKey(NodeRef $nodeRef)
 {
     return 'Table' . StringUtils::camelize($nodeRef->getElement()->Slug . 'ID');
 }
 public function delete(NodeRef $nodeRef)
 {
     if (!$nodeRef->isFullyQualified()) {
         throw new Exception('Cannot delete node from index without fully-qualified NodeRef');
     }
     if (substr($this->Elements, 0, 1) == '@') {
         if (!$nodeRef->getElement()->hasAspect($this->Elements)) {
             return;
         }
     } else {
         if (!in_array($nodeRef->getElement()->getSlug(), StringUtils::smartExplode($this->Elements))) {
             return;
         }
     }
     if (array_key_exists('' . $nodeRef, $this->markedForReindex)) {
         unset($this->markedForReindex['' . $nodeRef]);
     }
     if (array_key_exists('' . $nodeRef, $this->markedForDeletion)) {
         return;
     }
     $this->markedForDeletion['' . $nodeRef] = $nodeRef;
     $this->bindReindex();
 }
Ejemplo n.º 7
0
 public function rename(NodeRef $nodeRef, $newSlug)
 {
     $newNodeRef = new NodeRef($nodeRef->getElement(), $newSlug);
     $this->NodeValidator->validateFor('rename', $nodeRef, $newNodeRef)->throwOnError();
     $this->NodeEvents->fireNodeEvents(__FUNCTION__, 'pre', $nodeRef, $newNodeRef);
     //        $this->NodeEvents->fireNodeEvents('delete', 'pre', $nodeRef);
     //        $this->NodeEvents->fireNodeEvents('add', 'pre', $newNodeRef);
     // select all data from the original node
     $fullNode = $this->NodeLookupDAO->getByNodeRef($nodeRef, new NodePartials('all', 'all', 'all'));
     // don't fire tag/meta events during a rename
     $currentlyEnabled = $this->NodeEvents->areEventsEnabled();
     $this->NodeEvents->disableEvents();
     // delete the old node, but not all its data
     $this->deleteInternal($nodeRef);
     // adjust new node's ref
     $fullNode->setNodeRef($newNodeRef);
     // add the new node with all its original data
     $this->addInternal($fullNode);
     if ($currentlyEnabled) {
         $this->NodeEvents->enableEvents();
     }
     $this->NodeEvents->fireNodeEvents(__FUNCTION__, 'post', $nodeRef, $newNodeRef);
     //        $this->NodeEvents->fireNodeEvents('delete', 'post', $nodeRef);
     //        $this->NodeEvents->fireNodeEvents('add', 'post', $newNodeRef);
     return $fullNode;
 }
Ejemplo n.º 8
0
 public function resolveField(NodeRef $nodeRef, $fieldId)
 {
     $fields = array($nodeRef->getElement()->getSlug());
     $fields[] = $fieldId;
     return join($fields, '.');
 }
Ejemplo n.º 9
0
 public function generateNodeRef(NodeRef $nodeRef, $title = null, $useTime = false)
 {
     if (is_null($nodeRef)) {
         throw new NodeException('Cannot generate NodeRef, $nodeRef is null');
     }
     $slug = $nodeRef->getSlug();
     if (empty($slug)) {
         if (empty($title)) {
             throw new NodeException('Cannot generate NodeRef without title');
         }
         if ($useTime) {
             $slug = SlugUtils::createSlug(substr($title, 0, 237) . '-' . floor(microtime(true) * 100), $nodeRef->getElement()->isAllowSlugSlashes());
         } else {
             $slug = SlugUtils::createSlug(substr($title, 0, 255), $nodeRef->getElement()->isAllowSlugSlashes());
         }
         $nodeRef = new NodeRef($nodeRef->getElement(), $slug);
     } else {
         if ($useTime) {
             $title = substr($slug, 0, 237) . '-' . floor(microtime(true) * 100);
         } else {
             $title = substr($slug, 0, 255);
         }
         $nodeRef = new NodeRef($nodeRef->getElement(), SlugUtils::createSlug($title, $nodeRef->getElement()->isAllowSlugSlashes()));
     }
     return $nodeRef;
 }
 public function rename(NodeRef $nodeRef, $newSlug)
 {
     $newNodeRef = new NodeRef($nodeRef->getElement(), $node->getSlug());
     $this->NodePermissions->checkThrow(__FUNCTION__, $nodeRef, $newNodeRef, false);
     return parent::rename($nodeRef, $newSlug);
 }
Ejemplo n.º 11
0
 /**
  * {@inheritdoc}
  */
 public function putNode(NodeRef $nodeRef, $row, $localOnly = false)
 {
     $this->put('node-' . $nodeRef->getElement()->getSlug() . ':' . $row['Slug'], $row, $this->duration, $localOnly);
 }
Ejemplo n.º 12
0
 /**
  * @param NodeRef $nodeRef
  * @param null $title
  * @param bool $useTime
  * @return NodeRef
  * @throws NodeException
  * @events slugUniquing validation event with $slugTransporter as param2
  */
 public function generateUniqueNodeRef(NodeRef $nodeRef, $title = null, $useTime = false)
 {
     $slug = $nodeRef->getSlug();
     $slugTransporter = new Transport();
     $slugTransporter->Slug = $slug;
     $errors = new Errors();
     $this->NodeEvents->fireValidationEvents('slugUniquing', $errors, $nodeRef, $slugTransporter);
     $slug = $slugTransporter->Slug;
     $nodeRef = new NodeRef($nodeRef->getElement(), $slug);
     $errors->throwOnError();
     if (empty($slug)) {
         if (empty($title)) {
             throw new NodeException('Cannot generate unique NodeRef without title');
         }
         if ($useTime) {
             $slug = SlugUtils::createSlug(substr($title, 0, 237) . '-' . floor(microtime(true) * 100), $nodeRef->getElement()->isAllowSlugSlashes());
         } else {
             $slug = SlugUtils::createSlug(substr($title, 0, 255), $nodeRef->getElement()->isAllowSlugSlashes());
         }
         $nodeRef = new NodeRef($nodeRef->getElement(), $slug);
     } else {
         if ($useTime) {
             $title = substr($slug, 0, 237) . '-' . floor(microtime(true) * 100);
         } else {
             $title = substr($slug, 0, 255);
         }
         $nodeRef = new NodeRef($nodeRef->getElement(), SlugUtils::createSlug($title, $nodeRef->getElement()->isAllowSlugSlashes()));
     }
     $i = 0;
     while ($this->refExists($nodeRef)) {
         // Generate a unique slug
         $slug = SlugUtils::createSlug(substr($title, 0, 250) . " " . ++$i, $nodeRef->getElement()->isAllowSlugSlashes());
         $nodeRef = new NodeRef($nodeRef->getElement(), $slug);
     }
     return $nodeRef;
 }
 public function migrateInTags(NodeRef $sourceRef, $mergeSlug, $limit = null)
 {
     $targetRef = new NodeRef($sourceRef->getElement(), $mergeSlug);
     $sourceNode = $this->NodeService->getByNodeRef($sourceRef, new NodePartials('', '', 'all'));
     $batchSize = 1000;
     $inTags = $sourceNode->getInTags();
     //Get the schema to ensure tags are removed from the element in which they were defined.
     $schema = $sourceRef->getElement()->getSchema();
     $tagsMigrated = 0;
     while ($inTags && ($limit === null || $tagsMigrated < $limit)) {
         //while array is not empty
         $inTag = array_pop($inTags);
         if ($schema->hasTagDef($inTag->TagRole)) {
             // If the InTag exists in the source element schema
             // remove it from the source node and tag add it to the target node
             $this->NodeService->removeInTag($sourceRef, $inTag);
             $this->NodeService->addInTag($targetRef, $inTag);
         } else {
             // If the InTag does not exist in the source element schema
             // its converse OutTag must exist in the tagged node element schema
             // Remove OutTag from the tagged node and create a new OutTag to the targetNode
             $taggedNodeRef = $inTag->TagLinkNode->getNodeRef();
             $outTag = new Tag($sourceRef, $sourceRef->getSlug(), $inTag->TagRole);
             $this->NodeService->removeOutTag($taggedNodeRef, $outTag);
             $mergeOutTag = new Tag($targetRef, $targetRef->getSlug(), $inTag->TagRole);
             $this->NodeService->addOutTag($taggedNodeRef, $mergeOutTag);
         }
         $tagsMigrated++;
         if ($tagsMigrated % $batchSize == 0) {
             $this->TransactionManager->commit()->begin();
         }
     }
     $this->TransactionManager->commit()->begin();
     return $tagsMigrated;
 }