- optimization : representative picture becomes mandatory for a non empty

category. So, at each insertion in images table for a category, a new
  representative element is elected (by rand). This must be improved by not
  reelcting a random picture admin set an element as representative
  manually.

- optimization : recent cats page only needs 2 queries instead of 3*N (N
  categories to display). The bad point is that it shows representative
  element of recent cat and not a random element among recently added.

- optimization : empty cats page only needs 1 query per non empty sub
  category instead of... a lot. For each sub category, PhpWebGallery shows
  the representative element of a category chosen randomly in sub
  cats. Thus, get_non_empty_subcat_ids and get_first_non_empty_cat_id
  becomes obsolete.

- new function get_cat_display_name_cache to show category names with a
  caching for all gallery categories names. This function, to the contrary
  of get_cat_display_name shows names in the correct order...


git-svn-id: http://piwigo.org/svn/trunk@610 68402e56-0260-453c-a942-63ccdbb3a9ee
This commit is contained in:
plegall
2004-11-20 17:23:42 +00:00
parent f39c3af29b
commit 13cd251e63
7 changed files with 170 additions and 154 deletions
-87
View File
@@ -828,93 +828,6 @@ SELECT COUNT(1) AS count
pwg_debug( 'end initialize_category' );
}
// get_non_empty_subcat_ids returns an array with sub-categories id
// associated with their first non empty category id.
//
// example :
//
// - catname [cat_id]
// - cat1 [1] -> given uppercat
// - cat1.1 [12] (empty)
// - cat1.1.1 [5] (empty)
// - cat1.1.2 [6]
// - cat1.2 [3]
// - cat1.3 [4]
//
// get_non_empty_sub_cat_ids will return :
// $ids[12] = 6;
// $ids[3] = 3;
// $ids[4] = 4;
function get_non_empty_subcat_ids( $id_uppercat )
{
global $user;
$ids = array();
$query = 'SELECT id,nb_images';
$query.= ' FROM '.CATEGORIES_TABLE;
$query.= ' WHERE id_uppercat ';
if ( !is_numeric( $id_uppercat ) ) $query.= 'is NULL';
else $query.= '= '.$id_uppercat;
// we must not show pictures of a forbidden category
if ( $user['forbidden_categories'] != '' )
{
$query.= ' AND id NOT IN ('.$user['forbidden_categories'].')';
}
$query.= ' ORDER BY rank';
$query.= ';';
$result = pwg_query( $query );
while ( $row = mysql_fetch_array( $result ) )
{
// only categories with findable picture in any of its subcats is
// represented.
if ( ( $row['nb_images'] != 0 and $non_empty_cat = $row['id'] )
or $non_empty_cat = get_first_non_empty_cat_id( $row['id'] ) )
{
$ids[$row['id']] = $non_empty_cat;
}
}
return $ids;
}
// get_first_non_empty_cat_id returns the id of the first non empty
// sub-category to the given uppercat. If no picture is found in any
// subcategory, false is returned.
function get_first_non_empty_cat_id( $id_uppercat )
{
global $user;
$query = 'SELECT id,nb_images';
$query.= ' FROM '.CATEGORIES_TABLE;
$query.= ' WHERE id_uppercat = '.$id_uppercat;
// we must not show pictures of a forbidden category
if ( $user['forbidden_categories'] != '' )
{
$query.= ' AND id NOT IN ('.$user['forbidden_categories'].')';
}
$query.= ' ORDER BY RAND()';
$query.= ';';
$result = pwg_query( $query );
while ( $row = mysql_fetch_array( $result ) )
{
if ( $row['nb_images'] > 0 )
{
return $row['id'];
}
}
$result = pwg_query( $query );
while ( $row = mysql_fetch_array( $result ) )
{
// recursive call
if ( $subcat = get_first_non_empty_cat_id( $row['id'] ) )
{
return $subcat;
}
}
return false;
}
function display_select_categories($categories,
$indent,
$selecteds,