public static rewriteIds ( $document, $rewriteConfig, $params = [] ) : |
||
$document | ||
$rewriteConfig | ||
return |
public static function rewriteIds($document, $rewriteConfig, $params = [])
{
// rewriting elements only for snippets and pages
if ($document instanceof Document\PageSnippet) {
if (array_key_exists("enableInheritance", $params) && $params["enableInheritance"]) {
$elements = $document->getElements();
$changedElements = [];
$contentMaster = $document->getContentMasterDocument();
if ($contentMaster instanceof Document\PageSnippet) {
$contentMasterElements = $contentMaster->getElements();
foreach ($contentMasterElements as $contentMasterElement) {
if (method_exists($contentMasterElement, "rewriteIds")) {
$element = clone $contentMasterElement;
$element->rewriteIds($rewriteConfig);
if (Serialize::serialize($element) != Serialize::serialize($contentMasterElement)) {
$changedElements[] = $element;
}
}
}
}
if (count($changedElements) > 0) {
$elements = $changedElements;
}
} else {
$elements = $document->getElements();
foreach ($elements as &$element) {
if (method_exists($element, "rewriteIds")) {
$element->rewriteIds($rewriteConfig);
}
}
}
$document->setElements($elements);
} elseif ($document instanceof Document\Hardlink) {
if (array_key_exists("document", $rewriteConfig) && $document->getSourceId() && array_key_exists((int) $document->getSourceId(), $rewriteConfig["document"])) {
$document->setSourceId($rewriteConfig["document"][(int) $document->getSourceId()]);
}
} elseif ($document instanceof Document\Link) {
if (array_key_exists("document", $rewriteConfig) && $document->getLinktype() == "internal" && $document->getInternalType() == "document" && array_key_exists((int) $document->getInternal(), $rewriteConfig["document"])) {
$document->setInternal($rewriteConfig["document"][(int) $document->getInternal()]);
}
}
// rewriting properties
$properties = $document->getProperties();
foreach ($properties as &$property) {
$property->rewriteIds($rewriteConfig);
}
$document->setProperties($properties);
return $document;
}
public function replaceAssignmentsAction() { $success = false; $message = ""; $element = Element\Service::getElementById($this->getParam("type"), $this->getParam("id")); $sourceEl = Element\Service::getElementById($this->getParam("sourceType"), $this->getParam("sourceId")); $targetEl = Element\Service::getElementById($this->getParam("targetType"), $this->getParam("targetId")); if ($element && $sourceEl && $targetEl && $this->getParam("sourceType") == $this->getParam("targetType") && $sourceEl->getType() == $targetEl->getType()) { $rewriteConfig = [$this->getParam("sourceType") => [$sourceEl->getId() => $targetEl->getId()]]; if ($element instanceof Document) { $element = Document\Service::rewriteIds($element, $rewriteConfig); } elseif ($element instanceof Object\AbstractObject) { $element = Object\Service::rewriteIds($element, $rewriteConfig); } elseif ($element instanceof Asset) { $element = Asset\Service::rewriteIds($element, $rewriteConfig); } $element->setUserModification($this->getUser()->getId()); $element->save(); $success = true; } else { $message = "source-type and target-type do not match"; } $this->_helper->json(["success" => $success, "message" => $message]); }