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