source: trunk/admin/cat_modify.php @ 22978

Last change on this file since 22978 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: 11.0 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// +-----------------------------------------------------------------------+
[21]23
[632]24if (!defined('PHPWG_ROOT_PATH'))
[403]25{
[632]26  die('Hacking attempt!');
[403]27}
[1072]28
[1895]29include_once(PHPWG_ROOT_PATH.'include/functions_mail.inc.php');
[1072]30
[12954]31
32// get_complete_dir returns the concatenation of get_site_url and
33// get_local_dir
34// Example : "pets > rex > 1_year_old" is on the the same site as the
35// Piwigo files and this category has 22 for identifier
36// get_complete_dir(22) returns "./galleries/pets/rex/1_year_old/"
37function get_complete_dir( $category_id )
38{
39  return get_site_url($category_id).get_local_dir($category_id);
40}
41
42// get_local_dir returns an array with complete path without the site url
43// Example : "pets > rex > 1_year_old" is on the the same site as the
44// Piwigo files and this category has 22 for identifier
45// get_local_dir(22) returns "pets/rex/1_year_old/"
46function get_local_dir( $category_id )
47{
48  global $page;
49
50  $uppercats = '';
51  $local_dir = '';
52
53  if ( isset( $page['plain_structure'][$category_id]['uppercats'] ) )
54  {
55    $uppercats = $page['plain_structure'][$category_id]['uppercats'];
56  }
57  else
58  {
59    $query = 'SELECT uppercats';
60    $query.= ' FROM '.CATEGORIES_TABLE.' WHERE id = '.$category_id;
61    $query.= ';';
62    $row = pwg_db_fetch_assoc( pwg_query( $query ) );
63    $uppercats = $row['uppercats'];
64  }
65
66  $upper_array = explode( ',', $uppercats );
67
68  $database_dirs = array();
69  $query = 'SELECT id,dir';
70  $query.= ' FROM '.CATEGORIES_TABLE.' WHERE id IN ('.$uppercats.')';
71  $query.= ';';
72  $result = pwg_query( $query );
73  while( $row = pwg_db_fetch_assoc( $result ) )
74  {
75    $database_dirs[$row['id']] = $row['dir'];
76  }
77  foreach ($upper_array as $id)
78  {
79    $local_dir.= $database_dirs[$id].'/';
80  }
81
82  return $local_dir;
83}
84
85// retrieving the site url : "http://domain.com/gallery/" or
86// simply "./galleries/"
87function get_site_url($category_id)
88{
89  global $page;
90
91  $query = '
92SELECT galleries_url
93  FROM '.SITES_TABLE.' AS s,'.CATEGORIES_TABLE.' AS c
94  WHERE s.id = c.site_id
95    AND c.id = '.$category_id.'
96;';
97  $row = pwg_db_fetch_assoc(pwg_query($query));
98  return $row['galleries_url'];
99}
100
[1072]101// +-----------------------------------------------------------------------+
102// | Check Access and exit when user status is not ok                      |
103// +-----------------------------------------------------------------------+
104check_status(ACCESS_ADMINISTRATOR);
105
[5933]106trigger_action('loc_begin_cat_modify');
107
[21]108//---------------------------------------------------------------- verification
[403]109if ( !isset( $_GET['cat_id'] ) || !is_numeric( $_GET['cat_id'] ) )
[21]110{
[2490]111  trigger_error( 'missing cat_id param', E_USER_ERROR);
[21]112}
[403]113
[21]114//--------------------------------------------------------- form criteria check
[825]115if (isset($_POST['submit']))
[21]116{
[825]117  $data =
118    array(
119      'id' => $_GET['cat_id'],
120      'name' => @$_POST['name'],
121      'comment' =>
122        $conf['allow_html_descriptions'] ?
[2490]123          @$_POST['comment'] : strip_tags(@$_POST['comment']),
[825]124      );
[12887]125     
126  if ($conf['activate_comments'])
127  {
128    $data['commentable'] = isset($_POST['commentable'])?$_POST['commentable']:'false';
129  }
[38]130
[825]131  mass_updates(
132    CATEGORIES_TABLE,
133    array(
134      'primary' => array('id'),
135      'update' => array_diff(array_keys($data), array('id'))
136      ),
137    array($data)
138    );
[1131]139
[2490]140  // retrieve cat infos before continuing (following updates are expensive)
141  $cat_info = get_cat_info($_GET['cat_id']);
[345]142
[2490]143  if ($cat_info['visible'] != get_boolean( $_POST['visible'] ) )
[1500]144  {
[2490]145    set_cat_visible(array($_GET['cat_id']), $_POST['visible']);
[1500]146  }
[2490]147
[12576]148  // in case the use moves his album to the gallery root, we force
149  // $_POST['parent'] from 0 to null to be compared with
150  // $cat_info['id_uppercat']
151  if (empty($_POST['parent']))
[1500]152  {
[12576]153    $_POST['parent'] = null;
154  }
[12591]155
156  // only move virtual albums
157  if (empty($cat_info['dir']) and $cat_info['id_uppercat'] != $_POST['parent'])
[12576]158  {
[2490]159    move_categories( array($_GET['cat_id']), $_POST['parent'] );
[1500]160  }
161
[14506]162  $_SESSION['page_infos'][] = l10n('Album updated successfully');
163  $redirect = true;
[21]164}
[2490]165elseif (isset($_POST['set_random_representant']))
[633]166{
167  set_random_representant(array($_GET['cat_id']));
[14506]168  $redirect = true;
[633]169}
[2490]170elseif (isset($_POST['delete_representant']))
[809]171{
172  $query = '
173UPDATE '.CATEGORIES_TABLE.'
174  SET representative_picture_id = NULL
175  WHERE id = '.$_GET['cat_id'].'
176;';
177  pwg_query($query);
[14506]178  $redirect = true;
[809]179}
[1131]180
[14506]181if (isset($redirect))
182{
183  redirect($admin_album_base_url.'-properties');
184}
185
[530]186// nullable fields
[809]187foreach (array('comment','dir','site_id', 'id_uppercat') as $nullable)
[530]188{
189  if (!isset($category[$nullable]))
190  {
191    $category[$nullable] = '';
192  }
193}
[345]194
[809]195$category['is_virtual'] = empty($category['dir']) ? true : false;
196
[2324]197$query = 'SELECT DISTINCT category_id
198  FROM '.IMAGE_CATEGORY_TABLE.'
199  WHERE category_id = '.$_GET['cat_id'].'
200  LIMIT 1';
201$result = pwg_query($query);
[4325]202$category['has_images'] = pwg_db_num_rows($result)>0 ? true : false;
[2223]203
[403]204// Navigation path
[834]205$navigation = get_cat_display_name_cache(
[635]206  $category['uppercats'],
[13013]207  get_root_url().'admin.php?page=album-'
[834]208  );
[345]209
[13013]210$form_action = $admin_album_base_url.'-properties';
[403]211
212//----------------------------------------------------- template initialization
[13013]213$template->set_filename( 'album_properties', 'cat_modify.tpl');
[809]214
[2286]215$base_url = get_root_url().'admin.php?page=';
[809]216$cat_list_url = $base_url.'cat_list';
[1131]217
[809]218$self_url = $cat_list_url;
219if (!empty($category['id_uppercat']))
220{
221  $self_url.= '&amp;parent_id='.$category['id_uppercat'];
222}
223
[2223]224$template->assign(
[1131]225  array(
[1082]226    'CATEGORIES_NAV'     => $navigation,
[2777]227    'CAT_ID'             => $category['id'],
[2223]228    'CAT_NAME'           => @htmlspecialchars($category['name']),
229    'CAT_COMMENT'        => @htmlspecialchars($category['comment']),
[4385]230    'CAT_VISIBLE'       => boolean_to_string($category['visible']),
[2223]231
[1082]232    'U_JUMPTO' => make_index_url(
233      array(
[1861]234        'category' => $category
[1082]235        )
236      ),
[1131]237
[1082]238    'U_CHILDREN' => $cat_list_url.'&amp;parent_id='.$category['id'],
[5920]239    'U_HELP' => get_root_url().'admin/popuphelp.php?page=cat_modify',
[1131]240
[1082]241    'F_ACTION' => $form_action,
242    )
243  );
[12887]244 
245if ($conf['activate_comments'])
246{
247  $template->assign('CAT_COMMENTABLE', boolean_to_string($category['commentable']));
248}
[633]249
[6988]250// manage album elements link
[2324]251if ($category['has_images'])
[633]252{
[2517]253  $template->assign(
254    'U_MANAGE_ELEMENTS',
[8417]255    $base_url.'batch_manager&amp;cat='.$category['id']
[2223]256    );
[13013]257
258  $query = '
259SELECT
260    COUNT(image_id),
261    MIN(DATE(date_available)),
262    MAX(DATE(date_available))
263  FROM '.IMAGES_TABLE.'
264    JOIN '.IMAGE_CATEGORY_TABLE.' ON image_id = id
265  WHERE category_id = '.$category['id'].'
266;';
267  list($image_count, $min_date, $max_date) = pwg_db_fetch_row(pwg_query($query));
268
269  if ($min_date == $max_date)
270  {
271    $intro = sprintf(
272      l10n('This album contains %d photos, added on %s.'),
273      $image_count,
274      format_date($min_date)
275      );
276  }
277  else
278  {
279    $intro = sprintf(
280      l10n('This album contains %d photos, added between %s and %s.'),
281      $image_count,
282      format_date($min_date),
283      format_date($max_date)
284      );
285  }
[2223]286}
[13013]287else
288{
289  $intro = l10n('This album contains no photo.');
290}
[2223]291
[14990]292$intro.= '<br>'.sprintf(l10n('Numeric identifier : %d'), $category['id']);
293
[13013]294$template->assign('INTRO', $intro);
295
[9051]296$template->assign(
297  'U_MANAGE_RANKS',
298  $base_url.'element_set_ranks&amp;cat_id='.$category['id']
299  );
300
[2223]301if ($category['is_virtual'])
302{
303  $template->assign(
[809]304    array(
[5335]305      'U_DELETE' => $self_url.'&amp;delete='.$category['id'].'&amp;pwg_token='.get_pwg_token(),
[809]306      )
307    );
308}
[2223]309else
[1500]310{
[2223]311  $category['cat_full_dir'] = get_complete_dir($_GET['cat_id']);
312  $template->assign(
313    array(
[13013]314      'CAT_FULL_DIR' => preg_replace('/\/$/', '', $category['cat_full_dir'])
[2223]315      )
316    );
[11041]317
318  if ($conf['enable_synchronization'])
319  {
320    $template->assign(
321      'U_SYNC',
322      $base_url.'site_update&amp;site=1&amp;cat_id='.$category['id']
323      );
324  }
325
[1500]326}
327
[809]328// representant management
[2324]329if ($category['has_images']
[809]330    or !empty($category['representative_picture_id']))
331{
[2223]332  $tpl_representant = array();
[809]333
334  // picture to display : the identified representant or the generic random
335  // representant ?
336  if (!empty($category['representative_picture_id']))
337  {
338    $query = '
[12796]339SELECT id,representative_ext,path
[633]340  FROM '.IMAGES_TABLE.'
341  WHERE id = '.$category['representative_picture_id'].'
342;';
[4325]343    $row = pwg_db_fetch_assoc(pwg_query($query));
[12796]344    $src = DerivativeImage::thumb_url($row);
[13077]345    $url = get_root_url().'admin.php?page=photo-'.$category['representative_picture_id'];
[1131]346
[2223]347    $tpl_representant['picture'] =
[809]348      array(
349        'SRC' => $src,
350        'URL' => $url
351      );
352  }
353
354  // can the admin choose to set a new random representant ?
[2324]355  $tpl_representant['ALLOW_SET_RANDOM'] = ($category['has_images']) ? true : false;
[809]356
357  // can the admin delete the current representant ?
358  if (
[2324]359    ($category['has_images']
[809]360     and $conf['allow_random_representative'])
361    or
[2324]362    (!$category['has_images']
[809]363     and !empty($category['representative_picture_id'])))
364  {
[2223]365    $tpl_representant['ALLOW_DELETE'] = true;
[809]366  }
[2223]367  $template->assign('representant', $tpl_representant);
[633]368}
369
[2223]370if ($category['is_virtual'])
[68]371{
[809]372  // the category can be moved in any category but in itself, in any
373  // sub-category
374  $unmovables = get_subcat_ids(array($category['id']));
[1131]375
[809]376  $query = '
377SELECT id,name,uppercats,global_rank
378  FROM '.CATEGORIES_TABLE.'
379  WHERE id NOT IN ('.implode(',', $unmovables).')
380;';
[1131]381
[809]382  display_select_cat_wrapper(
383    $query,
384    empty($category['id_uppercat']) ? array() : array($category['id_uppercat']),
[2223]385    'move_cat_options'
[809]386    );
387}
388
[5933]389trigger_action('loc_end_cat_modify');
390
[21]391//----------------------------------------------------------- sending html code
[13013]392$template->assign_var_from_handle('ADMIN_CONTENT', 'album_properties');
[7024]393?>
Note: See TracBrowser for help on using the repository browser.