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