/** * * 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; }