/**
  * 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;
 }
コード例 #2
0
 /**
  * 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);
 }
コード例 #3
0
 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);
 }
コード例 #4
0
 /**
  * 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;
 }
コード例 #5
0
 /**
  * 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();
         }
     }
 }
コード例 #6
0
 /**
  * @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;
 }
コード例 #7
0
 /**
  * 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();
 }