} //check for view rights for user if (!$cms_user->hasPageClearance($cms_page->getID(), CLEARANCE_PAGE_VIEW)) { CMS_grandFather::raiseError('Error, user has no rights on page : ' . $cms_page->getID()); $view->show(); } $pageId = $cms_page->getID(); $pageTitle = sensitiveIO::sanitizeJSString($cms_page->getTitle(true)); $onClick = base64_encode("\n\tthis.node.select();\n"); //Page templates replacement $pageTemplate = $cms_page->getTemplate(); //hack if page has no valid template attached if (!is_a($pageTemplate, "CMS_pageTemplate")) { $pageTemplate = new CMS_pageTemplate(); } $pageTplId = CMS_pageTemplatesCatalog::getTemplateIDForCloneID($pageTemplate->getID()); $pageTplLabel = sensitiveIO::sanitizeJSString($pageTemplate->getLabel()); $jscontent = <<<END \tvar copyPageWindow = Ext.getCmp('{$winId}'); \t//if we are in a window context \t \t//set window title \tcopyPageWindow.setTitle('{$cms_language->getJsMessage(MESSAGE_PAGE_COPY)} \\'{$pageTitle}\\''); \t//set help button on top of page \tcopyPageWindow.tools['help'].show(); \t//add a tooltip on button \tvar pageTip = new Ext.ToolTip({ \t\ttarget: \t\tcopyPageWindow.tools['help'], \t\ttitle: \t\t\t'{$cms_language->getJsMessage(MESSAGE_TOOLBAR_HELP)}', \t\thtml: \t\t\t'{$cms_language->getJsMessage(MESSAGE_PAGE_COPY_INFO)}', \t\tdismissDelay:\t0
$cms_message = $cms_language->getMessage(MESSAGE_ACTION_OPERATION_DONE); } else { $cms_message .= $cms_language->getMessage(MESSAGE_FORM_ERROR_WRITING); $cms_page->raiseError('Error during writing of page ' . $cms_page->getID() . '. Action : update pageContent'); } } //Page template update $tpl_original = $cms_page->getTemplate(); //first check if page template is updated if (sensitiveIO::isPositiveInteger($template) && CMS_pageTemplatesCatalog::getTemplateIDForCloneID($tpl_original->getID()) != $template) { //hack if page has no valid template attached if (!is_a($tpl_original, "CMS_pageTemplate")) { $tpl_original = new CMS_pageTemplate(); } $tpl = new CMS_pageTemplate($template); $tpl_copy = CMS_pageTemplatesCatalog::getCloneFromID($tpl->getID(), false, true, false, $tpl_original->getID()); $cms_page->setTemplate($tpl_copy->getID()); //destroy old template only if it's a copy if ($tpl_original->isPrivate()) { $tpl_original->destroy(); } //save the page data if (!$cms_page->writeToPersistence()) { $cms_message = $cms_language->getMessage(MESSAGE_FORM_ERROR_WRITING); $cms_page->raiseError('Error during writing of page ' . $cms_page->getID() . '. Action : update template. New template set : ' . $template); } else { $cms_page->regenerate(true); $jscontent = ' Automne.tabPanels.getActiveTab().reload(); '; $view->addJavascript($jscontent);
//XML definition file if ($definitionfile && io::strpos($definitionfile, PATH_UPLOAD_WR . '/') !== false) { //read uploaded file $definitionfile = new CMS_file($definitionfile, CMS_file::WEBROOT); $template->setDebug(false); $template->setLog(false); $error = $template->setDefinition($definitionfile->readContent()); if ($error !== true) { $cms_message = $cms_language->getMessage(MESSAGE_PAGE_MALFORMED_DEFINITION_FILE) . "\n\n" . $error; } } if (!$cms_message && !$template->hasError()) { if ($template->writeToPersistence()) { $log = new CMS_log(); $log->logMiscAction(CMS_log::LOG_ACTION_TEMPLATE_EDIT, $cms_user, "Template : " . $template->getLabel() . " (create template)"); $content = array('success' => array('templateId' => $template->getID())); $cms_message = $cms_language->getMessage(MESSAGE_ACTION_CREATION_DONE); $view->setContent($content); } else { $cms_message = $cms_language->getMessage(MESSAGE_ERROR_WRITE_TEMPLATE); } } } else { //clean template $template->destroy(true); } } break; case 'definition': //Update template definition if (isset($template) && is_a($template, "CMS_pageTemplate") && !$template->hasError()) {
/** * public static getCloneFromID * * Clones a Template, changes some attributes * and writes it to persistence (MySQL for now) * * @param anyTemplateID as the ID of Template to be cloned * @param String label receive a new label for this Template * @param boolean $setPrivate Should the template be set as a private one ? ALSO determines if the new template should point to the same file * @param boolean $dontCopyClientSpaces Should the clientspaces be copied ? * @param integer $tplFrom the original template ID to get good rows * @return a valid new CMS_pageTemplate */ static function getCloneFromID($templateID = 0, $label = false, $setPrivate = false, $dontCopyClientSpaces = false, $tplFrom = false) { $ret = false; $model = new CMS_pageTemplate($templateID); if ($model->getID() > 0) { //New blank one $tpl = new CMS_pageTemplate(); //First write a new object to get it's ID $tpl->writeToPersistence(); //Setting label $label = $label ? $label : $model->getLabel(); $tpl->setLabel($label); //Copying template definition file (if not private template) if ($setPrivate) { $filename = $model->getDefinitionFile(); } else { $filename = "pt" . $tpl->getID() . "_" . SensitiveIO::sanitizeAsciiString($tpl->getLabel()) . ".xml"; } if ($setPrivate || CMS_file::copyTo(PATH_TEMPLATES_FS . "/" . $model->getDefinitionFile(), PATH_TEMPLATES_FS . "/" . $filename)) { $tpl->setDefinitionFile($filename); //Copying groupsStack from database foreach ($model->getGroups() as $grp) { $tpl->addGroup($grp); } //Copying image file from model to a new one if ($setPrivate) { $tpl->setImage($model->getImage()); } else { if ($model->getImage()) { $ext = io::substr($model->getImage(), strrpos($model->getImage(), ".")); $imagefilename = "pt" . $tpl->getID() . "_" . SensitiveIO::sanitizeAsciiString($tpl->getLabel()) . $ext; if (CMS_file::copyTo(PATH_TEMPLATES_IMAGES_FS . "/" . $model->getImage(), PATH_TEMPLATES_IMAGES_FS . "/" . $imagefilename)) { $tpl->setImage($imagefilename); } } else { $tpl->setImage(); } } //set private if asked to. if ($setPrivate) { $tpl->setPrivate(true); } //copy description $tpl->setDescription($model->getDescription()); //websites denied $websitesDenied = $model->getWebsitesDenied(); foreach ($websitesDenied as $websiteId) { if (CMS_websitesCatalog::exists($websiteId)) { //to check if website still exists $tpl->denyWebsite($websiteId); } } //Copy printing definition $tpl->setPrintingClientSpaces($model->getPrintingClientSpaces()); //Partial update for groups and image $tpl->writeToPersistence(); //Copying template clientspaces rows definitions if (!$dontCopyClientSpaces) { $suffixes = array('archived', 'deleted', 'edited', 'edition', 'public'); foreach ($suffixes as $suffix) { if ($tplFrom) { $sql = "\n\t\t\t\t\t\t\t\tselect\n\t\t\t\t\t\t\t\t\t*\n\t\t\t\t\t\t\t\tfrom\n\t\t\t\t\t\t\t\t\t`mod_standard_clientSpaces_" . $suffix . "`\n\t\t\t\t\t\t\t\twhere\n\t\t\t\t\t\t\t\t\t`template_cs`='" . $tplFrom . "'\n\t\t\t\t\t\t\t"; } else { $sql = "\n\t\t\t\t\t\t\t\tselect\n\t\t\t\t\t\t\t\t\t*\n\t\t\t\t\t\t\t\tfrom\n\t\t\t\t\t\t\t\t\t`mod_standard_clientSpaces_" . $suffix . "`\n\t\t\t\t\t\t\t\twhere\n\t\t\t\t\t\t\t\t\t`template_cs`='" . $model->getID() . "'\n\t\t\t\t\t\t\t"; } $q = new CMS_query($sql); while ($arr = $q->getArray()) { $sql1 = "\n\t\t\t\t\t\t\t\tinsert into\n\t\t\t\t\t\t\t\t\t`mod_standard_clientSpaces_" . $suffix . "`\n\t\t\t\t\t\t\t\tset\n\t\t\t\t\t\t\t\t\t`template_cs`='" . $tpl->getID() . "',\n\t\t\t\t\t\t\t\t\t`tagID_cs`='" . SensitiveIO::sanitizeSQLString($arr["tagID_cs"]) . "',\n\t\t\t\t\t\t\t\t\t`rowsDefinition_cs`='" . SensitiveIO::sanitizeSQLString($arr["rowsDefinition_cs"]) . "',\n\t\t\t\t\t\t\t\t\t`type_cs`='" . $arr["type_cs"] . "',\n\t\t\t\t\t\t\t\t\t`order_cs`='" . $arr["order_cs"] . "'\n\t\t\t\t\t\t\t"; $q1 = new CMS_query($sql1); unset($q1); } unset($q); } } //CMS_Template to return $ret = $tpl; } unset($model); } if ($tpl) { //Clean if any error when out if (!$ret) { $tpl->destroy(); } unset($tpl); } return $ret; }