Neos\Neos\Controller\Module\Management\WorkspacesController::renderContentChanges PHP 메소드

renderContentChanges() 보호된 메소드

Renders the difference between the original and the changed content of the given node and returns it, along with meta information, in an array.
protected renderContentChanges ( Neos\ContentRepository\Domain\Model\NodeInterface $changedNode ) : array
$changedNode Neos\ContentRepository\Domain\Model\NodeInterface
리턴 array
    protected function renderContentChanges(NodeInterface $changedNode)
    {
        $contentChanges = [];
        $originalNode = $this->getOriginalNode($changedNode);
        $changeNodePropertiesDefaults = $changedNode->getNodeType()->getDefaultValuesForProperties($changedNode);
        $renderer = new HtmlArrayRenderer();
        foreach ($changedNode->getProperties() as $propertyName => $changedPropertyValue) {
            if ($originalNode === null && empty($changedPropertyValue) || isset($changeNodePropertiesDefaults[$propertyName]) && $changedPropertyValue === $changeNodePropertiesDefaults[$propertyName]) {
                continue;
            }
            $originalPropertyValue = $originalNode === null ? null : $originalNode->getProperty($propertyName);
            if ($changedPropertyValue === $originalPropertyValue && !$changedNode->isRemoved()) {
                continue;
            }
            if (!is_object($originalPropertyValue) && !is_object($changedPropertyValue)) {
                $originalSlimmedDownContent = $this->renderSlimmedDownContent($originalPropertyValue);
                $changedSlimmedDownContent = $changedNode->isRemoved() ? '' : $this->renderSlimmedDownContent($changedPropertyValue);
                $diff = new Diff(explode("\n", $originalSlimmedDownContent), explode("\n", $changedSlimmedDownContent), ['context' => 1]);
                $diffArray = $diff->render($renderer);
                $this->postProcessDiffArray($diffArray);
                if (count($diffArray) > 0) {
                    $contentChanges[$propertyName] = ['type' => 'text', 'propertyLabel' => $this->getPropertyLabel($propertyName, $changedNode), 'diff' => $diffArray];
                }
            } elseif ($originalPropertyValue instanceof AssetInterface || $changedPropertyValue instanceof AssetInterface) {
                $contentChanges[$propertyName] = ['type' => 'asset', 'propertyLabel' => $this->getPropertyLabel($propertyName, $changedNode), 'original' => $originalPropertyValue, 'changed' => $changedPropertyValue];
            } elseif ($originalPropertyValue instanceof \DateTime && $changedPropertyValue instanceof \DateTime) {
                if ($changedPropertyValue->getTimestamp() !== $originalPropertyValue->getTimestamp()) {
                    $contentChanges[$propertyName] = ['type' => 'datetime', 'propertyLabel' => $this->getPropertyLabel($propertyName, $changedNode), 'original' => $originalPropertyValue, 'changed' => $changedPropertyValue];
                }
            }
        }
        return $contentChanges;
    }