Index: trunk/core/kernel/application.php =================================================================== diff -u -r3431 -r3456 --- trunk/core/kernel/application.php (.../application.php) (revision 3431) +++ trunk/core/kernel/application.php (.../application.php) (revision 3456) @@ -884,21 +884,43 @@ } $pass = str_replace('all', trim($this->GetVar('passed'), ','), $pass); - + if(strlen($pass) > 0) { $pass_info = array_unique( explode(',',$pass) ); // array( prefix[.special], prefix[.special] ... + sort($pass_info, SORT_STRING); // to be prefix1,prefix1.special1,prefix1.special2,prefix3.specialX + + // ensure that "m" prefix is always first + $main_index = array_search('m', $pass_info); + if($main_index !== false) + { + unset($pass_info[$main_index]); + array_unshift($pass_info, 'm'); + } + $event_params = Array('t' => $t, 'pass_events' => $pass_events); - foreach($pass_info as $pass_element) + + foreach($pass_info as $pass_index => $pass_element) { list($prefix) = explode('.', $pass_element); $require_rewrite = $this->findModule('Var', $prefix); if($require_rewrite) { + // if next prefix is same as current, but with special => exclude current prefix from url + $next_prefix = getArrayValue($pass_info, $pass_index + 1); + if ($next_prefix) + { + $next_prefix = substr($next_prefix, 0, strlen($prefix) + 1); + if ($prefix.'.' == $next_prefix) continue; + } + $event_params['url_params'] = $params; $event = new kEvent($pass_element.':BuildEnv', $event_params); $this->HandleEvent($event); - $ret .= '/'.trim( $event->getEventParam('env_string'), '/'); + if ($event->getEventParam('env_string')) + { + $ret .= '/'.trim( $event->getEventParam('env_string'), '/'); + } $params = $event->getEventParam('url_params'); // save back unprocessed parameters } else