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); } }
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'); } } } } }
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(); }
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; }
public function resolveField(NodeRef $nodeRef, $fieldId) { $fields = array($nodeRef->getElement()->getSlug()); $fields[] = $fieldId; return join($fields, '.'); }
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); }
/** * {@inheritdoc} */ public function putNode(NodeRef $nodeRef, $row, $localOnly = false) { $this->put('node-' . $nodeRef->getElement()->getSlug() . ':' . $row['Slug'], $row, $this->duration, $localOnly); }
/** * @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; }