source: trunk/picture.php @ 7501

Last change on this file since 7501 was 6712, checked in by plg, 14 years ago

merge r6711 from branch 2.1 to trunk

add trigger for ExtendedDescription on photo name

  • Property svn:eol-style set to LF
File size: 26.7 KB
RevLine 
[2]1<?php
[354]2// +-----------------------------------------------------------------------+
[2297]3// | Piwigo - a PHP based picture gallery                                  |
4// +-----------------------------------------------------------------------+
[5196]5// | Copyright(C) 2008-2010 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// +-----------------------------------------------------------------------+
[420]23
[364]24define('PHPWG_ROOT_PATH','./');
[613]25include_once(PHPWG_ROOT_PATH.'include/common.inc.php');
[1082]26include(PHPWG_ROOT_PATH.'include/section_init.inc.php');
[1612]27include_once(PHPWG_ROOT_PATH.'include/functions_picture.inc.php');
[1052]28
[1082]29// Check Access and exit when user status is not ok
[1072]30check_status(ACCESS_GUEST);
31
[1082]32// access authorization check
33if (isset($page['category']))
[1036]34{
[1861]35  check_restrictions($page['category']['id']);
[1036]36}
[1082]37
[2327]38$page['rank_of'] = array_flip($page['items']);
39
[1036]40// if this image_id doesn't correspond to this category, an error message is
41// displayed, and execution is stopped
[2327]42if ( !isset($page['rank_of'][$page['image_id']]) )
[934]43{
[2430]44  $query = '
[2446]45SELECT id, file, level
[2430]46  FROM '.IMAGES_TABLE.'
47  WHERE ';
48  if ($page['image_id']>0)
49  {
50    $query .= 'id = '.$page['image_id'];
51  }
52  else
53  {// url given by file name
54    assert( !empty($page['image_file']) );
[6654]55    $query .= 'file LIKE \'' .
[2512]56      str_replace(array('_','%'), array('/_','/%'), $page['image_file'] ).
[6654]57      '.%\' ESCAPE \'/\' LIMIT 1';
[2430]58  }
[4325]59  if ( ! ( $row = pwg_db_fetch_assoc(pwg_query($query)) ) )
[2430]60  {// element does not exist
61    page_not_found( 'The requested image does not exist',
62      duplicate_index_url()
63      );
64  }
65  if ($row['level']>$user['level'])
66  {
67    access_denied();
68  }
[5127]69
70  $page['image_id'] = $row['id'];
71  $page['image_file'] =  $row['file'];
[2430]72  if ( !isset($page['rank_of'][$page['image_id']]) )
73  {// the image can still be non accessible (filter/cat perm) and/or not in the set
74    global $filter;
[2446]75    if ( !empty($filter['visible_images']) and
[2430]76      !in_array($page['image_id'], explode(',',$filter['visible_images']) ) )
77    {
78      page_not_found( 'The requested image is filtered',
79          duplicate_index_url()
80        );
81    }
82    if ('categories'==$page['section'] and !isset($page['category']) )
83    {// flat view - all items
84      access_denied();
85    }
86    else
87    {// try to see if we can access it differently
88      $query = '
89SELECT id
90  FROM '.IMAGES_TABLE.' INNER JOIN '.IMAGE_CATEGORY_TABLE.' ON id=image_id
91  WHERE id='.$page['image_id']
92        . get_sql_condition_FandF(
93            array('forbidden_categories' => 'category_id'),
94            " AND"
95          ).'
96  LIMIT 1';
[4325]97      if ( pwg_db_num_rows( pwg_query($query) ) == 0 )
[2430]98      {
99        access_denied();
100      }
101      else
102      {
103        if ('best_rated'==$page['section'])
104        {
105          $page['rank_of'][$page['image_id']] = count($page['items']);
106          array_push($page['items'], $page['image_id'] );
107        }
108        else
109        {
110          $url = make_picture_url(
111              array(
112                'image_id' => $page['image_id'],
113                'image_file' => $page['image_file'],
114                'section' => 'categories',
115                'flat' => true,
116              )
117            );
118          set_status_header( 'recent_pics'==$page['section'] ? 301 : 302);
119          redirect_http( $url );
120        }
121      }
122    }
123  }
[934]124}
125
[2407]126// There is cookie, so we must handle it at the beginning
127if ( isset($_GET['metadata']) )
128{
129  if ( pwg_get_session_var('show_metadata') == null )
130        {
[2572]131                pwg_set_session_var('show_metadata', 1 );
[2407]132        } else {
133        pwg_unset_session_var('show_metadata');
134        }
135}
136
[1590]137// add default event handler for rendering element content
[1787]138add_event_handler(
139  'render_element_content',
140  'default_picture_content',
141  EVENT_HANDLER_PRIORITY_NEUTRAL,
142  2
143  );
[2079]144// add default event handler for rendering element description
145add_event_handler('render_element_description', 'nl2br');
146
[1590]147trigger_action('loc_begin_picture');
148
149// this is the default handler that generates the display for the element
150function default_picture_content($content, $element_info)
151{
152  if ( !empty($content) )
153  {// someone hooked us - so we skip;
154    return $content;
155  }
156  if (!isset($element_info['image_url']))
157  { // nothing to do
158    return $content;
159  }
[1793]160
[1882]161  global $user, $page, $template;
[1793]162
[1882]163  $template->set_filenames(
[1787]164    array('default_content'=>'picture_content.tpl')
165    );
[1590]166
[2218]167  if ( !$page['slideshow'] and isset($element_info['high_url']) )
[1590]168  {
169    $uuid = uniqid(rand());
[2227]170    $template->assign(
[1590]171      'high',
172      array(
173        'U_HIGH' => $element_info['high_url'],
174        'UUID'   => $uuid,
175        )
176      );
177  }
[2227]178  $template->assign( array(
[1590]179      'SRC_IMG' => $element_info['image_url'],
180      'ALT_IMG' => $element_info['file'],
[1596]181      'WIDTH_IMG' => @$element_info['scaled_width'],
182      'HEIGHT_IMG' => @$element_info['scaled_height'],
[1590]183      )
184    );
[1882]185  return $template->parse( 'default_content', true);
[1590]186}
187
[1082]188// +-----------------------------------------------------------------------+
189// |                            initialization                             |
190// +-----------------------------------------------------------------------+
191
[1036]192// caching first_rank, last_rank, current_rank in the displayed
193// section. This should also help in readability.
194$page['first_rank']   = 0;
195$page['last_rank']    = count($page['items']) - 1;
[1082]196$page['current_rank'] = $page['rank_of'][ $page['image_id'] ];
[1036]197
198// caching current item : readability purpose
[1082]199$page['current_item'] = $page['image_id'];
[1036]200
201if ($page['current_rank'] != $page['first_rank'])
[2]202{
[1086]203  // caching first & previous item : readability purpose
[1036]204  $page['previous_item'] = $page['items'][ $page['current_rank'] - 1 ];
[1086]205  $page['first_item'] = $page['items'][ $page['first_rank'] ];
[2]206}
[1036]207
208if ($page['current_rank'] != $page['last_rank'])
209{
[1086]210  // caching next & last item : readability purpose
[1036]211  $page['next_item'] = $page['items'][ $page['current_rank'] + 1 ];
[1086]212  $page['last_item'] = $page['items'][ $page['last_rank'] ];
[1036]213}
214
[1503]215$url_up = duplicate_index_url(
[1082]216  array(
217    'start' =>
218      floor($page['current_rank'] / $user['nb_image_page'])
219      * $user['nb_image_page']
220    ),
221  array(
222    'start',
223    )
224  );
[1014]225
[1503]226$url_self = duplicate_picture_url();
[811]227
[1082]228// +-----------------------------------------------------------------------+
229// |                                actions                                |
230// +-----------------------------------------------------------------------+
[858]231
[1082]232/**
233 * Actions are favorite adding, user comment deletion, setting the picture
234 * as representative of the current category...
235 *
236 * Actions finish by a redirection
237 */
[858]238
[1590]239if (isset($_GET['action']))
[858]240{
[1082]241  switch ($_GET['action'])
[1041]242  {
[1082]243    case 'add_to_favorites' :
[1041]244    {
[1082]245      $query = '
246INSERT INTO '.FAVORITES_TABLE.'
247  (image_id,user_id)
248  VALUES
249  ('.$page['image_id'].','.$user['id'].')
250;';
251      pwg_query($query);
252
253      redirect($url_self);
[1086]254
[1082]255      break;
[1041]256    }
[1082]257    case 'remove_from_favorites' :
258    {
259      $query = '
260DELETE FROM '.FAVORITES_TABLE.'
261  WHERE user_id = '.$user['id'].'
262    AND image_id = '.$page['image_id'].'
263;';
264      pwg_query($query);
[1041]265
[1082]266      if ('favorites' == $page['section'])
267      {
268        redirect($url_up);
269      }
270      else
271      {
272        redirect($url_self);
273      }
[1086]274
[1082]275      break;
276    }
277    case 'set_as_representative' :
[1041]278    {
[1590]279      if (is_admin() and !is_adviser() and isset($page['category']))
[1082]280      {
[1041]281        $query = '
[1082]282UPDATE '.CATEGORIES_TABLE.'
283  SET representative_picture_id = '.$page['image_id'].'
[1861]284  WHERE id = '.$page['category']['id'].'
[1082]285;';
286        pwg_query($query);
287      }
[1086]288
[1082]289      redirect($url_self);
[1086]290
[1082]291      break;
292    }
293    case 'toggle_metadata' :
294    {
295      break;
296    }
297    case 'add_to_caddie' :
298    {
[1106]299      fill_caddie(array($page['image_id']));
[1082]300      redirect($url_self);
301      break;
302    }
303    case 'rate' :
304    {
[1107]305      include_once(PHPWG_ROOT_PATH.'include/functions_rate.inc.php');
[1787]306      rate_picture(
307        $page['image_id'],
308        isset($_POST['rate']) ? $_POST['rate'] : $_GET['rate']
309        );
[1082]310      redirect($url_self);
311    }
[3445]312    case 'edit_comment' :
313    {
[5195]314      check_pwg_token();
[6615]315
[5127]316      include_once(PHPWG_ROOT_PATH.'include/functions_comment.inc.php');
[5195]317
318      check_input_parameter('comment_to_edit', $_GET, false, PATTERN_ID);
319
320      $author_id = get_comment_author_id($_GET['comment_to_edit']);
[6615]321
[5195]322      if (can_manage_comment('edit', $author_id))
[3445]323      {
[5127]324        if (!empty($_POST['content']))
325        {
[5195]326          update_user_comment(
327            array(
328              'comment_id' => $_GET['comment_to_edit'],
329              'image_id' => $page['image_id'],
330              'content' => $_POST['content']
331              ),
332            $_POST['key']
333            );
[6615]334
[5127]335          redirect($url_self);
[5195]336        }
337        else
338        {
[5127]339          $edit_comment = $_GET['comment_to_edit'];
340          break;
341        }
[3445]342      }
343    }
[1082]344    case 'delete_comment' :
345    {
[5195]346      check_pwg_token();
[6615]347
[5127]348      include_once(PHPWG_ROOT_PATH.'include/functions_comment.inc.php');
[6615]349
[5195]350      check_input_parameter('comment_to_delete', $_GET, false, PATTERN_ID);
351
352      $author_id = get_comment_author_id($_GET['comment_to_delete']);
[6615]353
[5195]354      if (can_manage_comment('delete', $author_id))
[1082]355      {
[5127]356        delete_user_comment($_GET['comment_to_delete']);
[1082]357      }
[6615]358
[1082]359      redirect($url_self);
360    }
[3409]361    case 'validate_comment' :
362    {
[5195]363      check_pwg_token();
[6615]364
[5127]365      include_once(PHPWG_ROOT_PATH.'include/functions_comment.inc.php');
[5195]366
367      check_input_parameter('comment_to_validate', $_GET, false, PATTERN_ID);
[6615]368
[5653]369      $author_id = get_comment_author_id($_GET['comment_to_validate']);
[6615]370
[5195]371      if (can_manage_comment('validate', $author_id))
[3409]372      {
[5195]373        validate_user_comment($_GET['comment_to_validate']);
[3409]374      }
[6615]375
[3409]376      redirect($url_self);
377    }
378
[1082]379  }
[1041]380}
381
[1082]382// incrementation of the number of hits, we do this only if no action
[2155]383if (trigger_event('allow_increment_element_hit_count', !isset($_POST['content']) ) )
[2048]384{
385  $query = '
[1082]386UPDATE
387  '.IMAGES_TABLE.'
388  SET hit = hit+1
389  WHERE id = '.$page['image_id'].'
390;';
[2048]391  pwg_query($query);
392}
[745]393//---------------------------------------------------------- related categories
394$query = '
395SELECT category_id,uppercats,commentable,global_rank
396  FROM '.IMAGE_CATEGORY_TABLE.'
397    INNER JOIN '.CATEGORIES_TABLE.' ON category_id = id
[1082]398  WHERE image_id = '.$page['image_id'].'
[1677]399'.get_sql_condition_FandF
400  (
401    array
402      (
403        'forbidden_categories' => 'category_id',
404        'visible_categories' => 'category_id'
405      ),
406    'AND'
407  ).'
[745]408;';
409$result = pwg_query($query);
410$related_categories = array();
[4325]411while ($row = pwg_db_fetch_assoc($result))
[745]412{
[6591]413  $row['commentable'] = boolean_to_string($row['commentable']);
[745]414  array_push($related_categories, $row);
415}
416usort($related_categories, 'global_rank_compare');
[1086]417//-------------------------first, prev, current, next & last picture management
[402]418$picture = array();
[368]419
[1082]420$ids = array($page['image_id']);
[1036]421if (isset($page['previous_item']))
[465]422{
[1036]423  array_push($ids, $page['previous_item']);
[1086]424  array_push($ids, $page['first_item']);
[465]425}
[1036]426if (isset($page['next_item']))
[465]427{
[1036]428  array_push($ids, $page['next_item']);
[1086]429  array_push($ids, $page['last_item']);
[465]430}
[368]431
[454]432$query = '
[1036]433SELECT *
434  FROM '.IMAGES_TABLE.'
435  WHERE id IN ('.implode(',', $ids).')
436;';
[368]437
[1036]438$result = pwg_query($query);
[368]439
[4325]440while ($row = pwg_db_fetch_assoc($result))
[345]441{
[1036]442  if (isset($page['previous_item']) and $row['id'] == $page['previous_item'])
[465]443  {
[1086]444    $i = 'previous';
[465]445  }
[1036]446  else if (isset($page['next_item']) and $row['id'] == $page['next_item'])
[465]447  {
[1036]448    $i = 'next';
[465]449  }
[1086]450  else if (isset($page['first_item']) and $row['id'] == $page['first_item'])
451  {
452    $i = 'first';
453  }
454  else if (isset($page['last_item']) and $row['id'] == $page['last_item'])
455  {
456    $i = 'last';
457  }
[1036]458  else
459  {
460    $i = 'current';
461  }
[1059]462
[1596]463  $picture[$i] = $row;
[465]464
465  $picture[$i]['is_picture'] = false;
466  if (in_array(get_extension($row['file']), $conf['picture_ext']))
467  {
468    $picture[$i]['is_picture'] = true;
469  }
[1059]470
[1612]471  // ------ build element_path and element_url
472  $picture[$i]['element_path'] = get_element_path($picture[$i]);
473  $picture[$i]['element_url'] = get_element_url($picture[$i]);
[402]474
[1612]475  // ------ build image_path and image_url
476  if ($i=='current' or $i=='next')
[465]477  {
[1612]478    $picture[$i]['image_path'] = get_image_path( $picture[$i] );
479    $picture[$i]['image_url'] = get_image_url( $picture[$i] );
[465]480  }
[1590]481
[1612]482  if ($i=='current')
[465]483  {
[1612]484    if ( $picture[$i]['is_picture'] )
[536]485    {
[1612]486      if ( $user['enabled_high']=='true' )
[536]487      {
[1612]488        $hi_url=get_high_url($picture[$i]);
489        if ( !empty($hi_url) )
[1090]490        {
[1612]491          $picture[$i]['high_url'] = $hi_url;
492          $picture[$i]['download_url'] = get_download_url('h',$picture[$i]);
[1090]493        }
[536]494      }
495    }
[1590]496    else
[1612]497    { // not a pic - need download link
498      $picture[$i]['download_url'] = get_download_url('e',$picture[$i]);
[1590]499    }
500  }
501
[1596]502  $picture[$i]['thumbnail'] = get_thumbnail_url($row);
[1059]503
[402]504  if ( !empty( $row['name'] ) )
[345]505  {
[465]506    $picture[$i]['name'] = $row['name'];
[345]507  }
508  else
509  {
[1612]510    $file_wo_ext = get_filename_wo_extension($row['file']);
[465]511    $picture[$i]['name'] = str_replace('_', ' ', $file_wo_ext);
[345]512  }
513
[6712]514  $picture[$i]['name'] = trigger_event('render_element_description', $picture[$i]['name']);
515
[1503]516  $picture[$i]['url'] = duplicate_picture_url(
[1082]517    array(
518      'image_id' => $row['id'],
[1090]519      'image_file' => $row['file'],
[1082]520      ),
521    array(
522      'start',
523      )
524    );
[1086]525
526  if ('previous'==$i and $page['previous_item']==$page['first_item'])
527  {
528    $picture['first'] = $picture[$i];
529  }
530  if ('next'==$i and $page['next_item']==$page['last_item'])
531  {
532    $picture['last'] = $picture[$i];
533  }
[345]534}
[368]535
[1590]536// calculation of width and height for the current picture
537if (empty($picture['current']['width']))
538{
539  $taille_image = @getimagesize($picture['current']['image_path']);
540  if ($taille_image!==false)
541  {
542    $picture['current']['width'] = $taille_image[0];
543    $picture['current']['height']= $taille_image[1];
544  }
545}
546
547if (!empty($picture['current']['width']))
548{
[1787]549  list(
550    $picture['current']['scaled_width'],
551    $picture['current']['scaled_height']
552    ) = get_picture_size(
[1590]553      $picture['current']['width'],
554      $picture['current']['height'],
555      @$user['maxwidth'],
556      @$user['maxheight']
557    );
558}
559
[2218]560$slideshow_params = array();
561$slideshow_url_params = array();
[858]562
[2218]563if (isset($_GET['slideshow']))
[2]564{
[1793]565  $page['slideshow'] = true;
[2218]566  $page['meta_robots'] = array('noindex'=>1, 'nofollow'=>1);
567
568  $slideshow_params = decode_slideshow_params($_GET['slideshow']);
569  $slideshow_url_params['slideshow'] = encode_slideshow_params($slideshow_params);
570
571  if ($slideshow_params['play'])
572  {
573    $id_pict_redirect = '';
574    if (isset($page['next_item']))
[2169]575    {
[2218]576      $id_pict_redirect = 'next';
[2169]577    }
[2218]578    else
579    {
580      if ($slideshow_params['repeat'] and isset($page['first_item']))
581      {
582        $id_pict_redirect = 'first';
583      }
584    }
585
586    if (!empty($id_pict_redirect))
587    {
[2521]588      // $refresh, $url_link and $title are required for creating
[2218]589      // an automated refresh page in header.tpl
590      $refresh = $slideshow_params['period'];
591      $url_link = add_url_params(
592          $picture[$id_pict_redirect]['url'],
593          $slideshow_url_params
594        );
595    }
[1793]596  }
[2218]597}
598else
599{
600  $page['slideshow'] = false;
601}
[2549]602if ($page['slideshow'] and $conf['light_slideshow'])
603{
604  $template->set_filenames( array('slideshow' => 'slideshow.tpl'));
605}
606else
607{
608  $template->set_filenames( array('picture' => 'picture.tpl'));
609}
[2218]610
[1793]611$title =  $picture['current']['name'];
[1820]612$title_nb = ($page['current_rank'] + 1).'/'.count($page['items']);
[2]613
[531]614// metadata
[1503]615$url_metadata = duplicate_picture_url();
[2407]616$url_metadata = add_url_params( $url_metadata, array('metadata'=>null) );
[1590]617
[2407]618
[1590]619// do we have a plugin that can show metadata for something else than images?
[1787]620$metadata_showable = trigger_event(
621  'get_element_metadata_available',
622  (
623    ($conf['show_exif'] or $conf['show_iptc'])
624    and isset($picture['current']['image_path'])
[1590]625    ),
[1787]626  $picture['current']['path']
627  );
628
[2407]629if ( $metadata_showable and pwg_get_session_var('show_metadata') )
[531]630{
[2407]631  $page['meta_robots']=array('noindex'=>1, 'nofollow'=>1);
[531]632}
[1590]633
[2407]634
[1590]635$page['body_id'] = 'thePicturePage';
636
[1882]637// allow plugins to change what we computed before passing data to template
638$picture = trigger_event('picture_pictures_data', $picture);
[1787]639
[1882]640
[1787]641if (isset($picture['next']['image_url'])
[2204]642    and $picture['next']['is_picture'] )
[531]643{
[2227]644  $template->assign('U_PREFETCH', $picture['next']['image_url'] );
[531]645}
646
[1036]647//------------------------------------------------------- navigation management
[2227]648foreach (array('first','previous','next','last', 'current') as $which_image)
[1020]649{
[1086]650  if (isset($picture[$which_image]))
651  {
[2227]652    $template->assign(
[1086]653      $which_image,
[2413]654      array_merge(
655        $picture[$which_image],
656        array(
657          'TITLE' => $picture[$which_image]['name'],
658          'THUMB_SRC' => $picture[$which_image]['thumbnail'],
659          // Params slideshow was transmit to navigation buttons
660          'U_IMG' =>
661            add_url_params(
662              $picture[$which_image]['url'], $slideshow_url_params),
663          )
[1086]664        )
665      );
[5304]666    if ($conf['picture_download_icon'] and !empty($picture['current']['download_url']))
667    {
668      $template->append($which_image, array('U_DOWNLOAD' => $picture['current']['download_url']), true);
669    }
[1086]670  }
[1020]671}
672
[2218]673
674if ($page['slideshow'])
675{
[2227]676  $tpl_slideshow = array();
677
[2218]678  //slideshow end
[2227]679  $template->assign(
[2218]680    array(
[2227]681      'U_SLIDESHOW_STOP' => $picture['current']['url'],
[2218]682      )
683    );
684
685  foreach (array('repeat', 'play') as $p)
686  {
[2227]687    $var_name =
688      'U_'
689      .($slideshow_params[$p] ? 'STOP_' : 'START_')
690      .strtoupper($p);
691
692    $tpl_slideshow[$var_name] =
[2218]693          add_url_params(
694            $picture['current']['url'],
695            array('slideshow' =>
696              encode_slideshow_params(
[2227]697                array_merge($slideshow_params,
[2218]698                  array($p => ! $slideshow_params[$p]))
699                )
700              )
[2227]701          );
[2218]702  }
703
704  foreach (array('dec', 'inc') as $op)
705  {
706    $new_period = $slideshow_params['period'] + ((($op == 'dec') ? -1 : 1) * $conf['slideshow_period_step']);
707    $new_slideshow_params =
708      correct_slideshow_params(
[2227]709        array_merge($slideshow_params,
[2218]710                  array('period' => $new_period)));
711
712    if ($new_slideshow_params['period'] === $new_period)
713    {
[2227]714      $var_name = 'U_'.strtoupper($op).'_PERIOD';
715      $tpl_slideshow[$var_name] =
[2218]716            add_url_params(
717              $picture['current']['url'],
718              array('slideshow' => encode_slideshow_params($new_slideshow_params)
719                  )
720          );
721    }
722  }
[2227]723  $template->assign('slideshow', $tpl_slideshow );
[2218]724}
[5293]725elseif ($conf['picture_slideshow_icon'])
[2218]726{
[2227]727  $template->assign(
[2218]728    array(
[2227]729      'U_SLIDESHOW_START' =>
[2218]730        add_url_params(
731          $picture['current']['url'],
732          array( 'slideshow'=>''))
733      )
734    );
735}
736
[2227]737$template->assign(
[1082]738  array(
[1128]739    'SECTION_TITLE' => $page['title'],
[1082]740    'PHOTO' => $title_nb,
[2227]741    'SHOW_PICTURE_NAME_ON_TITLE' => $conf['show_picture_name_on_title'],
[2759]742    'IS_HOME' => ('categories'==$page['section'] and !isset($page['category']) ),
[368]743
[1082]744    'LEVEL_SEPARATOR' => $conf['level_separator'],
[2309]745
[2227]746    'U_UP' => $url_up,
[5293]747    'DISPLAY_NAV_BUTTONS' => $conf['picture_navigation_icons'],
748    'DISPLAY_NAV_THUMB' => $conf['picture_navigation_thumb']
[1082]749    )
750  );
[803]751
[5293]752if ($conf['picture_metadata_icon'])
753{
754  $template->assign('U_METADATA', $url_metadata);
755}
[803]756
[5293]757
[536]758//------------------------------------------------------- upper menu management
[1082]759
[2227]760// admin links
[1070]761if (is_admin())
[858]762{
[2227]763  if (isset($page['category']))
764  {
765    $template->assign(
766      array(
767        'U_SET_AS_REPRESENTATIVE' => add_url_params($url_self,
768                    array('action'=>'set_as_representative')
769                 )
770        )
771      );
772  }
[2309]773
[3167]774  $url_admin =
775    get_root_url().'admin.php?page=picture_modify'
776    .'&amp;cat_id='.(isset($page['category']) ? $page['category']['id'] : '')
777    .'&amp;image_id='.$page['image_id'];
778
[2227]779  $template->assign(
[858]780    array(
[2227]781      'U_CADDIE' => add_url_params($url_self,
[1094]782                  array('action'=>'add_to_caddie')
[2227]783               ),
784      'U_ADMIN' => $url_admin,
[1082]785      )
[858]786    );
[3167]787
[6025]788  $template->assign('available_permission_levels', get_privacy_level_options());
[858]789}
790
[1082]791// favorite manipulation
[5305]792if (!is_a_guest() and $conf['picture_favorite_icon'])
[531]793{
794  // verify if the picture is already in the favorite of the user
[1082]795  $query = '
796SELECT COUNT(*) AS nb_fav
797  FROM '.FAVORITES_TABLE.'
798  WHERE image_id = '.$page['image_id'].'
799    AND user_id = '.$user['id'].'
800;';
[6615]801  $row = pwg_db_fetch_assoc( pwg_query($query) );
802        $is_favorite = $row['nb_fav'] != 0;
[1086]803
[6615]804  $template->assign(
805    'favorite',
806    array(
807                        'IS_FAVORITE' => $is_favorite,
808      'U_FAVORITE'    => add_url_params(
809        $url_self,
810        array('action'=> !$is_favorite ? 'add_to_favorites' : 'remove_from_favorites' )
811        ),
812      )
813    );
[2]814}
[368]815
[2]816//--------------------------------------------------------- picture information
[393]817// legend
[465]818if (isset($picture['current']['comment'])
819    and !empty($picture['current']['comment']))
[393]820{
[2227]821  $template->assign(
822      'COMMENT_IMG',
[2079]823        trigger_event('render_element_description',
824          $picture['current']['comment'])
[2227]825      );
[393]826}
827
[847]828$infos = array();
829
830// author
831if (!empty($picture['current']['author']))
[51]832{
[847]833  $infos['INFO_AUTHOR'] =
[1825]834// FIXME because of search engine partial rewrite, giving the author
835// name threw GET is not supported anymore. This feature should come
836// back later, with a better design
[1008]837//     '<a href="'.
838//       PHPWG_ROOT_PATH.'category.php?cat=search'.
839//       '&amp;search=author:'.$picture['current']['author']
840//       .'">'.$picture['current']['author'].'</a>';
841    $picture['current']['author'];
[51]842}
[774]843
[847]844// creation date
845if (!empty($picture['current']['date_creation']))
[635]846{
[1051]847  $val = format_date($picture['current']['date_creation']);
[1503]848  $url = make_index_url(
[1825]849    array(
850      'chronology_field'=>'created',
851      'chronology_style'=>'monthly',
852      'chronology_view'=>'list',
853      'chronology_date' => explode('-', $picture['current']['date_creation'])
854      )
855    );
856  $infos['INFO_CREATION_DATE'] =
857    '<a href="'.$url.'" rel="nofollow">'.$val.'</a>';
[847]858}
859
860// date of availability
[3122]861$val = format_date($picture['current']['date_available']);
[1503]862$url = make_index_url(
[1825]863  array(
864    'chronology_field'=>'posted',
865    'chronology_style'=>'monthly',
866    'chronology_view'=>'list',
867    'chronology_date' => explode(
868      '-',
869      substr($picture['current']['date_available'], 0, 10)
[1090]870      )
[1825]871    )
872  );
[1135]873$infos['INFO_POSTED_DATE'] = '<a href="'.$url.'" rel="nofollow">'.$val.'</a>';
[847]874
875// size in pixels
[1590]876if ($picture['current']['is_picture'] and isset($picture['current']['width']) )
[847]877{
[1590]878  if ($picture['current']['scaled_width'] !== $picture['current']['width'] )
[568]879  {
[847]880    $infos['INFO_DIMENSIONS'] =
[1590]881      '<a href="'.$picture['current']['image_url'].'" title="'.
[847]882      l10n('Original dimensions').'">'.
[1590]883      $picture['current']['width'].'*'.$picture['current']['height'].'</a>';
[568]884  }
[635]885  else
886  {
[1590]887    $infos['INFO_DIMENSIONS'] =
888      $picture['current']['width'].'*'.$picture['current']['height'];
[635]889  }
[568]890}
[774]891
[847]892// filesize
893if (!empty($picture['current']['filesize']))
894{
895  $infos['INFO_FILESIZE'] =
896    sprintf(l10n('%d Kb'), $picture['current']['filesize']);
897}
898
899// number of visits
900$infos['INFO_VISITS'] = $picture['current']['hit'];
901
902// file
903$infos['INFO_FILE'] = $picture['current']['file'];
904
[2227]905$template->assign($infos);
[5304]906$template->assign('display_info', unserialize($conf['picture_informations']));
[2227]907
908// related tags
[1827]909$tags = get_common_tags( array($page['image_id']), -1);
910if ( count($tags) )
[847]911{
[2227]912  foreach ($tags as $tag)
[1119]913  {
[2227]914    $template->append(
915        'related_tags',
[2413]916        array_merge( $tag,
917          array(
918            'URL' => make_index_url(
[2227]919                      array(
920                        'tags' => array($tag)
921                        )
922                      ),
[2413]923            'U_TAG_IMAGE' => duplicate_picture_url(
[2227]924                      array(
925                        'section' => 'tags',
926                        'tags' => array($tag)
927                        )
928                    )
[1119]929          )
[2413]930        )
[2227]931      );
[1119]932  }
[847]933}
934
935// related categories
[2309]936if ( count($related_categories)==1 and
937    isset($page['category']) and
938    $related_categories[0]['category_id']==$page['category']['id'] )
939{ // no need to go to db, we have all the info
[2227]940  $template->append(
[2309]941      'related_categories',
942      get_cat_display_name( $page['category']['upper_names'] )
[847]943    );
944}
[2309]945else
946{ // use only 1 sql query to get names for all related categories
947  $ids = array();
948  foreach ($related_categories as $category)
949  {// add all uppercats to $ids
950    $ids = array_merge($ids, explode(',', $category['uppercats']) );
951  }
952  $ids = array_unique($ids);
953  $query = '
954SELECT id, name, permalink
955  FROM '.CATEGORIES_TABLE.'
956  WHERE id IN ('.implode(',',$ids).')';
957  $cat_map = hash_from_query($query, 'id');
958  foreach ($related_categories as $category)
959  {
960    $cats = array();
961    foreach ( explode(',', $category['uppercats']) as $id )
962    {
963      $cats[] = $cat_map[$id];
964    }
965    $template->append('related_categories', get_cat_display_name($cats) );
966  }
967}
[847]968
[1882]969// maybe someone wants a special display (call it before page_header so that
970// they can add stylesheets)
971$element_content = trigger_event(
972  'render_element_content',
973  '',
974  $picture['current']
975  );
[2227]976$template->assign( 'ELEMENT_CONTENT', $element_content );
[1882]977
[1082]978// +-----------------------------------------------------------------------+
979// |                               sub pages                               |
980// +-----------------------------------------------------------------------+
[847]981
[1082]982include(PHPWG_ROOT_PATH.'include/picture_rate.inc.php');
983include(PHPWG_ROOT_PATH.'include/picture_comment.inc.php');
[2407]984if ($metadata_showable and pwg_get_session_var('show_metadata') <> null )
[1107]985{
986  include(PHPWG_ROOT_PATH.'include/picture_metadata.inc.php');
987}
[345]988
[1627]989include(PHPWG_ROOT_PATH.'include/page_header.php');
[1793]990trigger_action('loc_end_picture');
[2549]991if ($page['slideshow'] and $conf['light_slideshow'])
992{
993  $template->pparse('slideshow');
994}
995else
996{
997  $template->pparse('picture');
998}
[2327]999//------------------------------------------------------------ log informations
1000pwg_log($picture['current']['id'], 'picture');
[369]1001include(PHPWG_ROOT_PATH.'include/page_tail.php');
[6615]1002?>
Note: See TracBrowser for help on using the repository browser.