aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
Diffstat (limited to '')
-rw-r--r--action.php8
-rw-r--r--comments.php53
-rw-r--r--include/category_cats.inc.php71
-rw-r--r--include/category_default.inc.php12
-rw-r--r--include/common.inc.php12
-rw-r--r--include/config_default.inc.php19
-rw-r--r--include/filter.inc.php117
-rw-r--r--include/functions_calendar.inc.php13
-rw-r--r--include/functions_category.inc.php45
-rw-r--r--include/functions_filter.inc.php66
-rw-r--r--include/functions_html.inc.php5
-rw-r--r--include/functions_notification.inc.php47
-rw-r--r--include/functions_search.inc.php25
-rw-r--r--include/functions_tag.inc.php18
-rw-r--r--include/functions_url.inc.php5
-rw-r--r--include/functions_user.inc.php273
-rwxr-xr-xinclude/menubar.inc.php22
-rw-r--r--include/page_header.php12
-rw-r--r--include/section_init.inc.php171
-rw-r--r--include/user.inc.php15
-rw-r--r--index.php67
-rw-r--r--language/en_UK.iso-8859-1/common.lang.php11
-rw-r--r--language/fr_FR.iso-8859-1/common.lang.php11
-rw-r--r--picture.php10
-rw-r--r--random.php15
-rw-r--r--search.php23
-rw-r--r--services/recent.php13
-rw-r--r--tags.php2
-rw-r--r--template/yoga/default-colors.css14
-rw-r--r--template/yoga/header.tpl7
-rw-r--r--template/yoga/icon/flat_recent_cat.pngbin0 -> 754 bytes
-rw-r--r--template/yoga/icon/normal_mode.pngbin335 -> 360 bytes
-rw-r--r--template/yoga/icon/note.pngbin0 -> 2520 bytes
-rw-r--r--template/yoga/icon/start_filter.png (renamed from template/yoga/icon/start_filter_mode.png)bin1064 -> 1064 bytes
-rw-r--r--template/yoga/icon/stop_filter.png (renamed from template/yoga/icon/stop_filter_mode.png)bin1083 -> 1083 bytes
-rw-r--r--template/yoga/index.tpl12
-rw-r--r--template/yoga/menubar.tpl12
-rw-r--r--template/yoga/theme/clear/theme.css2
-rw-r--r--template/yoga/theme/dark/theme.css2
-rw-r--r--web_service.php23
40 files changed, 889 insertions, 344 deletions
diff --git a/action.php b/action.php
index 2d347f8be..c0cab23de 100644
--- a/action.php
+++ b/action.php
@@ -80,13 +80,15 @@ if ( empty($element_info) )
{
do_error(404, 'Requested id not found');
}
-
+
+// $filter['visible_categories'] and $filter['visible_images']
+// are not used because it's not necessary (filter <> restriction)
$query='
SELECT id FROM '.CATEGORIES_TABLE.'
INNER JOIN '.IMAGE_CATEGORY_TABLE.'
ON category_id=id
- WHERE image_id='.$id.'
- AND category_id NOT IN ('.$user['forbidden_categories'].')
+ WHERE image_id='.$id.'
+.'get_sql_condition_FandF(array('forbidden_categories' => 'category_id'), 'AND').'
LIMIT 1
;';
if ( mysql_num_rows(pwg_query($query))<1 )
diff --git a/comments.php b/comments.php
index 4d9ca26db..771d23ea7 100644
--- a/comments.php
+++ b/comments.php
@@ -216,13 +216,16 @@ $template->assign_block_vars(
$query = '
SELECT id,name,uppercats,global_rank
- FROM '.CATEGORIES_TABLE;
-if ($user['forbidden_categories'] != '')
-{
- $query.= '
- WHERE id NOT IN ('.$user['forbidden_categories'].')';
-}
-$query.= '
+ FROM '.CATEGORIES_TABLE.'
+'.get_sql_condition_FandF
+ (
+ array
+ (
+ 'forbidden_categories' => 'id',
+ 'visible_categories' => 'id'
+ ),
+ 'WHERE'
+ ).'
;';
display_select_cat_wrapper($query, array(@$_GET['cat']), $blockname, true);
@@ -308,13 +311,17 @@ SELECT COUNT(DISTINCT(id))
AND '.$page['cat_clause'].'
AND '.$page['author_clause'].'
AND '.$page['keyword_clause'].'
- AND '.$page['status_clause'];
-if ($user['forbidden_categories'] != '')
-{
- $query.= '
- AND category_id NOT IN ('.$user['forbidden_categories'].')';
-}
-$query.= '
+ AND '.$page['status_clause'].'
+'.get_sql_condition_FandF
+ (
+ array
+ (
+ 'forbidden_categories' => 'category_id',
+ 'visible_categories' => 'category_id',
+ 'visible_images' => 'ic.image_id'
+ ),
+ 'AND'
+ ).'
;';
list($counter) = mysql_fetch_row(pwg_query($query));
@@ -354,13 +361,17 @@ SELECT com.id AS comment_id
AND '.$page['cat_clause'].'
AND '.$page['author_clause'].'
AND '.$page['keyword_clause'].'
- AND '.$page['status_clause'];
-if ($user['forbidden_categories'] != '')
-{
- $query.= '
- AND category_id NOT IN ('.$user['forbidden_categories'].')';
-}
-$query.= '
+ AND '.$page['status_clause'].'
+'.get_sql_condition_FandF
+ (
+ array
+ (
+ 'forbidden_categories' => 'category_id',
+ 'visible_categories' => 'category_id',
+ 'visible_images' => 'ic.image_id'
+ ),
+ 'AND'
+ ).'
GROUP BY comment_id
ORDER BY '.$page['sort_by'].' '.$page['sort_order'];
if ('all' != $page['items_number'])
diff --git a/include/category_cats.inc.php b/include/category_cats.inc.php
index c84bdf6e9..67e666fb8 100644
--- a/include/category_cats.inc.php
+++ b/include/category_cats.inc.php
@@ -42,7 +42,16 @@ SELECT
ON id = cat_id and user_id = '.$user['id'].'
WHERE date_last > SUBDATE(
CURRENT_DATE,INTERVAL '.$user['recent_period'].' DAY
- );';
+ )
+'.get_sql_condition_FandF
+ (
+ array
+ (
+ 'visible_categories' => 'id',
+ ),
+ 'AND'
+ ).'
+;';
}
else
{
@@ -54,14 +63,15 @@ SELECT
FROM '.CATEGORIES_TABLE.' INNER JOIN '.USER_CACHE_CATEGORIES_TABLE.'
ON id = cat_id and user_id = '.$user['id'].'
WHERE id_uppercat '.
- (!isset($page['category']) ? 'is NULL' : '= '.$page['category']);
- if ($page['filter_local_mode'])
- {
- $query.= '
- AND max_date_last > SUBDATE(
- CURRENT_DATE,INTERVAL '.$user['recent_period'].' DAY)';
- }
- $query.= '
+ (!isset($page['category']) ? 'is NULL' : '= '.$page['category']).'
+'.get_sql_condition_FandF
+ (
+ array
+ (
+ 'visible_categories' => 'id',
+ ),
+ 'AND'
+ ).'
ORDER BY rank
;';
}
@@ -85,21 +95,18 @@ while ($row = mysql_fetch_assoc($result))
SELECT image_id
FROM '.CATEGORIES_TABLE.' AS c INNER JOIN '.IMAGE_CATEGORY_TABLE.' AS ic
ON ic.category_id = c.id';
- if ($page['filter_local_mode'] or $user['filter_global_mode'])
- {
- $query.= '
- INNER JOIN '.IMAGES_TABLE.' AS i on ic.image_id = i.id ';
- }
$query.= '
WHERE uppercats REGEXP \'(^|,)'.$row['id'].'(,|$)\'
- AND c.id NOT IN ('.$user['forbidden_categories'].')';
- if ($page['filter_local_mode'] or $user['filter_global_mode'])
- {
- $query.= '
- AND i.date_available > SUBDATE(
- CURRENT_DATE,INTERVAL '.$user['recent_period'].' DAY)';
- }
- $query.= '
+'.get_sql_condition_FandF
+ (
+ array
+ (
+ 'forbidden_categories' => 'c.id',
+ 'visible_categories' => 'c.id',
+ 'visible_images' => 'image_id'
+ ),
+ 'AND'
+ ).'
ORDER BY RAND()
LIMIT 0,1
;';
@@ -116,14 +123,15 @@ SELECT representative_picture_id
FROM '.CATEGORIES_TABLE.' INNER JOIN '.USER_CACHE_CATEGORIES_TABLE.'
ON id = cat_id and user_id = '.$user['id'].'
WHERE uppercats REGEXP \'(^|,)'.$row['id'].'(,|$)\'
- AND representative_picture_id IS NOT NULL';
- if ($page['filter_local_mode'] or $user['filter_global_mode'])
- {
- $query.= '
- AND max_date_last > SUBDATE(
- CURRENT_DATE,INTERVAL '.$user['recent_period'].' DAY)';
- }
- $query.= '
+ AND representative_picture_id IS NOT NULL
+'.get_sql_condition_FandF
+ (
+ array
+ (
+ 'visible_categories' => 'id',
+ ),
+ 'AND'
+ ).'
ORDER BY RAND()
LIMIT 0,1
;';
@@ -161,6 +169,9 @@ SELECT id, path, tn_ext
if (count($categories) > 0)
{
+ // Update filtered data
+ update_cats_with_filtered_data($categories);
+
if ($conf['subcatify'])
{
$template->set_filenames(
diff --git a/include/category_default.inc.php b/include/category_default.inc.php
index 1fff71956..8422fcf13 100644
--- a/include/category_default.inc.php
+++ b/include/category_default.inc.php
@@ -2,7 +2,7 @@
// +-----------------------------------------------------------------------+
// | PhpWebGallery - a PHP based picture gallery |
// | Copyright (C) 2002-2003 Pierrick LE GALL - pierrick@phpwebgallery.net |
-// | Copyright (C) 2003-2005 PhpWebGallery Team - http://phpwebgallery.net |
+// | Copyright (C) 2003-2006 PhpWebGallery Team - http://phpwebgallery.net |
// +-----------------------------------------------------------------------+
// | branch : BSF (Best So Far)
// | file : $RCSfile$
@@ -46,14 +46,8 @@ if (count($selection) > 0)
$query = '
SELECT *
FROM '.IMAGES_TABLE.'
- WHERE id IN ('.implode(',', $selection).')';
- if ($page['filter_local_mode'] or $user['filter_global_mode'])
- {
- $query.= '
- AND date_available > SUBDATE(
- CURRENT_DATE,INTERVAL '.$user['recent_period'].' DAY)';
- }
- $query.= ';';
+ WHERE id IN ('.implode(',', $selection).')
+;';
$result = pwg_query($query);
while ($row = mysql_fetch_assoc($result))
{
diff --git a/include/common.inc.php b/include/common.inc.php
index c1ebc7f74..3fca4783d 100644
--- a/include/common.inc.php
+++ b/include/common.inc.php
@@ -112,6 +112,7 @@ $page = array();
$user = array();
$lang = array();
$header_msgs = array();
+$header_notes = array();
@include(PHPWG_ROOT_PATH .'include/mysql.inc.php');
if (!defined('PHPWG_INSTALLED'))
@@ -228,6 +229,17 @@ if (count($header_msgs) > 0)
}
}
+if (!defined('IN_ADMIN') or !IN_ADMIN)
+{
+ include(PHPWG_ROOT_PATH.'include/functions_filter.inc.php');
+ include(PHPWG_ROOT_PATH.'include/filter.inc.php');
+}
+
+if (isset($conf['header_notes']))
+{
+ $header_notes = array_merge($header_notes, $conf['header_notes']);
+}
+
// default event handlers
add_event_handler('render_comment_content', 'parse_comment_content');
trigger_action('init');
diff --git a/include/config_default.inc.php b/include/config_default.inc.php
index 6e6b39cb5..453a9a02b 100644
--- a/include/config_default.inc.php
+++ b/include/config_default.inc.php
@@ -174,6 +174,10 @@ $conf['show_version'] = true;
// page.
$conf['links'] = array();
+// List of notes to display on all header page
+// example $conf['header_notes'] = array('Test', 'Hello');
+$conf['header_notes'] = array();
+
// show_thumbnail_caption : on thumbnails page, show thumbnail captions ?
$conf['show_thumbnail_caption'] = true;
@@ -543,7 +547,7 @@ $conf['nbm_treatment_timeout_default'] = 20;
$conf['enable_plugins']=true;
// +-----------------------------------------------------------------------+
-// | Set default for Web Service |
+// | Set default for Web Service |
// +-----------------------------------------------------------------------+
// Web services are accepted
@@ -561,4 +565,17 @@ $conf['enable_plugins']=true;
// 0 it's temporary closed (Useful for one access)
$conf['ws_durations'] = array(3650,1825,730,365,182,91,30,15,10,7,5,1,0);
+// +-----------------------------------------------------------------------+
+// | Filter |
+// +-----------------------------------------------------------------------+
+// Pages where filter is enabled
+// Other pages cancel current filter
+$conf['filter_pages'] = array
+ (
+ 'about.php', 'action.php', 'admin.php', 'comments.php',
+ 'index.php', 'picture.php', 'popuphelp.php', 'profile.php',
+ 'qsearch.php', 'random.php', 'register.php', 'search.php',
+ 'search_rules.php', 'tags.php', 'upload.php'
+ );
+
?>
diff --git a/include/filter.inc.php b/include/filter.inc.php
new file mode 100644
index 000000000..3a1279f94
--- /dev/null
+++ b/include/filter.inc.php
@@ -0,0 +1,117 @@
+<?php
+// +-----------------------------------------------------------------------+
+// | PhpWebGallery - a PHP based picture gallery |
+// | Copyright (C) 2006-2007 PhpWebGallery Team - http://phpwebgallery.net |
+// +-----------------------------------------------------------------------+
+// | branch : BSF (Best So Far)
+// | file : $Id: filter.inc.php 1651 2006-12-13 00:05:16Z rub $
+// | last update : $Date: 2006-12-13 01:05:16 +0100 (mer., 13 déc. 2006) $
+// | last modifier : $Author: rub $
+// | revision : $Revision: 1651 $
+// +-----------------------------------------------------------------------+
+// | This program is free software; you can redistribute it and/or modify |
+// | it under the terms of the GNU General Public License as published by |
+// | the Free Software Foundation |
+// | |
+// | This program is distributed in the hope that it will be useful, but |
+// | WITHOUT ANY WARRANTY; without even the implied warranty of |
+// | MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU |
+// | General Public License for more details. |
+// | |
+// | You should have received a copy of the GNU General Public License |
+// | along with this program; if not, write to the Free Software |
+// | Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, |
+// | USA. |
+// +-----------------------------------------------------------------------+
+
+// global variable for filter
+$filter = array();
+
+// $filter['enabled']: Filter is enabled
+// $filter['categories']: Computed data of filtered categories
+// $filter['visible_categories']: List of visible categories (count(visible) < count(forbidden) more often)
+// $filter['visible_images']: List of visible images
+
+
+$filter['enabled'] =
+ (in_array(basename($_SERVER['SCRIPT_FILENAME']), $conf['filter_pages'])) and
+ (
+ (isset($_GET['filter']) and ($_GET['filter'] == 'start')) or
+ pwg_get_session_var('filter_enabled', false)
+ );
+
+if (in_array(basename($_SERVER['SCRIPT_FILENAME']), $conf['filter_pages']))
+{
+ if (isset($_GET['filter']))
+ {
+ $filter['enabled'] = ($_GET['filter'] == 'start');
+ }
+ else
+ {
+ $filter['enabled'] = pwg_get_session_var('filter_enabled', false);
+ }
+}
+else
+{
+ $filter['enabled'] = false;
+}
+
+if ($filter['enabled'])
+{
+ if (
+ // New filter
+ !pwg_get_session_var('filter_enabled', false) or
+ // Cache data updated
+ $user['need_update_done'] or
+ // Date, period, user are changed
+ (pwg_get_session_var('filter_check_key', '') != get_filter_check_key())
+ )
+ {
+ // Need to compute dats
+ $filter['check_key'] = get_filter_check_key();
+ $filter['categories'] = get_computed_categories($user['id'], $user['forbidden_categories'], true, $user['recent_period']);
+ $filter['visible_categories'] = implode(',', array_keys($filter['categories']));
+
+ $query ='
+SELECT
+ distinct image_id
+FROM '.
+ IMAGE_CATEGORY_TABLE.' INNER JOIN '.IMAGES_TABLE.' ON image_id = id
+WHERE ';
+ if (!empty($filter['visible_categories']))
+ {
+ $query.= '
+ category_id IN ('.$filter['visible_categories'].') and';
+ }
+ $query.= '
+ date_available > SUBDATE(
+ CURRENT_DATE,INTERVAL '.$user['recent_period'].' DAY)';
+
+ $filter['visible_images'] = implode(',', array_from_query($query, 'image_id'));
+ }
+ else
+ {
+ // Read only data
+ $filter['check_key'] = pwg_get_session_var('filter_check_key', '');
+ $filter['categories'] = unserialize(pwg_get_session_var('filter_categories', serialize(array())));
+ $filter['visible_categories'] = pwg_get_session_var('filter_visible_categories', '');
+ $filter['visible_images'] = pwg_get_session_var('filter_visible_images', '');
+ }
+
+ $header_notes[] = l10n_dec($lang['note_filter_day'], $lang['note_filter_days'], $user['recent_period']);
+}
+else
+{
+ $filter['check_key'] = '';
+ $filter['categories'] = array();
+ $filter['visible_categories'] = '';
+ $filter['visible_images'] = '';
+}
+
+pwg_set_session_var('filter_enabled', $filter['enabled']);
+pwg_set_session_var('filter_check_key', $filter['check_key']);
+pwg_set_session_var('filter_categories', serialize($filter['categories']));
+pwg_set_session_var('filter_visible_categories', $filter['visible_categories']);
+pwg_set_session_var('filter_visible_images', $filter['visible_images']);
+
+?>
diff --git a/include/functions_calendar.inc.php b/include/functions_calendar.inc.php
index 3bc79cddc..3bb70ed35 100644
--- a/include/functions_calendar.inc.php
+++ b/include/functions_calendar.inc.php
@@ -29,7 +29,7 @@ define('CAL_VIEW_CALENDAR', 'calendar');
function initialize_calendar()
{
- global $page, $conf, $user, $template;
+ global $page, $conf, $user, $template, $filter;
//------------------ initialize the condition on items to take into account ---
$inner_sql = ' FROM ' . IMAGES_TABLE;
@@ -58,7 +58,16 @@ WHERE category_id IN ('.implode(',',$sub_ids).')';
else
{
$inner_sql .= '
-WHERE category_id NOT IN ('.$user['forbidden_categories'].')';
+ '.get_sql_condition_FandF
+ (
+ array
+ (
+ 'forbidden_categories' => 'category_id',
+ 'visible_categories' => 'category_id',
+ 'visible_images' => 'image_id'
+ ),
+ 'WHERE', true
+ );
}
}
else
diff --git a/include/functions_category.inc.php b/include/functions_category.inc.php
index 4ae2b126c..bde0944e7 100644
--- a/include/functions_category.inc.php
+++ b/include/functions_category.inc.php
@@ -2,7 +2,7 @@
// +-----------------------------------------------------------------------+
// | PhpWebGallery - a PHP based picture gallery |
// | Copyright (C) 2002-2003 Pierrick LE GALL - pierrick@phpwebgallery.net |
-// | Copyright (C) 2003-2005 PhpWebGallery Team - http://phpwebgallery.net |
+// | Copyright (C) 2003-2006 PhpWebGallery Team - http://phpwebgallery.net |
// +-----------------------------------------------------------------------+
// | branch : BSF (Best So Far)
// | file : $Id$
@@ -44,6 +44,8 @@ function check_restrictions($category_id)
{
global $user;
+ // $filter['visible_categories'] and $filter['visible_images']
+ // are not used because it's not necessary (filter <> restriction)
if (in_array($category_id, explode(',', $user['forbidden_categories'])))
{
access_denied();
@@ -52,7 +54,7 @@ function check_restrictions($category_id)
function get_categories_menu()
{
- global $page, $user;
+ global $page, $user, $filter;
$query = '
SELECT ';
@@ -65,28 +67,34 @@ SELECT ';
// $user['forbidden_categories'] including with USER_CACHE_CATEGORIES_TABLE
$query.= '
- FROM '.CATEGORIES_TABLE.' INNER JOIN '.USER_CACHE_CATEGORIES_TABLE.'
+FROM '.CATEGORIES_TABLE.' INNER JOIN '.USER_CACHE_CATEGORIES_TABLE.'
ON id = cat_id and user_id = '.$user['id'];
- if ($page['filter_local_mode'])
+
+ // Always expand when filter is activated
+ if (!$user['expand'] and !$filter['enabled'])
{
$query.= '
-where max_date_last > SUBDATE(
- CURRENT_DATE,INTERVAL '.$user['recent_period'].' DAY)';
+WHERE
+(id_uppercat is NULL';
+ if (isset($page['category']))
+ {
+ $query.= ' OR id_uppercat IN ('.$page['uppercats'].')';
+ }
+ $query.= ')';
}
else
{
- // Always expand when filter_local_mode is activated
- if (!$user['expand'] and !$user['filter_global_mode'])
- {
- $query.= '
- WHERE (id_uppercat is NULL';
- if (isset($page['category']))
- {
- $query.= ' OR id_uppercat IN ('.$page['uppercats'].')';
- }
- $query.= ')';
- }
+ $query.= '
+ '.get_sql_condition_FandF
+ (
+ array
+ (
+ 'visible_categories' => 'id',
+ ),
+ 'WHERE'
+ );
}
+
$query.= '
;';
@@ -98,6 +106,9 @@ where max_date_last > SUBDATE(
}
usort($cats, 'global_rank_compare');
+ // Update filtered data
+ update_cats_with_filtered_data($cats);
+
return get_html_menu_category($cats);
}
diff --git a/include/functions_filter.inc.php b/include/functions_filter.inc.php
new file mode 100644
index 000000000..4bd5a6769
--- /dev/null
+++ b/include/functions_filter.inc.php
@@ -0,0 +1,66 @@
+<?php
+// +-----------------------------------------------------------------------+
+// | PhpWebGallery - a PHP based picture gallery |
+// | Copyright (C) 2006-2007 PhpWebGallery Team - http://phpwebgallery.net |
+// +-----------------------------------------------------------------------+
+// | branch : BSF (Best So Far)
+// | file : $Id: functions_filter.inc.php 1651 2006-12-13 00:05:16Z rub $
+// | last update : $Date: 2006-12-13 01:05:16 +0100 (mer., 13 déc. 2006) $
+// | last modifier : $Author: rub $
+// | revision : $Revision: 1651 $
+// +-----------------------------------------------------------------------+
+// | This program is free software; you can redistribute it and/or modify |
+// | it under the terms of the GNU General Public License as published by |
+// | the Free Software Foundation |
+// | |
+// | This program is distributed in the hope that it will be useful, but |
+// | WITHOUT ANY WARRANTY; without even the implied warranty of |
+// | MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU |
+// | General Public License for more details. |
+// | |
+// | You should have received a copy of the GNU General Public License |
+// | along with this program; if not, write to the Free Software |
+// | Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, |
+// | USA. |
+// +-----------------------------------------------------------------------+
+
+
+/**
+ * Get a check key for filtered data
+ * Check key are composed of elements witch force to compute data
+ *
+ * @param null
+ * @return strinf check_key
+ */
+function get_filter_check_key()
+{
+ global $user;
+
+ return $user['id'].$user['recent_period'].date('Ymd');
+}
+
+/**
+ * update data of categories with filtered values
+ *
+ * @param array list of categories
+ * @return null
+ */
+function update_cats_with_filtered_data(&$cats)
+{
+ global $filter;
+
+ if ($filter['enabled'])
+ {
+ $upd_fields = array('max_date_last', 'count_images', 'count_categories', 'nb_images');
+
+ foreach ($cats as $cat_id => $category)
+ {
+ foreach ($upd_fields as $upd_field)
+ {
+ $cats[$cat_id][$upd_field] = $filter['categories'][$category['id']][$upd_field];
+ }
+ }
+ }
+}
+
+?>
diff --git a/include/functions_html.inc.php b/include/functions_html.inc.php
index 39f738f3f..8b544defa 100644
--- a/include/functions_html.inc.php
+++ b/include/functions_html.inc.php
@@ -288,11 +288,12 @@ function get_cat_display_name($cat_informations,
{
$output.= '<a class=""';
$output.= ' href="'
- .make_index_url(
+ .duplicate_index_url(
array(
'category'=>$id,
'cat_name'=>$name
- )
+ ),
+ array('start')
)
.'">';
$output.= $name.'</a>';
diff --git a/include/functions_notification.inc.php b/include/functions_notification.inc.php
index 8c88fd342..631922303 100644
--- a/include/functions_notification.inc.php
+++ b/include/functions_notification.inc.php
@@ -28,6 +28,31 @@
// +-----------------------------------------------------------------------+
// | functions |
// +-----------------------------------------------------------------------+
+
+/*
+ * get standard sql where in order to
+ * restict an filter caregories and images
+ *
+ * IMAGE_CATEGORY_TABLE muste named ic in the query
+ *
+ * @param none
+ *
+ * @return string sql where
+ */
+function get_std_sql_where_restrict_filter($prefix_condition, $force_one_condition = false)
+{
+ return get_sql_condition_FandF
+ (
+ array
+ (
+ 'forbidden_categories' => 'ic.category_id',
+ 'visible_categories' => 'ic.category_id',
+ 'visible_images' => 'ic.image_id'
+ ),
+ $prefix_condition,
+ $force_one_condition
+ );
+}
/*
* Execute custom notification query
@@ -43,7 +68,7 @@
function custom_notification_query($action, $type, $start, $end)
{
global $user;
-
+
switch($type)
{
case 'new_comments':
@@ -53,7 +78,7 @@ function custom_notification_query($action, $type, $start, $end)
WHERE c.image_id = ic.image_id
AND c.validation_date > \''.$start.'\'
AND c.validation_date <= \''.$end.'\'
- AND category_id NOT IN ('.$user['forbidden_categories'].')
+ '.get_std_sql_where_restrict_filter('AND').'
;';
break;
case 'unvalidated_comments':
@@ -66,18 +91,18 @@ function custom_notification_query($action, $type, $start, $end)
break;
case 'new_elements':
$query = '
- FROM '.IMAGES_TABLE.' INNER JOIN '.IMAGE_CATEGORY_TABLE.' ON image_id = id
+ FROM '.IMAGES_TABLE.' INNER JOIN '.IMAGE_CATEGORY_TABLE.' AS ic ON image_id = id
WHERE date_available > \''.$start.'\'
AND date_available <= \''.$end.'\'
- AND category_id NOT IN ('.$user['forbidden_categories'].')
+ '.get_std_sql_where_restrict_filter('AND').'
;';
break;
case 'updated_categories':
$query = '
- FROM '.IMAGES_TABLE.' INNER JOIN '.IMAGE_CATEGORY_TABLE.' ON image_id = id
+ FROM '.IMAGES_TABLE.' INNER JOIN '.IMAGE_CATEGORY_TABLE.' AS ic ON image_id = id
WHERE date_available > \''.$start.'\'
AND date_available <= \''.$end.'\'
- AND category_id NOT IN ('.$user['forbidden_categories'].')
+ '.get_std_sql_where_restrict_filter('AND').'
;';
break;
case 'new_users':
@@ -421,15 +446,15 @@ function news($start, $end, $exclude_img_cats=false, $add_url=false)
*/
function get_recent_post_dates($max_dates, $max_elements, $max_cats)
{
- global $conf, $user;
+ global $conf, $user;
- $where_sql = 'WHERE category_id NOT IN ('.$user['forbidden_categories'].')';
+ $where_sql = get_std_sql_where_restrict_filter('WHERE', true);
$query = '
SELECT date_available,
COUNT(DISTINCT id) nb_elements,
COUNT(DISTINCT category_id) nb_cats
- FROM '.IMAGES_TABLE.' INNER JOIN '.IMAGE_CATEGORY_TABLE.' ON id=image_id
+ FROM '.IMAGES_TABLE.' INNER JOIN '.IMAGE_CATEGORY_TABLE.' AS ic ON id=image_id
'.$where_sql.'
GROUP BY date_available
ORDER BY date_available DESC
@@ -448,7 +473,7 @@ SELECT date_available,
{ // get some thumbnails ...
$query = '
SELECT DISTINCT id, path, name, tn_ext
- FROM '.IMAGES_TABLE.' INNER JOIN '.IMAGE_CATEGORY_TABLE.' ON id=image_id
+ FROM '.IMAGES_TABLE.' INNER JOIN '.IMAGE_CATEGORY_TABLE.' AS ic ON id=image_id
'.$where_sql.'
AND date_available="'.$dates[$i]['date_available'].'"
AND tn_ext IS NOT NULL
@@ -466,7 +491,7 @@ SELECT DISTINCT id, path, name, tn_ext
{// get some categories ...
$query = '
SELECT DISTINCT c.uppercats, COUNT(DISTINCT i.id) img_count
- FROM '.IMAGES_TABLE.' i INNER JOIN '.IMAGE_CATEGORY_TABLE.' ON i.id=image_id
+ FROM '.IMAGES_TABLE.' i INNER JOIN '.IMAGE_CATEGORY_TABLE.' AS ic ON i.id=image_id
INNER JOIN '.CATEGORIES_TABLE.' c ON c.id=category_id
'.$where_sql.'
AND date_available="'.$dates[$i]['date_available'].'"
diff --git a/include/functions_search.inc.php b/include/functions_search.inc.php
index 36dbb6210..14076ffb0 100644
--- a/include/functions_search.inc.php
+++ b/include/functions_search.inc.php
@@ -335,7 +335,7 @@ function get_qsearch_like_clause($q, $field)
*/
function get_quick_search_results($q)
{
- global $user, $page;
+ global $user, $page, $filter;
$search_results = array();
// first search tag names corresponding to the query $q. we could also search
@@ -384,7 +384,16 @@ FROM (
)
INNER JOIN
'.CATEGORIES_TABLE.' c on c.id=ic.category_id
-WHERE category_id NOT IN ('.$user['forbidden_categories'].')
+'.get_sql_condition_FandF
+ (
+ array
+ (
+ 'forbidden_categories' => 'category_id',
+ 'visible_categories' => 'category_id',
+ 'visible_images' => 'ic.image_id'
+ ),
+ 'WHERE'
+ ).'
GROUP BY i.id';
$query = 'SELECT id, MATCH(ft) AGAINST( "'.$q.'" IN BOOLEAN MODE) AS q FROM ('.$query.') AS Y
@@ -427,8 +436,16 @@ SELECT DISTINCT(id)
FROM '.IMAGES_TABLE.'
INNER JOIN '.IMAGE_CATEGORY_TABLE.' AS ic ON id = ic.image_id
WHERE id IN ('.implode(',', array_keys($by_tag_weights) ).')
- AND category_id NOT IN ('.$user['forbidden_categories'].')';
-
+'.get_sql_condition_FandF
+ (
+ array
+ (
+ 'forbidden_categories' => 'category_id',
+ 'visible_categories' => 'category_id',
+ 'visible_images' => 'ic.image_id'
+ ),
+ 'AND'
+ );
$allowed_image_ids = array_from_query( $query, 'id');
$by_tag_weights = array_intersect_key($by_tag_weights, array_flip($allowed_image_ids));
arsort($by_tag_weights, SORT_NUMERIC);
diff --git a/include/functions_tag.inc.php b/include/functions_tag.inc.php
index b330041ca..c01bb2fc7 100644
--- a/include/functions_tag.inc.php
+++ b/include/functions_tag.inc.php
@@ -37,7 +37,7 @@
* @param array forbidden categories
* @return array
*/
-function get_available_tags($forbidden_categories = null)
+function get_available_tags()
{
// we can find top fatter tags among reachable images
$tags_query = '
@@ -45,13 +45,25 @@ SELECT tag_id, name, url_name, count(*) counter
FROM '.IMAGE_TAG_TABLE.'
INNER JOIN '.TAGS_TABLE.' ON tag_id = id';
- if (!is_null($forbidden_categories))
+ $where_tag_img =
+ get_sql_condition_FandF
+ (
+ array
+ (
+ 'forbidden_categories' => 'category_id',
+ 'visible_categories' => 'category_id',
+ 'visible_images' => 'image_id'
+ ),
+ 'WHERE'
+ );
+
+ if (!is_null($where_tag_img))
{
// first we need all reachable image ids
$images_query = '
SELECT DISTINCT image_id
FROM '.IMAGE_CATEGORY_TABLE.'
- WHERE category_id NOT IN ('.implode(',', $forbidden_categories).')
+ '.$where_tag_img.'
;';
$image_ids = array_from_query($images_query, 'image_id');
if ( empty($image_ids) )
diff --git a/include/functions_url.inc.php b/include/functions_url.inc.php
index 2b561f3d4..e50f3e2e8 100644
--- a/include/functions_url.inc.php
+++ b/include/functions_url.inc.php
@@ -264,6 +264,11 @@ function add_well_known_params_in_url($url, $params)
}
}
+ if (isset($params['flat_recent_cat']) and $params['flat_recent_cat'] > 0)
+ {
+ $url.= '/flat_recent_cat-'.$params['flat_recent_cat'];
+ }
+
if (isset($params['start']) and $params['start'] > 0)
{
$url.= '/start-'.$params['start'];
diff --git a/include/functions_user.inc.php b/include/functions_user.inc.php
index d59a97e4d..dba5072fb 100644
--- a/include/functions_user.inc.php
+++ b/include/functions_user.inc.php
@@ -143,12 +143,11 @@ function setup_style($style)
return new Template(PHPWG_ROOT_PATH.'template/'.$style);
}
-function build_user( $user_id, $use_cache, $filter_global_mode = false )
+function build_user( $user_id, $use_cache )
{
global $conf;
-
$user['id'] = $user_id;
- $user = array_merge( $user, getuserdata($user_id, $use_cache, $filter_global_mode) );
+ $user = array_merge( $user, getuserdata($user_id, $use_cache) );
if ( $user['id'] == $conf['guest_id'])
{
$user['is_the_guest']=true;
@@ -167,7 +166,6 @@ function build_user( $user_id, $use_cache, $filter_global_mode = false )
{
$user['is_the_guest']=false;
}
-
// calculation of the number of picture to display per page
$user['nb_image_page'] = $user['nb_image_line'] * $user['nb_line_page'];
@@ -198,7 +196,7 @@ function build_user( $user_id, $use_cache, $filter_global_mode = false )
* @param boolean use_cache
* @param array
*/
-function getuserdata($user_id, $use_cache, $filter_global_mode = false )
+function getuserdata($user_id, $use_cache)
{
global $conf;
@@ -267,21 +265,20 @@ SELECT ui.*, uc.*
if ($use_cache)
{
- $userdata['filter_global_mode'] = $filter_global_mode;
-
if (!isset($userdata['need_update'])
or !is_bool($userdata['need_update'])
- or $userdata['need_update'] == true
- or $filter_global_mode // not optimize condition RubTag
- )
+ or $userdata['need_update'] == true)
{
$userdata['forbidden_categories'] =
calculate_permissions($userdata['id'], $userdata['status']);
- update_user_cache_categories($userdata);
+ update_user_cache_categories($userdata['id'], $userdata['forbidden_categories']);
// Set need update are done
- $userdata['need_update'] = $userdata['filter_global_mode']; // for draft always update RubTag
+ $userdata['need_update'] = false;
+
+ // Indicate update done
+ $userdata['need_update_done'] = true;
$query = '
SELECT COUNT(DISTINCT(image_id)) as total
@@ -306,8 +303,10 @@ INSERT INTO '.USER_CACHE_TABLE.'
;';
pwg_query($query);
}
-
+ else
{
+ // Indicate update not done
+ $userdata['need_update_done'] = false;
}
}
@@ -328,6 +327,8 @@ function check_user_favorites()
return;
}
+ // $filter['visible_categories'] and $filter['visible_images']
+ // must be not used because filter <> restriction
// retrieving images allowed : belonging to at least one authorized
// category
$query = '
@@ -335,7 +336,14 @@ SELECT DISTINCT f.image_id
FROM '.FAVORITES_TABLE.' AS f INNER JOIN '.IMAGE_CATEGORY_TABLE.' AS ic
ON f.image_id = ic.image_id
WHERE f.user_id = '.$user['id'].'
- AND ic.category_id NOT IN ('.$user['forbidden_categories'].')
+'.get_sql_condition_FandF
+ (
+ array
+ (
+ 'forbidden_categories' => 'ic.category_id',
+ ),
+ 'AND'
+ ).'
;';
$result = pwg_query($query);
$authorizeds = array();
@@ -454,7 +462,7 @@ SELECT id
}
/**
- * compute data of categories branches
+ * compute data of categories branches (one branch only)
*/
function compute_branch_cat_data(&$cats, &$list_cat_id, &$level, &$ref_level)
{
@@ -496,60 +504,82 @@ function compute_branch_cat_data(&$cats, &$list_cat_id, &$level, &$ref_level)
}
/**
- * update data of user_cache_categories
- *
- * @param array userdata
- * @return null
+ * compute data of categories branches
*/
-function update_user_cache_categories(&$userdata)
+function compute_categories_data(&$cats)
{
- // delete user cache
- $query = '
-DELETE FROM '.USER_CACHE_CATEGORIES_TABLE.'
- WHERE user_id = '.$userdata['id'].'
-;';
- pwg_query($query);
+ $ref_level = 0;
+ $level = 0;
+ $list_cat_id = array();
- /*$query = '
-SELECT id cat_id, date_last max_date_last, nb_images count_images, global_rank
- FROM '.CATEGORIES_TABLE;
- if ($userdata['forbidden_categories'] != '')
+ foreach ($cats as $id => $category)
{
- $query.= '
- WHERE id NOT IN ('.$userdata['forbidden_categories'].')';
+ // Compute
+ $level = substr_count($category['global_rank'], '.') + 1;
+ if ($level > $ref_level)
+ {
+ array_push($list_cat_id, $id);
+ }
+ else
+ {
+ compute_branch_cat_data($cats, $list_cat_id, $level, $ref_level);
+ array_push($list_cat_id, $id);
+ }
+ $ref_level = $level;
}
- $query.= ';';*/
+ $level = 1;
+ compute_branch_cat_data($cats, $list_cat_id, $level, $ref_level);
+}
+/**
+ * get computed array of categories
+ *
+ * @param int user_id
+ * @param list user_forbidden_categories
+ * @param bool filter_enabled
+ * @param int recent_period
+ * @return array
+ */
+function get_computed_categories($user_id, $user_forbidden_categories, $filter_enabled, $recent_period = 0)
+{
$query = '
-SELECT c.id cat_id, date_last max_date_last, nb_images count_images, global_rank';
+SELECT
+ c.id cat_id,
+ date_last max_date_last,
+ nb_images count_images,
+ global_rank';
- if (!$userdata['filter_global_mode'])
+ if (!$filter_enabled)
{
$query.= '
- FROM '.CATEGORIES_TABLE.' as C';
+FROM '.CATEGORIES_TABLE.' as c';
}
else
{
// Count by date_available to avoid count null
- $query.= ', count(date_available) filtered_count_images, max(date_available) max_date_available
- FROM '.CATEGORIES_TABLE.' as C
- LEFT JOIN '.IMAGE_CATEGORY_TABLE.' AS ic
- ON ic.category_id = c.id LEFT JOIN '.IMAGES_TABLE.' AS i
- ON ic.image_id = i.id AND i.date_available > SUBDATE(
- CURRENT_DATE,INTERVAL '.$userdata['recent_period'].' DAY)';
+ $query.= ',
+ count(date_available) filtered_count_images,
+ max(date_available) max_date_available
+FROM '.CATEGORIES_TABLE.' as c
+ LEFT JOIN '.IMAGE_CATEGORY_TABLE.' AS ic ON ic.category_id = c.id
+ LEFT JOIN '.IMAGES_TABLE.' AS i
+ ON ic.image_id = i.id AND
+ i.date_available > SUBDATE(CURRENT_DATE,INTERVAL '.$recent_period.' DAY)';
}
- if ($userdata['forbidden_categories'] != '')
+ if ($user_forbidden_categories != '')
{
$query.= '
- WHERE C.id NOT IN ('.$userdata['forbidden_categories'].')';
+WHERE
+ c.id NOT IN ('.$user_forbidden_categories.')';
}
- if ($userdata['filter_global_mode'])
+ if ($filter_enabled)
{
$query.= '
- GROUP BY c.id';
+GROUP BY
+ c.id';
}
$query.= ';';
@@ -558,10 +588,11 @@ SELECT c.id cat_id, date_last max_date_last, nb_images count_images, global_rank
$cats = array();
while ($row = mysql_fetch_assoc($result))
{
- $row['user_id'] = $userdata['id'];
+ $row['user_id'] = $user_id;
$row['count_categories'] = 0;
- if ($userdata['filter_global_mode'])
+ if ($filter_enabled)
{
+ $row['nb_images'] = $row['filtered_count_images'];
$row['count_images'] = $row['filtered_count_images'];
$row['max_date_last'] = $row['max_date_available'];
}
@@ -569,50 +600,52 @@ SELECT c.id cat_id, date_last max_date_last, nb_images count_images, global_rank
}
usort($cats, 'global_rank_compare');
- $ref_level = 0;
- $level = 0;
- $list_cat_id = array();
-
- foreach ($cats as $id => $category)
- {
- // Compute
- $level = substr_count($category['global_rank'], '.') + 1;
- if ($level > $ref_level)
- {
- array_push($list_cat_id, $id);
- }
- else
- {
- compute_branch_cat_data($cats, $list_cat_id, $level, $ref_level);
- array_push($list_cat_id, $id);
- }
- $ref_level = $level;
- }
-
- $level = 1;
- compute_branch_cat_data($cats, $list_cat_id, $level, $ref_level);
+ compute_categories_data($cats);
- if ($userdata['filter_global_mode'])
+ if ($filter_enabled)
{
- $forbidden_cats = array();
- $forbidden_cats = explode(',', $userdata['forbidden_categories']);
$cat_tmp = $cats;
$cats = array();
- foreach ($cat_tmp as $cat_id => $category)
+ foreach ($cat_tmp as $category)
{
- if (empty($category['max_date_last']))
- {
- array_push($forbidden_cats, $category['cat_id']);
- }
- else
+ if (!empty($category['max_date_last']))
{
- array_push($cats, $category);
+ // Re-init counters
+ $category['count_categories'] = 0;
+ $category['nb_images'] = $category['filtered_count_images'];
+ $category['count_images'] = $category['filtered_count_images'];
+ // Keep category
+ $cats[$category['cat_id']] = $category;
+
}
}
- $userdata['forbidden_categories'] = implode(',', array_unique($forbidden_cats));
+ // Compute a second time
+ compute_categories_data($cats);
}
+ return $cats;
+}
+
+/**
+ * update data of user_cache_categories
+ *
+ * @param int user_id
+ * @param list user_forbidden_categories
+ * @param bool filter_enabled
+ * @return null
+ */
+function update_user_cache_categories($user_id, $user_forbidden_categories)
+{
+ // delete user cache
+ $query = '
+DELETE FROM '.USER_CACHE_CATEGORIES_TABLE.'
+ WHERE user_id = '.$user_id.'
+;';
+ pwg_query($query);
+
+ $cats = get_computed_categories($user_id, $user_forbidden_categories, false);
+
include_once(PHPWG_ROOT_PATH.'admin/include/functions.php');
mass_inserts
(
@@ -1014,4 +1047,82 @@ function get_email_address_as_display_text($email_address)
}
}
+/*
+ * Compute sql where condition with restrict and filter data
+ *
+ * FandF: Forbidden and Filters
+ *
+ * @param $condition_fields array:
+ * keys are condition to aply and
+ * values are sql field to use
+ * array('forbidden_categories' => 'ic.category_id')
+ * $prefix_condition string:
+ * this value are concatenated if sql is not empty
+ * $force_one_condition:
+ * if there are not condition , use this condition "1 = 1"
+ *
+ * @return string sql where/conditions
+ */
+function get_sql_condition_FandF($condition_fields, $prefix_condition = null, $force_one_condition = false)
+{
+ global $user, $filter;
+
+ $sql_list = array();
+
+ foreach ($condition_fields as $condition => $field_name)
+ {
+ switch($condition)
+ {
+ case 'forbidden_categories':
+ if (!empty($user['forbidden_categories']))
+ {
+ $sql_list[] = $field_name.' NOT IN ('.$user['forbidden_categories'].')';
+ }
+ break;
+
+ case 'visible_categories':
+ if (!empty($filter['visible_categories']))
+ {
+ $sql_list[] = $field_name.' IN ('.$filter['visible_categories'].')';
+ }
+ break;
+
+ case 'visible_images':
+ if (!empty($filter['visible_images']))
+ {
+ $sql_list[] = $field_name.' IN ('.$filter['visible_images'].')';
+ }
+ break;
+
+ default:
+ die('Unknow condition');
+ break;
+
+ }
+ }
+
+ if (count($sql_list) > 0)
+ {
+ $sql = '('.implode(' AND ', $sql_list).')';
+ }
+ else
+ {
+ if ($force_one_condition)
+ {
+ $sql = '1 = 1';
+ }
+ else
+ {
+ $sql = '';
+ }
+ }
+
+ if (isset($prefix_condition) and !empty($sql))
+ {
+ $sql = $prefix_condition.' '.$sql;
+ }
+
+ return $sql;
+}
+
?>
diff --git a/include/menubar.inc.php b/include/menubar.inc.php
index c149b3553..d5535ca12 100755
--- a/include/menubar.inc.php
+++ b/include/menubar.inc.php
@@ -63,6 +63,28 @@ foreach ($conf['links'] as $url => $label)
)
);
}
+
+//------------------------------------------------------------------------ filter
+if ($filter['enabled'])
+{
+ $template->assign_block_vars(
+ 'stop_filter',
+ array(
+ 'URL' => add_url_params(make_index_url(array()), array('filter' => 'stop'))
+ )
+ );
+}
+else
+{
+ $template->assign_block_vars(
+ 'start_filter',
+ array(
+ 'URL' => add_url_params(make_index_url(array()), array('filter' => 'start'))
+ )
+ );
+}
+
+
//------------------------------------------------------------------------ tags
if ('tags' == $page['section'])
{
diff --git a/include/page_header.php b/include/page_header.php
index a6d4619a3..db7fa3b9a 100644
--- a/include/page_header.php
+++ b/include/page_header.php
@@ -60,6 +60,18 @@ if (isset($header_infos))
{
$template->assign_block_vars( 'header_meta', $header_infos);
}
+
+// Header notes
+if (count($header_notes) > 0)
+{
+ $template->assign_block_vars('header_notes', array());
+ foreach ($header_notes as $header_note)
+ {
+ $template->assign_block_vars('header_notes.header_note',
+ array('HEADER_NOTE' => $header_note));
+ }
+}
+
// refresh
if ( isset( $refresh ) and intval($refresh) >= 0
and isset( $url_link ) and isset( $redirect_msg ) )
diff --git a/include/section_init.inc.php b/include/section_init.inc.php
index 416d98849..d5bbce645 100644
--- a/include/section_init.inc.php
+++ b/include/section_init.inc.php
@@ -267,6 +267,12 @@ while (isset($tokens[$i]))
$page['start'] = $matches[1];
}
+ if (preg_match('/^flat_recent_cat-(\d+)/', $tokens[$i], $matches))
+ {
+ // indicate a special list of images
+ $page['flat_recent_cat'] = $matches[1];
+ }
+
if (preg_match('/^(posted|created)/', $tokens[$i] ))
{
$chronology_tokens = explode('-', $tokens[$i] );
@@ -325,59 +331,134 @@ if ('categories' == $page['section'])
$page = array_merge(
$page,
array(
- 'comment' => $result['comment'],
- 'cat_dir' => $result['dir'],
- 'cat_name' => $result['name'],
- 'cat_site_id' => $result['site_id'],
- 'cat_uploadable' => $result['uploadable'],
- 'cat_commentable' => $result['commentable'],
- 'cat_id_uppercat' => $result['id_uppercat'],
- 'uppercats' => $result['uppercats'],
-
- 'title' => get_cat_display_name($result['name'], '', false),
+ 'comment' => $result['comment'],
+ 'cat_dir' => $result['dir'],
+ 'cat_name' => $result['name'],
+ 'cat_site_id' => $result['site_id'],
+ 'cat_uploadable' => $result['uploadable'],
+ 'cat_commentable' => $result['commentable'],
+ 'cat_id_uppercat' => $result['id_uppercat'],
+ 'uppercats' => $result['uppercats'],
+ 'title' =>
+ get_cat_display_name($result['name'], '', false),
+ 'thumbnails_include' =>
+ (($result['nb_images'] > 0) or (isset($page['flat_recent_cat'])))
+ ? 'include/category_default.inc.php'
+ : 'include/category_cats.inc.php'
)
);
+ }
+ else
+ {
+ $page['title'] = $lang['no_category'];
+ $page['thumbnails_include'] =
+ (isset($page['flat_recent_cat']))
+ ? 'include/category_default.inc.php'
+ : 'include/category_cats.inc.php';
+ }
+
+ if (isset($page['flat_recent_cat']))
+ {
+ $page['title'] = $lang['recent_pics_cat'].' : '.$page['title'] ;
+ }
+
+ if
+ (
+ (!isset($page['chronology_field'])) and
+ (
+ (isset($page['category'])) or
+ (isset($page['flat_recent_cat']))
+ )
+ )
+ {
+ if ( !empty($result['image_order']) and !isset($page['super_order_by']) )
+ {
+ $conf[ 'order_by' ] = ' ORDER BY '.$result['image_order'];
+ }
- if (!isset($page['chronology_field']))
+ if (isset($page['flat_recent_cat']))
{
- if ( !empty($result['image_order']) and !isset($page['super_order_by']) )
+ // flat recent categories mode
+ $query = '
+SELECT
+ DISTINCT(ic.image_id)
+FROM '.IMAGES_TABLE.' AS i
+ INNER JOIN '.IMAGE_CATEGORY_TABLE.' AS ic ON i.id = ic.image_id
+ INNER JOIN '.CATEGORIES_TABLE.' AS c ON ic.category_id = c.id
+WHERE
+ date_available > SUBDATE(
+ CURRENT_DATE,INTERVAL '.$page['flat_recent_cat'].' DAY)'.
+ (isset($page['category']) ? '
+ AND uppercats REGEXP \'(^|,)'.$page['category'].'(,|$)\'' : '' ).'
+'.get_sql_condition_FandF
+ (
+ array
+ (
+ 'forbidden_categories' => 'category_id',
+ 'visible_categories' => 'category_id',
+ 'visible_images' => 'image_id'
+ ),
+ 'AND'
+ ).'
+;';
+
+ $where_sql = array_from_query($query, 'image_id');
+ if (!empty($where_sql))
{
- $conf[ 'order_by' ] = ' ORDER BY '.$result['image_order'];
+ $where_sql = 'image_id in ('.implode(',', $where_sql).')';
}
+ }
+ else
+ {
+ // Normal mode
+ $where_sql = 'category_id = '.$page['category'];
+ }
+ if (!empty($where_sql))
+ {
+ // Main query
$query = '
SELECT image_id
FROM '.IMAGE_CATEGORY_TABLE.'
INNER JOIN '.IMAGES_TABLE.' ON id = image_id
- WHERE category_id = '.$page['category'].'
+ WHERE
+ '.$where_sql.'
+'.get_sql_condition_FandF
+ (
+ array
+ (
+ 'forbidden_categories' => 'category_id',
+ 'visible_categories' => 'category_id',
+ 'visible_images' => 'image_id'
+ ),
+ 'AND'
+ ).'
'.$conf['order_by'].'
;';
- $page['items'] = array_from_query($query, 'image_id');
- $page['thumbnails_include'] =
- $result['nb_images'] > 0
- ? 'include/category_default.inc.php'
- : 'include/category_cats.inc.php';
- } //otherwise the calendar will requery all subitems
- }
- else
- {
- $page['title'] = $lang['no_category'];
- $page['thumbnails_include'] = 'include/category_cats.inc.php';
- }
+ $page['items'] = array_from_query($query, 'image_id');
+ }
+ else
+ {
+ $page['items'] = array();
+ }
+ } //otherwise the calendar will requery all subitems
}
// special sections
else
{
- if (!empty($user['forbidden_categories']))
- {
- $forbidden =
- ' category_id NOT IN ('.$user['forbidden_categories'].')';
- }
- else
- {
- $forbidden = ' 1 = 1';
- }
+ $forbidden =
+ get_sql_condition_FandF
+ (
+ array
+ (
+ 'forbidden_categories' => 'category_id',
+ 'visible_categories' => 'category_id',
+ 'visible_images' => 'image_id'
+ ),
+ 'AND'
+ );
+
// +-----------------------------------------------------------------------+
// | tags section |
// +-----------------------------------------------------------------------+
@@ -400,7 +481,7 @@ else
SELECT image_id
FROM '.IMAGE_CATEGORY_TABLE.' INNER JOIN '.IMAGES_TABLE.' ON image_id=id
WHERE image_id IN ('.implode(',', $items).')
- AND '.$forbidden.
+ '.$forbidden.
$conf['order_by'].'
;';
$items = array_unique(
@@ -434,7 +515,7 @@ SELECT DISTINCT(id)
FROM '.IMAGES_TABLE.'
INNER JOIN '.IMAGE_CATEGORY_TABLE.' AS ic ON id = ic.image_id
WHERE id IN ('.implode(',', $search_result['items']).')
- AND '.$forbidden.'
+ '.$forbidden.'
'.$conf['order_by'].'
;';
$page['items'] = array_from_query($query, 'id');
@@ -464,6 +545,14 @@ SELECT image_id
FROM '.FAVORITES_TABLE.'
INNER JOIN '.IMAGES_TABLE.' ON image_id = id
WHERE user_id = '.$user['id'].'
+'.get_sql_condition_FandF
+ (
+ array
+ (
+ 'visible_images' => 'image_id'
+ ),
+ 'AND'
+ ).'
'.$conf['order_by'].'
;';
@@ -487,7 +576,7 @@ SELECT DISTINCT(id)
INNER JOIN '.IMAGE_CATEGORY_TABLE.' AS ic ON id = ic.image_id
WHERE date_available > \''.
date('Y-m-d', time() - 60*60*24*$user['recent_period']).'\'
- AND '.$forbidden.'
+ '.$forbidden.'
'.$conf['order_by'].'
;';
@@ -526,7 +615,7 @@ SELECT DISTINCT(id)
FROM '.IMAGES_TABLE.'
INNER JOIN '.IMAGE_CATEGORY_TABLE.' AS ic ON id = ic.image_id
WHERE hit > 0
- AND '.$forbidden.'
+ '.$forbidden.'
'.$conf['order_by'].'
LIMIT 0, '.$conf['top_number'].'
;';
@@ -554,7 +643,7 @@ SELECT DISTINCT(id)
FROM '.IMAGES_TABLE.'
INNER JOIN '.IMAGE_CATEGORY_TABLE.' AS ic ON id = ic.image_id
WHERE average_rate IS NOT NULL
- AND '.$forbidden.'
+ '.$forbidden.'
'.$conf['order_by'].'
LIMIT 0, '.$conf['top_number'].'
;';
@@ -578,7 +667,7 @@ SELECT DISTINCT(id)
FROM '.IMAGES_TABLE.'
INNER JOIN '.IMAGE_CATEGORY_TABLE.' AS ic ON id = ic.image_id
WHERE image_id IN ('.implode(',', $page['list']).')
- AND '.$forbidden.'
+ '.$forbidden.'
'.$conf['order_by'].'
;';
diff --git a/include/user.inc.php b/include/user.inc.php
index 6f75ac962..b67d6e3e4 100644
--- a/include/user.inc.php
+++ b/include/user.inc.php
@@ -2,7 +2,7 @@
// +-----------------------------------------------------------------------+
// | PhpWebGallery - a PHP based picture gallery |
// | Copyright (C) 2002-2003 Pierrick LE GALL - pierrick@phpwebgallery.net |
-// | Copyright (C) 2003-2005 PhpWebGallery Team - http://phpwebgallery.net |
+// | Copyright (C) 2003-2006 PhpWebGallery Team - http://phpwebgallery.net |
// +-----------------------------------------------------------------------+
// | branch : BSF (Best So Far)
// | file : $RCSfile$
@@ -70,19 +70,8 @@ if ($conf['apache_authentication'] and isset($_SERVER['REMOTE_USER']))
}
}
-if (isset($_GET['filter_global_mode']))
-{
- $user['filter_global_mode'] = ($_GET['filter_global_mode'] == 'start');
- pwg_set_session_var('filter_global_mode', $user['filter_global_mode']);
-}
-else
-{
- $user['filter_global_mode'] = pwg_get_session_var('filter_global_mode', false);
-}
-
$user = build_user( $user['id'],
- ( defined('IN_ADMIN') and IN_ADMIN ) ? false : true, // use cache ?
- $user['filter_global_mode'] // filter_global_mode ?
+ ( defined('IN_ADMIN') and IN_ADMIN ) ? false : true // use cache ?
);
?> \ No newline at end of file
diff --git a/index.php b/index.php
index 39f124439..c87f62da2 100644
--- a/index.php
+++ b/index.php
@@ -106,64 +106,22 @@ if (isset($page['cat_nb_images']) and $page['cat_nb_images'] > 0)
$template_title.= ' ['.$page['cat_nb_images'].']';
}
-if (isset($_GET['filter_local_mode']))
-{
- $page['filter_local_mode'] = ($_GET['filter_local_mode'] == 'start');
-}
-else
-{
- $page['filter_local_mode'] = pwg_get_session_var('filter_local_mode', false);
-}
-
-$page['filter_local_mode'] = (($page['filter_local_mode']) and
- ($page['section'] == 'categories') and
- (!isset($page['chronology_field'])));
-pwg_set_session_var('filter_local_mode', $page['filter_local_mode']);
-
-if ($page['filter_local_mode'])
+if (isset($page['flat_recent_cat']) or isset($page['chronology_field']))
{
$template->assign_block_vars(
- 'stop_filter_local_mode',
- array(
- 'URL' => add_url_params(duplicate_index_url(array(), array('start')), array('filter_local_mode' => 'stop'))
- )
- );
-}
-else
-{
- $template->assign_block_vars(
- 'start_filter_local_mode',
+ 'mode_normal',
array(
- 'URL' => add_url_params(duplicate_index_url(array(), array('start')), array('filter_local_mode' => 'start'))
+ 'URL' => duplicate_index_url( array(), array('chronology_field', 'start', 'flat_recent_cat') )
)
);
}
-if (isset($_GET['filter_global_mode']))
-{
- $user['filter_global_mode'] = ($_GET['filter_global_mode'] == 'start');
- pwg_set_session_var('filter_global_mode', $user['filter_global_mode']);
-}
-else
-{
- $user['filter_global_mode'] = pwg_get_session_var('filter_global_mode', false);
-}
-
-if ($user['filter_global_mode'])
+if (!isset($page['flat_recent_cat']))
{
$template->assign_block_vars(
- 'stop_filter_global_mode',
+ 'flat_recent_cat',
array(
- 'URL' => add_url_params(duplicate_index_url(array(), array('start')), array('filter_global_mode' => 'stop'))
- )
- );
-}
-else
-{
- $template->assign_block_vars(
- 'start_filter_global_mode',
- array(
- 'URL' => add_url_params(duplicate_index_url(array(), array('start')), array('filter_global_mode' => 'start'))
+ 'URL' => duplicate_index_url(array('flat_recent_cat' => $user['recent_period']), array('start', 'chronology_field'))
)
);
}
@@ -179,7 +137,7 @@ if (!isset($page['chronology_field']))
$template->assign_block_vars(
'mode_created',
array(
- 'URL' => duplicate_index_url( $chronology_params, array('start') )
+ 'URL' => duplicate_index_url( $chronology_params, array('start', 'flat_recent_cat') )
)
);
@@ -187,19 +145,12 @@ if (!isset($page['chronology_field']))
$template->assign_block_vars(
'mode_posted',
array(
- 'URL' => duplicate_index_url( $chronology_params, array('start') )
+ 'URL' => duplicate_index_url( $chronology_params, array('start', 'flat_recent_cat') )
)
);
}
else
{
- $template->assign_block_vars(
- 'mode_normal',
- array(
- 'URL' => duplicate_index_url( array(), array('chronology_field','start') )
- )
- );
-
if ($page['chronology_field'] == 'created')
{
$chronology_field = 'posted';
@@ -210,7 +161,7 @@ else
}
$url = duplicate_index_url(
array('chronology_field'=>$chronology_field ),
- array('chronology_date', 'start')
+ array('chronology_date', 'start', 'flat_recent_cat')
);
$template->assign_block_vars(
'mode_'.$chronology_field,
diff --git a/language/en_UK.iso-8859-1/common.lang.php b/language/en_UK.iso-8859-1/common.lang.php
index 636d5a21b..dc16445c1 100644
--- a/language/en_UK.iso-8859-1/common.lang.php
+++ b/language/en_UK.iso-8859-1/common.lang.php
@@ -2,7 +2,7 @@
// +-----------------------------------------------------------------------+
// | PhpWebGallery - a PHP based picture gallery |
// | Copyright (C) 2002-2003 Pierrick LE GALL - pierrick@phpwebgallery.net |
-// | Copyright (C) 2003-2005 PhpWebGallery Team - http://phpwebgallery.net |
+// | Copyright (C) 2003-2006 PhpWebGallery Team - http://phpwebgallery.net |
// +-----------------------------------------------------------------------+
// | branch : BSF (Best So Far)
// | file : $RCSfile$
@@ -490,10 +490,9 @@ $lang['maxheight'] = 'Maximum height of the pictures';
$lang['maxheight_error'] = 'Maximum height must be a number superior to 50';
$lang['maxwidth'] = 'Maximum width of the pictures';
$lang['maxwidth_error'] = 'Maximum width must be a number superior to 50';
-$lang['start_filter_local_mode_hint'] = '[local] displays only recent elements';
-$lang['stop_filter_local_mode_hint'] = '[local] return to display all elements';
-$lang['start_filter_global_mode_hint'] = '[global] displays only recent elements';
-$lang['stop_filter_global_mode_hint'] = '[global] return to display all elements';
+$lang['flat_recent_cat_hint'] = 'display recent elements of categories and sub-categories';
+$lang['start_filter_hint'] = 'displays only recent elements';
+$lang['stop_filter_hint'] = 'return to display all elements';
$lang['mode_created_hint'] = 'displays a calendar by creation date';
$lang['mode_normal_hint'] = 'return to normal view mode';
$lang['mode_posted_hint'] = 'displays a calendar by date posted';
@@ -613,4 +612,6 @@ $lang['upload_username'] = 'Username';
$lang['useful when password forgotten'] = 'useful when password forgotten';
$lang['w_month'] = 'Month';
$lang['yes'] = 'Yes';
+$lang['note_filter_day'] = 'The whole of the elements are filtered in order to diplay the recent elements of less %s day.';
+$lang['note_filter_days'] = 'The whole of the elements are filtered in order to diplay the recent elements of less %s days.';
?>
diff --git a/language/fr_FR.iso-8859-1/common.lang.php b/language/fr_FR.iso-8859-1/common.lang.php
index 9aa1fee9c..04a4081d9 100644
--- a/language/fr_FR.iso-8859-1/common.lang.php
+++ b/language/fr_FR.iso-8859-1/common.lang.php
@@ -2,7 +2,7 @@
// +-----------------------------------------------------------------------+
// | PhpWebGallery - a PHP based picture gallery |
// | Copyright (C) 2002-2003 Pierrick LE GALL - pierrick@phpwebgallery.net |
-// | Copyright (C) 2003-2005 PhpWebGallery Team - http://phpwebgallery.net |
+// | Copyright (C) 2003-2006 PhpWebGallery Team - http://phpwebgallery.net |
// +-----------------------------------------------------------------------+
// | branch : BSF (Best So Far)
// | file : $RCSfile$
@@ -490,10 +490,9 @@ $lang['maxheight'] = 'Hauteur maximum des images';
$lang['maxheight_error'] = 'La hauteur maximum des images doit être supérieure à 50';
$lang['maxwidth'] = 'Largeur maximum des images';
$lang['maxwidth_error'] = 'La largeur des images doit être supérieure à 50';
-$lang['start_filter_local_mode_hint'] = '[local] afficher que les éléments récents';
-$lang['stop_filter_local_mode_hint'] = '[local] retourner à l\'affichage de tous les éléments';
-$lang['start_filter_global_mode_hint'] = '[global] afficher que les éléments récents';
-$lang['stop_filter_global_mode_hint'] = '[global] retourner à l\'affichage de tous les éléments';
+$lang['flat_recent_cat_hint'] = 'affiche les éléments récents des catégories et des sous-catégories';
+$lang['start_filter_hint'] = 'afficher que les éléments récents';
+$lang['stop_filter_hint'] = 'retourner à l\'affichage de tous les éléments';
$lang['mode_created_hint'] = 'afficher un calendrier par date de création';
$lang['mode_normal_hint'] = 'retourner à la vue normale';
$lang['mode_posted_hint'] = 'afficher un calendrier par date d\'ajout';
@@ -614,4 +613,6 @@ $lang['upload_username'] = 'Nom d\'utilisateur';
$lang['useful when password forgotten'] = 'utile en cas d\'oubli de mot de passe';
$lang['w_month'] = 'Mois';
$lang['yes'] = 'Oui';
+$lang['note_filter_day'] = 'L\'ensemble des éléments est filtré pour n\'afficher que les éléments récents de moins de %d jour.';
+$lang['note_filter_days'] = 'L\'ensemble des éléments est filtré pour n\'afficher que les éléments récents de moins de %d jours.';
?> \ No newline at end of file
diff --git a/picture.php b/picture.php
index 4faf57f40..ab660da98 100644
--- a/picture.php
+++ b/picture.php
@@ -248,7 +248,15 @@ SELECT category_id,uppercats,commentable,global_rank
FROM '.IMAGE_CATEGORY_TABLE.'
INNER JOIN '.CATEGORIES_TABLE.' ON category_id = id
WHERE image_id = '.$page['image_id'].'
- AND category_id NOT IN ('.$user['forbidden_categories'].')
+'.get_sql_condition_FandF
+ (
+ array
+ (
+ 'forbidden_categories' => 'category_id',
+ 'visible_categories' => 'category_id'
+ ),
+ 'AND'
+ ).'
;';
$result = pwg_query($query);
$related_categories = array();
diff --git a/random.php b/random.php
index f3ebdc3dc..f73fa9642 100644
--- a/random.php
+++ b/random.php
@@ -45,11 +45,16 @@ $query = '
SELECT DISTINCT(id)
FROM '.IMAGES_TABLE.'
INNER JOIN '.IMAGE_CATEGORY_TABLE.' AS ic ON id = ic.image_id
- '.(
- $user['forbidden_categories'] != ''
- ? 'WHERE category_id NOT IN ('.$user['forbidden_categories'].')'
- : ''
- ).'
+'.get_sql_condition_FandF
+ (
+ array
+ (
+ 'forbidden_categories' => 'category_id',
+ 'visible_categories' => 'category_id',
+ 'visible_images' => 'id'
+ ),
+ 'WHERE'
+ ).'
ORDER BY RAND(NOW())
LIMIT 0, '.$conf['top_number'].'
;';
diff --git a/search.php b/search.php
index 1a482ec77..4bd64106a 100644
--- a/search.php
+++ b/search.php
@@ -187,11 +187,7 @@ $template->assign_vars(
)
);
-$available_tags = get_available_tags(
- isset($user['forbidden_categories'])
- ? explode(',', $user['forbidden_categories'])
- : null
- );
+$available_tags = get_available_tags();
if (count($available_tags) > 0)
{
@@ -213,13 +209,16 @@ if (count($available_tags) > 0)
//------------------------------------------------------------- categories form
$query = '
SELECT name,id,date_last,nb_images,global_rank,uppercats
- FROM '.CATEGORIES_TABLE;
-if ($user['forbidden_categories'] != '')
-{
- $query.= '
- WHERE id NOT IN ('.$user['forbidden_categories'].')';
-}
-$query.= '
+ FROM '.CATEGORIES_TABLE.'
+'.get_sql_condition_FandF
+ (
+ array
+ (
+ 'forbidden_categories' => 'id',
+ 'visible_categories' => 'id'
+ ),
+ 'WHERE'
+ ).'
;';
$selecteds = array();
diff --git a/services/recent.php b/services/recent.php
index 59b1ffd4a..808b5a165 100644
--- a/services/recent.php
+++ b/services/recent.php
@@ -1,7 +1,16 @@
<?php
-$where = ( $user['forbidden_categories'] == '') ? '' :
- 'ic.`category_id` NOT IN ('.$user['forbidden_categories'].')';
+$where =
+ get_sql_condition_FandF
+ (
+ array
+ (
+ 'forbidden_categories' => 'ic.category_id',
+ 'visible_categories' => 'ic.category_id',
+ 'visible_images' => 'i.id'
+ ),
+ ''
+ );
$list = implode(',', $final);
if ( $where !== '' and $list !== '' )
{
diff --git a/tags.php b/tags.php
index bd6a53b90..34c214f25 100644
--- a/tags.php
+++ b/tags.php
@@ -73,7 +73,7 @@ $template->assign_vars(
// +-----------------------------------------------------------------------+
// find all tags available for the current user
-$tags = get_available_tags(explode(',', $user['forbidden_categories']));
+$tags = get_available_tags();
// we want only the first most represented tags, so we sort them by counter
// and take the first tags
diff --git a/template/yoga/default-colors.css b/template/yoga/default-colors.css
index ee8cdb6e6..cdcacb953 100644
--- a/template/yoga/default-colors.css
+++ b/template/yoga/default-colors.css
@@ -100,6 +100,20 @@ INPUT.rateButton, INPUT.rateButtonSelected, INPUT.rateButtonStarFull, INPUT.rate
padding: 1px;
}
+/**
+ * Header notes box in public/administration
+ */
+.header_notes {
+ border: 1px solid #aaaaaa; /* border color and style */
+ text-align: center;
+ background-image: url(icon/note.png);
+ background-repeat: no-repeat;
+ background-position: top left;
+ font-weight: bold;
+ margin: 14px;
+ padding: 5px 00px 0px 0px;
+}
+
LEGEND {
font-style: italic;
}
diff --git a/template/yoga/header.tpl b/template/yoga/header.tpl
index 3e2b43634..5032a3f04 100644
--- a/template/yoga/header.tpl
+++ b/template/yoga/header.tpl
@@ -72,3 +72,10 @@ the "text/nonsense" prevents gecko based browsers to load it -->
</div>
<!-- END header_msgs -->
<div id="theHeader">{PAGE_BANNER}</div>
+<!-- BEGIN header_notes -->
+<div class="header_notes">
+ <!-- BEGIN header_note -->
+ <P>{header_notes.header_note.HEADER_NOTE}</p>
+ <!-- END header_note -->
+</div>
+<!-- END header_notes -->
diff --git a/template/yoga/icon/flat_recent_cat.png b/template/yoga/icon/flat_recent_cat.png
new file mode 100644
index 000000000..43584e825
--- /dev/null
+++ b/template/yoga/icon/flat_recent_cat.png
Binary files differ
diff --git a/template/yoga/icon/normal_mode.png b/template/yoga/icon/normal_mode.png
index 07318b568..92d27a234 100644
--- a/template/yoga/icon/normal_mode.png
+++ b/template/yoga/icon/normal_mode.png
Binary files differ
diff --git a/template/yoga/icon/note.png b/template/yoga/icon/note.png
new file mode 100644
index 000000000..df1e0a926
--- /dev/null
+++ b/template/yoga/icon/note.png
Binary files differ
diff --git a/template/yoga/icon/start_filter_mode.png b/template/yoga/icon/start_filter.png
index 3d81a4d2e..3d81a4d2e 100644
--- a/template/yoga/icon/start_filter_mode.png
+++ b/template/yoga/icon/start_filter.png
Binary files differ
diff --git a/template/yoga/icon/stop_filter_mode.png b/template/yoga/icon/stop_filter.png
index 1ff012e96..1ff012e96 100644
--- a/template/yoga/icon/stop_filter_mode.png
+++ b/template/yoga/icon/stop_filter.png
Binary files differ
diff --git a/template/yoga/index.tpl b/template/yoga/index.tpl
index 95c6e0051..b0c2e43dc 100644
--- a/template/yoga/index.tpl
+++ b/template/yoga/index.tpl
@@ -27,16 +27,14 @@
<li><a href="{search_rules.URL}" style="border:none;" onclick="popuphelp(this.href); return false;" title="{lang:Search rules}"><img src="{pwg_root}{themeconf:icon_dir}/search_rules.png" class="button" alt="(?)"></a></li>
<!-- END search_rules -->
- <!-- BEGIN start_filter_local_mode -->
- <li><a href="{start_filter_local_mode.URL}" title="{lang:start_filter_local_mode_hint}"><img src="{pwg_root}{themeconf:icon_dir}/start_filter_mode.png" class="button" alt="{lang:start_filter_local_mode_hint}"></a></li>
- <!-- END start_filter_local_mode -->
- <!-- BEGIN stop_filter_local_mode -->
- <li><a href="{stop_filter_local_mode.URL}" title="{lang:stop_filter_local_mode_hint}"><img src="{pwg_root}{themeconf:icon_dir}/stop_filter_mode.png" class="button" alt="{lang:stop_filter_local_mode_hint}"></a></li>
- <!-- END stop_filter_local_mode -->
-
<!-- BEGIN mode_normal -->
<li><a href="{mode_normal.URL}" title="{lang:mode_normal_hint}"><img src="{pwg_root}{themeconf:icon_dir}/normal_mode.png" class="button" alt="{lang:mode_normal_hint}"></a></li>
<!-- END mode_normal -->
+
+ <!-- BEGIN flat_recent_cat -->
+ <li><a href="{flat_recent_cat.URL}" title="{lang:flat_recent_cat_hint}"><img src="{pwg_root}{themeconf:icon_dir}/flat_recent_cat.png" class="button" alt="{lang:flat_recent_cat_hint}"></a></li>
+ <!-- END flat_recent_cat -->
+
<!-- BEGIN mode_posted -->
<li><a href="{mode_posted.URL}" title="{lang:mode_posted_hint}" rel="nofollow"><img src="{pwg_root}{themeconf:icon_dir}/calendar.png" class="button" alt="{lang:mode_posted_hint}"></a></li>
<!-- END mode_posted -->
diff --git a/template/yoga/menubar.tpl b/template/yoga/menubar.tpl
index eafec20a6..317a974d8 100644
--- a/template/yoga/menubar.tpl
+++ b/template/yoga/menubar.tpl
@@ -13,12 +13,12 @@
</dl>
<!-- END links -->
<dl id="mbCategories">
- <!-- BEGIN start_filter_global_mode -->
- <a href="{start_filter_global_mode.URL}" title="{lang:start_filter_global_mode_hint}"><img src="{pwg_root}{themeconf:icon_dir}/start_filter_mode.png" class="buttonmenu" alt="{lang:start_filter_global_mode_hint}"></a>
- <!-- END start_filter_global_mode -->
- <!-- BEGIN stop_filter_global_mode -->
- <a href="{stop_filter_global_mode.URL}" title="{lang:stop_filter_global_mode_hint}"><img src="{pwg_root}{themeconf:icon_dir}/stop_filter_mode.png" class="buttonmenu" alt="{lang:stop_filter_global_mode_hint}"></a>
- <!-- END stop_filter_global_mode -->
+ <!-- BEGIN start_filter -->
+ <a href="{start_filter.URL}" title="{lang:start_filter_hint}"><img src="{pwg_root}{themeconf:icon_dir}/start_filter.png" class="buttonmenu" alt="{lang:start_filter_hint}"></a>
+ <!-- END start_filter -->
+ <!-- BEGIN stop_filter -->
+ <a href="{stop_filter.URL}" title="{lang:stop_filter_hint}"><img src="{pwg_root}{themeconf:icon_dir}/stop_filter.png" class="buttonmenu" alt="{lang:stop_filter_hint}"></a>
+ <!-- END stop_filter -->
<dt><a href="{U_HOME}">{lang:Categories}</a></dt>
<dd>
{MENU_CATEGORIES_CONTENT}
diff --git a/template/yoga/theme/clear/theme.css b/template/yoga/theme/clear/theme.css
index d49ec0322..3a60fa8a5 100644
--- a/template/yoga/theme/clear/theme.css
+++ b/template/yoga/theme/clear/theme.css
@@ -15,7 +15,7 @@ H2, #menubar DT, #imageHeaderBar, #imageToolBar A:hover, .row1 {
background-color: #d3d3d3;
}
-#menubar DL, #content, #imageToolBar {
+#menubar DL, #content, #imageToolBar, .header_notes {
background-color: #eeeeee;
}
diff --git a/template/yoga/theme/dark/theme.css b/template/yoga/theme/dark/theme.css
index 7165bf6c3..5ca520099 100644
--- a/template/yoga/theme/dark/theme.css
+++ b/template/yoga/theme/dark/theme.css
@@ -26,7 +26,7 @@ H3, #the_page, #imageHeaderBar, #imageToolBar A:hover, .row1 {
background-color: #3f3f3f;
}
-#menubar DL, #content, #imageToolBar {
+#menubar DL, #content, #imageToolBar, .header_notes {
background-color: #5f5f5f;
}
diff --git a/web_service.php b/web_service.php
index 72cc345d4..f4568e2a1 100644
--- a/web_service.php
+++ b/web_service.php
@@ -170,7 +170,17 @@ $ret_ids = array();
$query = '
SELECT DISTINCT image_id
FROM '.IMAGE_CATEGORY_TABLE.'
-WHERE category_id NOT IN ('.$user['forbidden_categories'].')
+WHERE
+'.get_sql_condition_FandF
+ (
+ array
+ (
+ 'forbidden_categories' => 'category_id',
+ 'visible_categories' => 'category_id',
+ 'visible_images' => 'image_id'
+ ),
+ '', true
+ ).'
AND image_id IN ('.$list.')
;';
$result = pwg_query($query);
@@ -389,7 +399,16 @@ $query='
AND i.`height` > 0
AND i.`representative_ext` IS NULL
'.$cat_criterion.'
- AND c.`id` NOT IN ('.$user['forbidden_categories'].') ';
+ '.get_sql_condition_FandF
+ (
+ array
+ (
+ 'forbidden_categories' => 'c.id',
+ 'visible_categories' => 'c.id',
+ 'visible_images' => 'i.id'
+ ),
+ 'AND'
+ );
// AND c.`agreed_ws` = \'true\' (Obsolete specification replaced by force)