Index: branches/5.3.x/core/units/helpers/mod_rewrite_helper.php
===================================================================
diff -u -N
--- branches/5.3.x/core/units/helpers/mod_rewrite_helper.php (revision 16111)
+++ branches/5.3.x/core/units/helpers/mod_rewrite_helper.php (revision 0)
@@ -1,356 +0,0 @@
-_buildCategoryItemUrl($prefix, $params, $keep_events);
- }
-
- $module_prefix = $this->_parseCategoryItemUrl($url_parts, $params, $prefix);
-
- if ($module_prefix !== false) {
- $rewrite_processor = $this->Application->recallObject('kRewriteUrlProcessor');
- /* @var $rewrite_processor kRewriteUrlProcessor */
-
- $params['pass'][] = $module_prefix;
- $rewrite_processor->setModulePrefix($module_prefix);
- }
-
- return true;
- }
-
- /**
- * Build category item part of url
- *
- * @param string $prefix_special
- * @param Array $params
- * @param bool $keep_events
- * @return string
- * @access protected
- */
- protected function _buildCategoryItemUrl($prefix_special, &$params, $keep_events)
- {
- static $default_per_page = Array ();
-
- $rewrite_processor = $this->Application->recallObject('kRewriteUrlProcessor');
- /* @var $rewrite_processor kRewriteUrlProcessor */
-
- $ret = '';
- list ($prefix) = explode('.', $prefix_special);
- $processed_params = $rewrite_processor->getProcessedParams($prefix_special, $params, $keep_events);
-
- if ($processed_params === false) {
- return '';
- }
-
- if ( isset($params[$prefix_special . '_event']) && $params[$prefix_special . '_event'] ) {
- $params['events[' . $prefix_special . ']'] = $params[$prefix_special . '_event'];
- unset($params[$prefix_special . '_event']);
- }
-
- if (!array_key_exists($prefix, $default_per_page)) {
- $list_helper = $this->Application->recallObject('ListHelper');
- /* @var $list_helper ListHelper */
-
- $default_per_page[$prefix] = $list_helper->getDefaultPerPage($prefix);
- }
-
- if ($processed_params[$prefix_special . '_id']) {
- $category_id = array_key_exists('m_cat_id', $params) ? $params['m_cat_id'] : $this->Application->GetVar('m_cat_id');
-
- // if template is also item template of category, then remove template
- $template = array_key_exists('t', $params) ? $params['t'] : false;
- $item_template = $rewrite_processor->GetItemTemplate($category_id, $prefix);
-
- if ($template == $item_template || strtolower($template) == '__default__') {
- // given template is also default template for this category item or '__default__' given
- $params['pass_template'] = false;
- }
-
- // get item's filename
- if ($prefix == 'bb') {
- $ret .= 'bb_' . $processed_params[$prefix_special . '_id'] . '/';
- }
- else {
- $filename = $this->getFilename($prefix, $processed_params[$prefix_special . '_id'], $category_id);
- if ($filename !== false) {
- $ret .= $filename . '/';
- }
- }
- } else {
- if ($processed_params[$prefix_special . '_Page'] == 1) {
- // when printing category items and we are on the 1st page -> there is no information about
- // category item prefix and $params['pass_category'] will not be added automatically
- $params['pass_category'] = true;
- }
- elseif ($processed_params[$prefix_special . '_Page'] > 1) {
- // $ret .= $processed_params[$prefix_special . '_Page'] . '/';
- $params['page'] = $processed_params[$prefix_special . '_Page'];
- }
-
- $per_page = $processed_params[$prefix_special . '_PerPage'];
-
- if ($per_page && ($per_page != $default_per_page[$prefix])) {
- $params['per_page'] = $processed_params[$prefix_special . '_PerPage'];
- }
- }
-
- return mb_strtolower( rtrim($ret, '/') );
- }
-
- /**
- * Builds/parses review 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_special 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.
- * @access public
- */
- public function ReviewRewriteListener($rewrite_mode = REWRITE_MODE_BUILD, $prefix_special, &$params, &$url_parts, $keep_events = false)
- {
- static $default_per_page = Array ();
-
- if ( $rewrite_mode != REWRITE_MODE_BUILD ) {
- // don't parse anything
- return true;
- }
-
- $rewrite_processor = $this->Application->recallObject('kRewriteUrlProcessor');
- /* @var $rewrite_processor kRewriteUrlProcessor */
-
- $ret = '';
- list ($prefix) = explode('.', $prefix_special);
- $processed_params = $rewrite_processor->getProcessedParams($prefix_special, $params, $keep_events);
-
- if ($processed_params === false) {
- return '';
- }
-
- if (!array_key_exists($prefix, $default_per_page)) {
- $list_helper = $this->Application->recallObject('ListHelper');
- /* @var $list_helper ListHelper */
-
- $default_per_page[$prefix] = $list_helper->getDefaultPerPage($prefix);
- }
-
- if ($processed_params[$prefix_special . '_id']) {
- return false;
- }
- else {
- if ($processed_params[$prefix_special . '_Page'] == 1) {
- // when printing category items and we are on the 1st page -> there is no information about
- // category item prefix and $params['pass_category'] will not be added automatically
- $params['pass_category'] = true;
- }
- elseif ($processed_params[$prefix_special . '_Page'] > 1) {
- // $ret .= $processed_params[$prefix_special . '_Page'] . '/';
- $params['page'] = $processed_params[$prefix_special . '_Page'];
- }
-
- $per_page = $processed_params[$prefix_special . '_PerPage'];
-
- if ($per_page && ($per_page != $default_per_page[$prefix])) {
- $params['per_page'] = $processed_params[$prefix_special . '_PerPage'];
- }
- }
-
- return mb_strtolower( rtrim($ret, '/') );
- }
-
- /**
- * Returns item's filename that corresponds id passed. If possible, then get it from cache
- *
- * @param string $prefix
- * @param int $id
- * @param int $category_id
- * @return string
- * @access protected
- */
- protected function getFilename($prefix, $id, $category_id = null)
- {
- if ($prefix == 'c') {
- throw new Exception('Method "' . __FUNCTION__ . '" no longer work with "c" prefix. Please use "getCategoryCache" method instead');
- }
-
- $category_id = isset($category_id) ? $category_id : $this->Application->GetVar('m_cat_id');
-
- $cache_key = 'filenames[%' . $this->Application->incrementCacheSerial($prefix, $id, false) . '%]:' . (int)$category_id;
- $filename = $this->Application->getCache($cache_key);
-
- if ($filename === false) {
- $this->Conn->nextQueryCachable = true;
- $config = $this->Application->getUnitConfig($prefix);
-
- $sql = 'SELECT ResourceId
- FROM ' . $config->getTableName() . '
- WHERE ' . $config->getIDField() . ' = ' . $this->Conn->qstr($id);
- $resource_id = $this->Conn->GetOne($sql);
-
- $this->Conn->nextQueryCachable = true;
- $sql = 'SELECT Filename
- FROM ' . TABLE_PREFIX . 'CategoryItems
- WHERE (ItemResourceId = ' . $resource_id . ') AND (CategoryId = ' . (int)$category_id . ')';
- $filename = $this->Conn->GetOne($sql);
-
- if ($filename !== false) {
- $this->Application->setCache($cache_key, $filename);
- }
- }
-
- return $filename;
- }
-
- /**
- * Sets template and id, corresponding to category item given in url
- *
- * @param Array $url_parts
- * @param Array $vars
- * @param string $prefix Prefix, that listener uses for system integration
- *
- * @return boolean|string
- * @access protected
- */
- protected function _parseCategoryItemUrl(&$url_parts, &$vars, $prefix)
- {
- if ( !$url_parts ) {
- return false;
- }
-
- $item_filename = end($url_parts);
- if ( is_numeric($item_filename) ) {
- // this page, don't process here
- return false;
- }
-
- $rewrite_processor = $this->Application->recallObject('kRewriteUrlProcessor');
- /* @var $rewrite_processor kRewriteUrlProcessor */
-
- if ( $prefix == 'bb' && preg_match('/^bb_([\d]+)/', $item_filename, $regs) ) {
- // process topics separately, because they don't use item filenames
- array_pop($url_parts);
- $rewrite_processor->partParsed($item_filename, 'rtl');
-
- return $this->_parseTopicUrl($regs[1], $vars);
- }
-
- $cat_item = $this->findCategoryItem((int)$vars['m_cat_id'], $item_filename, $prefix);
-
- if ( $cat_item !== false ) {
- // item found
- $module_prefix = $cat_item['ItemPrefix'];
- $item_template = $rewrite_processor->GetItemTemplate($cat_item, $module_prefix, $vars['m_theme']);
-
- // converting ResourceId to corresponding Item id
- $module_config = $this->Application->getUnitConfig($module_prefix);
-
- $sql = 'SELECT ' . $module_config->getIDField() . '
- FROM ' . $module_config->getTableName() . '
- WHERE ResourceId = ' . $cat_item['ItemResourceId'];
- $item_id = $this->Conn->GetOne($sql);
-
- if ( $item_id ) {
- array_pop($url_parts);
- $rewrite_processor->partParsed($item_filename, 'rtl');
-
- if ( $item_template ) {
- // when template is found in category -> set it
- $vars['t'] = $item_template;
- }
-
- // we have category item id
- $vars[$module_prefix . '_id'] = $item_id;
-
- return $module_prefix;
- }
- }
-
- return false;
- }
-
- /**
- * Locating the item in CategoryItems by filename to detect its ItemPrefix and its category ParentPath.
- *
- * @param integer $category_id Category.
- * @param string $filename Filename.
- * @param string $prefix Prefix, that listener uses for system integration
- *
- * @return string
- */
- protected function findCategoryItem($category_id, $filename, $prefix)
- {
- static $cache = array();
-
- $cache_key = $category_id . ':' . $filename;
-
- if ( !isset($cache[$cache_key]) ) {
- $sql = 'SELECT ci.ItemResourceId, ci.ItemPrefix, c.ParentPath, ci.CategoryId
- FROM ' . TABLE_PREFIX . 'CategoryItems AS ci
- LEFT JOIN ' . TABLE_PREFIX . 'Categories AS c ON c.CategoryId = ci.CategoryId
- WHERE (ci.CategoryId = ' . $category_id . ') AND (ci.Filename = ' . $this->Conn->qstr($filename) . ')';
- $cache[$cache_key] = $this->Conn->GetRow($sql);
- }
-
- $category_item = $cache[$cache_key];
-
- return $category_item && $category_item['ItemPrefix'] == $prefix ? $category_item : false;
- }
-
- /**
- * Set's template and topic id corresponding to topic given in url
- *
- * @param int $topic_id
- * @param Array $vars
- * @return string
- * @access protected
- */
- protected function _parseTopicUrl($topic_id, &$vars)
- {
- $rewrite_processor = $this->Application->recallObject('kRewriteUrlProcessor');
- /* @var $rewrite_processor kRewriteUrlProcessor */
-
- $sql = 'SELECT c.ParentPath, c.CategoryId
- FROM ' . TABLE_PREFIX . 'Categories AS c
- WHERE c.CategoryId = ' . (int)$vars['m_cat_id'];
- $cat_item = $this->Conn->GetRow($sql);
-
- $item_template = $rewrite_processor->GetItemTemplate($cat_item, 'bb', $vars['m_theme']);
-
- if ($item_template) {
- $vars['t'] = $item_template;
- }
-
- $vars['bb_id'] = $topic_id;
-
- return 'bb';
- }
- }