Index: branches/1.1.x/units/widgets/widgets_config.php =================================================================== diff -u -N -r13153 -r13472 --- branches/1.1.x/units/widgets/widgets_config.php (.../widgets_config.php) (revision 13153) +++ branches/1.1.x/units/widgets/widgets_config.php (.../widgets_config.php) (revision 13472) @@ -7,7 +7,7 @@ * @package Development Kit */ -defined('FULL_PATH') or die('restricted access!'); + defined('FULL_PATH') or die('restricted access!'); $config = Array( @@ -29,8 +29,12 @@ 5 => 'mode', ), - 'RewriteListener' => 'WidgetRewriteListener', + // in case, when one method does everything + 'RewriteListener' => 'WidgetRewriteListener', + // in case, when building and parsing is done by separate methods +// 'RewriteListener' => Array ('WidgetRewriteBuilder', 'WidgetRewriteParser'), + 'IDField' => 'WidgetId', 'StatusField' => Array ('Status'), Index: branches/1.1.x/units/widgets/widget_eh.php =================================================================== diff -u -N -r13093 -r13472 --- branches/1.1.x/units/widgets/widget_eh.php (.../widget_eh.php) (revision 13093) +++ branches/1.1.x/units/widgets/widget_eh.php (.../widget_eh.php) (revision 13472) @@ -180,65 +180,96 @@ function WidgetRewriteListener($rewrite_mode = REWRITE_MODE_BUILD, $prefix, &$params, &$url_parts, $keep_events = false) { if ($rewrite_mode == REWRITE_MODE_BUILD) { - if ($params['t'] == 'widgets/widget_detail') { - // this is default template for this prefix, so don't add it to resulting url - $params['pass_template'] = false; - } + return $this->WidgetRewriteBuilder($rewrite_mode, $prefix, $params, $url_parts, $keep_events); + } - $mod_rewrite_helper =& $this->Application->recallObject('ModRewriteHelper'); - /* @var $mod_rewrite_helper kModRewriteHelper */ + if ($rewrite_mode == REWRITE_MODE_PARSE) { + return $this->WidgetRewriteParser($rewrite_mode, $prefix, $params, $url_parts); + } - $processed_params = $mod_rewrite_helper->getProcessedParams($prefix, $params, $keep_events); + return true; + } - if ($processed_params === false) { - return ''; - } + /** + * Builds/parses widget part of url + * + * @param int $rewrite_mode Mode in what rewrite listener was called. Possbile two modes: REWRITE_MODE_BUILD, REWRITE_MODE_PARSE. + * @param string $prefix Prefix, that listener uses for system integration + * @param Array $params Params, that are used for url building or created during url parsing. + * @param Array $url_parts Url parts to parse (only for parsing). + * @param bool $keep_events Keep event names in resulting url (only for building). + * @return bool Return true to continue to next listener; return false (when building) not to rewrite given prefix; return false (when parsing) to stop processing at this listener. + */ + function WidgetRewriteBuilder($rewrite_mode = REWRITE_MODE_BUILD, $prefix, &$params, &$url_parts, $keep_events = false) + { + if ($params['t'] == 'widgets/widget_detail') { + // this is default template for this prefix, so don't add it to resulting url + $params['pass_template'] = false; + } - $ret = Array ('', ''); + $mod_rewrite_helper =& $this->Application->recallObject('ModRewriteHelper'); + /* @var $mod_rewrite_helper kModRewriteHelper */ - if ($processed_params[$prefix . '_id'] > 0) { - // add id - $sql = 'SELECT Title - FROM ' . TABLE_PREFIX . 'Widgets - WHERE WidgetId = ' . $processed_params[$prefix . '_id']; - $ret[0] .= 'widgets/' . $this->Conn->GetOne($sql) . '/'; - } elseif ($processed_params[$prefix . '_Page'] > 1) { - // add page, only when ID is missing - $ret[1] .= $processed_params[$prefix . '_Page'] . '/'; - } + $processed_params = $mod_rewrite_helper->getProcessedParams($prefix, $params, $keep_events); - $ret[0] = rtrim($ret[0], '/'); - $ret[1] = rtrim($ret[1], '/'); + if ($processed_params === false) { + return ''; + } - return array_map('mb_strtolower', $ret); + $ret = Array ('', ''); + + if ($processed_params[$prefix . '_id'] > 0) { + // add id + $sql = 'SELECT Title + FROM ' . TABLE_PREFIX . 'Widgets + WHERE WidgetId = ' . $processed_params[$prefix . '_id']; + $ret[0] .= 'widgets/' . $this->Conn->GetOne($sql) . '/'; + } elseif ($processed_params[$prefix . '_Page'] > 1) { + // add page, only when ID is missing + $ret[1] .= $processed_params[$prefix . '_Page'] . '/'; } - if ($rewrite_mode == REWRITE_MODE_PARSE) { - if ($url_parts[0] == 'widgets') { - $sql = 'SELECT WidgetId - FROM ' . TABLE_PREFIX . 'Widgets - WHERE Title = ' . $this->Conn->qstr($url_parts[1]); - $id = $this->Conn->GetOne($sql); - $to_parse = $url_parts; + $ret[0] = rtrim($ret[0], '/'); + $ret[1] = rtrim($ret[1], '/'); - if ($id > 0) { - // id found - $params[$prefix . '_id'] = $id; - $to_parse = array_slice($to_parse, 2); // cut off first two parts - "widgets/" - $params['pass'][] = $prefix; // otherwise this prefix won't passed when pass="all" parameter used - } + return array_map('mb_strtolower', $ret); + } - $template = implode('/', $to_parse); + /** + * Builds/parses widget part of url + * + * @param int $rewrite_mode Mode in what rewrite listener was called. Possbile two modes: REWRITE_MODE_BUILD, REWRITE_MODE_PARSE. + * @param string $prefix Prefix, that listener uses for system integration + * @param Array $params Params, that are used for url building or created during url parsing. + * @param Array $url_parts Url parts to parse (only for parsing). + * @return bool Return true to continue to next listener; return false (when building) not to rewrite given prefix; return false (when parsing) to stop processing at this listener. + */ + function WidgetRewriteParser($rewrite_mode = REWRITE_MODE_BUILD, $prefix, &$params, &$url_parts) + { + if ($url_parts[0] == 'widgets') { + $sql = 'SELECT WidgetId + FROM ' . TABLE_PREFIX . 'Widgets + WHERE Title = ' . $this->Conn->qstr($url_parts[1]); + $id = $this->Conn->GetOne($sql); + $to_parse = $url_parts; - if ($template) { - // let others guess what template is - return true; - } + if ($id > 0) { + // id found + $params[$prefix . '_id'] = $id; + $to_parse = array_slice($to_parse, 2); // cut off first two parts - "widgets/" + $params['pass'][] = $prefix; // otherwise this prefix won't passed when pass="all" parameter used + } - // template missing -> set default - $params['t'] = 'widgets/widget_detail'; - return false; + $template = implode('/', $to_parse); + + if ($template) { + // let others guess what template is + return true; } + + // template missing -> set default + $params['t'] = 'widgets/widget_detail'; + return false; } return true;