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