Index: branches/RC/core/units/general/cat_tag_processor.php =================================================================== diff -u -r9001 -r9021 --- branches/RC/core/units/general/cat_tag_processor.php (.../cat_tag_processor.php) (revision 9001) +++ branches/RC/core/units/general/cat_tag_processor.php (.../cat_tag_processor.php) (revision 9021) @@ -527,6 +527,85 @@ $today_only = isset($params['today']) && $params['today']; return $count_helper->ItemCount($this->Prefix, $today_only); } + + function CategorySelector($params) + { + $category_id = isset($params['category_id']) && is_numeric($params['category_id']) ? $params['category_id'] : false; + if ($category_id === false) { + // if category id not given use module root category + $category_id = $this->Application->findModule('Var', $this->Prefix, 'RootCat'); + } + + $id_field = $this->Application->getUnitOption('c', 'IDField'); + $title_field = $this->Application->getUnitOption('c', 'TitleField'); + $table_name = $this->Application->getUnitOption('c', 'TableName'); + + $count_helper =& $this->Application->recallObject('CountHelper'); + /* @var $count_helper kCountHelper */ + + list ($view_perm, $view_filter) = $count_helper->GetPermissionClause('c', 'perm_cache'); + + // get category list (permission based) + $sql = 'SELECT c.'.$title_field.', c.'.$id_field.' + FROM '.$table_name.' c + INNER JOIN '.TABLE_PREFIX.'PermCache perm_cache ON c.CategoryId = perm_cache.CategoryId + WHERE (ParentId = '.$category_id.') AND ('.$view_filter.') AND (perm_cache.PermId = '.$view_perm.') AND (c.Status = '.STATUS_ACTIVE.') + ORDER BY c.'.$title_field.' ASC'; + $categories = $this->Conn->GetCol($sql, $id_field); + + $block_params = $this->prepareTagParams($params); + $block_params['name'] = $params['render_as']; + $block_params['strip_nl'] = 2; + + $ret = ''; + foreach ($categories as $category_id => $category_name) { + // print category + $block_params['separator'] = isset($params['category_id']) ? $params['separator'] : ''; // return original separator, remove separator for top level categories + $block_params['category_id'] = $category_id; + $block_params['category_name'] = $category_name; + $ret .= $this->Application->ParseBlock($block_params); + + // print it's children + $block_params['separator'] = '   '.$params['separator']; + $ret .= $this->CategorySelector($block_params); + } + + return $ret; + } + + function PrintMoreCategories($params) + { + $object =& $this->getObject(); + /* @var $object kDBItem */ + + $category_ids = $this->Field($params); + if (!$category_ids) { + return ''; + } + + $category_ids = explode('|', substr($category_ids, 1, -1)); + + $id_field = $this->Application->getUnitOption('c', 'IDField'); + $title_field = $this->Application->getUnitOption('c', 'TitleField'); + $table_name = $this->Application->getUnitOption('c', 'TableName'); + + $sql = 'SELECT '.$title_field.', '.$id_field.' + FROM '.$table_name.' + WHERE '.$id_field.' IN ('.implode(',', $category_ids).')'; + $categories = $this->Conn->GetCol($sql, $id_field); + + $block_params = $this->prepareTagParams($params); + $block_params['name'] = $params['render_as']; + + $ret = ''; + foreach ($categories as $category_id => $category_name) { + $block_params['category_id'] = $category_id; + $block_params['category_name'] = $category_name; + $ret .= $this->Application->ParseBlock($block_params); + } + + return $ret; + } } ?> \ No newline at end of file