/** * Switch the cms language and reload the site tree * */ function switchlanguage($lang, $donotcreate = null) { //is it's a clean switch (to an existing language deselect the current page) if (is_string($lang)) { $dontunloadPage = true; } $lang = is_string($lang) ? $lang : urldecode($this->urlParams['ID']); if ($lang != Translatable::default_lang()) { Translatable::set_reading_lang(Translatable::default_lang()); $tree_class = $this->stat('tree_class'); $obj = new $tree_class(); $allIDs = $obj->getDescendantIDList(); $allChildren = $obj->AllChildren(); $classesMap = $allChildren->map('ID', 'ClassName'); $titlesMap = $allChildren->map(); Translatable::set_reading_lang($lang); $obj = new $tree_class(); $languageIDs = $obj->getDescendantIDList(); $notcreatedlist = array_diff($allIDs, $languageIDs); FormResponse::add("\$('addpage').getElementsByTagName('button')[0].disabled=true;"); FormResponse::add("\$('Form_AddPageOptionsForm').getElementsByTagName('div')[1].getElementsByTagName('input')[0].disabled=true;"); FormResponse::add("\$('Translating_Message').innerHTML = 'Translating mode - " . i18n::get_language_name($lang) . "';"); FormResponse::add("Element.removeClassName('Translating_Message','nonTranslating');"); } else { Translatable::set_reading_lang($lang); FormResponse::add("\$('addpage').getElementsByTagName('button')[0].disabled=false;"); FormResponse::add("\$('Form_AddPageOptionsForm').getElementsByTagName('div')[1].getElementsByTagName('input')[0].disabled=false;"); FormResponse::add("Element.addClassName('Translating_Message','nonTranslating');"); } $obj = singleton($this->stat('tree_class')); $obj->markPartialTree(); $siteTree = $obj->getChildrenAsUL("", ' "<li id=\\"record-$child->ID\\" class=\\"" . $child->CMSTreeClasses($extraArg) . "\\">" . "<a href=\\"" . Director::link(substr($extraArg->Link(),0,-1), "show", $child->ID) . "\\" " . (($child->canEdit() || $child->canAddChildren()) ? "" : "class=\\"disabled\\"") . " title=\\"' . _t('LeftAndMain.PAGETYPE') . '".$child->class."\\" >" . (Convert::raw2js($child->TreeTitle())) . "</a>" ', $this, true); $rootLink = $this->Link() . '0'; $siteTree = "<li id=\"record-0\" class=\"Root nodelete\"><a href=\"{$rootLink}\">" . _t('LeftAndMain.SITECONTENT') . "</a>" . $siteTree . "</li></ul>"; FormResponse::add("\$('sitetree').innerHTML ='" . ereg_replace("[\n]", "\\\n", $siteTree) . "';"); FormResponse::add("SiteTree.applyTo('#sitetree');"); if (isset($notcreatedlist)) { foreach ($notcreatedlist as $notcreated) { if ($notcreated == $donotcreate) { continue; } $id = "new-{$classesMap[$notcreated]}-0-{$notcreated}"; Session::set($id . '_originalLangID', $notcreated); $treeTitle = Convert::raw2js($titlesMap[$notcreated]); $response = <<<JS \t\t\t\t\tvar tree = \$('sitetree'); \t\t\t\t\tvar newNode = tree.createTreeNode("{$id}", "{$treeTitle}", "{$classesMap[$notcreated]} (untranslated)"); \t\t\t\t\taddClass(newNode, 'untranslated'); \t\t\t\t\tnode = tree.getTreeNodeByIdx(0); \t\t\t\t\tnode.open(); \t\t\t\t\tnode.appendTreeNode(newNode); JS; FormResponse::add($response); } } if (!isset($dontunloadPage)) { FormResponse::add("node = \$('sitetree').getTreeNodeByIdx(0); node.selectTreeNode();"); } return FormResponse::respond(); }