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); }
/** * 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; }
public function testCopyPage() { $strTitle = generateSystemid(); $objPage = new class_module_pages_page(); $objPage->setStrName($strTitle); $objPage->setStrBrowsername(generateSystemid()); $objPage->setStrSeostring(generateSystemid()); $objPage->setStrDesc(generateSystemid()); $objPage->setStrTemplate("standard.tpl"); $objPage->updateObjectToDb(); $strOldSystemid = $objPage->getSystemid(); $objPagelement = new class_module_pages_pageelement(); $objPagelement->setStrPlaceholder("text_paragraph"); $objPagelement->setStrName("text"); $objPagelement->setStrElement("paragraph"); $objPagelement->updateObjectToDb($objPage->getSystemid()); $objPagelement = new class_module_pages_pageelement($objPagelement->getSystemid()); //and finally create the object /** @var $objElement class_element_paragraph_admin */ $objElement = $objPagelement->getConcreteAdminInstance(); $objElement->setStrTitle("autotest"); $objElement->doBeforeSaveToDb(); $objElement->updateForeignElement(); $objElement->doAfterSaveToDb(); //copy the page itself $objPage->copyObject(); $strNewSystemid = $objPage->getSystemid(); $this->flushDBCache(); $objOldPage = new class_module_pages_page($strOldSystemid); $objNewPage = new class_module_pages_page($strNewSystemid); $this->assertNotEquals($objOldPage->getStrName(), $objNewPage->getStrName()); $this->assertEquals($objOldPage->getStrBrowsername(), $objNewPage->getStrBrowsername()); $this->assertEquals($objOldPage->getStrSeostring(), $objNewPage->getStrSeostring()); $this->assertEquals($objOldPage->getStrDesc(), $objNewPage->getStrDesc()); $this->assertEquals($objOldPage->getStrTemplate(), $objNewPage->getStrTemplate()); $arrOldElements = class_module_pages_pageelement::getAllElementsOnPage($strOldSystemid); $arrNewElements = class_module_pages_pageelement::getAllElementsOnPage($strNewSystemid); $this->assertEquals(count($arrOldElements), count($arrNewElements)); $this->assertEquals(1, count($arrOldElements)); $this->assertEquals(1, count($arrNewElements)); $objOldElement = $arrOldElements[0]; $objNewElement = $arrNewElements[0]; $this->assertEquals($objOldElement->getStrPlaceholder(), $objNewElement->getStrPlaceholder()); $this->assertEquals($objOldElement->getStrLanguage(), $objNewElement->getStrLanguage()); $this->assertEquals($objOldElement->getStrElement(), $objNewElement->getStrElement()); /** @var class_element_paragraph_admin $objOldElementInstance */ $objOldElementInstance = $objOldElement->getConcreteAdminInstance(); $arrOldElementData = $objOldElementInstance->loadElementData(); /** @var class_element_paragraph_admin $objNewElementInstance */ $objNewElementInstance = $objNewElement->getConcreteAdminInstance(); $arrNewElementData = $objNewElementInstance->loadElementData(); $this->assertNotEquals($arrOldElementData["content_id"], $arrNewElementData["content_id"]); $this->assertEquals($arrOldElementData["paragraph_title"], $arrNewElementData["paragraph_title"]); $this->assertEquals($objOldElementInstance->getStrTitle(), $objNewElementInstance->getStrTitle()); $this->assertEquals($objOldElementInstance->getStrTitle(), "autotest"); $this->assertEquals($objNewElementInstance->getStrTitle(), "autotest"); $objNewPage->deleteObjectFromDatabase(); $objOldPage->deleteObjectFromDatabase(); }
/** * @param $bitAlias * @param class_module_pages_page $objPage * @param $strMode * * @return class_admin_formgenerator */ private function getPageForm($bitAlias, class_module_pages_page $objPage, $strMode) { //Load all the Templates available $arrTemplates = class_resourceloader::getInstance()->getTemplatesInFolder("/module_pages"); $arrTemplatesDD = array(); if (count($arrTemplates) > 0) { foreach ($arrTemplates as $strTemplate) { $arrTemplatesDD[$strTemplate] = $strTemplate; } } //remove template of master-page when editing a regular page $objMasterPage = class_module_pages_page::getPageByName("master"); if ($objMasterPage != null && ($objPage->getSystemid() == "" || $objMasterPage->getSystemid() != $objPage->getSystemid())) { unset($arrTemplatesDD[$objMasterPage->getStrTemplate()]); } $strPagesBrowser = class_link::getLinkAdminDialog("pages", "pagesFolderBrowser", "&form_element=page_folder_name&pages=1&elements=false&folder=1&pagealiases=1", $this->getLang("commons_open_browser"), $this->getLang("commons_open_browser"), "icon_externalBrowser", $this->getLang("commons_open_browser")); $objForm = new class_admin_formgenerator("page", $objPage); if ($bitAlias) { $objForm->addField(new class_formentry_hidden("page", "name"))->setStrValue(generateSystemid())->setStrLabel($this->getLang("name")); } else { $objForm->addDynamicField("strName")->setStrLabel($this->getLang("name")); } $objForm->addDynamicField("browsername")->setStrLabel($this->getLang("browsername")); if (!$bitAlias) { $objForm->addDynamicField("strSeostring")->setStrLabel($this->getLang("seostring")); $objForm->addDynamicField("strDescription")->setStrLabel($this->getLang("commons_description")); $objForm->addDynamicField("strKeywords")->setStrLabel($this->getLang("keywords")); } $strParentId = $objPage->getPrevId(); if (!validateSystemid($strParentId) && $strMode == "new") { $strParentId = $this->getSystemid(); } $strFolderId = $this->getParam("page_folder_name_id"); $strFolderName = $this->getParam("page_folder_name"); if (!validateSystemid($strFolderId) && validateSystemid($strParentId)) { $objParent = class_objectfactory::getInstance()->getObject($strParentId); $strFolderId = $objParent->getSystemid(); if ($objParent->getSystemid() != $this->getObjModule()->getSystemid()) { $strFolderName = $objParent->getStrDisplayName(); } } $objForm->addField(new class_formentry_text("page", "folder_name"))->setStrValue($strFolderName)->setBitReadonly(true)->setStrOpener($strPagesBrowser)->setStrLabel($this->getLang("page_folder_name")); $objForm->addField(new class_formentry_hidden("page", "folder_name_id"))->setStrValue($strFolderId); if (!$bitAlias) { /** @var $objField class_formentry_base */ $objField = $objForm->addDynamicField("strTemplate")->setArrKeyValues($arrTemplatesDD)->setStrLabel($this->getLang("template")); if ($strMode == "edit" && $objPage->getStrTemplate() == "") { $objField->setStrHint($this->getLang("templateNotSelectedBefore")); } $bitReadonly = false; if (class_module_system_setting::getConfigValue("_pages_templatechange_") == "false") { if ($this->getAction() == "newPage" || $this->getParam("mode") == "new") { $bitReadonly = false; } else { if ($objPage->getNumberOfElementsOnPage() != 0) { $bitReadonly = true; } } } $objField->setBitReadonly($bitReadonly); if ($strMode == "new" && $this->getParam("page_template") == "") { $objField->setStrValue(class_module_system_setting::getConfigValue("_pages_defaulttemplate_")); } } else { $objForm->addDynamicField("strAlias")->setStrHint($this->getLang("page_alias_hint"))->setBitMandatory(true)->setStrLabel($this->getLang("page_alias")); $objForm->addDynamicField("strTarget")->setStrLabel($this->getLang("page_target")); } $objForm->addField(new class_formentry_hidden("", "mode"))->setStrValue($strMode); return $objForm; }