source: trunk/admin/picture_modify.php @ 2299

Last change on this file since 2299 was 2299, checked in by plg, 16 years ago

Bug fixed: as rvelices notified me by email, my header replacement script was
bugged (r2297 was repeating new and old header).

By the way, I've also removed the replacement keywords. We were using them
because it was a common usage with CVS but it is advised not to use them with
Subversion. Personnaly, it is a problem when I search differences between 2
Piwigo installations outside Subversion.

  • Property svn:eol-style set to LF
  • Property svn:keywords set to Author Date Id Revision
File size: 12.1 KB
Line 
1<?php
2// +-----------------------------------------------------------------------+
3// | Piwigo - a PHP based picture gallery                                  |
4// +-----------------------------------------------------------------------+
5// | Copyright(C) 2008      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
36// +-----------------------------------------------------------------------+
37// |                          synchronize metadata                         |
38// +-----------------------------------------------------------------------+
39
40if (isset($_GET['sync_metadata']) and !is_adviser())
41{
42  $query = '
43SELECT path
44  FROM '.IMAGES_TABLE.'
45  WHERE id = '.$_GET['image_id'].'
46;';
47  list($path) = mysql_fetch_row(pwg_query($query));
48  update_metadata(array($_GET['image_id'] => $path));
49
50  array_push($page['infos'], l10n('Metadata synchronized from file'));
51}
52
53//--------------------------------------------------------- update informations
54
55// first, we verify whether there is a mistake on the given creation date
56if (isset($_POST['date_creation_action'])
57    and 'set' == $_POST['date_creation_action'])
58{
59  if (!checkdate(
60        $_POST['date_creation_month'],
61        $_POST['date_creation_day'],
62        $_POST['date_creation_year'])
63    )
64  {
65    array_push($page['errors'], l10n('err_date'));
66  }
67}
68
69if (isset($_POST['submit']) and count($page['errors']) == 0 and !is_adviser())
70{
71  $data = array();
72  $data{'id'} = $_GET['image_id'];
73  $data{'name'} = $_POST['name'];
74  $data{'author'} = $_POST['author'];
75  $data['level'] = $_POST['level'];
76
77  if ($conf['allow_html_descriptions'])
78  {
79    $data{'comment'} = @$_POST['description'];
80  }
81  else
82  {
83    $data{'comment'} = strip_tags(@$_POST['description']);
84  }
85
86  if (isset($_POST['date_creation_action']))
87  {
88    if ('set' == $_POST['date_creation_action'])
89    {
90      $data{'date_creation'} = $_POST['date_creation_year']
91                                 .'-'.$_POST['date_creation_month']
92                                 .'-'.$_POST['date_creation_day'];
93    }
94    else if ('unset' == $_POST['date_creation_action'])
95    {
96      $data{'date_creation'} = '';
97    }
98  }
99
100  mass_updates(
101    IMAGES_TABLE,
102    array(
103      'primary' => array('id'),
104      'update' => array_diff(array_keys($data), array('id'))
105      ),
106    array($data)
107    );
108
109  set_tags(
110    isset($_POST['tags']) ? $_POST['tags'] : array(),
111    $_GET['image_id']
112    );
113
114  array_push($page['infos'], l10n('Picture informations updated'));
115}
116// associate the element to other categories than its storage category
117if (isset($_POST['associate'])
118    and isset($_POST['cat_dissociated'])
119    and count($_POST['cat_dissociated']) > 0
120    and !is_adviser()
121  )
122{
123  associate_images_to_categories(
124    array($_GET['image_id']),
125    $_POST['cat_dissociated']
126    );
127}
128// dissociate the element from categories (but not from its storage category)
129if (isset($_POST['dissociate'])
130    and isset($_POST['cat_associated'])
131    and count($_POST['cat_associated']) > 0
132    and !is_adviser()
133  )
134{
135  $query = '
136DELETE FROM '.IMAGE_CATEGORY_TABLE.'
137  WHERE image_id = '.$_GET['image_id'].'
138    AND category_id IN ('.implode(',', $_POST['cat_associated']).')
139';
140  pwg_query($query);
141
142  update_category($_POST['cat_associated']);
143}
144// elect the element to represent the given categories
145if (isset($_POST['elect'])
146    and isset($_POST['cat_dismissed'])
147    and count($_POST['cat_dismissed']) > 0
148    and !is_adviser()
149  )
150{
151  $datas = array();
152  foreach ($_POST['cat_dismissed'] as $category_id)
153  {
154    array_push($datas,
155               array('id' => $category_id,
156                     'representative_picture_id' => $_GET['image_id']));
157  }
158  $fields = array('primary' => array('id'),
159                  'update' => array('representative_picture_id'));
160  mass_updates(CATEGORIES_TABLE, $fields, $datas);
161}
162// dismiss the element as representant of the given categories
163if (isset($_POST['dismiss'])
164    and isset($_POST['cat_elected'])
165    and count($_POST['cat_elected']) > 0
166    and !is_adviser()
167  )
168{
169  set_random_representant($_POST['cat_elected']);
170}
171
172// retrieving direct information about picture
173$query = '
174SELECT *
175  FROM '.IMAGES_TABLE.'
176  WHERE id = '.$_GET['image_id'].'
177;';
178$row = mysql_fetch_array(pwg_query($query));
179
180$storage_category_id = $row['storage_category_id'];
181$image_file = $row['file'];
182
183// tags
184$query = '
185SELECT tag_id
186  FROM '.IMAGE_TAG_TABLE.'
187  WHERE image_id = '.$_GET['image_id'].'
188;';
189$selected_tags = array_from_query($query, 'tag_id');
190
191// Navigation path
192
193$date = isset($_POST['date_creation']) && empty($page['errors'])
194?$_POST['date_creation']:date_convert_back(@$row['date_creation']);
195
196// +-----------------------------------------------------------------------+
197// |                             template init                             |
198// +-----------------------------------------------------------------------+
199
200$template->set_filenames(
201  array(
202    'picture_modify' => 'admin/picture_modify.tpl'
203    )
204  );
205
206$all_tags = get_all_tags();
207
208if (count($all_tags) > 0)
209{
210  $tag_selection = get_html_tag_selection(
211    $all_tags,
212    'tags',
213    $selected_tags
214    );
215}
216else
217{
218  $tag_selection =
219    '<p>'.
220    l10n('No tag defined. Use Administration>Pictures>Tags').
221    '</p>';
222}
223
224$template->assign(
225  array(
226    'U_SYNC' =>
227        PHPWG_ROOT_PATH.'admin.php?page=picture_modify'.
228        '&amp;image_id='.$_GET['image_id'].
229        (isset($_GET['cat_id']) ? '&amp;cat_id='.$_GET['cat_id'] : '').
230        '&amp;sync_metadata=1',
231
232    'PATH'=>$row['path'],
233
234    'TN_SRC' => get_thumbnail_url($row),
235
236    'NAME' =>
237      isset($_POST['name']) ?
238        stripslashes($_POST['name']) : @$row['name'],
239
240    'DIMENSIONS' => @$row['width'].' * '.@$row['height'],
241
242    'FILESIZE' => @$row['filesize'].' KB',
243
244    'REGISTRATION_DATE' =>
245      format_date($row['date_available'], 'mysql_datetime', false),
246
247    'AUTHOR' => isset($_POST['author']) ? $_POST['author'] : @$row['author'],
248
249    'CREATION_DATE' => $date,
250
251    'TAG_SELECTION' => $tag_selection,
252
253    'DESCRIPTION' =>
254      htmlspecialchars( isset($_POST['description']) ?
255        stripslashes($_POST['description']) : @$row['comment'] ),
256
257    'F_ACTION' =>
258        PHPWG_ROOT_PATH.'admin.php'
259        .get_query_string_diff(array('sync_metadata'))
260    )
261  );
262
263if ($row['has_high'] == 'true')
264{
265  $template->assign(
266    'HIGH_FILESIZE',
267    isset($row['high_filesize'])
268        ? $row['high_filesize'].' KB'
269        : l10n('unknown')
270    );
271}
272
273// image level options
274$tpl_options = array();
275foreach ($conf['available_permission_levels'] as $level)
276{
277  $tpl_options[$level] = l10n( sprintf('Level %d', $level) ).' ('.$level.')';
278}
279$selected_level = isset($_POST['level']) ? $_POST['level'] : $row['level'];
280$template->assign(
281    array(
282      'level_options'=> $tpl_options,
283      'level_options_selected' => array($selected_level)
284    )
285  );
286
287// creation date
288unset($day, $month, $year);
289
290if (isset($_POST['date_creation_action'])
291    and 'set' == $_POST['date_creation_action'])
292{
293  foreach (array('day', 'month', 'year') as $varname)
294  {
295    $$varname = $_POST['date_creation_'.$varname];
296  }
297}
298else if (isset($row['date_creation']) and !empty($row['date_creation']))
299{
300  list($year, $month, $day) = explode('-', $row['date_creation']);
301}
302else
303{
304  list($year, $month, $day) = array('', 0, 0);
305}
306
307
308$month_list = $lang['month'];
309$month_list[0]='------------';
310ksort($month_list);
311
312$template->assign(
313    array(
314      'DATE_CREATION_DAY_VALUE' => $day,
315      'DATE_CREATION_MONTH_VALUE' => $month,
316      'DATE_CREATION_YEAR_VALUE' => $year,
317      'month_list' => $month_list,
318      )
319    );
320
321$query = '
322SELECT category_id, uppercats
323  FROM '.IMAGE_CATEGORY_TABLE.' AS ic
324    INNER JOIN '.CATEGORIES_TABLE.' AS c
325      ON c.id = ic.category_id
326  WHERE image_id = '.$_GET['image_id'].'
327;';
328$result = pwg_query($query);
329
330while ($row = mysql_fetch_array($result))
331{
332  $name =
333    get_cat_display_name_cache(
334      $row['uppercats'],
335      get_root_url().'admin.php?page=cat_modify&amp;cat_id=',
336      false
337      );
338
339  if ($row['category_id'] == $storage_category_id)
340  {
341    $template->assign('STORAGE_CATEGORY', $name);
342  }
343  else
344  {
345    $template->append('related_categories', $name);
346  }
347}
348
349// jump to link
350//
351// 1. find all linked categories that are reachable for the current user.
352// 2. if a category is available in the URL, use it if reachable
353// 3. if URL category not available or reachable, use the first reachable
354//    linked category
355// 4. if no category reachable, no jumpto link
356
357$query = '
358SELECT category_id
359  FROM '.IMAGE_CATEGORY_TABLE.'
360  WHERE image_id = '.$_GET['image_id'].'
361;';
362
363$authorizeds = array_diff(
364  array_from_query($query, 'category_id'),
365  explode(
366    ',',
367    calculate_permissions($user['id'], $user['status'])
368    )
369  );
370
371if (isset($_GET['cat_id'])
372    and in_array($_GET['cat_id'], $authorizeds))
373{
374  $url_img = make_picture_url(
375    array(
376      'image_id' => $_GET['image_id'],
377      'image_file' => $image_file,
378      'category' => $cache['cat_names'][ $_GET['cat_id'] ],
379      )
380    );
381}
382else
383{
384  foreach ($authorizeds as $category)
385  {
386    $url_img = make_picture_url(
387      array(
388        'image_id' => $_GET['image_id'],
389        'image_file' => $image_file,
390        'category' => $cache['cat_names'][ $category ],
391        )
392      );
393    break;
394  }
395}
396
397if (isset($url_img))
398{
399  $template->assign( 'U_JUMPTO', $url_img );
400}
401
402// associate to another category ?
403$query = '
404SELECT id,name,uppercats,global_rank
405  FROM '.CATEGORIES_TABLE.'
406    INNER JOIN '.IMAGE_CATEGORY_TABLE.' ON id = category_id
407  WHERE image_id = '.$_GET['image_id'].'
408    AND id != '.$storage_category_id.'
409;';
410display_select_cat_wrapper($query, array(), 'associated_options');
411
412$result = pwg_query($query);
413$associateds = array($storage_category_id);
414while ($row = mysql_fetch_array($result))
415{
416  array_push($associateds, $row['id']);
417}
418$query = '
419SELECT id,name,uppercats,global_rank
420  FROM '.CATEGORIES_TABLE.'
421  WHERE id NOT IN ('.implode(',', $associateds).')
422;';
423display_select_cat_wrapper($query, array(), 'dissociated_options');
424
425// representing
426$query = '
427SELECT id,name,uppercats,global_rank
428  FROM '.CATEGORIES_TABLE.'
429  WHERE representative_picture_id = '.$_GET['image_id'].'
430;';
431display_select_cat_wrapper($query, array(), 'elected_options');
432
433$query = '
434SELECT id,name,uppercats,global_rank
435  FROM '.CATEGORIES_TABLE.'
436  WHERE representative_picture_id != '.$_GET['image_id'].'
437    OR representative_picture_id IS NULL
438;';
439display_select_cat_wrapper($query, array(), 'dismissed_options');
440
441//----------------------------------------------------------- sending html code
442
443$template->assign_var_from_handle('ADMIN_CONTENT', 'picture_modify');
444?>
Note: See TracBrowser for help on using the repository browser.