source: trunk/admin/batch_manager.php @ 8394

Last change on this file since 8394 was 8394, checked in by plg, 13 years ago

feature 2089: implement the "Bulk Manager" plugin as the new "Batch Manager".
The new "Batch Manager" offers as many features as the old "Bulk Manager" and
more to come.

The old Batch Manager (Caddie/Recent Pictures) is not removed yet and changes
that occured since last summer are not reported yet in the Batch Manager:
category/album, photo order for a given album, deletion of synchronized photos.

File size: 9.8 KB
Line 
1<?php
2// +-----------------------------------------------------------------------+
3// | Piwigo - a PHP based picture gallery                                  |
4// +-----------------------------------------------------------------------+
5// | Copyright(C) 2008-2010 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');
36
37// +-----------------------------------------------------------------------+
38// | Check Access and exit when user status is not ok                      |
39// +-----------------------------------------------------------------------+
40
41check_status(ACCESS_ADMINISTRATOR);
42
43check_input_parameter('selection', $_POST, true, PATTERN_ID);
44
45// +-----------------------------------------------------------------------+
46// |                      initialize current set                           |
47// +-----------------------------------------------------------------------+
48
49if (isset($_POST['submitFilter']))
50{
51  // echo '<pre>'; print_r($_POST); echo '</pre>';
52 
53  $_SESSION['bulk_manager_filter'] = array();
54
55  if (isset($_POST['filter_prefilter_use']))
56  {
57    $prefilters = array('caddie', 'last import', 'with no album', 'with no tag');
58    if (in_array($_POST['filter_prefilter'], $prefilters))
59    {
60      $_SESSION['bulk_manager_filter']['prefilter'] = $_POST['filter_prefilter'];
61    }   
62  }
63
64  if (isset($_POST['filter_category_use']))
65  {
66    $_SESSION['bulk_manager_filter']['category'] = $_POST['filter_category'];
67
68    if (isset($_POST['filter_category_recursive']))
69    {
70      $_SESSION['bulk_manager_filter']['category_recursive'] = true;
71    }
72  }
73
74  if (isset($_POST['filter_level_use']))
75  {
76    if (in_array($_POST['filter_level'], $conf['available_permission_levels']))
77    {
78      $_SESSION['bulk_manager_filter']['level'] = $_POST['filter_level'];
79    }
80  }
81}
82
83if (isset($_GET['cat']))
84{
85  if ('caddie' == $_GET['cat'])
86  {
87    $_SESSION['bulk_manager_filter'] = array(
88      'prefilter' => 'caddie'
89      );
90  }
91
92  if (is_numeric($_GET['cat']))
93  {
94    $_SESSION['bulk_manager_filter'] = array(
95      'category' => $_GET['cat']
96      );
97  }
98}
99
100if (!isset($_SESSION['bulk_manager_filter']))
101{
102  $_SESSION['bulk_manager_filter'] = array(
103    'prefilter' => 'caddie'
104    );
105}
106
107// echo '<pre>'; print_r($_SESSION['bulk_manager_filter']); echo '</pre>';
108
109// depending on the current filter (in session), we find the appropriate
110// photos
111$filter_sets = array();
112if (isset($_SESSION['bulk_manager_filter']['prefilter']))
113{
114  if ('caddie' == $_SESSION['bulk_manager_filter']['prefilter'])
115  {
116    $query = '
117SELECT element_id
118  FROM '.CADDIE_TABLE.'
119  WHERE user_id = '.$user['id'].'
120;';
121    array_push(
122      $filter_sets,
123      array_from_query($query, 'element_id')
124      );
125  }
126
127  if ('last import'== $_SESSION['bulk_manager_filter']['prefilter'])
128  {
129    $query = '
130SELECT MAX(date_available) AS date
131  FROM '.IMAGES_TABLE.'
132;';
133    $row = pwg_db_fetch_assoc(pwg_query($query));
134    if (!empty($row['date']))
135    {
136      $query = '
137SELECT id
138  FROM '.IMAGES_TABLE.'
139  WHERE date_available BETWEEN '.pwg_db_get_recent_period_expression(1, $row['date']).' AND \''.$row['date'].'\'
140;';
141      array_push(
142        $filter_sets,
143        array_from_query($query, 'id')
144        );
145    }
146  }
147}
148
149if (isset($_SESSION['bulk_manager_filter']['category']))
150{
151  $categories = array();
152 
153  if (isset($_SESSION['bulk_manager_filter']['category_recursive']))
154  {
155    $categories = get_subcat_ids(array($_SESSION['bulk_manager_filter']['category']));
156  }
157  else
158  {
159    $categories = array($_SESSION['bulk_manager_filter']['category']);
160  }
161 
162  $query = '
163 SELECT DISTINCT(image_id)
164   FROM '.IMAGE_CATEGORY_TABLE.'
165   WHERE category_id IN ('.implode(',', $categories).')
166 ;';
167  array_push(
168    $filter_sets,
169    array_from_query($query, 'image_id')
170    );
171}
172
173if (isset($_SESSION['bulk_manager_filter']['level']))
174{
175  $query = '
176SELECT id
177  FROM '.IMAGES_TABLE.'
178  WHERE level >= '.$_SESSION['bulk_manager_filter']['level'].'
179;';
180  array_push(
181    $filter_sets,
182    array_from_query($query, 'id')
183    );
184}
185
186$current_set = array_shift($filter_sets);
187foreach ($filter_sets as $set)
188{
189  $current_set = array_intersect($current_set, $set);
190}
191$page['cat_elements_id'] = $current_set;
192
193//  // To element_set_(global|unit).php, we must provide the elements id of the
194//  // managed category in $page['cat_elements_id'] array.
195//  $page['cat_elements_id'] = array();
196//  if (is_numeric($_GET['cat']))
197//  {
198//    $page['title'] =
199//      get_cat_display_name_from_id(
200//        $_GET['cat'],
201//        PHPWG_ROOT_PATH.'admin.php?page=cat_modify&amp;cat_id=',
202//        false
203//        );
204// 
205//    $query = '
206//  SELECT image_id
207//    FROM '.IMAGE_CATEGORY_TABLE.'
208//    WHERE category_id = '.$_GET['cat'].'
209//  ;';
210//    $page['cat_elements_id'] = array_from_query($query, 'image_id');
211//  }
212//  else if ('caddie' == $_GET['cat'])
213//  {
214//    $page['title'] = l10n('caddie');
215// 
216//    $query = '
217//  SELECT element_id
218//    FROM '.CADDIE_TABLE.'
219//    WHERE user_id = '.$user['id'].'
220//  ;';
221//    $page['cat_elements_id'] = array_from_query($query, 'element_id');
222//  }
223//  else if ('not_linked' == $_GET['cat'])
224//  {
225//    $page['title'] = l10n('Not linked elements');
226//    $template->assign(array('U_ACTIVE_MENU' => 5 ));
227// 
228//    // we are searching elements not linked to any virtual category
229//    $query = '
230//  SELECT id
231//    FROM '.IMAGES_TABLE.'
232//  ;';
233//    $all_elements = array_from_query($query, 'id');
234// 
235//    $linked_to_virtual = array();
236// 
237//    $query = '
238//  SELECT id
239//    FROM '.CATEGORIES_TABLE.'
240//    WHERE dir IS NULL
241//  ;';
242//    $virtual_categories = array_from_query($query, 'id');
243//    if (!empty($virtual_categories))
244//    {
245//      $query = '
246//  SELECT DISTINCT(image_id)
247//    FROM '.IMAGE_CATEGORY_TABLE.'
248//    WHERE category_id IN ('.implode(',', $virtual_categories).')
249//  ;';
250//      $linked_to_virtual = array_from_query($query, 'image_id');
251//    }
252// 
253//    $page['cat_elements_id'] = array_diff($all_elements, $linked_to_virtual);
254//  }
255//  else if ('duplicates' == $_GET['cat'])
256//  {
257//    $page['title'] = l10n('Files with same name in more than one physical category');
258//    $template->assign(array('U_ACTIVE_MENU' => 5 ));
259// 
260//    // we are searching related elements twice or more to physical categories
261//    // 1 - Retrieve Files
262//    $query = '
263//  SELECT DISTINCT(file)
264//    FROM '.IMAGES_TABLE.'
265//   GROUP BY file
266//  HAVING COUNT(DISTINCT storage_category_id) > 1
267//  ;';
268// 
269//    $duplicate_files = array_from_query($query, 'file');
270//    $duplicate_files[]='Nofiles';
271//    // 2 - Retrives related picture ids
272//    $query = '
273//  SELECT id, file
274//    FROM '.IMAGES_TABLE.'
275//  WHERE file IN (\''.implode("','", $duplicate_files).'\')
276//  ORDER BY file, id
277//  ;';
278// 
279//    $page['cat_elements_id'] = array_from_query($query, 'id');
280//  }
281//  elseif ('recent'== $_GET['cat'])
282//  {
283//    $page['title'] = l10n('Recent pictures');
284//    $query = 'SELECT MAX(date_available) AS date
285//    FROM '.IMAGES_TABLE;
286//    $row = pwg_db_fetch_assoc(pwg_query($query));
287//    if (!empty($row['date']))
288//    {
289//      $query = 'SELECT id
290//    FROM '.IMAGES_TABLE.'
291//    WHERE date_available BETWEEN '.pwg_db_get_recent_period_expression(1, $row['date']).' AND \''.$row['date'].'\'';
292//      $page['cat_elements_id'] = array_from_query($query, 'id');
293//    }
294//  }
295
296// +-----------------------------------------------------------------------+
297// |                       first element to display                        |
298// +-----------------------------------------------------------------------+
299
300// $page['start'] contains the number of the first element in its
301// category. For exampe, $page['start'] = 12 means we must show elements #12
302// and $page['nb_images'] next elements
303
304if (!isset($_GET['start'])
305    or !is_numeric($_GET['start'])
306    or $_GET['start'] < 0
307    or (isset($_GET['display']) and 'all' == $_GET['display']))
308{
309  $page['start'] = 0;
310}
311else
312{
313  $page['start'] = $_GET['start'];
314}
315
316// +-----------------------------------------------------------------------+
317// |                         open specific mode                            |
318// +-----------------------------------------------------------------------+
319
320$_GET['mode'] = !empty($_GET['mode']) ? $_GET['mode'] : 'global';
321
322switch ($_GET['mode'])
323{
324  case 'global' :
325  {
326    include(dirname(__FILE__).'/batch_manager_global.php');
327    break;
328  }
329  case 'unit' :
330  {
331    include(PHPWG_ROOT_PATH.'admin/element_set_unit.php');
332    break;
333  }
334}
335?>
Note: See TracBrowser for help on using the repository browser.