source: branches/2.4/admin/batch_manager.php @ 17766

Revision 17766, 10.9 KB checked in by rvelices, 7 years ago (diff)

merge-r17765 from trunk to branch 2.4 feature 2737: improve tag administration screen
show for every tag

  • the number of photos
  • link to public index page
  • link to batch manager edit

add an event for extended description multi language strings (used for autocompletion and shown in the tag admin screen) instead of hard coded in the core [lang=..

Line 
1<?php
2// +-----------------------------------------------------------------------+
3// | Piwigo - a PHP based photo gallery                                    |
4// +-----------------------------------------------------------------------+
5// | Copyright(C) 2008-2012 Piwigo Team                  http://piwigo.org |
6// | Copyright(C) 2003-2008 PhpWebGallery Team    http://phpwebgallery.net |
7// | Copyright(C) 2002-2003 Pierrick LE GALL   http://le-gall.net/pierrick |
8// +-----------------------------------------------------------------------+
9// | This program is free software; you can redistribute it and/or modify  |
10// | it under the terms of the GNU General Public License as published by  |
11// | the Free Software Foundation                                          |
12// |                                                                       |
13// | This program is distributed in the hope that it will be useful, but   |
14// | WITHOUT ANY WARRANTY; without even the implied warranty of            |
15// | MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU      |
16// | General Public License for more details.                              |
17// |                                                                       |
18// | You should have received a copy of the GNU General Public License     |
19// | along with this program; if not, write to the Free Software           |
20// | Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, |
21// | USA.                                                                  |
22// +-----------------------------------------------------------------------+
23
24/**
25 * Management of elements set. Elements can belong to a category or to the
26 * user caddie.
27 *
28 */
29
30if (!defined('PHPWG_ROOT_PATH'))
31{
32  die('Hacking attempt!');
33}
34
35include_once(PHPWG_ROOT_PATH.'admin/include/functions.php');
36include_once(PHPWG_ROOT_PATH.'admin/include/tabsheet.class.php');
37
38// +-----------------------------------------------------------------------+
39// | Check Access and exit when user status is not ok                      |
40// +-----------------------------------------------------------------------+
41
42check_status(ACCESS_ADMINISTRATOR);
43
44check_input_parameter('selection', $_POST, true, PATTERN_ID);
45
46// +-----------------------------------------------------------------------+
47// |                      initialize current set                           |
48// +-----------------------------------------------------------------------+
49
50if (isset($_POST['submitFilter']))
51{
52  // echo '<pre>'; print_r($_POST); echo '</pre>';
53  unset($_REQUEST['start']); // new photo set must reset the page
54  $_SESSION['bulk_manager_filter'] = array();
55
56  if (isset($_POST['filter_prefilter_use']))
57  {
58    $_SESSION['bulk_manager_filter']['prefilter'] = $_POST['filter_prefilter'];
59  }
60
61  if (isset($_POST['filter_category_use']))
62  {
63    $_SESSION['bulk_manager_filter']['category'] = $_POST['filter_category'];
64
65    if (isset($_POST['filter_category_recursive']))
66    {
67      $_SESSION['bulk_manager_filter']['category_recursive'] = true;
68    }
69  }
70
71  if (isset($_POST['filter_tags_use']))
72  {
73    $_SESSION['bulk_manager_filter']['tags'] = get_tag_ids($_POST['filter_tags'], false);
74
75    if (isset($_POST['tag_mode']) and in_array($_POST['tag_mode'], array('AND', 'OR')))
76    {
77      $_SESSION['bulk_manager_filter']['tag_mode'] = $_POST['tag_mode'];
78    }
79  }
80
81  if (isset($_POST['filter_level_use']))
82  {
83    if (in_array($_POST['filter_level'], $conf['available_permission_levels']))
84    {
85      $_SESSION['bulk_manager_filter']['level'] = $_POST['filter_level'];
86     
87      if (isset($_POST['filter_level_include_lower']))
88      {
89        $_SESSION['bulk_manager_filter']['level_include_lower'] = true;
90      }
91    }
92  }
93}
94
95if (isset($_GET['cat']))
96{
97  if ('caddie' == $_GET['cat'])
98  {
99    $_SESSION['bulk_manager_filter'] = array(
100      'prefilter' => 'caddie'
101      );
102  }
103
104  if ('recent' == $_GET['cat'])
105  {
106    $_SESSION['bulk_manager_filter'] = array(
107      'prefilter' => 'last import'
108      );
109  }
110
111  if (is_numeric($_GET['cat']))
112  {
113    $_SESSION['bulk_manager_filter'] = array(
114      'category' => $_GET['cat']
115      );
116  }
117 
118  if (substr_compare($_GET['cat'],'tag-',0,4)==0)
119  {
120    $_SESSION['bulk_manager_filter']=array();
121    $_SESSION['bulk_manager_filter']['tags'] = array(intval(substr($_GET['cat'],4)));
122    $_SESSION['bulk_manager_filter']['tag_mode'] = 'AND';
123  }
124}
125
126if (!isset($_SESSION['bulk_manager_filter']))
127{
128  $_SESSION['bulk_manager_filter'] = array(
129    'prefilter' => 'caddie'
130    );
131}
132
133// echo '<pre>'; print_r($_SESSION['bulk_manager_filter']); echo '</pre>';
134
135// depending on the current filter (in session), we find the appropriate
136// photos
137$filter_sets = array();
138if (isset($_SESSION['bulk_manager_filter']['prefilter']))
139{
140  if ('caddie' == $_SESSION['bulk_manager_filter']['prefilter'])
141  {
142    $query = '
143SELECT element_id
144  FROM '.CADDIE_TABLE.'
145  WHERE user_id = '.$user['id'].'
146;';
147    array_push(
148      $filter_sets,
149      array_from_query($query, 'element_id')
150      );
151  }
152
153  if ('last import'== $_SESSION['bulk_manager_filter']['prefilter'])
154  {
155    $query = '
156SELECT MAX(date_available) AS date
157  FROM '.IMAGES_TABLE.'
158;';
159    $row = pwg_db_fetch_assoc(pwg_query($query));
160    if (!empty($row['date']))
161    {
162      $query = '
163SELECT id
164  FROM '.IMAGES_TABLE.'
165  WHERE date_available BETWEEN '.pwg_db_get_recent_period_expression(1, $row['date']).' AND \''.$row['date'].'\'
166;';
167      array_push(
168        $filter_sets,
169        array_from_query($query, 'id')
170        );
171    }
172  }
173
174  if ('with no virtual album' == $_SESSION['bulk_manager_filter']['prefilter'])
175  {
176    // we are searching elements not linked to any virtual category
177    $query = '
178 SELECT id
179   FROM '.IMAGES_TABLE.'
180 ;';
181    $all_elements = array_from_query($query, 'id');
182
183    $query = '
184 SELECT id
185   FROM '.CATEGORIES_TABLE.'
186   WHERE dir IS NULL
187 ;';
188    $virtual_categories = array_from_query($query, 'id');
189    if (!empty($virtual_categories))
190    {
191      $query = '
192 SELECT DISTINCT(image_id)
193   FROM '.IMAGE_CATEGORY_TABLE.'
194   WHERE category_id IN ('.implode(',', $virtual_categories).')
195 ;';
196      $linked_to_virtual = array_from_query($query, 'image_id');
197    }
198
199    array_push(
200      $filter_sets,
201      array_diff($all_elements, $linked_to_virtual)
202      );
203  }
204
205  if ('with no album' == $_SESSION['bulk_manager_filter']['prefilter'])
206  {
207    $query = '
208SELECT
209    id
210  FROM '.IMAGES_TABLE.'
211    LEFT JOIN '.IMAGE_CATEGORY_TABLE.' ON id = image_id
212  WHERE category_id is null
213;';
214    array_push(
215      $filter_sets,
216      array_from_query($query, 'id')
217      );
218  }
219
220  if ('with no tag' == $_SESSION['bulk_manager_filter']['prefilter'])
221  {
222    $query = '
223SELECT
224    id
225  FROM '.IMAGES_TABLE.'
226    LEFT JOIN '.IMAGE_TAG_TABLE.' ON id = image_id
227  WHERE tag_id is null
228;';
229    array_push(
230      $filter_sets,
231      array_from_query($query, 'id')
232      );
233  }
234
235
236  if ('duplicates' == $_SESSION['bulk_manager_filter']['prefilter'])
237  {
238    // we could use the group_concat MySQL function to retrieve the list of
239    // image_ids but it would not be compatible with PostgreSQL, so let's
240    // perform 2 queries instead. We hope there are not too many duplicates.
241
242    $query = '
243SELECT file
244  FROM '.IMAGES_TABLE.'
245  GROUP BY file
246  HAVING COUNT(*) > 1
247;';
248    $duplicate_files = array_from_query($query, 'file');
249
250    $query = '
251SELECT id
252  FROM '.IMAGES_TABLE.'
253  WHERE file IN (\''.implode("','", $duplicate_files).'\')
254;';
255
256    array_push(
257      $filter_sets,
258      array_from_query($query, 'id')
259      );
260  }
261
262  if ('all photos' == $_SESSION['bulk_manager_filter']['prefilter'])
263  {
264    $query = '
265SELECT id
266  FROM '.IMAGES_TABLE.'
267  '.$conf['order_by'];
268
269    $filter_sets[] = array_from_query($query, 'id');
270  }
271
272  $filter_sets = trigger_event('perform_batch_manager_prefilters', $filter_sets, $_SESSION['bulk_manager_filter']['prefilter']);
273}
274
275if (isset($_SESSION['bulk_manager_filter']['category']))
276{
277  $categories = array();
278
279  if (isset($_SESSION['bulk_manager_filter']['category_recursive']))
280  {
281    $categories = get_subcat_ids(array($_SESSION['bulk_manager_filter']['category']));
282  }
283  else
284  {
285    $categories = array($_SESSION['bulk_manager_filter']['category']);
286  }
287
288  $query = '
289 SELECT DISTINCT(image_id)
290   FROM '.IMAGE_CATEGORY_TABLE.'
291   WHERE category_id IN ('.implode(',', $categories).')
292 ;';
293  array_push(
294    $filter_sets,
295    array_from_query($query, 'image_id')
296    );
297}
298
299if (isset($_SESSION['bulk_manager_filter']['level']))
300{
301  $operator = '=';
302  if (isset($_SESSION['bulk_manager_filter']['level_include_lower']))
303  {
304    $operator = '<=';
305  }
306 
307  $query = '
308SELECT id
309  FROM '.IMAGES_TABLE.'
310  WHERE level '.$operator.' '.$_SESSION['bulk_manager_filter']['level'].'
311  '.$conf['order_by'];
312
313  $filter_sets[] = array_from_query($query, 'id');
314}
315
316if (!empty($_SESSION['bulk_manager_filter']['tags']))
317{
318  array_push(
319    $filter_sets,
320    get_image_ids_for_tags(
321      $_SESSION['bulk_manager_filter']['tags'],
322      $_SESSION['bulk_manager_filter']['tag_mode'],
323      null,
324      null,
325      false // we don't apply permissions in administration screens
326      )
327    );
328}
329
330$current_set = array_shift($filter_sets);
331foreach ($filter_sets as $set)
332{
333  $current_set = array_intersect($current_set, $set);
334}
335$page['cat_elements_id'] = $current_set;
336
337// +-----------------------------------------------------------------------+
338// |                       first element to display                        |
339// +-----------------------------------------------------------------------+
340
341// $page['start'] contains the number of the first element in its
342// category. For exampe, $page['start'] = 12 means we must show elements #12
343// and $page['nb_images'] next elements
344
345if (!isset($_REQUEST['start'])
346    or !is_numeric($_REQUEST['start'])
347    or $_REQUEST['start'] < 0
348    or (isset($_REQUEST['display']) and 'all' == $_REQUEST['display']))
349{
350  $page['start'] = 0;
351}
352else
353{
354  $page['start'] = $_REQUEST['start'];
355}
356
357// +-----------------------------------------------------------------------+
358// |                                 Tabs                                  |
359// +-----------------------------------------------------------------------+
360$manager_link = get_root_url().'admin.php?page=batch_manager&amp;mode=';
361
362if (isset($_GET['mode']))
363{
364  $page['tab'] = $_GET['mode'];
365}
366else
367{
368  $page['tab'] = 'global';
369}
370
371$tabsheet = new tabsheet();
372$tabsheet->set_id('batch_manager');
373$tabsheet->select($page['tab']);
374$tabsheet->assign();
375
376// +-----------------------------------------------------------------------+
377// |                              tags                                     |
378// +-----------------------------------------------------------------------+
379
380$query = '
381SELECT id, name
382  FROM '.TAGS_TABLE.'
383;';
384$template->assign('tags', get_taglist($query, false));
385
386// +-----------------------------------------------------------------------+
387// |                         open specific mode                            |
388// +-----------------------------------------------------------------------+
389
390include(PHPWG_ROOT_PATH.'admin/batch_manager_'.$page['tab'].'.php');
391?>
Note: See TracBrowser for help on using the repository browser.