diff --git a/Classes/FusionObjects/Ray.php b/Classes/FusionObjects/Ray.php index d2fd401..1d118a4 100644 --- a/Classes/FusionObjects/Ray.php +++ b/Classes/FusionObjects/Ray.php @@ -16,6 +16,8 @@ class Ray extends AbstractArrayFusionObject */ protected $ignoreProperties = ['__meta', 'debugAction', 'value']; + protected $allowedDebugActions = ['nodetypename', 'context', 'contextpath', 'properties']; + /** * @return void */ @@ -24,46 +26,25 @@ public function evaluate(): void $debugAction = strtolower($this->fusionValue('debugAction')); $debugValue = $this->fusionValue('value'); - $debugValue = ($debugValue === null) ? 'ignore' : $debugValue; - - if (!empty($this->fusionValue('once'))) { - $this->debug(null, $debugAction); + if (is_string($debugAction) && in_array($debugAction, $this->allowedDebugActions)) { + $this->debugNodes($debugValue, $debugAction); + } elseif (is_string($debugAction) && !empty($debugAction)) { + ray()->once('The debug action is not known.'); } else { - if (!empty($debugValue)) { - if (is_array($debugValue) && is_object($debugValue[0]) && (get_class($debugValue[0]) === 'Neos\ContentRepository\Domain\Model\Node')) { - foreach ($debugValue as $node) { - try { - $this->debug($node, $debugAction); - } catch (Exception $e) { - ray()->exception($e); - } - } - } else { - $this->debug($debugValue, $debugAction); - } - } + $this->debug($debugValue); } } /** * @param $debugValue - * @param string $debugAction * * @return void */ - private function debug($debugValue = null, string $debugAction = ''): void + private function debug($debugValue): void { - ray(function () use ($debugValue, $debugAction) { + ray(function () use ($debugValue) { - $debug = ray(); - - if (!empty($debugValue) && !empty($debugAction)) { - if (is_object($debugValue) && (get_class($debugValue) === 'Neos\ContentRepository\Domain\Model\Node')) { - $debug = ray($this->getNodeData($debugValue, $debugAction)); - } - } elseif (!empty($debugValue)) { - $debug = ray($debugValue); - } + $debug = ray($debugValue); foreach (array_keys($this->properties) as $key) { if (in_array($key, $this->ignoreProperties)) { @@ -89,10 +70,6 @@ private function debug($debugValue = null, string $debugAction = ''): void */ private function getNodeData($debugValue, string $debugAction) { - if (get_class($debugValue) !== 'Neos\ContentRepository\Domain\Model\Node') { - return null; - } - switch ($debugAction) { case strtolower('nodeTypeName'): try { @@ -116,4 +93,27 @@ private function getNodeData($debugValue, string $debugAction) return null; } } + + /** + * @param $debugValues + * @param string $debugAction + * + * @return void + */ + private function debugNodes($debugValues, string $debugAction): void + { + if (is_array($debugValues)) { + $debugArray = []; + + foreach ($debugValues as $debugValue) { + if (is_object($debugValue) && (get_class($debugValue) === 'Neos\ContentRepository\Domain\Model\Node')) { + array_push($debugArray, $this->getNodeData($debugValue, $debugAction)); + } + } + + if (!empty($debugArray)) $this->debug($debugArray); + } elseif (is_object($debugValues) && (get_class($debugValues) === 'Neos\ContentRepository\Domain\Model\Node')) { + $this->debug($this->getNodeData($debugValues, $debugAction)); + } + } } diff --git a/Resources/Private/Fusion/FusionObject/Debug.fusion b/Resources/Private/Fusion/FusionObject/Debug.fusion index 4e7b4bc..3a07097 100644 --- a/Resources/Private/Fusion/FusionObject/Debug.fusion +++ b/Resources/Private/Fusion/FusionObject/Debug.fusion @@ -7,6 +7,8 @@ prototype(Beromir.Ray:Debug) { mode = 'uncached' context { 1 = 'node' + 2 = 'site' + 3 = 'documentNode' } } }