/**
* 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;
}