source: branches/2.4/admin/picture_modify.php @ 18333

Last change on this file since 18333 was 17982, checked in by plg, 12 years ago

merge r17980 from trunk to branch 2.4

little code refactoring over r17424

bug fixed on Edit Photo page when associating with no album.

  • Property svn:eol-style set to LF
File size: 13.0 KB
Line 
1<?php
2// +-----------------------------------------------------------------------+
3// | Piwigo - a PHP based photo gallery                                    |
4// +-----------------------------------------------------------------------+
5// | Copyright(C) 2008-2012 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
36check_input_parameter('image_id', $_GET, false, PATTERN_ID);
37check_input_parameter('cat_id', $_GET, false, PATTERN_ID);
38
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
47// +-----------------------------------------------------------------------+
48// |                             delete photo                              |
49// +-----------------------------------------------------------------------+
50
51if (isset($_GET['delete']))
52{
53  check_pwg_token();
54
55  delete_elements(array($_GET['image_id']), true);
56  invalidate_user_cache();
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
64  if (isset($_GET['cat_id']) and !empty($_GET['cat_id']))
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// +-----------------------------------------------------------------------+
101// |                          synchronize metadata                         |
102// +-----------------------------------------------------------------------+
103
104if (isset($_GET['sync_metadata']))
105{
106  sync_metadata(array( intval($_GET['image_id'])));
107  array_push($page['infos'], l10n('Metadata synchronized from file'));
108}
109
110//--------------------------------------------------------- update informations
111
112// first, we verify whether there is a mistake on the given creation date
113if (isset($_POST['date_creation_action'])
114    and 'set' == $_POST['date_creation_action'])
115{
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'])
121    )
122  {
123    array_push($page['errors'], l10n('wrong date'));
124  }
125}
126
127if (isset($_POST['submit']) and count($page['errors']) == 0)
128{
129  $data = array();
130  $data{'id'} = $_GET['image_id'];
131  $data{'name'} = $_POST['name'];
132  $data{'author'} = $_POST['author'];
133  $data['level'] = $_POST['level'];
134
135  if ($conf['allow_html_descriptions'])
136  {
137    $data{'comment'} = @$_POST['description'];
138  }
139  else
140  {
141    $data{'comment'} = strip_tags(@$_POST['description']);
142  }
143
144  if (!empty($_POST['date_creation_year']))
145  {
146    $data{'date_creation'} =
147      $_POST['date_creation_year']
148      .'-'.$_POST['date_creation_month']
149      .'-'.$_POST['date_creation_day'];
150  }
151  else
152  {
153    $data{'date_creation'} = null;
154  }
155
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
165  // time to deal with tags
166  $tag_ids = array();
167  if (!empty($_POST['tags']))
168  {
169    $tag_ids = get_tag_ids($_POST['tags']);
170  }
171  set_tags($tag_ids, $_GET['image_id']);
172
173  // association to albums
174  if (!isset($_POST['associate']))
175  {
176    $_POST['associate'] = array();
177  }
178  move_images_to_categories(array($_GET['image_id']), $_POST['associate']);
179
180  // thumbnail for albums
181  if (!isset($_POST['represent']))
182  {
183    $_POST['represent'] = array();
184  }
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'));
206}
207
208// tags
209$query = '
210SELECT
211    id,
212    name
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;';
217$tag_selection = get_taglist($query);
218
219$query = '
220SELECT
221    id,
222    name
223  FROM '.TAGS_TABLE.'
224;';
225$tags = get_taglist($query, false);
226
227// retrieving direct information about picture
228$query = '
229SELECT *
230  FROM '.IMAGES_TABLE.'
231  WHERE id = '.$_GET['image_id'].'
232;';
233$row = pwg_db_fetch_assoc(pwg_query($query));
234
235$storage_category_id = null;
236if (!empty($row['storage_category_id']))
237{
238  $storage_category_id = $row['storage_category_id'];
239}
240
241$image_file = $row['file'];
242
243// +-----------------------------------------------------------------------+
244// |                             template init                             |
245// +-----------------------------------------------------------------------+
246
247$template->set_filenames(
248  array(
249    'picture_modify' => 'picture_modify.tpl'
250    )
251  );
252
253$admin_url_start = $admin_photo_base_url.'-properties';
254$admin_url_start.= isset($_GET['cat_id']) ? '&amp;cat_id='.$_GET['cat_id'] : '';
255
256$template->assign(
257  array(
258    'tag_selection' => $tag_selection,
259    'tags' => $tags,
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(),
262
263    'PATH'=>$row['path'],
264
265    'TN_SRC' => DerivativeImage::thumb_url($row),
266
267    'NAME' =>
268      isset($_POST['name']) ?
269        stripslashes($_POST['name']) : @$row['name'],
270
271    'TITLE' => render_element_name($row),
272
273    'DIMENSIONS' => @$row['width'].' * '.@$row['height'],
274
275    'FILESIZE' => @$row['filesize'].' KB',
276
277    'REGISTRATION_DATE' => format_date($row['date_available']),
278
279    'AUTHOR' => htmlspecialchars(
280      isset($_POST['author'])
281        ? stripslashes($_POST['author'])
282        : @$row['author']
283      ),
284
285    'DESCRIPTION' =>
286      htmlspecialchars( isset($_POST['description']) ?
287        stripslashes($_POST['description']) : @$row['comment'] ),
288
289    'F_ACTION' =>
290        get_root_url().'admin.php'
291        .get_query_string_diff(array('sync_metadata'))
292    )
293  );
294
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{
304  $row['added_by'] = $user_row['username'];
305}
306
307$intro_vars = array(
308  'file' => sprintf(l10n('Original file : %s'), $row['file']),
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']),
311  'size' => $row['width'].'&times;'.$row['height'].' pixels, '.sprintf('%.2f', $row['filesize']/1024).'MB',
312  'stats' => sprintf(l10n('Visited %d times'), $row['hit']),
313  'id' => sprintf(l10n('Numeric identifier : %d'), $row['id']),
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;';
324  list($row['nb_rates']) = pwg_db_fetch_row(pwg_query($query));
325 
326  $intro_vars['stats'].= ', '.sprintf(l10n('Rated %d times, score : %.2f'), $row['nb_rates'], $row['rating_score']);
327}
328
329$template->assign('INTRO', $intro_vars);
330 
331
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
337// image level options
338$selected_level = isset($_POST['level']) ? $_POST['level'] : $row['level'];
339$template->assign(
340    array(
341      'level_options'=> get_privacy_level_options(),
342      'level_options_selected' => array($selected_level)
343    )
344  );
345
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}
365
366
367$month_list = $lang['month'];
368$month_list[0]='------------';
369ksort($month_list);
370
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
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
389while ($row = pwg_db_fetch_assoc($result))
390{
391  $name =
392    get_cat_display_name_cache(
393      $row['uppercats'],
394      get_root_url().'admin.php?page=album-',
395      false
396      );
397
398  if ($row['category_id'] == $storage_category_id)
399  {
400    $template->assign('STORAGE_CATEGORY', $name);
401  }
402  else
403  {
404    $template->append('related_categories', $name);
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;';
421
422$authorizeds = array_diff(
423  array_from_query($query, 'category_id'),
424  explode(
425    ',',
426    calculate_permissions($user['id'], $user['status'])
427    )
428  );
429
430if (isset($_GET['cat_id'])
431    and in_array($_GET['cat_id'], $authorizeds))
432{
433  $url_img = make_picture_url(
434    array(
435      'image_id' => $_GET['image_id'],
436      'image_file' => $image_file,
437      'category' => $cache['cat_names'][ $_GET['cat_id'] ],
438      )
439    );
440}
441else
442{
443  foreach ($authorizeds as $category)
444  {
445    $url_img = make_picture_url(
446      array(
447        'image_id' => $_GET['image_id'],
448        'image_file' => $image_file,
449        'category' => $cache['cat_names'][ $category ],
450        )
451      );
452    break;
453  }
454}
455
456if (isset($url_img))
457{
458  $template->assign( 'U_JUMPTO', $url_img );
459}
460
461// associate to albums
462$query = '
463SELECT id
464  FROM '.CATEGORIES_TABLE.'
465    INNER JOIN '.IMAGE_CATEGORY_TABLE.' ON id = category_id
466  WHERE image_id = '.$_GET['image_id'].'
467;';
468$associate_options_selected = array_from_query($query, 'id');
469
470$query = '
471SELECT id,name,uppercats,global_rank
472  FROM '.CATEGORIES_TABLE.'
473;';
474display_select_cat_wrapper($query, $associate_options_selected, 'associate_options');
475display_select_cat_wrapper($query, $represent_options_selected, 'represent_options');
476
477//----------------------------------------------------------- sending html code
478
479$template->assign_var_from_handle('ADMIN_CONTENT', 'picture_modify');
480?>
Note: See TracBrowser for help on using the repository browser.