Exemple #1
0
 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());
         }
     }
 }