/** * Internal method * * The dimension value of this node has to match the current target dimension value (must be higher in priority or equal) * * @return boolean */ public function dimensionsAreMatchingTargetDimensionValues() { $dimensions = $this->getDimensions(); $contextDimensions = $this->context->getDimensions(); foreach ($this->context->getTargetDimensions() as $dimensionName => $targetDimensionValue) { if (!isset($dimensions[$dimensionName])) { if ($targetDimensionValue === null) { continue; } else { return false; } } elseif ($targetDimensionValue === null && $dimensions[$dimensionName] === array()) { continue; } elseif (!in_array($targetDimensionValue, $dimensions[$dimensionName], true)) { $contextDimensionValues = $contextDimensions[$dimensionName]; $targetPositionInContext = array_search($targetDimensionValue, $contextDimensionValues, true); $nodePositionInContext = min(array_map(function ($value) use($contextDimensionValues) { return array_search($value, $contextDimensionValues, true); }, $dimensions[$dimensionName])); $val = $targetPositionInContext !== false && $nodePositionInContext !== false && $targetPositionInContext >= $nodePositionInContext; if ($val === false) { return false; } } } return true; }
/** * The dimension value of this node has to match the current target dimension value (must be higher in priority or equal) * * @return boolean */ protected function dimensionsAreMatchingTargetDimensionValues() { $dimensions = $this->getDimensions(); $contextDimensions = $this->context->getDimensions(); foreach ($this->context->getTargetDimensions() as $dimensionName => $targetDimensionValue) { if (!isset($dimensions[$dimensionName])) { return FALSE; } elseif (!in_array($targetDimensionValue, $dimensions[$dimensionName], TRUE)) { $contextDimensionValues = $contextDimensions[$dimensionName]; $targetPositionInContext = array_search($targetDimensionValue, $contextDimensionValues, TRUE); $nodePositionInContext = min(array_map(function ($value) use($contextDimensionValues) { return array_search($value, $contextDimensionValues, TRUE); }, $dimensions[$dimensionName])); $val = $targetPositionInContext !== FALSE && $nodePositionInContext !== FALSE && $targetPositionInContext >= $nodePositionInContext; if ($val === FALSE) { return FALSE; } } } return TRUE; }
/** * * * @param NodeInterface $node * @param Context $context * @param $recursive * @return void */ public function beforeAdoptNode(NodeInterface $node, Context $context, $recursive) { if (!$this->eventEmittingService->isEnabled()) { return; } $this->initializeAccountIdentifier(); if ($this->currentlyAdopting === 0) { /* @var $nodeEvent NodeEvent */ $nodeEvent = $this->eventEmittingService->emit(self::NODE_ADOPT, array('targetWorkspace' => $context->getWorkspaceName(), 'targetDimensions' => $context->getTargetDimensions(), 'recursive' => $recursive), 'TYPO3\\Neos\\EventLog\\Domain\\Model\\NodeEvent'); $nodeEvent->setNode($node); $this->eventEmittingService->pushContext(); } $this->currentlyAdopting++; }
/** * Adjust this instance to the given context. * * Internal use only! * * @param Context $context * @throws \TYPO3\TYPO3CR\Exception\InvalidNodeContextException */ public function adjustToContext(Context $context) { $this->setWorkspace($context->getWorkspace()); $nodeDimensions = new \Doctrine\Common\Collections\ArrayCollection(); $targetDimensionValues = $context->getTargetDimensions(); foreach ($context->getDimensions() as $dimensionName => $dimensionValues) { if (!isset($targetDimensionValues[$dimensionName])) { throw new \TYPO3\TYPO3CR\Exception\InvalidNodeContextException(sprintf('Missing target value for dimension "%"', $dimensionName), 1391686089); } $dimensionValueToSet = $targetDimensionValues[$dimensionName]; $nodeDimensions->add(new NodeDimension($this, $dimensionName, $dimensionValueToSet)); } $this->setDimensions($nodeDimensions); }