/** * Resolves cmd. If it's a node placeholder, search is limited to the node's * branch * @param \Cx\Core\ContentManager\Model\Entity\Page $page Current page */ public function __construct($page = null) { if (!$page) { $page = \Cx\Core\Core\Controller\Cx::instanciate()->getPage(); } if (!empty($page->getCmd())) { // Try to resolve node placeholder try { $nodePlaceholder = \Cx\Core\Routing\NodePlaceholder::fromPlaceholder($page->getCmd()); $this->rootPage = $nodePlaceholder->getPage(); } catch (\Cx\Core\Routing\NodePlaceholderException $e) { } } }
/** * Checks if the passed page or its redirect target page is broken. * * @param array $arguments * @return boolean */ public function isBroken($arguments) { if (isset($arguments['get']['pageId'])) { if (!\Env::get('em')->getRepository('Cx\\Core\\ContentManager\\Model\\Entity\\Page')->find($arguments['get']['pageId'])) { return true; } } if (isset($arguments['get']['pageRedirectPlaceholder'])) { try { if (!\Cx\Core\Routing\NodePlaceholder::fromPlaceholder($arguments['get']['pageRedirectPlaceholder'])->getPage()) { return true; } } catch (\Cx\Core\Routing\NodePlaceholderException $e) { return true; } } return false; }
/** * @todo Use param $page (to update a page without prividing an id per GET) */ function _modifyAlias($array, $page = null) { global $_ARRAYLANG, $_CONFIG; $objCx = \ContrexxJavascript::getInstance(); $objCx->setVariable(array('regExpUriProtocol' => \FWValidator::REGEX_URI_PROTO, 'contrexxPathOffset' => ASCMS_PATH_OFFSET, 'contrexxBaseUrl' => ASCMS_PROTOCOL . '://' . $_CONFIG['domainUrl'] . ASCMS_PATH_OFFSET), 'alias'); $aliasId = !empty($_REQUEST['id']) ? intval($_REQUEST['id']) : 0; // search for existing alias if (!($alias = $this->_getAlias($aliasId))) { $alias = $this->_createTemporaryAlias(); $aliasId = 0; } // handle form submit if (isset($array['alias_save'])) { if (!empty($array['alias_target']) && !empty($array['alias_target_protocol'])) { $array['alias_target'] = $array['alias_target_protocol'] . $array['alias_target']; } // set target and -type $newtype = preg_match('/\\[\\[' . \Cx\Core\ContentManager\Model\Entity\Page::NODE_URL_PCRE . '\\]\\](\\S*)?/ix', $array['alias_target']) ? 'local' : 'url'; $newtarget = !empty($array['alias_target']) ? trim(contrexx_stripslashes($array['alias_target'])) : ''; // handle existing slugs pointing to the target $aliases = array(); if (!empty($array['alias_aliases']) && is_array($array['alias_aliases'])) { $nr = 0; foreach ($array['alias_aliases'] as $sourceId => $aliasSource) { if (!empty($aliasSource)) { $aliases[intval($sourceId)] = $aliasSource; } $nr++; } } // delete removed $sources = $this->_getAliasesWithSameTarget($alias); foreach ($sources as $sourceAlias) { if (!isset($aliases[$sourceAlias->getNode()->getId()])) { // alias is no longer listet in POST: delete it $this->_delete($sourceAlias->getNode()->getId()); } } // handle enw slugs pointing to the target $newaliases = array(); if (!empty($array['alias_aliases_new']) && is_array($array['alias_aliases_new'])) { foreach ($array['alias_aliases_new'] as $id => $newAliasSource) { if (!empty($newAliasSource)) { $newaliases[] = $newAliasSource; } } } // save information if (!empty($newtarget)) { if (count($aliases) || count($newaliases)) { $error = false; if ($newtype == 'local') { $placeholder = \Cx\Core\Routing\NodePlaceholder::fromPlaceholder($newtarget); // when creating a new alias //if (($aliasId === 0) && !$placeholder->hasLang()) { // make sure language is specified in placeholder $placeholder->setLang(FRONTEND_LANG_ID); //} // force usage of node ID $newtarget = $placeholder->getPlaceholder(true); } foreach ($aliases as $id => $slug) { if (($message = $this->_saveAlias($slug, $newtarget, $newtype == 'local', $id)) !== true) { $error = true; if ($message !== false) { $this->arrStatusMsg['error'][] = $message; } else { $this->arrStatusMsg['error'][] = $aliasId ? $_ARRAYLANG['TXT_ALIAS_ALIAS_UPDATE_FAILED'] : $_ARRAYLANG['TXT_ALIAS_ALIAS_ADD_FAILED']; $this->arrStatusMsg['error'][] = $_ARRAYLANG['TXT_ALIAS_RETRY_OPERATION']; } break; } } if (!$error) { foreach ($newaliases as $id => $slug) { if (($message = $this->_saveAlias($slug, $newtarget, $newtype == 'local')) !== true) { $error = true; if ($message !== false) { $this->arrStatusMsg['error'][] = $message; } else { $this->arrStatusMsg['error'][] = $aliasId ? $_ARRAYLANG['TXT_ALIAS_ALIAS_UPDATE_FAILED'] : $_ARRAYLANG['TXT_ALIAS_ALIAS_ADD_FAILED']; $this->arrStatusMsg['error'][] = $_ARRAYLANG['TXT_ALIAS_RETRY_OPERATION']; } break; } } } if (!$error) { $this->arrStatusMsg['ok'][] = $aliasId ? $_ARRAYLANG['TXT_ALIAS_ALIAS_SUCCESSFULLY_UPDATED'] : $_ARRAYLANG['TXT_ALIAS_ALIAS_SUCCESSFULLY_ADDED']; } $_REQUEST['act'] = ''; // For the navigation return $this->_list(); } else { $this->arrStatusMsg['error'][] = $_ARRAYLANG['TXT_ALIAS_ONE_ALIAS_REQUIRED_MSG']; } } else { if ($newtype == 'local') { $this->arrStatusMsg['error'][] = $_ARRAYLANG['TXT_ALIAS_PAGE_REQUIRED_MSG']; } else { $this->arrStatusMsg['error'][] = $_ARRAYLANG['TXT_ALIAS_URL_REQUIRED_MSG']; } } } $mediaBrowser = new \Cx\Core_Modules\MediaBrowser\Model\Entity\MediaBrowser(); $mediaBrowser->setOptions(array('type' => 'button', 'data-cx-mb-views' => 'sitestructure')); $mediaBrowser->setCallback('aliasSetUrl'); // prepare template $this->_objTpl->loadTemplateFile('module_alias_modify.html'); $this->_pageTitle = $aliasId ? $_ARRAYLANG['TXT_ALIAS_MODIFY_ALIAS'] : $_ARRAYLANG['TXT_ALIAS_ADD_ALIAS']; $this->_objTpl->setVariable(array('TXT_ALIAS_TARGET_PAGE' => $_ARRAYLANG['TXT_ALIAS_TARGET_PAGE'], 'ALIAS_MEDIABROWSER_BUTTON' => $mediaBrowser->getXHtml($_ARRAYLANG['TXT_ALIAS_BROWSE']), 'TXT_ALIAS_ALIAS_ES' => $_ARRAYLANG['TXT_ALIAS_ALIAS_ES'], 'TXT_ALIAS_DELETE' => $_ARRAYLANG['TXT_ALIAS_DELETE'], 'TXT_ALIAS_CONFIRM_REMOVE_ALIAS' => $_ARRAYLANG['TXT_ALIAS_CONFIRM_REMOVE_ALIAS'], 'TXT_ALIAS_ADD_ANOTHER_ALIAS' => $_ARRAYLANG['TXT_ALIAS_ADD_ANOTHER_ALIAS'], 'TXT_ALIAS_CANCEL' => $_ARRAYLANG['TXT_ALIAS_CANCEL'], 'TXT_ALIAS_SAVE' => $_ARRAYLANG['TXT_ALIAS_SAVE'], 'TXT_ALIAS_STANDARD_RADIOBUTTON' => $_ARRAYLANG['TXT_ALIAS_STANDARD_RADIOBUTTON'], 'TXT_ALIAS_INTERNAL' => $_ARRAYLANG['TXT_INTERNAL'])); $this->_objTpl->setGlobalVariable(array('TXT_ALIAS_DELETE' => $_ARRAYLANG['TXT_ALIAS_DELETE'], 'ALIAS_DOMAIN_URL' => 'http://' . $_CONFIG['domainUrl'] . ASCMS_PATH_OFFSET . '/', 'TXT_ALIAS_STANDARD_RADIOBUTTON' => $_ARRAYLANG['TXT_ALIAS_STANDARD_RADIOBUTTON'])); $target = $alias->getTarget(); $targetURL = ''; $is_local = $this->_isLocalAliasTarget($alias); if ($is_local) { // alias points to a local webpage $targetPage = $this->_fetchTarget($alias); if ($targetPage) { preg_match('/\\[\\[' . \Cx\Core\ContentManager\Model\Entity\Page::NODE_URL_PCRE . '\\]\\](\\S*)?/ix', $target, $matches); $targetURL = ASCMS_PROTOCOL . '://' . $_CONFIG['domainUrl'] . ASCMS_PATH_OFFSET . $this->_getURL($targetPage) . $matches[6]; } } else { $targetURL = $target; } $this->_objTpl->setVariable(array('ALIAS_ID' => $aliasId, 'ALIAS_TITLE_TXT' => $this->_pageTitle, 'ALIAS_TARGET' => htmlentities($target, ENT_QUOTES, CONTREXX_CHARSET), 'ALIAS_TARGET_TEXT' => htmlentities($targetURL, ENT_QUOTES, CONTREXX_CHARSET))); $nr = 0; $sources = $this->_getAliasesWithSameTarget($alias); if (is_array($sources) && count($sources)) { foreach ($sources as $sourceAlias) { $url = $sourceAlias->getSlug(); $this->_objTpl->setVariable(array('ALIAS_DOMAIN_URL' => 'http://' . $_CONFIG['domainUrl'] . ASCMS_PATH_OFFSET . '/', 'ALIAS_ALIAS_ID' => $sourceAlias->getNode()->getId(), 'ALIAS_ALIAS_NR' => $nr++, 'ALIAS_ALIAS_PREFIX' => '', 'ALIAS_ALIAS_URL' => stripslashes(htmlentities($url, ENT_QUOTES, CONTREXX_CHARSET)))); $this->_objTpl->parse('alias_list'); } } $this->_objTpl->setVariable(array('ALIAS_DOMAIN_URL' => 'http://' . $_CONFIG['domainUrl'] . ASCMS_PATH_OFFSET . '/', 'ALIAS_ALIAS_PREFIX' => '_new')); $this->_objTpl->parse('alias_list'); }
/** * Checks if the passed page or its redirect target page is broken. * * @param array $arguments * @return boolean */ public function isBroken($arguments) { if (isset($arguments['get']['pageId'])) { if (!\Env::get('em')->getRepository('Cx\\Core\\ContentManager\\Model\\Entity\\Page')->find($arguments['get']['pageId'])) { return true; } } if (isset($arguments['get']['pageRedirectPlaceholder'])) { $filePath = \Env::get('cx')->getClassLoader()->getFilePath($arguments['get']['pageRedirectPlaceholder']); //do not break the page, if the redirection shows to a valid file if (is_file($filePath)) { return false; } try { //break the page, when the file or the placeholder does not exist if (!\Cx\Core\Routing\NodePlaceholder::fromPlaceholder($arguments['get']['pageRedirectPlaceholder'])->getPage()) { return true; } } catch (\Cx\Core\Routing\NodePlaceholderException $e) { return true; } } return false; }