/**
  *
  * Does the hard work: installs the module and registers needed constants
  *
  * @return string
  */
 public function install()
 {
     $strReturn = "";
     $strReturn .= "Assigning null-properties and elements to the default language.\n";
     if ($this->strContentLanguage == "de") {
         $strReturn .= " Target language: de\n";
         if (class_exists("class_module_pages_page", false) || class_classloader::getInstance()->loadClass("class_module_pages_page") !== false) {
             class_module_pages_page::assignNullProperties("de", true);
         }
         if (class_exists("class_module_pages_pageelement", false) || class_classloader::getInstance()->loadClass("class_module_pages_pageelement") !== false) {
             class_module_pages_pageelement::assignNullElements("de");
         }
         $objLang = new class_module_languages_language();
         $objLang->setStrAdminLanguageToWorkOn("de");
     } else {
         $strReturn .= " Target language: en\n";
         if (class_exists("class_module_pages_page", false) || class_classloader::getInstance()->loadClass("class_module_pages_page") !== false) {
             class_module_pages_page::assignNullProperties("en", true);
         }
         if (class_exists("class_module_pages_pageelement", false) || class_classloader::getInstance()->loadClass("class_module_pages_pageelement") !== false) {
             class_module_pages_pageelement::assignNullElements("en");
         }
         $objLang = new class_module_languages_language();
         $objLang->setStrAdminLanguageToWorkOn("en");
     }
     return $strReturn;
 }
 /**
  * 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;
 }
 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);
 }
 private function processSinglePage($arrPage, $bitReplaceExisting, $strTopFolderId)
 {
     $strReturn = "";
     $arrMetadata = $arrPage["metadata"][0];
     $arrElements = $arrPage["elements"][0]["element"];
     //create page itself
     $strPagename = $arrMetadata["pagename"][0]["value"];
     $strPrevId = "";
     //check if the exported prev-values may be used
     $strImportPrevName = $arrMetadata["prevname"][0]["value"];
     if ($strImportPrevName != "") {
         $objPage = class_module_pages_page::getPageByName($strImportPrevName);
         if ($objPage !== null) {
             $strPrevId = $objPage->getSystemid();
         }
     } elseif (validateSystemid($arrMetadata["previd"][0]["value"])) {
         $objRoot = class_objectfactory::getInstance()->getObject($arrMetadata["previd"][0]["value"]);
         if ($objRoot !== null) {
             $strPrevId = $arrMetadata["previd"][0]["value"];
         }
     }
     if ($strPrevId == "") {
         $strPrevId = $strTopFolderId;
     }
     //check if an existing page should be replaced
     if ($bitReplaceExisting) {
         $objPage = class_module_pages_page::getPageByName($strPagename);
         if ($objPage !== null) {
             $strPrevId = $objPage->getPrevId();
             $objPage->deleteObject();
         }
         class_carrier::getInstance()->getObjDB()->flushQueryCache();
     }
     $objPage = new class_module_pages_page();
     $objPage->setStrName($strPagename);
     $objPage->updateObjectToDb($strPrevId);
     $strPageId = $objPage->getSystemid();
     $strReturn .= "created page " . $objPage->getStrName() . "\n";
     //save propertysets
     $objLanguages = new class_module_languages_language();
     $strCurrentLanguage = $objLanguages->getStrAdminLanguageToWorkOn();
     $arrPropertysets = $arrMetadata["pageproperties"][0]["propertyset"];
     foreach ($arrPropertysets as $arrOnePropSet) {
         class_carrier::getInstance()->getObjDB()->flushQueryCache();
         $objLanguages->setStrAdminLanguageToWorkOn($arrOnePropSet["attributes"]["language"]);
         //reload page to save correct prop-sets
         $objPage = new class_module_pages_page($strPageId);
         $objPage->setStrLanguage($arrOnePropSet["language"][0]["value"]);
         $objPage->setStrBrowsername($arrOnePropSet["browsername"][0]["value"]);
         $objPage->setStrDesc($arrOnePropSet["description"][0]["value"]);
         $objPage->setStrKeywords($arrOnePropSet["keywords"][0]["value"]);
         $objPage->setStrTemplate($arrOnePropSet["template"][0]["value"]);
         $objPage->setStrSeostring($arrOnePropSet["seostring"][0]["value"]);
         $objPage->setStrLanguage($arrOnePropSet["language"][0]["value"]);
         $objPage->setStrAlias($arrOnePropSet["alias"][0]["value"]);
         $objPage->setStrTarget($arrOnePropSet["target"][0]["value"]);
         $objPage->setStrPath($arrOnePropSet["path"][0]["value"]);
         $objPage->updateObjectToDb();
         $strReturn .= "saved propertyset for language " . $objPage->getStrLanguage() . "\n";
     }
     $objLanguages->setStrAdminLanguageToWorkOn($strCurrentLanguage);
     //and import each element
     foreach ($arrElements as $arrSingleElement) {
         //validate if element exists
         $strElementName = $arrSingleElement["metadata"][0]["element"][0]["value"];
         if (class_module_pages_element::getElement($strElementName) !== null) {
             $objElement = new class_module_pages_pageelement();
             $objElement->setStrPlaceholder($arrSingleElement["metadata"][0]["placeholder"][0]["value"]);
             $objElement->setStrName($arrSingleElement["metadata"][0]["name"][0]["value"]);
             $objElement->setStrElement($arrSingleElement["metadata"][0]["element"][0]["value"]);
             $objElement->setStrTitle($arrSingleElement["metadata"][0]["title"][0]["value"]);
             $objElement->setStrLanguage($arrSingleElement["metadata"][0]["language"][0]["value"]);
             $objElement->updateObjectToDb($strPageId);
             //and the foreign table
             $strTable = $arrSingleElement["foreignTable"][0]["attributes"]["table"];
             $arrValues = array();
             foreach ($arrSingleElement["foreignTable"][0]["column"] as $arrColumn) {
                 $arrValues[$arrColumn["attributes"]["name"]] = isset($arrColumn["value"]) ? $arrColumn["value"] : "";
             }
             unset($arrValues["content_id"]);
             //and build the query itself
             $strQuery = "UPDATE " . class_carrier::getInstance()->getObjDB()->encloseTableName(_dbprefix_ . $strTable) . " SET ";
             $arrInsertValues = array();
             $arrEscapes = array();
             $arrColumns = class_carrier::getInstance()->getObjDB()->getColumnsOfTable(_dbprefix_ . $strTable);
             $arrColumns = array_map(function ($arrColumn) {
                 return $arrColumn["columnName"];
             }, $arrColumns);
             foreach ($arrValues as $strColumn => $strValue) {
                 if (!in_array($strColumn, $arrColumns)) {
                     continue;
                 }
                 $strQuery .= class_carrier::getInstance()->getObjDB()->encloseColumnName($strColumn) . " = ? ,";
                 $arrInsertValues[] = $strValue;
                 $arrEscapes[] = false;
             }
             $strQuery = uniSubstr($strQuery, 0, -1);
             $strQuery .= " WHERE content_id = ?";
             $arrInsertValues[] = $objElement->getSystemid();
             class_carrier::getInstance()->getObjDB()->_pQuery($strQuery, $arrInsertValues, $arrEscapes);
             $strReturn .= "created element " . $objElement->getStrName() . "\n";
         } else {
             $strReturn .= "error: element " . $strElementName . " not existing";
         }
     }
     return $this->objToolkit->getPreformatted(array($strReturn));
 }
 /**
  * Processes an admin-request
  *
  * @param string $strModule
  * @param string $strAction
  * @param string $strLanguageParam
  *
  * @throws class_exception
  * @return string
  */
 private function processAdminRequest($strModule, $strAction, $strLanguageParam)
 {
     $strReturn = "";
     $bitLogin = false;
     //validate https status
     if (class_module_system_setting::getConfigValue("_admin_only_https_") == "true") {
         //check which headers to compare
         $strHeaderName = class_carrier::getInstance()->getObjConfig()->getConfig("https_header");
         $strHeaderValue = strtolower(class_carrier::getInstance()->getObjConfig()->getConfig("https_header_value"));
         //header itself given?
         if (!issetServer($strHeaderName)) {
             //reload to https
             if (_xmlLoader_ === true) {
                 class_response_object::getInstance()->setStrRedirectUrl(uniStrReplace("http:", "https:", _xmlpath_) . "?" . getServer("QUERY_STRING"));
             } else {
                 class_response_object::getInstance()->setStrRedirectUrl(uniStrReplace("http:", "https:", _indexpath_) . "?" . getServer("QUERY_STRING"));
             }
             class_response_object::getInstance()->sendHeaders();
             die("Reloading using https...");
         } else {
             if ($strHeaderValue != "" && $strHeaderValue != strtolower(getServer($strHeaderName))) {
                 //reload to https
                 if (_xmlLoader_ === true) {
                     class_response_object::getInstance()->setStrRedirectUrl(uniStrReplace("http:", "https:", _xmlpath_) . "?" . getServer("QUERY_STRING"));
                 } else {
                     class_response_object::getInstance()->setStrRedirectUrl(uniStrReplace("http:", "https:", _indexpath_) . "?" . getServer("QUERY_STRING"));
                 }
                 class_response_object::getInstance()->sendHeaders();
                 die("Reloading using https...");
             }
         }
     }
     //process language-param
     $objLanguage = new class_module_languages_language();
     $objLanguage->setStrAdminLanguageToWorkOn($strLanguageParam);
     //set the current backend skin. right here to do it only once.
     class_adminskin_helper::defineSkinWebpath();
     //validate login-status / process login-request
     if ($strModule != "login" && $this->objSession->isLoggedin()) {
         if ($this->objSession->isAdmin()) {
             //try to load the module
             $objModuleRequested = class_module_system_module::getModuleByName($strModule);
             if ($objModuleRequested != null) {
                 //see if there is data from a previous, failed request
                 if (class_carrier::getInstance()->getObjSession()->getSession(class_module_login_admin::SESSION_LOAD_FROM_PARAMS) === "true") {
                     foreach (class_carrier::getInstance()->getObjSession()->getSession(class_module_login_admin::SESSION_PARAMS) as $strOneKey => $strOneVal) {
                         class_carrier::getInstance()->setParam($strOneKey, $strOneVal);
                     }
                     class_carrier::getInstance()->getObjSession()->sessionUnset(class_module_login_admin::SESSION_LOAD_FROM_PARAMS);
                     class_carrier::getInstance()->getObjSession()->sessionUnset(class_module_login_admin::SESSION_PARAMS);
                 }
                 if (_xmlLoader_) {
                     if ($objModuleRequested->getStrXmlNameAdmin() != "") {
                         $strClassname = str_replace(".php", "", $objModuleRequested->getStrXmlNameAdmin());
                         $objConcreteModule = new $strClassname();
                         $strReturn = $objConcreteModule->action($strAction);
                     } else {
                         //xml-loader not defined, try to use the regular dispatcher
                         $objConcreteModule = $objModuleRequested->getAdminInstanceOfConcreteModule();
                         $strReturn = $objConcreteModule->action($strAction);
                     }
                 } else {
                     //fill the history array to track actions
                     $objHistory = new class_history();
                     //Writing to the history
                     if (class_carrier::getInstance()->getParam("folderview") == "") {
                         $objHistory->setAdminHistory();
                     }
                     $objConcreteModule = $objModuleRequested->getAdminInstanceOfConcreteModule();
                     if (class_carrier::getInstance()->getParam("blockAction") != "1") {
                         $objConcreteModule->action();
                         $strReturn = $objConcreteModule->getModuleOutput();
                     }
                     //React, if admin was opened by the portaleditor
                     if (class_carrier::getInstance()->getParam("peClose") == "1") {
                         if (getGet("peRefreshPage") != "") {
                             $strReturn = "<html><head></head><body onload=\"parent.location = '" . urldecode(getGet("peRefreshPage")) . "';\"></body></html>";
                         } else {
                             $strReturn = "<html><head></head><body onload=\"parent.location.reload();\"></body></html>";
                         }
                     }
                 }
             } else {
                 throw new class_exception("Requested module " . $strModule . " not existing", class_exception::$level_FATALERROR);
             }
         } else {
             throw new class_exception("Sorry, but you don't have the needed permissions to access the admin-area", class_exception::$level_FATALERROR);
         }
     } else {
         $bitLogin = true;
         if ($strModule != "login") {
             $strAction = "";
         }
     }
     if ($bitLogin) {
         if (_xmlLoader_) {
             $objLogin = new class_module_login_admin_xml();
             $strReturn = $objLogin->action($strAction);
         } else {
             if (count(class_carrier::getInstance()->getObjDB()->getTables()) == 0 && file_exists(_realpath_ . "/installer.php")) {
                 class_response_object::getInstance()->setStrRedirectUrl(_webpath_ . "/installer.php");
                 return "";
             }
             $objLogin = new class_module_login_admin();
             $objLogin->action($strAction);
             $strReturn = $objLogin->getModuleOutput();
         }
     }
     return $strReturn;
 }