Exemplo n.º 1
0
    /**
     * 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();
    }