From 1549745402270b86d2116b8f2a498fddf28ea2e8 Mon Sep 17 00:00:00 2001 From: plegall Date: Sat, 13 Aug 2005 23:09:54 +0000 Subject: - new : maintenance screen in administration. There you can update categories informations (number of images, date of the last added element), update images informations (path, average rate), purge obsolete sessions, purge history. - new : ability to have random representative for categories. This configuration parameter is set to false by default. - new : ability to set an element as representative of a category without belonging to the category. Thus, administrator can choose representative even for empty categories. - improvement : semantically superior design for category edition screen by regrouping fields in fieldsets. The improved screen contains action buttons as in category list screen. - new : ability to move a virtual category (ie change its parent category). - bug fixed : the sync_users function checks all user children tables (access, cache, group association). git-svn-id: http://piwigo.org/svn/trunk@809 68402e56-0260-453c-a942-63ccdbb3a9ee --- include/category_subcats.inc.php | 163 +++++++++++++++++++++++++-------------- 1 file changed, 107 insertions(+), 56 deletions(-) (limited to 'include/category_subcats.inc.php') diff --git a/include/category_subcats.inc.php b/include/category_subcats.inc.php index 5132172b9..8e40d8498 100644 --- a/include/category_subcats.inc.php +++ b/include/category_subcats.inc.php @@ -32,7 +32,7 @@ */ $query = ' -SELECT id, name, date_last +SELECT id, name, date_last, representative_picture_id FROM '.CATEGORIES_TABLE.' WHERE id_uppercat '; if (!isset($page['cat']) or !is_numeric($page['cat'])) @@ -43,81 +43,132 @@ else { $query.= '= '.$page['cat']; } -// we must not show pictures of a forbidden category -if ($user['forbidden_categories'] != '') -{ - $query.= ' AND id NOT IN ('.$user['forbidden_categories'].')'; -} -$query.= ' + $query.= ' + AND id NOT IN ('.$user['forbidden_categories'].') ORDER BY rank ;'; $result = pwg_query($query); -// template thumbnail initialization -if (mysql_num_rows($result) > 0) -{ - $template->assign_block_vars('thumbnails', array()); - // first line - $template->assign_block_vars('thumbnails.line', array()); - // current row displayed - $row_number = 0; -} +// $conf['allow_random_representative'] + +$cat_thumbnails = array(); while ($row = mysql_fetch_array($result)) { - $query = ' -SELECT path, tn_ext - FROM '.CATEGORIES_TABLE.' AS c INNER JOIN '.IMAGES_TABLE.' AS i - ON i.id = c.representative_picture_id - WHERE uppercats REGEXP \'(^|,)'.$row['id'].'(,|$)\''; - // we must not show pictures of a forbidden category - if ($user['forbidden_categories'] != '') + if (isset($row['representative_picture_id']) + and is_numeric($row['representative_picture_id'])) { - $query.= ' - AND c.id NOT IN ('.$user['forbidden_categories'].')'; + // if a representative picture is set, it has priority + $image_id = $row['representative_picture_id']; } - $query.= ' + else if ($conf['allow_random_representative']) + { + // searching a random representant among elements in sub-categories + $query = ' +SELECT image_id + FROM '.CATEGORIES_TABLE.' AS c INNER JOIN '.IMAGE_CATEGORY_TABLE.' AS ic + ON ic.category_id = c.id + WHERE uppercats REGEXP \'(^|,)'.$row['id'].'(,|$)\' + AND c.id NOT IN ('.$user['forbidden_categories'].') ORDER BY RAND() LIMIT 0,1 ;'; - $element_result = pwg_query($query); - if (mysql_num_rows($element_result) == 0) + $subresult = pwg_query($query); + if (mysql_num_rows($result) > 0) + { + list($image_id) = mysql_fetch_row($subresult); + } + } + else { - continue; + // searching a random representant among representant of sub-categories + $query = ' +SELECT representative_picture_id + FROM '.CATEGORIES_TABLE.' + WHERE uppercats REGEXP \'(^|,)'.$row['id'].'(,|$)\' + AND id NOT IN ('.$user['forbidden_categories'].') + AND representative_picture_id IS NOT NULL + ORDER BY RAND() + LIMIT 0,1 +;'; + $subresult = pwg_query($query); + if (mysql_num_rows($subresult) > 0) + { + list($image_id) = mysql_fetch_row($subresult); + } } - $element_row = mysql_fetch_array($element_result); - - $thumbnail_link = get_thumbnail_src($element_row['path'], - @$element_row['tn_ext']); - $thumbnail_title = $lang['hint_category']; + if (isset($image_id)) + { + array_push( + $cat_thumbnails, + array( + 'category' => $row['id'], + 'picture' => $image_id, + 'name' => $row['name'], + 'date_last' => @$row['date_last'] + ) + ); + } - $url_link = PHPWG_ROOT_PATH.'category.php?cat='.$row['id']; + unset($image_id); +} - $template->assign_block_vars( - 'thumbnails.line.thumbnail', - array( - 'IMAGE' => $thumbnail_link, - 'IMAGE_ALT' => $row['name'], - 'IMAGE_TITLE' => $thumbnail_title, - 'IMAGE_TS' => get_icon(@$row['date_last']), - - 'U_IMG_LINK' => add_session_id($url_link) - ) - ); +if (count($cat_thumbnails) > 0) +{ + $images = array(); + + foreach ($cat_thumbnails as $item) + { + $images[$item['picture']] = ''; + } - $template->assign_block_vars( - 'thumbnails.line.thumbnail.category_name', - array( - 'NAME' => $row['name'] - ) - ); + $query = ' +SELECT id, path, tn_ext + FROM '.IMAGES_TABLE.' + WHERE id IN ('.implode(',', array_keys($images)).') +;'; + $result = pwg_query($query); + while ($row = mysql_fetch_array($result)) + { + $images[$row['id']] = get_thumbnail_src($row['path'], @$row['tn_ext']); + } - // create a new line ? - if (++$row_number == $user['nb_image_line']) + $template->assign_block_vars('thumbnails', array()); + // first line + $template->assign_block_vars('thumbnails.line', array()); + // current row displayed + $row_number = 0; + + foreach ($cat_thumbnails as $item) { - $template->assign_block_vars('thumbnails.line', array()); - $row_number = 0; + $url_link = PHPWG_ROOT_PATH.'category.php?cat='.$row['id']; + + $template->assign_block_vars( + 'thumbnails.line.thumbnail', + array( + 'IMAGE' => $images[$item['picture']], + 'IMAGE_ALT' => $item['name'], + 'IMAGE_TITLE' => $lang['hint_category'], + 'IMAGE_TS' => get_icon(@$item['date_last']), + 'U_IMG_LINK' => + add_session_id(PHPWG_ROOT_PATH.'category.php?cat='.$item['category']) + ) + ); + + $template->assign_block_vars( + 'thumbnails.line.thumbnail.category_name', + array( + 'NAME' => $item['name'] + ) + ); + + // create a new line ? + if (++$row_number == $user['nb_image_line']) + { + $template->assign_block_vars('thumbnails.line', array()); + $row_number = 0; + } } } ?> \ No newline at end of file -- cgit v1.2.3