/**
* adopts resource locator of children by iteration.
*
* @param NodeInterface $contentNode
* @param int $userId
* @param string $webspaceKey
* @param string $languageCode
* @param bool $iterate
* @param string $segmentKey
*/
private function adaptResourceLocators(NodeInterface $contentNode, $userId, $webspaceKey, $languageCode, $segmentKey = null, $iterate = true)
{
foreach ($contentNode->getNodes() as $node) {
// determine structure
$templatePropertyName = $this->nodeHelper->getTranslatedPropertyName('template', $languageCode);
if (!$node->hasProperty($templatePropertyName)) {
continue;
}
$template = $node->getPropertyValue($templatePropertyName);
$structure = $this->structureManager->getStructure($template);
// only if rlp exists
if ($structure->hasTag('sulu.rlp')) {
// get rlp
try {
$rlp = $this->loadByContent($node, $webspaceKey, $languageCode);
} catch (ResourceLocatorNotFoundException $ex) {
$contentNode->getSession()->save();
$rlpPart = $node->getPropertyValue($this->nodeHelper->getTranslatedPropertyName('title', $languageCode));
$prentRlp = $this->mapper->getParentPath($node->getIdentifier(), $webspaceKey, $languageCode, $segmentKey);
// generate new resourcelocator
$rlp = $this->generate($rlpPart, $prentRlp, $webspaceKey, $languageCode);
}
// determine rlp property
$property = $structure->getPropertyByTagName('sulu.rlp');
$contentType = $this->contentTypeManager->get($property->getContentTypeName());
$property->setValue($rlp);
// write value to node
$translatedProperty = $this->nodeHelper->getTranslatedProperty($property, $languageCode);
$contentType->write($node, $translatedProperty, $userId, $webspaceKey, $languageCode, $segmentKey);
}
// for node move the tree will be copied to then there is the iteration over this function
// for node copy the iteration is done by the content-type which calls over the move function
// recursively this function
if ($iterate) {
$this->adaptResourceLocators($node, $userId, $webspaceKey, $languageCode, $segmentKey);
}
}
}