source: trunk/admin/cat_list.php @ 20342

Last change on this file since 20342 was 19703, checked in by plg, 11 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
RevLine 
[21]1<?php
[362]2// +-----------------------------------------------------------------------+
[8728]3// | Piwigo - a PHP based photo gallery                                    |
[2297]4// +-----------------------------------------------------------------------+
[19703]5// | Copyright(C) 2008-2013 Piwigo Team                  http://piwigo.org |
[2297]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// +-----------------------------------------------------------------------+
[345]23
[580]24if (!defined('PHPWG_ROOT_PATH'))
[394]25{
[580]26  die('Hacking attempt!');
[394]27}
[798]28
[1072]29include_once(PHPWG_ROOT_PATH.'admin/include/functions.php');
30
[580]31// +-----------------------------------------------------------------------+
[1072]32// | Check Access and exit when user status is not ok                      |
33// +-----------------------------------------------------------------------+
34check_status(ACCESS_ADMINISTRATOR);
35
[5933]36trigger_action('loc_begin_cat_list');
37
[5195]38if (!empty($_POST) or isset($_GET['delete']))
39{
40  check_pwg_token();
41}
42
[1072]43// +-----------------------------------------------------------------------+
[798]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{
[6698]58  $current_rank_for_id_uppercat = array();
[798]59  $current_rank = 0;
[6698]60 
[798]61  $datas = array();
[6698]62  foreach ($categories as $category)
[798]63  {
[6698]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));
[798]82  }
83  $fields = array('primary' => array('id'), 'update' => array('rank'));
84  mass_updates(CATEGORIES_TABLE, $fields, $datas);
85
[2306]86  update_global_rank();
[798]87}
88
89// +-----------------------------------------------------------------------+
[580]90// |                            initialization                             |
91// +-----------------------------------------------------------------------+
[834]92
[5195]93check_input_parameter('parent_id', $_GET, false, PATTERN_ID);
94
[580]95$categories = array();
[834]96
[2306]97$base_url = get_root_url().'admin.php?page=cat_list';
98$navigation = '<a href="'.$base_url.'">';
[5021]99$navigation.= l10n('Home');
[834]100$navigation.= '</a>';
101
[580]102// +-----------------------------------------------------------------------+
[13282]103// | tabs                                                                  |
104// +-----------------------------------------------------------------------+
105
106$page['tab'] = 'list';
107include(PHPWG_ROOT_PATH.'admin/include/albums_tab.inc.php');
108
109// +-----------------------------------------------------------------------+
[580]110// |                    virtual categories management                      |
111// +-----------------------------------------------------------------------+
[8131]112// request to delete a virtual category
[8126]113if (isset($_GET['delete']) and is_numeric($_GET['delete']))
[68]114{
[659]115  delete_categories(array($_GET['delete']));
[8168]116  $_SESSION['page_infos'] = array(l10n('Virtual album deleted'));
[659]117  update_global_rank();
[8168]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);
[394]125}
[602]126// request to add a virtual category
[798]127else if (isset($_POST['submitAdd']))
[394]128{
[1064]129  $output_create = create_virtual_category(
130    $_POST['virtual_name'],
131    @$_GET['parent_id']
132    );
133
134  if (isset($output_create['error']))
[580]135  {
[1064]136    array_push($page['errors'], $output_create['error']);
[580]137  }
[1064]138  else
[68]139  {
[1064]140    array_push($page['infos'], $output_create['info']);
[68]141  }
142}
[1066]143// save manual category ordering
[13282]144else if (isset($_POST['submitManualOrder']))
[798]145{
[13282]146  asort($_POST['catOrd'], SORT_NUMERIC);
147  save_categories_order(array_keys($_POST['catOrd']));
[1066]148
[13282]149  array_push(
150    $page['infos'],
151    l10n('Album manual order was saved')
152    );
153}
154else if (isset($_POST['submitAutoOrder']))
155{
156  $query = '
[6698]157SELECT id
[1066]158  FROM '.CATEGORIES_TABLE.'
159  WHERE id_uppercat '.
160    (!isset($_GET['parent_id']) ? 'IS NULL' : '= '.$_GET['parent_id']).'
161;';
[13282]162  $category_ids = array_from_query($query, 'id');
[1066]163
[13282]164  if (isset($_POST['recursive']))
165  {
166    $category_ids = get_subcat_ids($category_ids);
167  }
[6698]168 
[13282]169  $categories = array();
170  $names = array();
171  $id_uppercats = array();
172 
173  $query = '
[6698]174SELECT id, name, id_uppercat
[5079]175  FROM '.CATEGORIES_TABLE.'
[6698]176  WHERE id IN ('.implode(',', $category_ids).')
[5079]177;';
[13282]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        )
[6698]187      );
188    array_push(
[13282]189      $names,
190      $row['name']
[6698]191      );
192  }
[13282]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    );
[5079]206}
207
[580]208// +-----------------------------------------------------------------------+
209// |                            Navigation path                            |
210// +-----------------------------------------------------------------------+
[834]211
[394]212if (isset($_GET['parent_id']))
213{
[642]214  $navigation.= $conf['level_separator'];
[580]215
[1861]216  $navigation.= get_cat_display_name_from_id(
217    $_GET['parent_id'],
[1064]218    $base_url.'&amp;parent_id=',
219    false
220    );
[394]221}
[580]222// +-----------------------------------------------------------------------+
223// |                       template initialization                         |
224// +-----------------------------------------------------------------------+
[2530]225$template->set_filename('categories', 'cat_list.tpl');
[394]226
[635]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
[2223]233$template->assign(array(
[394]234  'CATEGORIES_NAV'=>$navigation,
[1004]235  'F_ACTION'=>$form_action,
[5195]236  'PWG_TOKEN' => get_pwg_token(),
[580]237 ));
[1131]238
[580]239// +-----------------------------------------------------------------------+
240// |                          Categories display                           |
241// +-----------------------------------------------------------------------+
[647]242
[798]243$categories = array();
244
245$query = '
[2324]246SELECT id, name, permalink, dir, rank, status
[798]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;';
[2324]261$categories = hash_from_query($query, 'id');
[798]262
[2324]263// get the categories containing images directly
264$categories_with_images = array();
265if ( count($categories) )
[580]266{
[647]267  $query = '
[2324]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') );
[642]272}
273
[2223]274$template->assign('categories', array());
[2324]275$base_url = get_root_url().'admin.php?page=';
[642]276foreach ($categories as $category)
277{
[580]278  $cat_list_url = $base_url.'cat_list';
[1131]279
[580]280  $self_url = $cat_list_url;
[394]281  if (isset($_GET['parent_id']))
[580]282  {
283    $self_url.= '&amp;parent_id='.$_GET['parent_id'];
284  }
[394]285
[2223]286  $tpl_cat =
[580]287    array(
[2433]288      'NAME'       => 
289        trigger_event(
290          'render_category_name',
291          $category['name'],
292          'admin_cat_list'
293          ),
[1082]294      'ID'         => $category['id'],
295      'RANK'       => $category['rank']*10,
[798]296
[1082]297      'U_JUMPTO'   => make_index_url(
298        array(
[1861]299          'category' => $category
[1082]300          )
301        ),
[1131]302
303      'U_CHILDREN' => $cat_list_url.'&amp;parent_id='.$category['id'],
[13013]304      'U_EDIT'     => $base_url.'album-'.$category['id'],
[2306]305
[2223]306      'IS_VIRTUAL' => empty($category['dir'])
[798]307    );
[1131]308
[798]309  if (empty($category['dir']))
[21]310  {
[2223]311    $tpl_cat['U_DELETE'] = $self_url.'&amp;delete='.$category['id'];
[5195]312    $tpl_cat['U_DELETE'].= '&amp;pwg_token='.get_pwg_token();
[21]313  }
[11041]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  }
[1131]321
[2324]322  if ( array_key_exists($category['id'], $categories_with_images) )
[580]323  {
[2223]324    $tpl_cat['U_MANAGE_ELEMENTS']=
[8417]325      $base_url.'batch_manager&amp;cat='.$category['id'];
[21]326  }
[798]327
[2223]328  $template->append('categories', $tpl_cat);
[21]329}
[5933]330
331trigger_action('loc_end_cat_list');
332
[580]333// +-----------------------------------------------------------------------+
334// |                          sending html code                            |
335// +-----------------------------------------------------------------------+
[394]336$template->assign_var_from_handle('ADMIN_CONTENT', 'categories');
[362]337?>
Note: See TracBrowser for help on using the repository browser.