Neos\Neos\Controller\Module\Management\WorkspacesController::renderContentChanges PHP Method

renderContentChanges() protected method

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
return 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;
    }