public static function replaceWysiwygTextRelationIds($idMapping, $text)
{
if (!empty($text)) {
include_once "simple_html_dom.php";
$html = str_get_html($text);
if (!$html) {
return $text;
}
$s = $html->find("a[pimcore_id],img[pimcore_id]");
foreach ($s as $el) {
// image
if ($el->src) {
$type = "asset";
}
// link
if ($el->href) {
if ($el->pimcore_type == "asset") {
$type = "asset";
} elseif ($el->pimcore_type == "document") {
$type = "document";
}
}
$newId = $idMapping[$type][$el->attr["pimcore_id"]];
if ($newId) {
//update id
if ($type == "asset") {
$pimcoreElement = Asset::getById($newId);
} else {
$pimcoreElement = Document::getById($newId);
}
$el->pimcore_id = $newId;
$el->src = $pimcoreElement->getFullPath();
} else {
//remove relation, not found in mapping
$el->pimcore_id = null;
$el->src = null;
}
}
$return = $html->save();
$html->clear();
unset($html);
return $return;
}
}
/** * @param Webservice\Data\Object\Concrete $apiElement * @return void */ public function correctObjectRelations($apiElement, $idMapping) { if ($apiElement->elements) { foreach ($apiElement->elements as $el) { if ($el->type == "href" and $el->value["id"]) { $el->value["id"] = $idMapping[$el->value["type"]][$el->value["id"]]; } else { if ($el->type == "image" and $el->value) { $el->value = $idMapping["asset"][$el->value]; } else { if ($el->type == "link" and $el->value["internal"]) { $el->value["internal"] = $idMapping[$el->value["internalType"]][$el->value["internal"]]; } else { if ($el->type == "multihref") { if (is_array($el->value)) { for ($i = 0; $i < count($el->value); $i++) { $el->value[$i]["id"] = $idMapping[$el->value[$i]["type"]][$el->value[$i]["id"]]; } } } else { if ($el->type == "objects") { if (is_array($el->value)) { for ($i = 0; $i < count($el->value); $i++) { $el->value[$i]["id"] = $idMapping["object"][$el->value[$i]["id"]]; } } } else { if ($el->type == "wysiwyg") { $el->value = Tool\Text::replaceWysiwygTextRelationIds($idMapping, $el->value); } else { if ($el->type == "fieldcollections") { if ($el instanceof Webservice\Data\Object\Element and is_array($el->value)) { foreach ($el->value as $fieldCollectionEl) { if (is_array($fieldCollectionEl->value)) { foreach ($fieldCollectionEl->value as $collectionItem) { if ($collectionItem->type == "image") { $collectionItem->value = $idMapping["asset"][$collectionItem->value]; } else { if ($collectionItem->type == "wysiwyg") { $collectionItem->value = Tool\Text::replaceWysiwygTextRelationIds($idMapping, $collectionItem->value); } else { if ($collectionItem->type == "link" and $collectionItem->value["internalType"]) { $collectionItem->value["internal"] = $idMapping[$collectionItem->value["internalType"]][$collectionItem->value["internal"]]; } else { if ($collectionItem->type == "href" and $collectionItem->value["id"]) { $collectionItem->value["id"] = $idMapping[$collectionItem->value["type"]][$collectionItem->value["id"]]; } else { if (($collectionItem->type == "objects" or $collectionItem->type == "multihref") and is_array($collectionItem->value) and count($collectionItem->value) > 0) { for ($i = 0; $i < count($collectionItem->value); $i++) { if ($collectionItem->value[$i]["id"]) { $collectionItem->value[$i]["id"] = $idMapping[$collectionItem->value[$i]["type"]][$collectionItem->value[$i]["id"]]; } } } } } } } } } } } } else { if ($el->type == "localizedfields") { if (is_array($el->value)) { foreach ($el->value as $localizedDataEl) { if ($localizedDataEl->type == "image") { $localizedDataEl->value = $idMapping["asset"][$localizedDataEl->value]; } else { if ($localizedDataEl->type == "wysiwyg") { $localizedDataEl->value = Tool\Text::replaceWysiwygTextRelationIds($idMapping, $localizedDataEl->value); } else { if ($localizedDataEl->type == "link" and $localizedDataEl->value["internalType"]) { $localizedDataEl->value["internal"] = $idMapping[$localizedDataEl->value["internalType"]][$localizedDataEl->value["internal"]]; } } } } } } } } } } } } } } } }