diff options
author | plegall <plg@piwigo.org> | 2004-11-23 22:31:24 +0000 |
---|---|---|
committer | plegall <plg@piwigo.org> | 2004-11-23 22:31:24 +0000 |
commit | f0fcd1eedc26c0d36b6b0556b9f53124ba9f889f (patch) | |
tree | 0502dbd43c04199ec2ba45913985fee86793491a /include | |
parent | 5197779bba12db45508becc910d5886d77f3675d (diff) |
- global categories' options : instead of N horizontal tabs on a single
page, N options in the left menu (but the same backend)
- categories.global_rank : new calculated field. It gives a global rank of
the category among all others (updated during ordering)
- category.php page : menu is generated faster thanks to
categories.global_rank, recursivity becomes useless :-)
- new function to display select box with a set of categories :
display_select_cat_wrapper
- cat_options : instead of using 1 multiselect for true/false items, using 1
multiselect for true, and another one for false. The form provides buttons
with arrows to switch categories from one multiselect to another
- deletion of obsolete function display_categories (working with the old
template system)
- deletion of obsolete functions get_user_plain_structure,
create_user_structure, get_user_subcat_ids, update_structure, count_images
: useless thanks to global_rank
git-svn-id: http://piwigo.org/svn/trunk@614 68402e56-0260-453c-a942-63ccdbb3a9ee
Diffstat (limited to 'include')
-rw-r--r-- | include/functions_category.inc.php | 197 | ||||
-rw-r--r-- | include/functions_html.inc.php | 86 |
2 files changed, 95 insertions, 188 deletions
diff --git a/include/functions_category.inc.php b/include/functions_category.inc.php index d46ddc104..f8682433d 100644 --- a/include/functions_category.inc.php +++ b/include/functions_category.inc.php @@ -116,15 +116,14 @@ function check_cat_id( $cat ) } } -function get_user_plain_structure() +function get_categories_menu() { global $page,$user; - $infos = array('name','id','date_last','nb_images','dir','id_uppercat', - 'rank','site_id','uppercats'); + $infos = array(''); $query = ' -SELECT '.implode(',', $infos).' +SELECT name,id,date_last,nb_images,global_rank FROM '.CATEGORIES_TABLE.' WHERE 1 = 1'; // stupid but permit using AND after it ! if (!$user['expand']) @@ -143,125 +142,17 @@ SELECT '.implode(',', $infos).' AND id NOT IN ('.$user['forbidden_categories'].')'; } $query.= ' - ORDER BY id_uppercat ASC, rank ASC ;'; - $plain_structure = array(); $result = pwg_query($query); + $cats = array(); while ($row = mysql_fetch_array($result)) { - $category = array(); - foreach ($infos as $info) - { - if ($info == 'uc.date_last') - { - if (empty($row['date_last'])) - { - $category['date_last'] = 0; - } - else - { - list($year,$month,$day) = explode('-', $row['date_last']); - $category['date_last'] = mktime(0,0,0,$month,$day,$year); - } - } - else if (isset($row[$info])) - { - $category[$info] = $row[$info]; - } - else - { - $category[$info] = ''; - } - } - $plain_structure[$row['id']] = $category; - } - - return $plain_structure; -} - -function create_user_structure( $id_uppercat ) -{ - global $page; - - if ( !isset( $page['plain_structure'] ) ) - $page['plain_structure'] = get_user_plain_structure(); - - $structure = array(); - $ids = get_user_subcat_ids( $id_uppercat ); - foreach ( $ids as $id ) { - $category = $page['plain_structure'][$id]; - $category['subcats'] = create_user_structure( $id ); - array_push( $structure, $category ); - } - return $structure; -} - -function get_user_subcat_ids( $id_uppercat ) -{ - global $page; - - $ids = array(); - foreach ( $page['plain_structure'] as $id => $category ) { - if ( $category['id_uppercat'] == $id_uppercat ) array_push( $ids, $id ); - else if ( count( $ids ) > 0 ) return $ids; - } - return $ids; -} - -// update_structure updates or add informations about each node of the -// structure : -// -// 1. should the category be expanded in the menu ? -// If the category has to be expanded (ie its id is in the -// $page['tab_expand'] or all the categories must be expanded by default), -// $category['expanded'] is set to true. -// -// 2. associated expand string -// in the menu, there is a expand string (used in the URL) to tell which -// categories must be expanded in the menu if this category is chosen -function update_structure( $categories ) -{ - global $page, $user; - - $updated_categories = array(); - - foreach ( $categories as $category ) { - // update the "expanded" key - if ( $user['expand'] - or in_array( $category['id'], $page['tab_expand'] ) ) - { - $category['expanded'] = true; - } - else - { - $category['expanded'] = false; - } - // recursive call - $category['subcats'] = update_structure( $category['subcats'] ); - // adding the updated category - array_push( $updated_categories, $category ); + array_push($cats, $row); } + usort($cats, 'global_rank_compare'); - return $updated_categories; -} - -// count_images returns the number of pictures contained in the given -// category represented by an array, in this array, we have (among other -// things) : -// $category['nb_images'] -> number of pictures in this category -// $category['subcats'] -> array of sub-categories -// count_images goes to the deepest sub-category to find the total number of -// pictures contained in the given given category -function count_images( $categories ) -{ - return count_user_total_images(); - $total = 0; - foreach ( $categories as $category ) { - $total+= $category['nb_images']; - $total+= count_images( $category['subcats'] ); - } - return $total; + return get_html_menu_category($cats); } function count_user_total_images() @@ -829,47 +720,54 @@ SELECT COUNT(1) AS count } function display_select_categories($categories, - $indent, $selecteds, $blockname, - $CSS_classes) + $fullname = true) { - global $template,$user; + global $template; foreach ($categories as $category) { - if (!in_array($category['id'], $user['restrictions'])) + $selected = ''; + if (in_array($category['id'], $selecteds)) { - $selected = ''; - if (in_array($category['id'], $selecteds)) - { - $selected = ' selected="selected"'; - } - - $class = ''; - foreach (array_keys($CSS_classes) as $CSS_class) - { - if (in_array($category['id'], $CSS_classes[$CSS_class])) - { - $class = $CSS_class; - } - } + $selected = ' selected="selected"'; + } - $template->assign_block_vars( - $blockname, - array('SELECTED'=>$selected, - 'VALUE'=>$category['id'], - 'CLASS'=>$class, - 'OPTION'=>$indent.'- '.$category['name'] - )); - - display_select_categories($category['subcats'], - $indent.str_repeat(' ',3), - $selecteds, - $blockname, - $CSS_classes); + if ($fullname) + { + $option = get_cat_display_name_cache($category['uppercats'], + ' → ', + '', + false); + } + else + { + $option = str_repeat(' ', + (3 * substr_count($category['global_rank'], '.'))); + $option.= '- '.$category['name']; } + + $template->assign_block_vars( + $blockname, + array('SELECTED'=>$selected, + 'VALUE'=>$category['id'], + 'OPTION'=>$option + )); + } +} + +function display_select_cat_wrapper($query, $selecteds, $blockname, + $fullname = true) +{ + $result = pwg_query($query); + $categories = array(); + while ($row = mysql_fetch_array($result)) + { + array_push($categories, $row); } + usort($categories, 'global_rank_compare'); + display_select_categories($categories, $selecteds, $blockname, $fullname); } /** @@ -904,4 +802,9 @@ SELECT DISTINCT(id) } return $subcats; } + +function global_rank_compare($a, $b) +{ + return strnatcasecmp($a['global_rank'], $b['global_rank']); +} ?> diff --git a/include/functions_html.inc.php b/include/functions_html.inc.php index ccf6c7435..f1a8610db 100644 --- a/include/functions_html.inc.php +++ b/include/functions_html.inc.php @@ -211,7 +211,7 @@ function get_cat_display_name($cat_informations, * @return string */ function get_cat_display_name_cache($uppercats, - $separator, + $separator, $url = 'category.php?cat=', $replace_space = true) { @@ -271,72 +271,76 @@ SELECT id,name * * HTML code generated uses logical list tags ul and each category is an * item li. The paramter given is the category informations as an array, - * used keys are : id, name, dir, nb_images, date_last, subcats (sub-array) + * used keys are : id, name, nb_images, date_last * - * @param array category + * @param array categories * @return string */ -function get_html_menu_category($category) +function get_html_menu_category($categories) { global $page, $lang; + $ref_level = 0; $menu = ' + <ul class="menu">'; + + foreach ($categories as $category) + { + $level = substr_count($category['global_rank'], '.'); + if ($level > $ref_level) + { + $menu.= ' + <ul class="menu">'; + } + else if ($level < $ref_level) + { + $menu.= ' + </ul>'; + } + $ref_level = $level; + + $menu.= ' <li>'; - $url = add_session_id(PHPWG_ROOT_PATH.'category.php?cat='.$category['id']); + $url = add_session_id(PHPWG_ROOT_PATH.'category.php?cat='.$category['id']); - $class = ''; - if (isset($page['cat']) - and is_numeric($page['cat']) - and $category['id'] == $page['cat']) - { - $class = 'menuCategorySelected'; - } - else - { - $class = 'menuCategoryNotSelected'; - } - - $name = $category['name']; - if (empty($name)) - { - $name = str_replace('_', ' ', $category['dir']); - } + $class = ''; + if (isset($page['cat']) + and is_numeric($page['cat']) + and $category['id'] == $page['cat']) + { + $class = 'menuCategorySelected'; + } + else + { + $class = 'menuCategoryNotSelected'; + } - $menu.= ' + $menu.= ' <a href="'.$url.'" title="'.$lang['hint_category'].'" class="'.$class.'"> - '.$name.' + '.$category['name'].' </a>'; - if ($category['nb_images'] > 0) - { - $menu.= ' + if ($category['nb_images'] > 0) + { + $menu.= ' <span class="menuInfoCat" title="'.$category['nb_images'].' '.$lang['images_available'].'"> ['.$category['nb_images'].'] </span> '.get_icon($category['date_last']); + } + + $menu.= '</li>'; } - // recursive call - if ($category['expanded'] and count($category['subcats']) > 0) - { - $menu.= ' - <ul class="menu">'; - foreach ($category['subcats'] as $subcat) - { - $menu.= get_html_menu_category($subcat); - } - $menu.= ' + $menu.= ' </ul>'; - } - - $menu.= '</li>'; - + return $menu; } |