source: trunk/admin/picture_modify.php @ 19703

Last change on this file since 19703 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: 13.0 KB
RevLine 
[61]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// +-----------------------------------------------------------------------+
[61]23
[575]24if(!defined("PHPWG_ROOT_PATH"))
[509]25{
[825]26  die('Hacking attempt!');
[509]27}
[825]28
[1072]29include_once(PHPWG_ROOT_PATH.'admin/include/functions.php');
30
[825]31// +-----------------------------------------------------------------------+
[1072]32// | Check Access and exit when user status is not ok                      |
33// +-----------------------------------------------------------------------+
34check_status(ACCESS_ADMINISTRATOR);
35
[5195]36check_input_parameter('image_id', $_GET, false, PATTERN_ID);
37check_input_parameter('cat_id', $_GET, false, PATTERN_ID);
38
[13077]39// represent
40$query = '
41SELECT id
42  FROM '.CATEGORIES_TABLE.'
43  WHERE representative_picture_id = '.$_GET['image_id'].'
44;';
45$represent_options_selected = array_from_query($query, 'id');
46
[1072]47// +-----------------------------------------------------------------------+
[8764]48// |                             delete photo                              |
49// +-----------------------------------------------------------------------+
50
51if (isset($_GET['delete']))
52{
53  check_pwg_token();
54
55  delete_elements(array($_GET['image_id']), true);
[16334]56  invalidate_user_cache();
[8764]57
58  // where to redirect the user now?
59  //
60  // 1. if a category is available in the URL, use it
61  // 2. else use the first reachable linked category
62  // 3. redirect to gallery root
63
[9943]64  if (isset($_GET['cat_id']) and !empty($_GET['cat_id']))
[8764]65  {
66    redirect(
67      make_index_url(
68        array(
69          'category' => get_cat_info($_GET['cat_id'])
70          )
71        )
72      );
73  }
74
75  $query = '
76SELECT category_id
77  FROM '.IMAGE_CATEGORY_TABLE.'
78  WHERE image_id = '.$_GET['image_id'].'
79;';
80
81  $authorizeds = array_diff(
82    array_from_query($query, 'category_id'),
83    explode(',', calculate_permissions($user['id'], $user['status']))
84    );
85 
86  foreach ($authorizeds as $category_id)
87  {
88    redirect(
89      make_index_url(
90        array(
91          'category' => get_cat_info($category_id)
92          )
93        )
94      );
95  }
96
97  redirect(make_index_url());
98}
99
100// +-----------------------------------------------------------------------+
[825]101// |                          synchronize metadata                         |
102// +-----------------------------------------------------------------------+
103
[8126]104if (isset($_GET['sync_metadata']))
[825]105{
[12831]106  sync_metadata(array( intval($_GET['image_id'])));
[825]107  array_push($page['infos'], l10n('Metadata synchronized from file'));
108}
109
[61]110//--------------------------------------------------------- update informations
[825]111
[61]112// first, we verify whether there is a mistake on the given creation date
[825]113if (isset($_POST['date_creation_action'])
114    and 'set' == $_POST['date_creation_action'])
[61]115{
[5288]116  if (!is_numeric($_POST['date_creation_year'])
117    or !checkdate(
118          $_POST['date_creation_month'],
119          $_POST['date_creation_day'],
120          $_POST['date_creation_year'])
[825]121    )
[575]122  {
[5021]123    array_push($page['errors'], l10n('wrong date'));
[575]124  }
[61]125}
[825]126
[8126]127if (isset($_POST['submit']) and count($page['errors']) == 0)
[61]128{
[825]129  $data = array();
130  $data{'id'} = $_GET['image_id'];
131  $data{'name'} = $_POST['name'];
132  $data{'author'} = $_POST['author'];
[2090]133  $data['level'] = $_POST['level'];
[61]134
[825]135  if ($conf['allow_html_descriptions'])
136  {
137    $data{'comment'} = @$_POST['description'];
138  }
[61]139  else
[825]140  {
141    $data{'comment'} = strip_tags(@$_POST['description']);
142  }
[61]143
[13077]144  if (!empty($_POST['date_creation_year']))
[825]145  {
[13077]146    $data{'date_creation'} =
147      $_POST['date_creation_year']
148      .'-'.$_POST['date_creation_month']
149      .'-'.$_POST['date_creation_day'];
[825]150  }
[13077]151  else
152  {
153    $data{'date_creation'} = null;
154  }
[61]155
[825]156  mass_updates(
157    IMAGES_TABLE,
158    array(
159      'primary' => array('id'),
160      'update' => array_diff(array_keys($data), array('id'))
161      ),
162    array($data)
163    );
164
[5188]165  // time to deal with tags
[5067]166  $tag_ids = array();
[11220]167  if (!empty($_POST['tags']))
[5067]168  {
[11039]169    $tag_ids = get_tag_ids($_POST['tags']);
[5067]170  }
[5188]171  set_tags($tag_ids, $_GET['image_id']);
[1119]172
[13077]173  // association to albums
[17980]174  if (!isset($_POST['associate']))
175  {
176    $_POST['associate'] = array();
177  }
[13077]178  move_images_to_categories(array($_GET['image_id']), $_POST['associate']);
[1609]179
[13077]180  // thumbnail for albums
181  if (!isset($_POST['represent']))
[640]182  {
[13077]183    $_POST['represent'] = array();
[640]184  }
[13077]185 
186  $no_longer_thumbnail_for = array_diff($represent_options_selected, $_POST['represent']);
187  if (count($no_longer_thumbnail_for) > 0)
188  {
189    set_random_representant($no_longer_thumbnail_for);
190  }
191
192  $new_thumbnail_for = array_diff($_POST['represent'], $represent_options_selected);
193  if (count($new_thumbnail_for) > 0)
194  {
195    $query = '
196UPDATE '.CATEGORIES_TABLE.'
197  SET representative_picture_id = '.$_GET['image_id'].'
198  WHERE id IN ('.implode(',', $new_thumbnail_for).')
199;';
200    pwg_query($query);
201  }
202
203  $represent_options_selected = $_POST['represent'];
204 
205  array_push($page['infos'], l10n('Photo informations updated'));
[640]206}
[61]207
[5067]208// tags
209$query = '
210SELECT
[11853]211    id,
212    name
[5067]213  FROM '.IMAGE_TAG_TABLE.' AS it
214    JOIN '.TAGS_TABLE.' AS t ON t.id = it.tag_id
215  WHERE image_id = '.$_GET['image_id'].'
216;';
[11039]217$tag_selection = get_taglist($query);
[5067]218
[11039]219$query = '
220SELECT
[11853]221    id,
222    name
[11039]223  FROM '.TAGS_TABLE.'
224;';
[12259]225$tags = get_taglist($query, false);
[11039]226
[61]227// retrieving direct information about picture
[575]228$query = '
[825]229SELECT *
230  FROM '.IMAGES_TABLE.'
231  WHERE id = '.$_GET['image_id'].'
[575]232;';
[4325]233$row = pwg_db_fetch_assoc(pwg_query($query));
[345]234
[2575]235$storage_category_id = null;
236if (!empty($row['storage_category_id']))
237{
238  $storage_category_id = $row['storage_category_id'];
239}
240
[1092]241$image_file = $row['file'];
[635]242
[825]243// +-----------------------------------------------------------------------+
244// |                             template init                             |
245// +-----------------------------------------------------------------------+
246
[817]247$template->set_filenames(
248  array(
[2530]249    'picture_modify' => 'picture_modify.tpl'
[817]250    )
251  );
252
[13077]253$admin_url_start = $admin_photo_base_url.'-properties';
[8764]254$admin_url_start.= isset($_GET['cat_id']) ? '&amp;cat_id='.$_GET['cat_id'] : '';
255
[2227]256$template->assign(
[825]257  array(
[11039]258    'tag_selection' => $tag_selection,
[5067]259    'tags' => $tags,
[8764]260    'U_SYNC' => $admin_url_start.'&amp;sync_metadata=1',
261    'U_DELETE' => $admin_url_start.'&amp;delete=1&amp;pwg_token='.get_pwg_token(),
[1092]262
[825]263    'PATH'=>$row['path'],
[1092]264
[12796]265    'TN_SRC' => DerivativeImage::thumb_url($row),
[1092]266
[825]267    'NAME' =>
268      isset($_POST['name']) ?
269        stripslashes($_POST['name']) : @$row['name'],
[1092]270
[13077]271    'TITLE' => render_element_name($row),
272
[825]273    'DIMENSIONS' => @$row['width'].' * '.@$row['height'],
[1092]274
[825]275    'FILESIZE' => @$row['filesize'].' KB',
[1092]276
[3122]277    'REGISTRATION_DATE' => format_date($row['date_available']),
[1092]278
[6714]279    'AUTHOR' => htmlspecialchars(
280      isset($_POST['author'])
281        ? stripslashes($_POST['author'])
282        : @$row['author']
283      ),
[1092]284
[825]285    'DESCRIPTION' =>
[1861]286      htmlspecialchars( isset($_POST['description']) ?
287        stripslashes($_POST['description']) : @$row['comment'] ),
[1092]288
[825]289    'F_ACTION' =>
[2304]290        get_root_url().'admin.php'
[825]291        .get_query_string_diff(array('sync_metadata'))
292    )
293  );
294
[13077]295$added_by = 'N/A';
296$query = '
297SELECT '.$conf['user_fields']['username'].' AS username
298  FROM '.USERS_TABLE.'
299  WHERE '.$conf['user_fields']['id'].' = '.$row['added_by'].'
300;';
301$result = pwg_query($query);
302while ($user_row = pwg_db_fetch_assoc($result))
303{
[13084]304  $row['added_by'] = $user_row['username'];
[13077]305}
306
[13084]307$intro_vars = array(
308  'file' => sprintf(l10n('Original file : %s'), $row['file']),
[13086]309  'add_date' => sprintf(l10n('Posted %s on %s'), time_since($row['date_available'], 'year'), format_date($row['date_available'], false, false)),
310  'added_by' => sprintf(l10n('Added by %s'), $row['added_by']),
[13084]311  'size' => $row['width'].'&times;'.$row['height'].' pixels, '.sprintf('%.2f', $row['filesize']/1024).'MB',
[13086]312  'stats' => sprintf(l10n('Visited %d times'), $row['hit']),
[13084]313  'id' => sprintf(l10n('Numeric identifier : %d'), $row['id']),
[13077]314  );
315
316if ($conf['rate'] and !empty($row['rating_score']))
317{
318  $query = '
319SELECT
320    COUNT(*)
321  FROM '.RATE_TABLE.'
322  WHERE element_id = '.$_GET['image_id'].'
323;';
[13084]324  list($row['nb_rates']) = pwg_db_fetch_row(pwg_query($query));
[13077]325 
[13086]326  $intro_vars['stats'].= ', '.sprintf(l10n('Rated %d times, score : %.2f'), $row['nb_rates'], $row['rating_score']);
[13077]327}
328
[13084]329$template->assign('INTRO', $intro_vars);
330 
[13077]331
[13038]332if (in_array(get_extension($row['path']),$conf['picture_ext']))
333{
334  $template->assign('U_COI', get_root_url().'admin.php?page=picture_coi&amp;image_id='.$_GET['image_id']);
335}
336
[2090]337// image level options
[2227]338$selected_level = isset($_POST['level']) ? $_POST['level'] : $row['level'];
339$template->assign(
[2090]340    array(
[6025]341      'level_options'=> get_privacy_level_options(),
[2227]342      'level_options_selected' => array($selected_level)
343    )
344  );
[2090]345
[825]346// creation date
347unset($day, $month, $year);
348
349if (isset($_POST['date_creation_action'])
350    and 'set' == $_POST['date_creation_action'])
351{
352  foreach (array('day', 'month', 'year') as $varname)
353  {
354    $$varname = $_POST['date_creation_'.$varname];
355  }
356}
357else if (isset($row['date_creation']) and !empty($row['date_creation']))
358{
359  list($year, $month, $day) = explode('-', $row['date_creation']);
360}
361else
362{
363  list($year, $month, $day) = array('', 0, 0);
364}
[2227]365
366
367$month_list = $lang['month'];
368$month_list[0]='------------';
369ksort($month_list);
[1092]370
[2227]371$template->assign(
372    array(
373      'DATE_CREATION_DAY_VALUE' => $day,
374      'DATE_CREATION_MONTH_VALUE' => $month,
375      'DATE_CREATION_YEAR_VALUE' => $year,
376      'month_list' => $month_list,
377      )
378    );
379
[825]380$query = '
381SELECT category_id, uppercats
382  FROM '.IMAGE_CATEGORY_TABLE.' AS ic
383    INNER JOIN '.CATEGORIES_TABLE.' AS c
384      ON c.id = ic.category_id
385  WHERE image_id = '.$_GET['image_id'].'
386;';
387$result = pwg_query($query);
388
[4325]389while ($row = pwg_db_fetch_assoc($result))
[825]390{
391  $name =
392    get_cat_display_name_cache(
393      $row['uppercats'],
[13013]394      get_root_url().'admin.php?page=album-',
[825]395      false
396      );
[1092]397
[825]398  if ($row['category_id'] == $storage_category_id)
399  {
[2227]400    $template->assign('STORAGE_CATEGORY', $name);
[825]401  }
402  else
403  {
[2227]404    $template->append('related_categories', $name);
[825]405  }
406}
407
408// jump to link
409//
410// 1. find all linked categories that are reachable for the current user.
411// 2. if a category is available in the URL, use it if reachable
412// 3. if URL category not available or reachable, use the first reachable
413//    linked category
414// 4. if no category reachable, no jumpto link
415
416$query = '
417SELECT category_id
418  FROM '.IMAGE_CATEGORY_TABLE.'
419  WHERE image_id = '.$_GET['image_id'].'
420;';
[1082]421
[825]422$authorizeds = array_diff(
423  array_from_query($query, 'category_id'),
[1082]424  explode(
425    ',',
426    calculate_permissions($user['id'], $user['status'])
427    )
[825]428  );
429
430if (isset($_GET['cat_id'])
431    and in_array($_GET['cat_id'], $authorizeds))
432{
[1503]433  $url_img = make_picture_url(
[1082]434    array(
435      'image_id' => $_GET['image_id'],
[1092]436      'image_file' => $image_file,
[1861]437      'category' => $cache['cat_names'][ $_GET['cat_id'] ],
[1082]438      )
439    );
[825]440}
441else
442{
443  foreach ($authorizeds as $category)
444  {
[1503]445    $url_img = make_picture_url(
[1082]446      array(
447        'image_id' => $_GET['image_id'],
[1092]448        'image_file' => $image_file,
[1861]449        'category' => $cache['cat_names'][ $category ],
[1082]450        )
451      );
[825]452    break;
453  }
454}
455
456if (isset($url_img))
457{
[2227]458  $template->assign( 'U_JUMPTO', $url_img );
[825]459}
[1092]460
[13077]461// associate to albums
[635]462$query = '
[13077]463SELECT id
[635]464  FROM '.CATEGORIES_TABLE.'
465    INNER JOIN '.IMAGE_CATEGORY_TABLE.' ON id = category_id
[13077]466  WHERE image_id = '.$_GET['image_id'].'
[635]467;';
[13077]468$associate_options_selected = array_from_query($query, 'id');
[635]469
470$query = '
471SELECT id,name,uppercats,global_rank
472  FROM '.CATEGORIES_TABLE.'
473;';
[13077]474display_select_cat_wrapper($query, $associate_options_selected, 'associate_options');
475display_select_cat_wrapper($query, $represent_options_selected, 'represent_options');
[809]476
[61]477//----------------------------------------------------------- sending html code
[817]478
[509]479$template->assign_var_from_handle('ADMIN_CONTENT', 'picture_modify');
[362]480?>
Note: See TracBrowser for help on using the repository browser.