Example #1
0
 /**
  * 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) {
         }
     }
 }
Example #2
0
 /**
  * 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;
 }
Example #3
0
 /**
  * @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');
 }
Example #4
0
 /**
  * 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;
 }