diff options
Diffstat (limited to 'include')
-rw-r--r-- | include/category_subcats.inc.php | 163 | ||||
-rw-r--r-- | include/config_default.inc.php | 13 |
2 files changed, 120 insertions, 56 deletions
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 diff --git a/include/config_default.inc.php b/include/config_default.inc.php index d641223da..99efedd0d 100644 --- a/include/config_default.inc.php +++ b/include/config_default.inc.php @@ -252,4 +252,17 @@ $conf['pass_convert'] = create_function('$s', 'return md5($s);'); // guest_id : id of the anonymous user $conf['guest_id'] = 2; + +// allow_random_representative : do you wish PhpWebGallery to search among +// categories elements a new representative at each reload ? +// +// If false, an element is randomly or manually chosen to represent its +// category and remains the representative as long as an admin does not +// change it. +// +// Warning : setting this parameter to true is CPU consuming. Each time you +// change the value of this parameter from false to true, an administrator +// must update categories informations in screen [Admin > General > +// Maintenance]. +$conf['allow_random_representative'] = false; ?> |