Index: branches/5.3.x/core/kernel/managers/rewrite_url_processor.php =================================================================== diff -u -r16156 -r16171 --- branches/5.3.x/core/kernel/managers/rewrite_url_processor.php (.../rewrite_url_processor.php) (revision 16156) +++ branches/5.3.x/core/kernel/managers/rewrite_url_processor.php (.../rewrite_url_processor.php) (revision 16171) @@ -1,6 +1,6 @@ primaryThemeId = $this->Application->GetDefaultThemeId(true); } - $this->_initRewriteListeners(); + $this->initRouters(); } /** @@ -335,32 +333,24 @@ } /** - * Loads all registered rewrite listeners, so they could be quickly accessed later + * Loads all registered routers, so they could be quickly accessed later. * - * @access protected + * @return void */ - protected function _initRewriteListeners() + protected function initRouters() { static $init_done = false; - if ($init_done || count($this->Application->RewriteListeners) == 0) { - // not initialized OR mod-rewrite url with missing config cache - return ; + // Not initialized OR mod-rewrite url with missing config cache. + if ( $init_done || count($this->Application->routers) == 0 ) { + return; } - foreach ($this->Application->RewriteListeners as $prefix => $listener_data) { - foreach ($listener_data['listener'] as $index => $rewrite_listener) { - list ($listener_prefix, $listener_method) = explode(':', $rewrite_listener); - - // don't use temp variable, since it will swap objects in Factory in PHP5 - $this->rewriteListeners[$prefix][$index] = Array (); - $this->rewriteListeners[$prefix][$index][0] = $this->Application->recallObject($listener_prefix); - $this->rewriteListeners[$prefix][$index][1] = $listener_method; - } + foreach ( $this->Application->routers as $prefix => $router_data ) { + $this->routers[$prefix] = $this->Application->makeClass($router_data['class']); } define('MOD_REWRITE_URL_ENDING', $this->Application->ConfigValue('ModRewriteUrlEnding')); - $init_done = true; } @@ -434,8 +424,8 @@ // http://site-url///[_]/ (category-based detail template) // http://site-url////[_]/ (customized url) - if ( !$this->_processRewriteListeners($url_parts, $vars) ) { - // rewrite listener wasn't able to determine template + if ( !$this->processRouters($url_parts, $vars) ) { + // Routers weren't able to determine template. $this->_parsePhysicalTemplate($url_parts, $vars); if ( ($this->modulePrefix === false) && $vars['m_cat_id'] && !$this->_partsToParse ) { @@ -517,39 +507,34 @@ } /** - * Processes url using rewrite listeners + * Processes url using routers. * * Pattern: Chain of Command * - * @param Array $url_parts - * @param Array $vars - * @return bool - * @access protected + * @param array $url_parts Url parts. + * @param array $vars Vars. + * + * @return boolean */ - protected function _processRewriteListeners(&$url_parts, &$vars) + protected function processRouters(array &$url_parts, array &$vars) { - $this->_initRewriteListeners(); + $this->initRouters(); $page_number = $this->_parsePage($url_parts, $vars); - foreach ($this->rewriteListeners as $prefix => $listeners) { - // set default page - // $vars[$prefix . '_Page'] = 1; // will override page in session in case, when none is given in url - - if ($page_number) { - // page given in url - use it + foreach ( $this->routers as $prefix => $router ) { + if ( $page_number ) { + // Page given in url - use it. $vars[$prefix . '_id'] = 0; $vars[$prefix . '_Page'] = $page_number; } - // $listeners[1] - listener, used for parsing - $listener_result = $listeners[1][0]->$listeners[1][1](REWRITE_MODE_PARSE, $prefix, $vars, $url_parts); - if ($listener_result === false) { - // will not proceed to other methods + if ( $router->parse($url_parts, $vars) === false ) { + // Will not proceed to other methods. return true; } } - // will proceed to other methods + // Will proceed to other methods. return false; } @@ -561,7 +546,7 @@ * @return string * @access protected * - * @todo Should find a way, how to determine what rewrite listener page is it + * @todo Should find a way, how to determine what router page is it. */ protected function _parsePage(&$url_parts, &$vars) { @@ -955,9 +940,9 @@ array_shift($pass_info); } - $inject_parts = Array (); // url parts for beginning of url - $params['t'] = $t; // make template available for rewrite listeners - $params['pass_template'] = true; // by default we keep given template in resulting url + $inject_parts = array(); // Url parts for beginning of url. + $params['t'] = $t; // Make template available for routers. + $params['pass_template'] = true; // By default we keep given template in resulting url. if ( !array_key_exists('pass_category', $params) ) { $params['pass_category'] = false; // by default we don't keep categories in url @@ -967,7 +952,7 @@ list ($prefix) = explode('.', $pass_element); $catalog_item = $this->Application->findModule('Var', $prefix) && $this->Application->getUnitConfig($prefix)->getCatalogItem(); - if ( array_key_exists($prefix, $this->rewriteListeners) ) { + if ( array_key_exists($prefix, $this->routers) ) { // if next prefix is same as current, but with special => exclude current prefix from url $next_prefix = array_key_exists($pass_index + 1, $pass_info) ? $pass_info[$pass_index + 1] : false; if ( $next_prefix ) { @@ -989,7 +974,7 @@ } } elseif ( is_array($url_part) ) { - // rewrite listener want to insert something at the beginning of url too + // Router want to insert something at the beginning of url too. if ( $url_part[0] ) { $inject_parts[] = $url_part[0]; } @@ -1004,7 +989,7 @@ } } elseif ( $url_part === false ) { - // rewrite listener decided not to rewrite given $pass_element + // Router decided not to rewrite given $pass_element. $env .= ':' . $this->manager->plain->BuildModuleEnv($pass_element, $params, $pass_events); } } @@ -1023,7 +1008,7 @@ $ret = $this->BuildModuleEnv('m', $params, $pass_events) . '/' . $ret; $cat_processed = array_key_exists('category_processed', $params) && $params['category_processed']; - // remove temporary parameters used by listeners + // Remove temporary parameters used by routers. unset($params['t'], $params['inject_parts'], $params['pass_template'], $params['pass_category'], $params['category_processed']); $ret = trim($ret, '/'); @@ -1070,11 +1055,6 @@ { list ($prefix) = explode('.', $prefix_special); - $url_parts = Array (); - $listener = $this->rewriteListeners[$prefix][0]; - - $ret = $listener[0]->$listener[1](REWRITE_MODE_BUILD, $prefix_special, $params, $url_parts, $pass_events); - - return $ret; + return $this->routers[$prefix]->buildWrapper($prefix_special, $params, $pass_events); } }