aboutsummaryrefslogtreecommitdiffstats
path: root/include
diff options
context:
space:
mode:
Diffstat (limited to 'include')
-rw-r--r--include/category_subcats.inc.php163
-rw-r--r--include/config_default.inc.php13
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;
?>