function parseLanguage($intLangId, $strCommand) { global $_PATHS, $objLang, $_CLEAN_POST, $_CONF, $objLiveUser; $objTpl = new HTML_Template_IT($_PATHS['templates']); $objTpl->loadTemplatefile("language.tpl.htm"); switch ($strCommand) { case CMD_LIST: case CMD_ADD: case CMD_EDIT: //*** Post the profile form if submitted. if (count($_CLEAN_POST) > 0 && !empty($_CLEAN_POST['dispatch']) && $_CLEAN_POST['dispatch'] == "editLanguage") { //*** The element form has been posted. $blnError = false; //*** Check sanitized input. if (is_null($_CLEAN_POST["frm_active"])) { $blnError = true; } if (is_null($_CLEAN_POST["frm_name"])) { $blnError = true; } if (is_null($_CLEAN_POST["frm_apiname"])) { $blnError = true; } if (is_null($_CLEAN_POST["dispatch"])) { $blnError = true; } if ($blnError === true) { //*** Display global error. $objTpl->setVariable("FORM_ACTIVE_VALUE", $_POST["frm_active"] == "on" ? "checked=\"checked\"" : ""); $objTpl->setVariable("FORM_NAME_VALUE", $_POST["frm_name"]); $objTpl->setVariable("FORM_APINAME_VALUE", $_POST["frm_apiname"]); $objTpl->setVariable("ERROR_LANGUAGE_MAIN", $objLang->get("main", "formerror")); } else { //*** Input is valid. Save the language. if ($strCommand == CMD_EDIT) { $objLanguage = ContentLanguage::selectByPK($intLangId); } else { $objLanguage = new ContentLanguage(); } $objLanguage->setAccountId($_CONF['app']['account']->getId()); $objLanguage->setActive($_CLEAN_POST["frm_active"] == "on" ? 1 : 0); $objLanguage->setName($_CLEAN_POST["frm_name"]); $objLanguage->setAbbr($_CLEAN_POST["frm_apiname"]); $objLanguage->save(); header("Location: " . Request::getURI() . "/?cid=" . NAV_PCMS_LANGUAGES); exit; } } $objLangs = ContentLanguage::select(); foreach ($objLangs as $objLanguage) { $objTpl->setCurrentBlock("multiview-item"); $objTpl->setVariable("MULTIITEM_VALUE", $objLanguage->getId()); $objTpl->setVariable("BUTTON_REMOVE_HREF", "javascript:ContentLanguage.remove({$objLanguage->getId()});"); $objTpl->setVariable("BUTTON_REMOVE", $objLang->get("delete", "button")); $objTpl->setVariable("MULTIITEM_HREF", "?cid=" . NAV_PCMS_LANGUAGES . "&eid={$objLanguage->getId()}&cmd=" . CMD_EDIT); $strValue = htmlspecialchars($objLanguage->getName()); $strShortValue = getShortValue($strValue, 50); $intSize = strlen($strValue); $objTpl->setVariable("MULTIITEM_NAME", $intSize > 50 ? $strShortValue : $strValue); $objTpl->setVariable("MULTIITEM_TITLE", $intSize > 50 ? $strValue : ""); $objTpl->setVariable("MULTIITEM_ABBR", $objLanguage->getAbbr()); if ($objLanguage->default > 0) { $strValue = $objLang->get("standardLanguage", "label"); } else { $strValue = "<a href=\"javascript:;\" onclick=\"ContentLanguage.setDefault({$objLanguage->getId()})\" rel=\"internal\">" . $objLang->get("standardLanguage", "button") . "</a>"; } $objTpl->setVariable("MULTIITEM_META", $strValue); if (!$objLanguage->getActive()) { $objTpl->setVariable("MULTIITEM_ACTIVE", " class=\"inactive\""); } $objTpl->parseCurrentBlock(); } $objTpl->setVariable("LANGUAGES", $objLang->get("languages", "label")); $objTpl->setVariable("BUTTON_ADD", $objLang->get("languageAdd", "button")); $objTpl->setVariable("BUTTON_ADD_HREF", "ContentLanguage.prepareAdd()"); //*** Form variables. if ($strCommand == CMD_EDIT) { $objLanguage = ContentLanguage::selectByPK($intLangId); $objTpl->setVariable("FORM_ACTIVE_VALUE", $objLanguage->getActive() ? "checked=\"checked\"" : ""); $objTpl->setVariable("FORM_NAME_VALUE", $objLanguage->getName()); $objTpl->setVariable("FORM_APINAME_VALUE", $objLanguage->getAbbr()); $objTpl->setVariable("FRM_HEADER", $objLang->get("editLanguage", "form")); $objTpl->setVariable("FRM_STYLE", ""); $objTpl->setVariable("CMD", CMD_EDIT); } else { $objTpl->setVariable("FRM_HEADER", $objLang->get("addLanguage", "form")); $objTpl->setVariable("FRM_STYLE", " style=\"display:none\""); $objTpl->setVariable("CMD", CMD_ADD); } $objTpl->setVariable("FRM_LABEL_ACTIVE", $objLang->get("active", "form")); $objTpl->setVariable("FRM_LABEL_NAME", $objLang->get("name", "form")); $objTpl->setVariable("FRM_LABEL_ABBR", $objLang->get("shortName", "form")); $objTpl->setVariable("FRM_DESCR_ABBR", $objLang->get("shortName", "tip")); $objTpl->setVariable("FRM_LABEL_SAVE", $objLang->get("save", "button")); $objTpl->setVariable("CID", NAV_PCMS_LANGUAGES); $objTpl->setVariable("EID", $intLangId); $objTpl->parseCurrentBlock(); $strReturn = $objTpl->get(); break; case CMD_REMOVE: if (strpos($intLangId, ',') !== false) { //*** Multiple elements submitted. $arrLanguages = explode(',', $intLangId); $objLanguages = ContentLanguage::selectByPK($arrLanguages); foreach ($objLanguages as $objLanguage) { $objLanguage->delete(); } } else { //*** Single element submitted. $objLanguage = ContentLanguage::selectByPK($intLangId); $objLanguage->delete(); } //*** Redirect the page. $strReturnTo = request('returnTo'); if (empty($strReturnTo)) { header("Location: " . Request::getUri() . "/?cid=" . request("cid") . "&cmd=" . CMD_LIST); exit; } else { header("Location: " . Request::getURI() . $strReturnTo); exit; } break; case CMD_SET_DEFAULT: if ($intLangId > 0) { ContentLanguage::setDefault($intLangId); } //*** Redirect the page. $strReturnTo = request('returnTo'); if (empty($strReturnTo)) { header("Location: " . Request::getUri() . "/?cid=" . request("cid") . "&cmd=" . CMD_LIST); exit; } else { header("Location: " . Request::getURI() . $strReturnTo); exit; } break; } return $strReturn; }
} else { //*** Get default language. $objLang = ContentLanguage::getDefault(); $_CONF['app']['language'] = $objLang->getId(); $_CONF['app']['languageAbbr'] = $objLang->getAbbr(); $_CONF['app']['languageName'] = $objLang->getName(); $_CONF['app']['languageDefault'] = $objLang->default; } } } $objTemp = new ContentLanguage(); $objTemp->setId($_CONF['app']['language']); $objTemp->setAbbr($_CONF['app']['languageAbbr']); $objTemp->setName($_CONF['app']['languageName']); $objTemp->default = $_CONF['app']['languageDefault']; $objTemp->setActive(TRUE); $objCms->setLanguage($objTemp); //*** Check if the current alias is forcing a language switch. if (!empty($strRewrite)) { $strRewrite = $objCms->cleanRewrite($strRewrite); //*** Get aliases for this URL. $objUrls = Alias::selectByAlias($strRewrite); if (!is_null($objUrls) && $objUrls->count() > 0) { //*** Check if the current language is in the list of aliases. $blnFoundLanguage = false; foreach ($objUrls as $objUrl) { $intLanguage = $objUrl->getLanguageId(); if (($intLanguage == 0 || $intLanguage == $objCms->getLanguage()->getId()) && $objUrl->getActive()) { $blnFoundLanguage = true; break; }
public static function addById($intId, $intParentId = 0) { global $_CONF; $objDoc = Structure::getXmlDoc($intId); $arrUserIds = array(); $arrGroupIds = array(); $arrStorageIds = array(); $arrFeedIds = array(); $arrLanguageIds[0] = 0; $arrTemplateIds[0] = 0; $arrTemplateFieldIds[0] = 0; $arrLinkFieldIds = array(); $arrElementIds[0] = 0; $arrElementFieldIds = array(); $arrElementFieldIds["link"][0] = 0; $arrElementFieldIds["largeText"][0] = 0; $intTemplateParentId = 0; $intElementParentId = 0; //*** Get structure fields from selects. if (Structure::hasSelect($intId)) { $objSelects = Structure::getSelectsById($intId); foreach ($objSelects as $objSelect) { switch ($objSelect->getType()) { case "language": $intId = Request::get("frm_select_{$objSelect->getId()}"); $arrLanguageIds[$objSelect->getLogicId()] = $intId; break; case "element": $intId = Request::get("frm_select_{$objSelect->getId()}"); if ($objSelect->getLogicId() == "PARENT") { $intElementParentId = $intId; } else { $arrElementIds[$objSelect->getLogicId()] = $intId; } break; } } } foreach ($objDoc->childNodes as $rootNode) { if ($rootNode->nodeName == "structure") { //*** Valid structure XML. switch ($rootNode->getAttribute("type")) { case "template": $intTemplateParentId = $intParentId; break; case "element": $intElementParentId = $intParentId; break; } foreach ($rootNode->childNodes as $logicNode) { if ($logicNode->nodeName == "logic") { foreach ($logicNode->childNodes as $childNode) { switch ($childNode->nodeName) { case "languages": //*** Add languages to the account. foreach ($childNode->childNodes as $languageNode) { $objLanguage = new ContentLanguage(); $objLanguage->setAccountId($_CONF['app']['account']->getId()); $objLanguage->setName($languageNode->getAttribute("name")); $objLanguage->setAbbr($languageNode->getAttribute("abbr")); $objLanguage->default = $languageNode->getAttribute("default"); $objLanguage->setActive($languageNode->getAttribute("active")); $objLanguage->setSort($languageNode->getAttribute("sort")); $objLanguage->setUsername($languageNode->getAttribute("username")); $objLanguage->save(); $arrLanguageIds[$languageNode->getAttribute("id")] = $objLanguage->getId(); if ($languageNode->getAttribute("default") == 1) { $intDefaultLanguage = $objLanguage->getId(); } } break; case "templates": //*** Add templates to the account. ImpEx::importTemplates($childNode, $_CONF['app']['account']->getId(), $arrTemplateIds, $arrTemplateFieldIds, $arrLinkFieldIds, $intTemplateParentId); break; case "elements": //*** Add elements to the account. ImpEx::importElements($childNode, $_CONF['app']['account']->getId(), $arrTemplateIds, $arrTemplateFieldIds, $arrElementIds, $arrElementFieldIds, $arrLinkFieldIds, $arrLanguageIds, $arrUserIds, $arrGroupIds, $arrStorageIds, $arrFeedIds, $intElementParentId); break; case "aliases": //*** Add aliases to the account. foreach ($childNode->childNodes as $aliasNode) { $objAlias = new Alias(); $objAlias->setAccountId($_CONF['app']['account']->getId()); $objAlias->setAlias($aliasNode->getAttribute("alias")); if (array_key_exists($aliasNode->getAttribute("url"), $arrElementIds)) { $objAlias->setUrl($arrElementIds[$aliasNode->getAttribute("url")]); } else { $objAlias->setUrl(0); } if (array_key_exists($aliasNode->getAttribute("language"), $arrLanguageIds)) { $objAlias->setLanguageId($arrLanguageIds[$aliasNode->getAttribute("language")]); } else { $objAlias->setLanguageId(0); } $objAlias->setCascade($aliasNode->getAttribute("cascade")); $objAlias->setActive($aliasNode->getAttribute("active")); $objAlias->setSort($aliasNode->getAttribute("sort")); $objAlias->setCreated($aliasNode->getAttribute("created")); $objAlias->setModified($aliasNode->getAttribute("modified")); $objAlias->save(); } break; } //*** Adjust the links for deeplink fields. ImpEx::adjustDeeplinks($arrElementFieldIds["link"], $arrElementIds, $arrLanguageIds); //*** Adjust the links in large text fields. ImpEx::adjustTextlinks($arrElementFieldIds["largeText"], $arrElementIds, $arrLanguageIds, array(0)); } } } } } }
public static function import($strXml, $blnOverwrite = false, $blnKeepSettings = false) { global $objLiveAdmin, $intDefaultLanguage, $_CONF; $objReturn = NULL; $objSettings = NULL; $blnZip = false; //*** Init DOM object. $objDoc = new DOMDocument("1.0", "UTF-8"); $objDoc->formatOutput = false; $objDoc->preserveWhiteSpace = true; if (is_file($strXml)) { $objZip = new dUnzip2($strXml); if (is_object($objZip)) { //*** Zip file. $strXml = $objZip->unzip('data.xml'); if ($strXml !== false) { //*** Fix a unicode bug. Replace forbidden characters (The first 8). for ($intCount = 1; $intCount < 9; $intCount++) { $strHex = str_pad(dechex($intCount), 4, "0", STR_PAD_LEFT); $strXml = preg_replace('/\\x{' . $strHex . '}/u', "", $strXml); } $strXml = preg_replace('/\\x{001f}/u', "", $strXml); $objDoc->loadXML($strXml); $blnZip = true; } } else { //*** XML file. $objDoc->load($strXml); } } else { $objDoc->loadXML($strXml); } //*** Build data structure. foreach ($objDoc->childNodes as $rootNode) { if ($rootNode->nodeName == "Punch") { //*** Valid Punch XML. foreach ($rootNode->childNodes as $accountNode) { if ($accountNode->nodeName == "account") { //*** Account node. if ($blnOverwrite) { $objAccount = Account::getByPunchId($accountNode->getAttribute("punchId")); if (is_object($objAccount) && $blnKeepSettings) { //*** Save settings. $objSettings = Settings::getByAccount($objAccount->getId()); } //*** Remove account. if (is_object($objAccount)) { $objAccount->delete(); } } //*** Create account. $objAccount = new Account(); $objAccount->setPunchId($accountNode->getAttribute("punchId")); $objAccount->setName($accountNode->getAttribute("name")); $objAccount->setUri($accountNode->getAttribute("uri")); $objAccount->setTimeZoneId(42); $objAccount->save(); //*** Create temporary account object. $_CONF['app']['account'] = $objAccount; foreach ($accountNode->childNodes as $childNode) { $arrUserIds = array(); $arrGroupIds = array(); switch ($childNode->nodeName) { case "acl": self::importAcl($childNode, $objAccount->getId(), $arrUserIds, $arrGroupIds); break; case "products": //*** Add products to the account. foreach ($childNode->childNodes as $productNode) { switch ($productNode->nodeName) { case "pcms": //*** Add PunchCMS product to the account. $objAccountProduct = new AccountProduct(); $objAccountProduct->setAccountId($objAccount->getId()); $objAccountProduct->setProductId(PRODUCT_PCMS); $objAccountProduct->setExpires($productNode->getAttribute("expires")); $objAccountProduct->save(); $arrStorageIds[0] = 0; $arrFeedIds[0] = 0; //*** Add PunchCMS data to the account. foreach ($productNode->childNodes as $pcmsNode) { switch ($pcmsNode->nodeName) { case "settings": //*** Add settings to the account. if ($blnKeepSettings && is_object($objSettings)) { foreach ($objSettings as $objSetting) { $objSetting->setId(0); $objSetting->setAccountId($objAccount->getId()); $objSetting->save(); } } else { foreach ($pcmsNode->childNodes as $settingNode) { $objSettingTemplate = SettingTemplate::selectByName($settingNode->getAttribute("name")); if (is_object($objSettingTemplate)) { $objSetting = new Setting(); $objSetting->setAccountId($objAccount->getId()); $objSetting->setSettingId($objSettingTemplate->getId()); $objSetting->setValue($settingNode->getAttribute("value")); $objSetting->save(); } } } break; case "languages": //*** Add languages to the account. $arrLanguageIds[0] = 0; foreach ($pcmsNode->childNodes as $languageNode) { $objLanguage = new ContentLanguage(); $objLanguage->setAccountId($objAccount->getId()); $objLanguage->setName($languageNode->getAttribute("name")); $objLanguage->setAbbr($languageNode->getAttribute("abbr")); $objLanguage->default = $languageNode->getAttribute("default"); $objLanguage->setActive($languageNode->getAttribute("active")); $objLanguage->setSort($languageNode->getAttribute("sort")); $objLanguage->setUsername($languageNode->getAttribute("username")); $objLanguage->save(); $arrLanguageIds[$languageNode->getAttribute("id")] = $objLanguage->getId(); if ($languageNode->getAttribute("default") == 1) { $intDefaultLanguage = $objLanguage->getId(); } } break; case "feeds": //*** Add feeds to the account. $arrFeedIds[0] = 0; foreach ($pcmsNode->childNodes as $feedNode) { $objFeed = new Feed(); $objFeed->setAccountId($objAccount->getId()); $objFeed->setName($feedNode->getAttribute("name")); $objFeed->setFeed($feedNode->getAttribute("feed")); $objFeed->setBasePath($feedNode->getAttribute("basepath")); $objFeed->setRefresh($feedNode->getAttribute("refresh")); $objFeed->setLastUpdate($feedNode->getAttribute("lastUpdate")); $objFeed->setActive($feedNode->getAttribute("active")); $objFeed->setSort($feedNode->getAttribute("sort")); $objFeed->save(); $arrFeedIds[$feedNode->getAttribute("id")] = $objFeed->getId(); } break; case "storage": //*** Add media items to the account. self::importStorage($pcmsNode, $objAccount->getId(), $arrStorageIds); break; case "templates": //*** Add templates to the account. $arrTemplateIds[0] = 0; $arrTemplateFieldIds[0] = 0; $arrLinkFieldIds = array(); self::importTemplates($pcmsNode, $objAccount->getId(), $arrTemplateIds, $arrTemplateFieldIds, $arrLinkFieldIds); break; case "elements": //*** Add elements to the account. $arrElementIds[0] = 0; $arrElementFieldIds["link"][0] = 0; $arrElementFieldIds["largeText"][0] = 0; self::importElements($pcmsNode, $objAccount->getId(), $arrTemplateIds, $arrTemplateFieldIds, $arrElementIds, $arrElementFieldIds, $arrLinkFieldIds, $arrLanguageIds, $arrUserIds, $arrGroupIds, $arrStorageIds, $arrFeedIds); break; case "aliases": //*** Add aliases to the account. foreach ($pcmsNode->childNodes as $aliasNode) { $objAlias = new Alias(); $objAlias->setAccountId($objAccount->getId()); $objAlias->setAlias($aliasNode->getAttribute("alias")); if (array_key_exists($aliasNode->getAttribute("url"), $arrElementIds)) { $objAlias->setUrl($arrElementIds[$aliasNode->getAttribute("url")]); } else { $objAlias->setUrl(0); } if (array_key_exists($aliasNode->getAttribute("language"), $arrLanguageIds)) { $objAlias->setLanguageId($arrLanguageIds[$aliasNode->getAttribute("language")]); } else { $objAlias->setLanguageId(0); } $objAlias->setCascade($aliasNode->getAttribute("cascade")); $objAlias->setActive($aliasNode->getAttribute("active")); $objAlias->setSort($aliasNode->getAttribute("sort")); $objAlias->setCreated($aliasNode->getAttribute("created")); $objAlias->setModified($aliasNode->getAttribute("modified")); $objAlias->save(); } break; } } //*** Adjust the links for deeplink fields. self::adjustDeeplinks($arrElementFieldIds["link"], $arrElementIds, $arrLanguageIds); //*** Adjust the links in large text fields. self::adjustTextlinks($arrElementFieldIds["largeText"], $arrElementIds, $arrLanguageIds, $arrStorageIds); break; } } break; } } //*** Destroy temporary account object. unset($_CONF['app']['account']); $objReturn = $objAccount; } } } } //*** Files. if ($blnZip && is_object($objReturn)) { self::importFiles($objZip, $objReturn); if ($blnKeepSettings) { //*** Move files to remote server. self::moveImportedFiles($objReturn); } } return $objReturn; }