Pimcore\Tool\Text::replaceWysiwygTextRelationIds PHP Method

replaceWysiwygTextRelationIds() public static method

Deprecation:
public static replaceWysiwygTextRelationIds ( array $idMapping, string $text ) : mixed
$idMapping array e.g. array("asset"=>array(OLD_ID=>NEW_ID),"object"=>array(OLD_ID=>NEW_ID),"document"=>array(OLD_ID=>NEW_ID));
$text string html text of wysiwyg field
return mixed
    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;
        }
    }

Usage Example

Beispiel #1
0
 /**
  * @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"]];
                                                             }
                                                         }
                                                     }
                                                 }
                                             }
                                         }
                                     }
                                 }
                             }
                         }
                     }
                 }
             }
         }
     }
 }