/** * Searches for languagesets containing the current systemid. either as a language or a referenced record. * Called whenever a records was deleted using the common methods. * Implement this method to be notified when a record is deleted, e.g. to to additional cleanups afterwards. * There's no need to register the listener, this is done automatically. * Make sure to return a matching boolean-value, otherwise the transaction may be rolled back. * * @param string $strEventName * @param array $arrArguments * * @return bool */ public function handleEvent($strEventName, array $arrArguments) { //unwrap arguments list($strSystemid, $strSourceClass) = $arrArguments; if ($strSourceClass == "class_module_languages_language") { //if we have just one language remaining, set this one as default $arrObjLanguages = class_module_languages_language::getObjectList(); if (count($arrObjLanguages) == 1) { $objOneLanguage = $arrObjLanguages[0]; $objOneLanguage->setBitDefault(1); $objOneLanguage->updateObjectToDb(); } //check if the current active one was deleted. if, then reset. #kajona trace id 613 $objLanguage = new class_module_languages_language(); $arrLangs = class_module_languages_language::getObjectList(); $arrFiltered = array_filter($arrLangs, function (class_module_languages_language $objSingleLang) use($objLanguage) { return $objSingleLang->getStrName() == $objLanguage->getAdminLanguage(); }); if (count($arrFiltered) == 0 && count($arrLangs) > 0) { $objLanguage->setStrAdminLanguageToWorkOn($arrLangs[0]->getStrName()); } } //fire a plain query on the database, much faster then searching for matching records $strQuery = "DELETE FROM " . _dbprefix_ . "languages_languageset\n WHERE languageset_language = ?\n OR languageset_systemid = ?"; class_carrier::getInstance()->getObjDB()->_pQuery($strQuery, array($strSystemid, $strSystemid)); return true; }
/** * Returns the ready switch-htmlcode * * @return string */ public function loadData() { //fallback for old elements not yet using the template if (!isset($this->arrElementData["char1"]) || $this->arrElementData["char1"] == "") { $this->arrElementData["char1"] = "languageswitch.tpl"; } $arrObjLanguages = class_module_languages_language::getObjectList(true); //load the languageset in order to generate more specific switches $objLanguageset = class_module_languages_languageset::getLanguagesetForSystemid($this->getParam("systemid")); //Iterate over all languages $strRows = ""; foreach ($arrObjLanguages as $objOneLanguage) { //Check, if the current page has elements $objPage = class_module_pages_page::getPageByName($this->getPagename()); $objPage->setStrLanguage($objOneLanguage->getStrName()); if ($objPage === null) { continue; } if ((int) $objPage->getNumberOfElementsOnPage(true) == 0) { continue; } $strTargetSystemid = null; if ($objLanguageset != null) { $strTargetSystemid = $objLanguageset->getSystemidForLanguageid($objOneLanguage->getSystemid()); } //the languageswitch is content aware. check if the target id is a news-entry $strSeoAddon = ""; if (validateSystemid($strTargetSystemid)) { $objRecord = class_objectfactory::getInstance()->getObject($strTargetSystemid); $strSeoAddon = $objRecord->getStrDisplayName(); } //and the link $arrTemplate = array(); if ($strTargetSystemid === null) { $arrTemplate["href"] = getLinkPortalHref($objPage->getStrName(), "", "", "", "", $objOneLanguage->getStrName(), $strSeoAddon); } else { $arrTemplate["href"] = getLinkPortalHref($objPage->getStrName(), "", $this->getAction(), "", $strTargetSystemid, $objOneLanguage->getStrName(), $strSeoAddon); } $arrTemplate["langname_short"] = $objOneLanguage->getStrName(); $arrTemplate["langname_long"] = $this->getLang("lang_" . $objOneLanguage->getStrName()); $strTemplateRowID = $this->objTemplate->readTemplate("/element_languageswitch/" . $this->arrElementData["char1"], "languageswitch_entry"); $strTemplateActiveRowID = $this->objTemplate->readTemplate("/element_languageswitch/" . $this->arrElementData["char1"], "languageswitch_entry_active"); if ($objOneLanguage->getStrName() == $this->getStrPortalLanguage()) { $strRows .= $this->fillTemplate($arrTemplate, $strTemplateActiveRowID); } else { $strRows .= $this->fillTemplate($arrTemplate, $strTemplateRowID); } } $strTemplateWrapperID = $this->objTemplate->readTemplate("/element_languageswitch/" . $this->arrElementData["char1"], "languageswitch_wrapper"); return $this->fillTemplate(array("languageswitch_entries" => $strRows), $strTemplateWrapperID); }
private function createPageMetadata($strPageId, XMLWriter $objWriter) { //loop all languages if given $objLanguages = new class_module_languages_language(); $strCurrentLanguage = $objLanguages->getStrAdminLanguageToWorkOn(); $arrLanguages = class_module_languages_language::getObjectList(); foreach ($arrLanguages as $objOneLanguage) { $objLanguages->setStrAdminLanguageToWorkOn($objOneLanguage->getStrName()); $objPage = new class_module_pages_page($strPageId); $objWriter->startElement("propertyset"); $objWriter->startAttribute("language"); $objWriter->text($objOneLanguage->getStrName()); $objWriter->endAttribute(); $objWriter->startElement("browsername"); $objWriter->text($objPage->getStrBrowsername()); $objWriter->endElement(); $objWriter->startElement("description"); $objWriter->text($objPage->getStrDesc()); $objWriter->endElement(); $objWriter->startElement("keywords"); $objWriter->text($objPage->getStrKeywords()); $objWriter->endElement(); $objWriter->startElement("template"); $objWriter->text($objPage->getStrTemplate()); $objWriter->endElement(); $objWriter->startElement("seostring"); $objWriter->text($objPage->getStrSeostring()); $objWriter->endElement(); $objWriter->startElement("language"); $objWriter->text($objPage->getStrLanguage()); $objWriter->endElement(); $objWriter->startElement("alias"); $objWriter->text($objPage->getStrAlias()); $objWriter->endElement(); $objWriter->startElement("path"); $objWriter->text($objPage->getStrPath()); $objWriter->endElement(); $objWriter->startElement("target"); $objWriter->text($objPage->getStrTarget()); $objWriter->endElement(); //propertyset $objWriter->endElement(); } $objLanguages->setStrAdminLanguageToWorkOn($strCurrentLanguage); }
/** * Provides a form to set up the params needed to copy a single element from one placeholder to another. * Collects the target language, the target page and the target placeholder, invokes the copy-procedure. * * @throws class_exception * @return string , "" in case of success * @permissions edit */ protected function actionCopyElement() { $strReturn = ""; $this->setArrModuleEntry("template", "/folderview.tpl"); $objSourceElement = new class_module_pages_pageelement($this->getSystemid()); if ($objSourceElement->rightEdit($this->getSystemid())) { $objLang = null; if ($this->getParam("copyElement_language") != "") { $objLang = new class_module_languages_language($this->getParam("copyElement_language")); } else { $objLang = class_module_languages_language::getLanguageByName($this->getLanguageToWorkOn()); } $objPage = null; if ($this->getParam("copyElement_page") != "") { $objPage = class_module_pages_page::getPageByName($this->getParam("copyElement_page")); if ($objPage == null) { throw new class_exception("failed to load page " . $this->getParam("copyElement_page"), class_exception::$level_ERROR); } $objPage->setStrLanguage($objLang->getStrName()); $objPage->initObject(); } else { $objPage = new class_module_pages_page($objSourceElement->getPrevId()); } //form header $strReturn .= $this->objToolkit->formHeader(class_link::getLinkAdminHref("pages_content", "copyElement"), "formCopyElement"); $strReturn .= $this->objToolkit->formInputHidden("copyElement_doCopy", 1); $strReturn .= $this->objToolkit->formInputHidden("systemid", $this->getSystemid()); $strReturn .= $this->objToolkit->formHeadline($this->getLang("copyElement_element") . " " . $objSourceElement->getStrName() . "_" . $objSourceElement->getStrElement() . " (" . $objSourceElement->getStrTitle() . ")"); //step one: language selection $arrLanguages = class_module_languages_language::getObjectList(true); $arrLanguageDD = array(); foreach ($arrLanguages as $objSingleLanguage) { $arrLanguageDD[$objSingleLanguage->getSystemid()] = $this->getLang("lang_" . $objSingleLanguage->getStrName(), "languages"); } $strReturn .= $this->objToolkit->formInputDropdown("copyElement_language", $arrLanguageDD, $this->getLang("copyElement_language"), $objLang->getSystemid()); //step two: page selection $strReturn .= $this->objToolkit->formInputPageSelector("copyElement_page", $this->getLang("copyElement_page"), $objPage->getStrName(), "inputText", false); //step three: placeholder-selection //here comes the tricky part. load the template, analyze the placeholders and validate all those against things like repeatable and more... $strTemplate = $objPage->getStrTemplate(); //load the placeholders $strTemplateId = $this->objTemplate->readTemplate("/module_pages/" . $strTemplate); $arrPlaceholders = $this->objTemplate->getElements($strTemplateId); $arrPlaceholdersDD = array(); foreach ($arrPlaceholders as $arrSinglePlaceholder) { foreach ($arrSinglePlaceholder["elementlist"] as $arrSinglePlaceholderlist) { if ($objSourceElement->getStrElement() == $arrSinglePlaceholderlist["element"]) { if ($objSourceElement->getIntRepeat() == 1) { //repeatable, ok in every case $arrPlaceholdersDD[$arrSinglePlaceholder["placeholder"]] = $arrSinglePlaceholder["placeholder"]; } else { //not repeatable - element already existing at placeholder? $arrElementsOnPage = class_module_pages_pageelement::getElementsOnPage($objPage->getSystemid(), false, $objLang->getStrName()); //loop in order to find same element-types - other elements may be possible due to piped placeholders, too $bitAdd = true; //var_dump($arrElementsOnPage); foreach ($arrElementsOnPage as $objSingleElementOnPage) { if ($objSingleElementOnPage->getStrElement() == $objSourceElement->getStrElement()) { $bitAdd = false; } } if ($bitAdd) { $arrPlaceholdersDD[$arrSinglePlaceholder["placeholder"]] = $arrSinglePlaceholder["placeholder"]; } } } } } $bitCopyingAllowed = true; if (count($arrPlaceholdersDD) == 0) { $strReturn .= $this->objToolkit->formTextRow($this->getLang("copyElement_err_placeholder")); $bitCopyingAllowed = false; } else { $strReturn .= $this->objToolkit->formInputDropdown("copyElement_placeholder", $arrPlaceholdersDD, $this->getLang("copyElement_placeholder")); } $strReturn .= $this->objToolkit->formTextRow($this->getLang("copyElement_template") . " " . $strTemplate); $strReturn .= $this->objToolkit->divider(); $strReturn .= $this->objToolkit->formInputSubmit($this->getLang("copyElement_submit"), "Submit", "", "inputSubmit", $bitCopyingAllowed); $strReturn .= $this->objToolkit->formClose(); $strReturn .= "\n <script type=\"text/javascript\">\n\n \$(function() {\n var reloadForm = function() {\n setTimeout( function() {\n document.getElementById('copyElement_doCopy').value = 0;\n var formElement = document.getElementById('formCopyElement');\n formElement.submit();\n }, 100);\n\n };\n\n\t KAJONA.admin.copyElement_page.bind('autocompleteselect', reloadForm);\n\n\t var languageField = document.getElementById('copyElement_language');\n\t languageField.onchange = reloadForm;\n\n var pageField = document.getElementById('copyElement_page');\n\t pageField.onchange = reloadForm;\n\t });\n\n </script>"; //any actions to take? if ($this->getParam("copyElement_doCopy") == 1) { $objNewElement = $objSourceElement->copyObject($objPage->getSystemid()); $objNewElement->setStrLanguage($objLang->getStrName()); $objNewElement->setStrPlaceholder($this->getParam("copyElement_placeholder")); if ($objNewElement->updateObjectToDb()) { $this->setSystemid($objNewElement->getSystemid()); $strReturn = ""; $this->adminReload(class_link::getLinkAdminHref("pages_content", "list", "systemid=" . $objNewElement->getPrevId() . "&blockAction=1&peClose=1")); } else { throw new class_exception("Error copying the pageelement " . $objSourceElement->getSystemid(), class_exception::$level_ERROR); } } } else { $strReturn = $this->getLang("commons_error_permissions"); } return $strReturn; }
/** * Enables the common language switch, switching the backends language to work on. * If you want to create a custom switch, use setArrLanguageSwitchEntries and setStrOnChangeHandler * to customize all switch-content. * * @static */ public static function enableLanguageSwitch() { if (self::$arrLanguageSwitchEntries == null) { $arrObjLanguages = class_module_languages_language::getObjectList(true); if (count($arrObjLanguages) > 1) { self::$arrLanguageSwitchEntries = array(); foreach ($arrObjLanguages as $objOneLang) { self::$arrLanguageSwitchEntries[$objOneLang->getStrName()] = class_carrier::getInstance()->getObjLang()->getLang("lang_" . $objOneLang->getStrName(), "languages"); } $objLanguage = new class_module_languages_language(); self::$strActiveKey = $objLanguage->getAdminLanguage(); } } }
/** * @return string * @permissions edit */ protected function actionEditLanguageset() { $strReturn = ""; $objNews = class_objectfactory::getInstance()->getObject($this->getSystemid()); $this->setArrModuleEntry("template", "/folderview.tpl"); if ($objNews->rightEdit()) { $objLanguageset = class_module_languages_languageset::getLanguagesetForSystemid($this->getSystemid()); if ($objLanguageset == null) { $strReturn .= $this->objToolkit->formTextRow($this->getLang("languageset_notmaintained")); $strReturn .= $this->objToolkit->formHeadline($this->getLang("languageset_addtolanguage")); $strReturn .= $this->objToolkit->formHeader(class_link::getLinkAdminHref($this->getArrModule("modul"), "assignToLanguageset")); $arrLanguages = class_module_languages_language::getObjectList(); $arrDropdown = array(); foreach ($arrLanguages as $objOneLanguage) { $arrDropdown[$objOneLanguage->getSystemid()] = $this->getLang("lang_" . $objOneLanguage->getStrName(), "languages"); } $strReturn .= $this->objToolkit->formInputDropdown("languageset_language", $arrDropdown, $this->getLang("commons_language_field")); $strReturn .= $this->objToolkit->formInputHidden("systemid", $this->getSystemid()); $strReturn .= $this->objToolkit->formInputSubmit($this->getLang("commons_save")); $strReturn .= $this->objToolkit->formClose(); } else { $objLanguage = new class_module_languages_language($objLanguageset->getLanguageidForSystemid($this->getSystemid())); $strReturn .= $this->objToolkit->formHeadline($this->getLang("languageset_addtolanguage")); $strReturn .= $this->objToolkit->formTextRow($this->getLang("languageset_currentlanguage")); $strReturn .= $this->objToolkit->formTextRow($this->getLang("lang_" . $objLanguage->getStrName(), "languages")); $strReturn .= $this->objToolkit->formHeadline($this->getLang("languageset_maintainlanguages")); $arrLanguages = class_module_languages_language::getObjectList(); $strReturn .= $this->objToolkit->listHeader(); $intI = 0; $intNrOfUnassigned = 0; $arrMaintainedLanguages = array(); foreach ($arrLanguages as $objOneLanguage) { $strNewsid = $objLanguageset->getSystemidForLanguageid($objOneLanguage->getSystemid()); $strActions = ""; if ($strNewsid != null) { $arrMaintainedLanguages[] = $objOneLanguage->getSystemid(); $objNews = new class_module_news_news($strNewsid); $strNewsName = $objNews->getStrTitle(); $strActions .= $this->objToolkit->listButton(class_link::getLinkAdmin($this->getArrModule("modul"), "removeFromLanguageset", "&systemid=" . $objNews->getSystemid(), "", $this->getLang("languageset_remove"), "icon_delete")); $strReturn .= $this->objToolkit->genericAdminList($objOneLanguage->getSystemid(), $this->getLang("lang_" . $objOneLanguage->getStrName(), "languages") . ": " . $strNewsName, getImageAdmin("icon_language"), $strActions, $intI++); } else { $intNrOfUnassigned++; $strReturn .= $this->objToolkit->genericAdminList($objOneLanguage->getSystemid(), $this->getLang("lang_" . $objOneLanguage->getStrName(), "languages") . ": " . $this->getLang("languageset_news_na"), getImageAdmin("icon_language"), $strActions, $intI++); } } $strReturn .= $this->objToolkit->listFooter(); //provide a form to add further news-items if ($intNrOfUnassigned > 0) { $strReturn .= $this->objToolkit->formHeadline($this->getLang("languageset_addnewstolanguage")); $strReturn .= $this->objToolkit->formHeader(class_link::getLinkAdminHref($this->getArrModule("modul"), "addNewsToLanguageset")); $arrLanguages = class_module_languages_language::getObjectList(); $arrDropdown = array(); foreach ($arrLanguages as $objOneLanguage) { if (!in_array($objOneLanguage->getSystemid(), $arrMaintainedLanguages)) { $arrDropdown[$objOneLanguage->getSystemid()] = $this->getLang("lang_" . $objOneLanguage->getStrName(), "languages"); } } $strReturn .= $this->objToolkit->formInputDropdown("languageset_language", $arrDropdown, $this->getLang("commons_language_field")); $arrNews = class_module_news_news::getObjectList(); $arrDropdown = array(); foreach ($arrNews as $objOneNews) { if (class_module_languages_languageset::getLanguagesetForSystemid($objOneNews->getSystemid()) == null) { $arrDropdown[$objOneNews->getSystemid()] = $objOneNews->getStrTitle(); } } $strReturn .= $this->objToolkit->formInputDropdown("languageset_news", $arrDropdown, $this->getLang("languageset_news")); $strReturn .= $this->objToolkit->formInputHidden("systemid", $this->getSystemid()); $strReturn .= $this->objToolkit->formInputSubmit($this->getLang("commons_save")); $strReturn .= $this->objToolkit->formClose(); } } } else { $strReturn .= $this->getLang("commons_error_permissions"); } return $strReturn; }
/** * saves the current object with all its params back to the database * * @return bool */ protected function updateStateToDb() { //if no other language exists, we have a new default language $arrObjLanguages = class_module_languages_language::getObjectList(); if (count($arrObjLanguages) == 0) { $this->setBitDefault(1); } if ($this->getBitDefault() == 1) { self::resetAllDefaultLanguages(); } return parent::updateStateToDb(); }