public static function importElements($objElements, $intAccountId, $arrTemplateIds, $arrTemplateFieldIds, &$arrElementIds, &$arrElementFieldIds, $arrLinkFieldIds, $arrLanguageIds, $arrUserIds, $arrGroupIds, $arrStorageIds, $arrFeedIds, $intParentId = 0) { global $intDefaultLanguage; $strElmntPattern = "/(\\?eid=)([0-9]+)/ie"; $strStoragePattern = "/(\\?mid=)([0-9]+)/ie"; foreach ($objElements->childNodes as $elementNode) { if (!is_null($arrTemplateIds[$elementNode->getAttribute("templateId")])) { $objElement = new Element(); $objElement->setAccountId($intAccountId); $objElement->setParentId($intParentId); $objElement->setActive($elementNode->getAttribute("active")); $objElement->setIsPage($elementNode->getAttribute("isPage")); $objElement->setName($elementNode->getAttribute("name")); $objElement->setApiName($elementNode->getAttribute("apiName")); $objElement->setDescription($elementNode->getAttribute("description")); $objElement->setUsername($elementNode->getAttribute("username")); $objElement->setTypeId($elementNode->getAttribute("typeId")); $objElement->setTemplateId($arrTemplateIds[$elementNode->getAttribute("templateId")]); $objElement->setSort($elementNode->getAttribute("sort")); $objElement->save(false, false); if ($elementNode->getAttribute("typeId") == 1) { $objElement->setLanguageActive($intDefaultLanguage, 1); } $arrElementIds[$elementNode->getAttribute("id")] = $objElement->getId(); //*** Schedule. $objSchedule = new ElementSchedule(); $objSchedule->setStartActive($elementNode->getAttribute("scheduleStartActive")); $objSchedule->setStartDate($elementNode->getAttribute("scheduleStartDate")); $objSchedule->setEndActive($elementNode->getAttribute("scheduleEndActive")); $objSchedule->setEndDate($elementNode->getAttribute("scheduleEndDate")); $objElement->setSchedule($objSchedule); //*** Add fields to the element. foreach ($elementNode->childNodes as $subNode) { switch ($subNode->nodeName) { case "fields": $arrActiveLangs = array(); foreach ($subNode->childNodes as $fieldNode) { switch ($fieldNode->nodeName) { case "field": $objField = new ElementField(); $objField->setElementId($objElement->getId()); $objField->setTemplateFieldId($arrTemplateFieldIds[$fieldNode->getAttribute("templateFieldId")]); $objField->setSort($fieldNode->getAttribute("sort")); $objField->save(); foreach ($fieldNode->childNodes as $languageNode) { $objValue = $objField->getNewValueObject(); $objValue->setValue($languageNode->nodeValue); $objValue->setLanguageId($arrLanguageIds[$languageNode->getAttribute("id")]); $objValue->setCascade($languageNode->getAttribute("cascade")); $objField->setValueObject($objValue); $arrActiveLangs[$languageNode->getAttribute("id")] = $languageNode->getAttribute("active"); if (preg_match($strElmntPattern, $languageNode->nodeValue) > 0) { array_push($arrElementFieldIds["largeText"], $objField->getId()); } if (preg_match($strStoragePattern, $languageNode->nodeValue) > 0) { array_push($arrElementFieldIds["largeText"], $objField->getId()); } } if (in_array($fieldNode->getAttribute("templateFieldId"), $arrLinkFieldIds)) { array_push($arrElementFieldIds["link"], $objField->getId()); } break; } } foreach ($arrActiveLangs as $key => $value) { $objElement->setLanguageActive($arrLanguageIds[$key], $value); } break; case "feed": foreach ($subNode->childNodes as $feedFieldNode) { if ($feedFieldNode->nodeName == "feedfield") { $objFeedField = new ElementFieldFeed(); $objFeedField->setElementId($objElement->getId()); $objFeedField->setTemplateFieldId($arrTemplateFieldIds[$feedFieldNode->getAttribute("templateFieldId")]); $objFeedField->setFeedPath($feedFieldNode->getAttribute("feedPath")); $objFeedField->setXpath($feedFieldNode->getAttribute("xpath")); $objFeedField->setLanguageId($arrLanguageIds[$feedFieldNode->getAttribute("languageId")]); $objFeedField->setCascade($feedFieldNode->getAttribute("cascade")); $objFeedField->setSort($feedFieldNode->getAttribute("sort")); $objFeedField->save(); } } $objFeed = new ElementFeed(); $objFeed->setElementId($objElement->getId()); $objFeed->setFeedId($arrFeedIds[$subNode->getAttribute("feedId")]); $objFeed->setFeedPath($subNode->getAttribute("feedPath")); $objFeed->setMaxItems($subNode->getAttribute("maxItems")); $objFeed->setSortBy($subNode->getAttribute("sortBy")); $objFeed->setAliasField($subNode->getAttribute("aliasField")); $objFeed->save(); break; case "meta": $arrMetaFields = array("title", "keywords", "description"); foreach ($subNode->childNodes as $metaFieldNode) { if ($metaFieldNode->nodeName == "language") { $intLanguageId = $arrLanguageIds[$metaFieldNode->getAttribute("id")]; foreach ($arrMetaFields as $value) { $objMeta = new ElementMeta(); $objMeta->setName($value); $objMeta->setValue($metaFieldNode->getAttribute($value)); $objMeta->setLanguageId($intLanguageId); $objMeta->setCascade(0); $objElement->setMeta($objMeta); } } } break; case "languages": foreach ($subNode->childNodes as $languageNode) { $objLanguage = new ElementLanguage(); $objLanguage->setElementId($objElement->getId()); $objLanguage->setLanguageId($arrLanguageIds[$languageNode->getAttribute("id")]); $objLanguage->setActive($languageNode->getAttribute("active")); $objLanguage->setCascade($languageNode->getAttribute("cascade")); $objLanguage->save(); } break; case "permissions": $objUsers = array(); $objTempUsers = explode(",", $subNode->getAttribute("users")); foreach ($objTempUsers as $value) { if (array_key_exists($value, $arrUserIds)) { array_push($objUsers, $arrUserIds[$value]); } } $objGroups = array(); $objTempGroups = explode(",", $subNode->getAttribute("groups")); foreach ($objTempGroups as $value) { if (array_key_exists($value, $arrGroupIds)) { array_push($objGroups, $arrGroupIds[$value]); } } $objPermissions = new ElementPermission(); $objPermissions->setUserId($objUsers); $objPermissions->setGroupId($objGroups); $objElement->setPermissions($objPermissions, true); break; case "elements": self::importElements($subNode, $intAccountId, $arrTemplateIds, $arrTemplateFieldIds, $arrElementIds, $arrElementFieldIds, $arrLinkFieldIds, $arrLanguageIds, $arrUserIds, $arrGroupIds, $arrStorageIds, $arrFeedIds, $objElement->getId()); break; } } //*** Update the search index. $objSearch = new Search(); $objSearch->updateIndex($objElement->getId()); } } }