source: branches/2.5/admin/cat_list.php @ 21187

Last change on this file since 21187 was 19703, checked in by plg, 12 years ago

update Piwigo headers to 2013 (the end of the world didn't occur as expected on r12922)

  • Property svn:eol-style set to LF
File size: 9.9 KB
Line 
1<?php
2// +-----------------------------------------------------------------------+
3// | Piwigo - a PHP based photo gallery                                    |
4// +-----------------------------------------------------------------------+
5// | Copyright(C) 2008-2013 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
24if (!defined('PHPWG_ROOT_PATH'))
25{
26  die('Hacking attempt!');
27}
28
29include_once(PHPWG_ROOT_PATH.'admin/include/functions.php');
30
31// +-----------------------------------------------------------------------+
32// | Check Access and exit when user status is not ok                      |
33// +-----------------------------------------------------------------------+
34check_status(ACCESS_ADMINISTRATOR);
35
36trigger_action('loc_begin_cat_list');
37
38if (!empty($_POST) or isset($_GET['delete']))
39{
40  check_pwg_token();
41}
42
43// +-----------------------------------------------------------------------+
44// |                               functions                               |
45// +-----------------------------------------------------------------------+
46
47/**
48 * save the rank depending on given categories order
49 *
50 * The list of ordered categories id is supposed to be in the same parent
51 * category
52 *
53 * @param array categories
54 * @return void
55 */
56function save_categories_order($categories)
57{
58  $current_rank_for_id_uppercat = array();
59  $current_rank = 0;
60 
61  $datas = array();
62  foreach ($categories as $category)
63  {
64    if (is_array($category))
65    {
66      $id = $category['id'];
67      $id_uppercat = $category['id_uppercat'];
68
69      if (!isset($current_rank_for_id_uppercat[$id_uppercat]))
70      {
71        $current_rank_for_id_uppercat[$id_uppercat] = 0;
72      }
73      $current_rank = ++$current_rank_for_id_uppercat[$id_uppercat];
74    }
75    else
76    {
77      $id = $category;
78      $current_rank++;
79    }
80   
81    array_push($datas, array('id' => $id, 'rank' => $current_rank));
82  }
83  $fields = array('primary' => array('id'), 'update' => array('rank'));
84  mass_updates(CATEGORIES_TABLE, $fields, $datas);
85
86  update_global_rank();
87}
88
89// +-----------------------------------------------------------------------+
90// |                            initialization                             |
91// +-----------------------------------------------------------------------+
92
93check_input_parameter('parent_id', $_GET, false, PATTERN_ID);
94
95$categories = array();
96
97$base_url = get_root_url().'admin.php?page=cat_list';
98$navigation = '<a href="'.$base_url.'">';
99$navigation.= l10n('Home');
100$navigation.= '</a>';
101
102// +-----------------------------------------------------------------------+
103// | tabs                                                                  |
104// +-----------------------------------------------------------------------+
105
106$page['tab'] = 'list';
107include(PHPWG_ROOT_PATH.'admin/include/albums_tab.inc.php');
108
109// +-----------------------------------------------------------------------+
110// |                    virtual categories management                      |
111// +-----------------------------------------------------------------------+
112// request to delete a virtual category
113if (isset($_GET['delete']) and is_numeric($_GET['delete']))
114{
115  delete_categories(array($_GET['delete']));
116  $_SESSION['page_infos'] = array(l10n('Virtual album deleted'));
117  update_global_rank();
118
119  $redirect_url = get_root_url().'admin.php?page=cat_list';
120  if (isset($_GET['parent_id']))
121  {
122    $redirect_url.= '&parent_id='.$_GET['parent_id'];
123  } 
124  redirect($redirect_url);
125}
126// request to add a virtual category
127else if (isset($_POST['submitAdd']))
128{
129  $output_create = create_virtual_category(
130    $_POST['virtual_name'],
131    @$_GET['parent_id']
132    );
133
134  if (isset($output_create['error']))
135  {
136    array_push($page['errors'], $output_create['error']);
137  }
138  else
139  {
140    array_push($page['infos'], $output_create['info']);
141  }
142}
143// save manual category ordering
144else if (isset($_POST['submitManualOrder']))
145{
146  asort($_POST['catOrd'], SORT_NUMERIC);
147  save_categories_order(array_keys($_POST['catOrd']));
148
149  array_push(
150    $page['infos'],
151    l10n('Album manual order was saved')
152    );
153}
154else if (isset($_POST['submitAutoOrder']))
155{
156  $query = '
157SELECT id
158  FROM '.CATEGORIES_TABLE.'
159  WHERE id_uppercat '.
160    (!isset($_GET['parent_id']) ? 'IS NULL' : '= '.$_GET['parent_id']).'
161;';
162  $category_ids = array_from_query($query, 'id');
163
164  if (isset($_POST['recursive']))
165  {
166    $category_ids = get_subcat_ids($category_ids);
167  }
168 
169  $categories = array();
170  $names = array();
171  $id_uppercats = array();
172 
173  $query = '
174SELECT id, name, id_uppercat
175  FROM '.CATEGORIES_TABLE.'
176  WHERE id IN ('.implode(',', $category_ids).')
177;';
178  $result = pwg_query($query);
179  while ($row = pwg_db_fetch_assoc($result))
180  {
181    array_push(
182      $categories,
183      array(
184        'id' => $row['id'],
185        'id_uppercat' => $row['id_uppercat'],
186        )
187      );
188    array_push(
189      $names,
190      $row['name']
191      );
192  }
193
194  array_multisort(
195    $names,
196    SORT_REGULAR,
197    'asc' == $_POST['ascdesc'] ? SORT_ASC : SORT_DESC,
198    $categories
199    );
200  save_categories_order($categories);
201
202  array_push(
203    $page['infos'],
204    l10n('Albums automatically sorted')
205    );
206}
207
208// +-----------------------------------------------------------------------+
209// |                            Navigation path                            |
210// +-----------------------------------------------------------------------+
211
212if (isset($_GET['parent_id']))
213{
214  $navigation.= $conf['level_separator'];
215
216  $navigation.= get_cat_display_name_from_id(
217    $_GET['parent_id'],
218    $base_url.'&amp;parent_id=',
219    false
220    );
221}
222// +-----------------------------------------------------------------------+
223// |                       template initialization                         |
224// +-----------------------------------------------------------------------+
225$template->set_filename('categories', 'cat_list.tpl');
226
227$form_action = PHPWG_ROOT_PATH.'admin.php?page=cat_list';
228if (isset($_GET['parent_id']))
229{
230  $form_action.= '&amp;parent_id='.$_GET['parent_id'];
231}
232
233$template->assign(array(
234  'CATEGORIES_NAV'=>$navigation,
235  'F_ACTION'=>$form_action,
236  'PWG_TOKEN' => get_pwg_token(),
237 ));
238
239// +-----------------------------------------------------------------------+
240// |                          Categories display                           |
241// +-----------------------------------------------------------------------+
242
243$categories = array();
244
245$query = '
246SELECT id, name, permalink, dir, rank, status
247  FROM '.CATEGORIES_TABLE;
248if (!isset($_GET['parent_id']))
249{
250  $query.= '
251  WHERE id_uppercat IS NULL';
252}
253else
254{
255  $query.= '
256  WHERE id_uppercat = '.$_GET['parent_id'];
257}
258$query.= '
259  ORDER BY rank ASC
260;';
261$categories = hash_from_query($query, 'id');
262
263// get the categories containing images directly
264$categories_with_images = array();
265if ( count($categories) )
266{
267  $query = '
268SELECT DISTINCT category_id
269  FROM '.IMAGE_CATEGORY_TABLE.'
270  WHERE category_id IN ('.implode(',', array_keys($categories)).')';
271  $categories_with_images = array_flip( array_from_query($query, 'category_id') );
272}
273
274$template->assign('categories', array());
275$base_url = get_root_url().'admin.php?page=';
276foreach ($categories as $category)
277{
278  $cat_list_url = $base_url.'cat_list';
279
280  $self_url = $cat_list_url;
281  if (isset($_GET['parent_id']))
282  {
283    $self_url.= '&amp;parent_id='.$_GET['parent_id'];
284  }
285
286  $tpl_cat =
287    array(
288      'NAME'       => 
289        trigger_event(
290          'render_category_name',
291          $category['name'],
292          'admin_cat_list'
293          ),
294      'ID'         => $category['id'],
295      'RANK'       => $category['rank']*10,
296
297      'U_JUMPTO'   => make_index_url(
298        array(
299          'category' => $category
300          )
301        ),
302
303      'U_CHILDREN' => $cat_list_url.'&amp;parent_id='.$category['id'],
304      'U_EDIT'     => $base_url.'album-'.$category['id'],
305
306      'IS_VIRTUAL' => empty($category['dir'])
307    );
308
309  if (empty($category['dir']))
310  {
311    $tpl_cat['U_DELETE'] = $self_url.'&amp;delete='.$category['id'];
312    $tpl_cat['U_DELETE'].= '&amp;pwg_token='.get_pwg_token();
313  }
314  else
315  {
316    if ($conf['enable_synchronization'])
317    {
318      $tpl_cat['U_SYNC'] = $base_url.'site_update&amp;site=1&amp;cat_id='.$category['id'];
319    }
320  }
321
322  if ( array_key_exists($category['id'], $categories_with_images) )
323  {
324    $tpl_cat['U_MANAGE_ELEMENTS']=
325      $base_url.'batch_manager&amp;cat='.$category['id'];
326  }
327
328  $template->append('categories', $tpl_cat);
329}
330
331trigger_action('loc_end_cat_list');
332
333// +-----------------------------------------------------------------------+
334// |                          sending html code                            |
335// +-----------------------------------------------------------------------+
336$template->assign_var_from_handle('ADMIN_CONTENT', 'categories');
337?>
Note: See TracBrowser for help on using the repository browser.