public function setUp() { //creating a new page-node structure $objFolder = new class_module_pages_folder(); $objFolder->setStrName("naviautotest"); $objFolder->updateObjectToDb(); self::$strFolderSystemid = $objFolder->getSystemid(); $objPage1 = new class_module_pages_page(); $objPage1->setStrName("testpage1"); $objPage1->setStrBrowsername("testpage1"); $objPage1->setIntType(class_module_pages_page::$INT_TYPE_PAGE); $objPage1->setStrTemplate("standard.tpl"); $objPage1->updateObjectToDb($objFolder->getSystemid()); self::$strPage1Systemid = $objPage1->getSystemid(); $objPagelement = new class_module_pages_pageelement(); $objPagelement->setStrPlaceholder("headline_row"); $objPagelement->setStrName("headline"); $objPagelement->setStrElement("row"); $objPagelement->setStrLanguage($objPage1->getStrAdminLanguageToWorkOn()); $objPagelement->updateObjectToDb($objPage1->getSystemid()); $objPage2 = new class_module_pages_page(); $objPage2->setStrName("testpage2"); $objPage2->setStrBrowsername("testpage2"); $objPage2->setIntType(class_module_pages_page::$INT_TYPE_ALIAS); $objPage2->setStrAlias("testpage2a"); $objPage2->updateObjectToDb($objFolder->getSystemid()); self::$strPage2Systemid = $objPage2->getSystemid(); $objPagelement = new class_module_pages_pageelement(); $objPagelement->setStrPlaceholder("headline_row"); $objPagelement->setStrName("headline"); $objPagelement->setStrElement("row"); $objPagelement->setStrLanguage($objPage2->getStrAdminLanguageToWorkOn()); $objPagelement->updateObjectToDb($objPage2->getSystemid()); $objPage3 = new class_module_pages_page(); $objPage3->setStrName("testpage2a"); $objPage3->setStrBrowsername("testpage2a"); $objPage3->setIntType(class_module_pages_page::$INT_TYPE_PAGE); $objPage3->setStrTemplate("standard.tpl"); $objPage3->updateObjectToDb($objPage2->getSystemid()); self::$strPage2aSystemid = $objPage3->getSystemid(); $objPagelement = new class_module_pages_pageelement(); $objPagelement->setStrPlaceholder("headline_row"); $objPagelement->setStrName("headline"); $objPagelement->setStrElement("row"); $objPagelement->setStrLanguage($objPage3->getStrAdminLanguageToWorkOn()); $objPagelement->updateObjectToDb($objPage3->getSystemid()); class_carrier::getInstance()->getObjDB()->flushQueryCache(); parent::setUp(); }
public function testPageElementDeleteSortingMultiLanguage() { $objPage = new class_module_pages_page(); $objPage->setStrName("sortTest"); $objPage->updateObjectToDb(); $objPagelementb1 = new class_module_pages_pageelement(); $objPagelementb1->setStrPlaceholder("b_test"); $objPagelementb1->setStrName("b"); $objPagelementb1->setStrElement("row"); $objPagelementb1->setStrLanguage("a1"); $objPagelementb1->updateObjectToDb($objPage->getSystemid()); $objPagelementc1 = new class_module_pages_pageelement(); $objPagelementc1->setStrPlaceholder("b_test"); $objPagelementc1->setStrName("b"); $objPagelementc1->setStrElement("row"); $objPagelementc1->setStrLanguage("a2"); $objPagelementc1->updateObjectToDb($objPage->getSystemid()); $objPagelementb2 = new class_module_pages_pageelement(); $objPagelementb2->setStrPlaceholder("b_test"); $objPagelementb2->setStrName("b"); $objPagelementb2->setStrElement("row"); $objPagelementb2->setStrLanguage("a1"); $objPagelementb2->updateObjectToDb($objPage->getSystemid()); $objPagelementb3 = new class_module_pages_pageelement(); $objPagelementb3->setStrPlaceholder("b_test"); $objPagelementb3->setStrName("b"); $objPagelementb3->setStrElement("row"); $objPagelementb3->setStrLanguage("a1"); $objPagelementb3->updateObjectToDb($objPage->getSystemid()); $objPagelementc2 = new class_module_pages_pageelement(); $objPagelementc2->setStrPlaceholder("b_test"); $objPagelementc2->setStrName("b"); $objPagelementc2->setStrElement("row"); $objPagelementc2->setStrLanguage("a2"); $objPagelementc2->updateObjectToDb($objPage->getSystemid()); $objPagelementc3 = new class_module_pages_pageelement(); $objPagelementc3->setStrPlaceholder("b_test"); $objPagelementc3->setStrName("b"); $objPagelementc3->setStrElement("row"); $objPagelementc3->setStrLanguage("a2"); $objPagelementc3->updateObjectToDb($objPage->getSystemid()); $arrElements = class_module_pages_pageelement::getElementsByPlaceholderAndPage($objPage->getSystemid(), "b_test", "a1", false); $this->assertEquals(3, count($arrElements)); $this->assertEquals(1, $arrElements[0]->getIntSort()); $this->assertEquals($objPagelementb1->getSystemid(), $arrElements[0]->getSystemid()); $this->assertEquals(2, $arrElements[1]->getIntSort()); $this->assertEquals($objPagelementb2->getSystemid(), $arrElements[1]->getSystemid()); $this->assertEquals(3, $arrElements[2]->getIntSort()); $this->assertEquals($objPagelementb3->getSystemid(), $arrElements[2]->getSystemid()); $arrElements = class_module_pages_pageelement::getElementsByPlaceholderAndPage($objPage->getSystemid(), "b_test", "a2", false); $this->assertEquals(3, count($arrElements)); $this->assertEquals(1, $arrElements[0]->getIntSort()); $this->assertEquals($objPagelementc1->getSystemid(), $arrElements[0]->getSystemid()); $this->assertEquals(2, $arrElements[1]->getIntSort()); $this->assertEquals($objPagelementc2->getSystemid(), $arrElements[1]->getSystemid()); $this->assertEquals(3, $arrElements[2]->getIntSort()); $this->assertEquals($objPagelementc3->getSystemid(), $arrElements[2]->getSystemid()); $objPagelementb2->deleteObjectFromDatabase(); $this->flushDBCache(); $arrElements = class_module_pages_pageelement::getElementsByPlaceholderAndPage($objPage->getSystemid(), "b_test", "a1", false); $this->assertEquals(2, count($arrElements)); $this->assertEquals(1, $arrElements[0]->getIntSort()); $this->assertEquals($objPagelementb1->getSystemid(), $arrElements[0]->getSystemid()); $this->assertEquals(2, $arrElements[1]->getIntSort()); $this->assertEquals($objPagelementb3->getSystemid(), $arrElements[1]->getSystemid()); $arrElements = class_module_pages_pageelement::getElementsByPlaceholderAndPage($objPage->getSystemid(), "b_test", "a2", false); $this->assertEquals(3, count($arrElements)); $this->assertEquals(1, $arrElements[0]->getIntSort()); $this->assertEquals($objPagelementc1->getSystemid(), $arrElements[0]->getSystemid()); $this->assertEquals(2, $arrElements[1]->getIntSort()); $this->assertEquals($objPagelementc2->getSystemid(), $arrElements[1]->getSystemid()); $this->assertEquals(3, $arrElements[2]->getIntSort()); $this->assertEquals($objPagelementc3->getSystemid(), $arrElements[2]->getSystemid()); $objPage->deleteObjectFromDatabase(); }
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)); }
/** * Saves the passed Element to the database (edit or new modes) * * @throws class_exception * @return string "" in case of success */ protected function actionSaveElement() { $strReturn = ""; //There are two modes - edit and new //The element itself just knows the edit mode, so in case of new, we have to create a dummy element - before //passing control to the element if ($this->getParam("mode") == "new") { //Using the passed placeholder-param to load the element and get the table $strPlaceholder = $this->getParam("placeholder"); //Split up the placeholder $arrPlaceholder = explode("_", $strPlaceholder); $strPlaceholderName = $arrPlaceholder[0]; $strPlaceholderElement = $this->getParam("element"); //Now, load all infos about the requested element $objElement = class_module_pages_element::getElement($strPlaceholderElement); //Load the class to create an object $strElementClass = str_replace(".php", "", $objElement->getStrClassAdmin()); //and finally create the object /** @var class_element_admin $objElement */ $objElement = new $strElementClass(); //really continue? try to validate the passed data. if ($objElement->getAdminForm() !== null && !$objElement->getAdminForm()->validateForm()) { class_carrier::getInstance()->setParam("peClose", ""); $strReturn .= $this->actionNew(true); return $strReturn; } else { if (!$objElement->validateForm()) { class_carrier::getInstance()->setParam("peClose", ""); $strReturn .= $this->actionNew(true); return $strReturn; } } //So, lets do the magic - create the records $objPageElement = new class_module_pages_pageelement(); $objPageElement->setStrName($strPlaceholderName); $objPageElement->setStrPlaceholder($strPlaceholder); $objPageElement->setStrElement($strPlaceholderElement); $objPageElement->setStrLanguage($this->getParam("page_element_ph_language")); if (!$objPageElement->updateObjectToDb($this->getSystemid())) { throw new class_exception("Error saving new element-object to db", class_exception::$level_ERROR); } $strElementSystemId = $objPageElement->getSystemid(); $objLockmanager = new class_lockmanager($strElementSystemId); $objLockmanager->lockRecord(); //To have the element working as expected, set the systemid $this->setSystemid($strElementSystemId); } // ************************************* Edit the current Element ******************************* //check, if the element isn't locked $objCommons = new class_module_system_common($this->getSystemid()); $strPageSystemid = $objCommons->getPrevId(); $objLockmanager = new class_lockmanager($this->getSystemid()); if ($objLockmanager->isLockedByCurrentUser()) { //Load the data of the current element $objElementData = new class_module_pages_pageelement($this->getSystemid()); /** @var $objElement class_element_admin */ $objElement = $objElementData->getConcreteAdminInstance(); //really continue? try to validate the passed data. if ($objElement->getAdminForm() !== null && !$objElement->getAdminForm()->validateForm()) { class_carrier::getInstance()->setParam("peClose", ""); $strReturn .= $this->actionEdit(true); return $strReturn; } else { if (!$objElement->validateForm()) { class_carrier::getInstance()->setParam("peClose", ""); $strReturn .= $this->actionEdit(true); return $strReturn; } } //pass the data to the element, maybe the element wants to update some data $objElement->setArrParamData($this->getAllParams()); if ($objElement->getAdminForm() !== null) { $objElement->getAdminForm()->updateSourceObject(); } $objElement->doBeforeSaveToDb(); //check, if we could save the data, so the element needn't to //woah, we are soooo great $objElement->updateForeignElement(); //Edit Date of page & unlock $objPage = class_objectfactory::getInstance()->getObject($strPageSystemid); $objPage->updateObjectToDb(); $objLockmanager->unlockRecord(); //And update the internal comment and language $objElementData->setStrTitle($this->getParam("page_element_ph_title")); $objElementData->setStrLanguage($this->getParam("page_element_ph_language")); //placeholder to update? if ($this->getParam("placeholder") != "") { $objElementData->setStrPlaceholder($this->getParam("placeholder")); } $objStartDate = new class_date("0"); $objEndDate = new class_date("0"); $objStartDate->generateDateFromParams("start", $this->getAllParams()); $objEndDate->generateDateFromParams("end", $this->getAllParams()); if ($objStartDate->getIntYear() == "0000") { $objElementData->setObjStartDate(null); } else { $objElementData->setObjStartDate($objStartDate); } if ($objEndDate->getIntYear() == "0000") { $objElementData->setObjEndDate(null); } else { $objElementData->setObjEndDate($objEndDate); } if (!$objElementData->updateObjectToDb()) { throw new class_exception("Error updating object to db", class_exception::$level_ERROR); } //allow the element to run actions after saving $objElement->doAfterSaveToDb(); //Loading the data of the corresponding site $objPage = new class_module_pages_page($strPageSystemid); $this->flushCompletePagesCache(); if ($this->getParam("peClose") == "1") { //generate the elements' output $objPortalElement = $objElementData->getConcretePortalInstance(); $strElementContent = $objPortalElement->getElementOutput(); $strContent = json_encode($strElementContent, JSON_FORCE_OBJECT); //JSON_HEX_QUOT|JSON_HEX_APOS $strReturn = <<<JS parent.KAJONA.admin.portaleditor.changeElementData('{$objElementData->getStrPlaceholder()}', '{$objElementData->getSystemid()}', {$strContent}); parent.KAJONA.admin.portaleditor.closeDialog(true); JS; class_carrier::getInstance()->setParam("peClose", null); return "<script type='text/javascript'>{$strReturn}</script>"; } $this->adminReload(class_link::getLinkAdminHref("pages_content", "list", "systemid=" . $objPage->getSystemid())); } else { $strReturn = $this->objToolkit->warningBox($this->getLang("ds_gesperrt")); } return $strReturn; }