source: trunk/picture.php @ 20321

Last change on this file since 20321 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: 27.5 KB
RevLine 
[2]1<?php
[354]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// +-----------------------------------------------------------------------+
[420]23
[12798]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{
[15299]152  global $conf;
153 
[1590]154  if ( !empty($content) )
155  {// someone hooked us - so we skip;
156    return $content;
157  }
[12796]158
159  if (isset($_COOKIE['picture_deriv']))
160  {
[12958]161    if ( array_key_exists($_COOKIE['picture_deriv'], ImageStdParams::get_defined_type_map()) )
162    {
163      pwg_set_session_var('picture_deriv', $_COOKIE['picture_deriv']);
164    }
165    setcookie('picture_deriv', false, 0, cookie_path() );
[1590]166  }
[15299]167  $deriv_type = pwg_get_session_var('picture_deriv', $conf['derivative_default_size']);
[12796]168  $selected_derivative = $element_info['derivatives'][$deriv_type];
[1793]169
[12855]170  $unique_derivatives = array();
171  $show_original = isset($element_info['element_url']);
[12796]172  $added = array();
173  foreach($element_info['derivatives'] as $type => $derivative)
174  {
[13074]175    if ($type==IMG_SQUARE || $type==IMG_THUMB)
176      continue;
[13736]177    if (!array_key_exists($type, ImageStdParams::get_defined_type_map()))
178      continue;
[12796]179    $url = $derivative->get_url();
180    if (isset($added[$url]))
181      continue;
182    $added[$url] = 1;
[12855]183    $show_original &= !($derivative->same_as_source());
184    $unique_derivatives[$type]= $derivative;
[12796]185  }
186
[12855]187  global $page, $template;
[12920]188
[12855]189  if ($show_original)
190  {
191    $template->assign( 'U_ORIGINAL', $element_info['element_url'] );
192  }
193
[12796]194  $template->append('current', array(
195      'selected_derivative' => $selected_derivative,
[12855]196      'unique_derivatives' => $unique_derivatives,
[12796]197    ), true);
[1793]198
[12796]199
[1882]200  $template->set_filenames(
[1787]201    array('default_content'=>'picture_content.tpl')
202    );
[1590]203
[2227]204  $template->assign( array(
[1590]205      'ALT_IMG' => $element_info['file'],
[12958]206      'COOKIE_PATH' => cookie_path(),
[1590]207      )
208    );
[1882]209  return $template->parse( 'default_content', true);
[1590]210}
211
[1082]212// +-----------------------------------------------------------------------+
213// |                            initialization                             |
214// +-----------------------------------------------------------------------+
215
[1036]216// caching first_rank, last_rank, current_rank in the displayed
217// section. This should also help in readability.
218$page['first_rank']   = 0;
219$page['last_rank']    = count($page['items']) - 1;
[1082]220$page['current_rank'] = $page['rank_of'][ $page['image_id'] ];
[1036]221
222// caching current item : readability purpose
[1082]223$page['current_item'] = $page['image_id'];
[1036]224
225if ($page['current_rank'] != $page['first_rank'])
[2]226{
[1086]227  // caching first & previous item : readability purpose
[1036]228  $page['previous_item'] = $page['items'][ $page['current_rank'] - 1 ];
[1086]229  $page['first_item'] = $page['items'][ $page['first_rank'] ];
[2]230}
[1036]231
232if ($page['current_rank'] != $page['last_rank'])
233{
[1086]234  // caching next & last item : readability purpose
[1036]235  $page['next_item'] = $page['items'][ $page['current_rank'] + 1 ];
[1086]236  $page['last_item'] = $page['items'][ $page['last_rank'] ];
[1036]237}
238
[1503]239$url_up = duplicate_index_url(
[1082]240  array(
241    'start' =>
[8634]242      floor($page['current_rank'] / $page['nb_image_page'])
243      * $page['nb_image_page']
[1082]244    ),
245  array(
246    'start',
247    )
248  );
[1014]249
[1503]250$url_self = duplicate_picture_url();
[811]251
[1082]252// +-----------------------------------------------------------------------+
253// |                                actions                                |
254// +-----------------------------------------------------------------------+
[858]255
[1082]256/**
257 * Actions are favorite adding, user comment deletion, setting the picture
258 * as representative of the current category...
259 *
260 * Actions finish by a redirection
261 */
[858]262
[1590]263if (isset($_GET['action']))
[858]264{
[1082]265  switch ($_GET['action'])
[1041]266  {
[1082]267    case 'add_to_favorites' :
[1041]268    {
[1082]269      $query = '
270INSERT INTO '.FAVORITES_TABLE.'
271  (image_id,user_id)
272  VALUES
273  ('.$page['image_id'].','.$user['id'].')
274;';
275      pwg_query($query);
276
277      redirect($url_self);
[1086]278
[1082]279      break;
[1041]280    }
[1082]281    case 'remove_from_favorites' :
282    {
283      $query = '
284DELETE FROM '.FAVORITES_TABLE.'
285  WHERE user_id = '.$user['id'].'
286    AND image_id = '.$page['image_id'].'
287;';
288      pwg_query($query);
[1041]289
[1082]290      if ('favorites' == $page['section'])
291      {
292        redirect($url_up);
293      }
294      else
295      {
296        redirect($url_self);
297      }
[1086]298
[1082]299      break;
300    }
301    case 'set_as_representative' :
[1041]302    {
[8126]303      if (is_admin() and isset($page['category']))
[1082]304      {
[1041]305        $query = '
[1082]306UPDATE '.CATEGORIES_TABLE.'
307  SET representative_picture_id = '.$page['image_id'].'
[1861]308  WHERE id = '.$page['category']['id'].'
[1082]309;';
310        pwg_query($query);
[8802]311
312        $query = '
313UPDATE '.USER_CACHE_CATEGORIES_TABLE.'
314  SET user_representative_picture_id = NULL
315  WHERE user_id = '.$user['id'].'
316    AND cat_id = '.$page['category']['id'].'
317;';
318        pwg_query($query);
[1082]319      }
[1086]320
[1082]321      redirect($url_self);
[1086]322
[1082]323      break;
324    }
325    case 'add_to_caddie' :
326    {
[1106]327      fill_caddie(array($page['image_id']));
[1082]328      redirect($url_self);
329      break;
330    }
331    case 'rate' :
332    {
[1107]333      include_once(PHPWG_ROOT_PATH.'include/functions_rate.inc.php');
[11839]334      rate_picture($page['image_id'], $_POST['rate']);
[1082]335      redirect($url_self);
336    }
[13865]337    case 'edit_comment':
[3445]338    {
[5127]339      include_once(PHPWG_ROOT_PATH.'include/functions_comment.inc.php');
[5195]340      check_input_parameter('comment_to_edit', $_GET, false, PATTERN_ID);
341      $author_id = get_comment_author_id($_GET['comment_to_edit']);
[12920]342
[5195]343      if (can_manage_comment('edit', $author_id))
[3445]344      {
[5127]345        if (!empty($_POST['content']))
346        {
[13865]347          check_pwg_token();
[10097]348          $comment_action = update_user_comment(
[5195]349            array(
350              'comment_id' => $_GET['comment_to_edit'],
351              'image_id' => $page['image_id'],
[18995]352              'content' => $_POST['content'],
353              'website_url' => @$_POST['website_url'],
[5195]354              ),
355            $_POST['key']
356            );
[6615]357
[12767]358          $perform_redirect = false;
[10097]359          switch ($comment_action)
360          {
361            case 'moderate':
[12767]362              $_SESSION['page_infos'][] = l10n('An administrator must authorize your comment before it is visible.');
[10097]363            case 'validate':
[12767]364              $_SESSION['page_infos'][] = l10n('Your comment has been registered');
365              $perform_redirect = true;
[10097]366              break;
367            case 'reject':
[12767]368              $_SESSION['page_errors'][] = l10n('Your comment has NOT been registered because it did not pass the validation rules');
[10097]369              break;
370            default:
371              trigger_error('Invalid comment action '.$comment_action, E_USER_WARNING);
372          }
[12920]373
[12767]374          if ($perform_redirect)
375          {
376            redirect($url_self);
377          }
[10122]378          unset($_POST['content']);
[5195]379        }
[18995]380       
381        $edit_comment = $_GET['comment_to_edit'];
[3445]382      }
[13865]383      break;
[3445]384    }
[1082]385    case 'delete_comment' :
386    {
[5195]387      check_pwg_token();
[6615]388
[5127]389      include_once(PHPWG_ROOT_PATH.'include/functions_comment.inc.php');
[6615]390
[5195]391      check_input_parameter('comment_to_delete', $_GET, false, PATTERN_ID);
392
393      $author_id = get_comment_author_id($_GET['comment_to_delete']);
[6615]394
[5195]395      if (can_manage_comment('delete', $author_id))
[1082]396      {
[5127]397        delete_user_comment($_GET['comment_to_delete']);
[1082]398      }
[6615]399
[1082]400      redirect($url_self);
401    }
[3409]402    case 'validate_comment' :
403    {
[5195]404      check_pwg_token();
[6615]405
[5127]406      include_once(PHPWG_ROOT_PATH.'include/functions_comment.inc.php');
[5195]407
408      check_input_parameter('comment_to_validate', $_GET, false, PATTERN_ID);
[6615]409
[5653]410      $author_id = get_comment_author_id($_GET['comment_to_validate']);
[6615]411
[5195]412      if (can_manage_comment('validate', $author_id))
[3409]413      {
[5195]414        validate_user_comment($_GET['comment_to_validate']);
[3409]415      }
[6615]416
[3409]417      redirect($url_self);
418    }
419
[1082]420  }
[1041]421}
422
[17345]423
424//---------- incrementation of the number of hits
425// don't increment counter if in the Mozilla Firefox prefetch
426if (isset($_SERVER['HTTP_X_MOZ']) and $_SERVER['HTTP_X_MOZ'] == 'prefetch')
427{
428  add_event_handler('allow_increment_element_hit_count', create_function('$b', 'return false;'));
429}
430else
431{
432  // don't increment counter if comming from the same picture (actions)
433  if (pwg_get_session_var('referer_image_id',0) == $page['image_id'])
434  {
435    add_event_handler('allow_increment_element_hit_count', create_function('$b', 'return false;'));
436  }
437  pwg_set_session_var('referer_image_id', $page['image_id']);
438}
439
440// don't increment if adding a comment
[2155]441if (trigger_event('allow_increment_element_hit_count', !isset($_POST['content']) ) )
[2048]442{
443  $query = '
[1082]444UPDATE
445  '.IMAGES_TABLE.'
446  SET hit = hit+1
447  WHERE id = '.$page['image_id'].'
448;';
[2048]449  pwg_query($query);
450}
[17345]451
[745]452//---------------------------------------------------------- related categories
453$query = '
[18747]454SELECT id,uppercats,commentable,visible,status,global_rank
[745]455  FROM '.IMAGE_CATEGORY_TABLE.'
456    INNER JOIN '.CATEGORIES_TABLE.' ON category_id = id
[1082]457  WHERE image_id = '.$page['image_id'].'
[1677]458'.get_sql_condition_FandF
459  (
460    array
461      (
[18747]462        'forbidden_categories' => 'id',
463        'visible_categories' => 'id'
[1677]464      ),
465    'AND'
466  ).'
[745]467;';
[18747]468$related_categories = array_from_query($query);
[745]469usort($related_categories, 'global_rank_compare');
[1086]470//-------------------------first, prev, current, next & last picture management
[402]471$picture = array();
[368]472
[1082]473$ids = array($page['image_id']);
[1036]474if (isset($page['previous_item']))
[465]475{
[1036]476  array_push($ids, $page['previous_item']);
[1086]477  array_push($ids, $page['first_item']);
[465]478}
[1036]479if (isset($page['next_item']))
[465]480{
[1036]481  array_push($ids, $page['next_item']);
[1086]482  array_push($ids, $page['last_item']);
[465]483}
[368]484
[454]485$query = '
[1036]486SELECT *
487  FROM '.IMAGES_TABLE.'
488  WHERE id IN ('.implode(',', $ids).')
489;';
[368]490
[1036]491$result = pwg_query($query);
[368]492
[4325]493while ($row = pwg_db_fetch_assoc($result))
[345]494{
[1036]495  if (isset($page['previous_item']) and $row['id'] == $page['previous_item'])
[465]496  {
[1086]497    $i = 'previous';
[465]498  }
[12797]499  elseif (isset($page['next_item']) and $row['id'] == $page['next_item'])
[465]500  {
[1036]501    $i = 'next';
[465]502  }
[12797]503  elseif (isset($page['first_item']) and $row['id'] == $page['first_item'])
[1086]504  {
505    $i = 'first';
506  }
[12797]507  elseif (isset($page['last_item']) and $row['id'] == $page['last_item'])
[1086]508  {
509    $i = 'last';
510  }
[1036]511  else
512  {
513    $i = 'current';
514  }
[1059]515
[12855]516  $row['src_image'] = new SrcImage($row);
517  $row['derivatives'] = DerivativeImage::get_all($row['src_image']);
[12920]518
[1612]519  if ($i=='current')
[465]520  {
[12855]521    $row['element_path'] = get_element_path($row);
522
[12797]523    if ( $row['src_image']->is_original() )
[12855]524    {// we have a photo
[1612]525      if ( $user['enabled_high']=='true' )
[536]526      {
[12855]527        $row['element_url'] = $row['src_image']->get_url();
528        $row['download_url'] = get_action_url($row['id'], 'e', true);
[536]529      }
530    }
[1590]531    else
[1612]532    { // not a pic - need download link
[12855]533      $row['download_url'] = $row['element_url'] = get_element_url($row);;
[1590]534    }
535  }
536
[12797]537  $row['url'] = duplicate_picture_url(
538    array(
539      'image_id' => $row['id'],
540      'image_file' => $row['file'],
541      ),
542    array(
543      'start',
544      )
545    );
[1059]546
[12797]547  $picture[$i] = $row;
[12920]548  $picture[$i]['TITLE'] = render_element_name($row);
[12797]549
[1086]550  if ('previous'==$i and $page['previous_item']==$page['first_item'])
551  {
552    $picture['first'] = $picture[$i];
553  }
554  if ('next'==$i and $page['next_item']==$page['last_item'])
555  {
556    $picture['last'] = $picture[$i];
557  }
[345]558}
[368]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
[12920]611$title =  $picture['current']['TITLE'];
[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'])
[12797]624    and !$picture['current']['src_image']->is_mimetype()
[1590]625    ),
[12797]626  $picture['current']
[1787]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
[1036]640//------------------------------------------------------- navigation management
[2227]641foreach (array('first','previous','next','last', 'current') as $which_image)
[1020]642{
[1086]643  if (isset($picture[$which_image]))
644  {
[2227]645    $template->assign(
[1086]646      $which_image,
[2413]647      array_merge(
648        $picture[$which_image],
649        array(
[12797]650          'THUMB_SRC' => $picture[$which_image]['derivatives'][IMG_THUMB]->get_url(),
[2413]651          // Params slideshow was transmit to navigation buttons
652          'U_IMG' =>
653            add_url_params(
654              $picture[$which_image]['url'], $slideshow_url_params),
655          )
[1086]656        )
657      );
658  }
[1020]659}
[12920]660if ($conf['picture_download_icon'] and !empty($picture['current']['download_url']))
661{
662  $template->append('current', array('U_DOWNLOAD' => $picture['current']['download_url']), true);
663}
[1020]664
[2218]665
666if ($page['slideshow'])
667{
[2227]668  $tpl_slideshow = array();
669
[2218]670  //slideshow end
[2227]671  $template->assign(
[2218]672    array(
[2227]673      'U_SLIDESHOW_STOP' => $picture['current']['url'],
[2218]674      )
675    );
676
677  foreach (array('repeat', 'play') as $p)
678  {
[2227]679    $var_name =
680      'U_'
681      .($slideshow_params[$p] ? 'STOP_' : 'START_')
682      .strtoupper($p);
683
684    $tpl_slideshow[$var_name] =
[2218]685          add_url_params(
686            $picture['current']['url'],
687            array('slideshow' =>
688              encode_slideshow_params(
[2227]689                array_merge($slideshow_params,
[2218]690                  array($p => ! $slideshow_params[$p]))
691                )
692              )
[2227]693          );
[2218]694  }
695
696  foreach (array('dec', 'inc') as $op)
697  {
698    $new_period = $slideshow_params['period'] + ((($op == 'dec') ? -1 : 1) * $conf['slideshow_period_step']);
699    $new_slideshow_params =
700      correct_slideshow_params(
[2227]701        array_merge($slideshow_params,
[2218]702                  array('period' => $new_period)));
703
704    if ($new_slideshow_params['period'] === $new_period)
705    {
[2227]706      $var_name = 'U_'.strtoupper($op).'_PERIOD';
707      $tpl_slideshow[$var_name] =
[2218]708            add_url_params(
709              $picture['current']['url'],
710              array('slideshow' => encode_slideshow_params($new_slideshow_params)
711                  )
712          );
713    }
714  }
[2227]715  $template->assign('slideshow', $tpl_slideshow );
[2218]716}
[5293]717elseif ($conf['picture_slideshow_icon'])
[2218]718{
[2227]719  $template->assign(
[2218]720    array(
[2227]721      'U_SLIDESHOW_START' =>
[2218]722        add_url_params(
723          $picture['current']['url'],
724          array( 'slideshow'=>''))
725      )
726    );
727}
728
[2227]729$template->assign(
[1082]730  array(
[18637]731    'SECTION_TITLE' => $page['section_title'],
[1082]732    'PHOTO' => $title_nb,
[2759]733    'IS_HOME' => ('categories'==$page['section'] and !isset($page['category']) ),
[368]734
[1082]735    'LEVEL_SEPARATOR' => $conf['level_separator'],
[2309]736
[2227]737    'U_UP' => $url_up,
[5293]738    'DISPLAY_NAV_BUTTONS' => $conf['picture_navigation_icons'],
739    'DISPLAY_NAV_THUMB' => $conf['picture_navigation_thumb']
[1082]740    )
741  );
[803]742
[5293]743if ($conf['picture_metadata_icon'])
744{
745  $template->assign('U_METADATA', $url_metadata);
746}
[803]747
[5293]748
[536]749//------------------------------------------------------- upper menu management
[1082]750
[2227]751// admin links
[1070]752if (is_admin())
[858]753{
[2227]754  if (isset($page['category']))
755  {
756    $template->assign(
757      array(
758        'U_SET_AS_REPRESENTATIVE' => add_url_params($url_self,
759                    array('action'=>'set_as_representative')
760                 )
761        )
762      );
763  }
[2309]764
[3167]765  $url_admin =
[13077]766    get_root_url().'admin.php?page=photo-'.$page['image_id']
767    .(isset($page['category']) ? '&amp;cat_id='.$page['category']['id'] : '')
768    ;
[3167]769
[2227]770  $template->assign(
[858]771    array(
[2227]772      'U_CADDIE' => add_url_params($url_self,
[1094]773                  array('action'=>'add_to_caddie')
[2227]774               ),
775      'U_ADMIN' => $url_admin,
[1082]776      )
[858]777    );
[3167]778
[6025]779  $template->assign('available_permission_levels', get_privacy_level_options());
[858]780}
781
[1082]782// favorite manipulation
[5305]783if (!is_a_guest() and $conf['picture_favorite_icon'])
[531]784{
785  // verify if the picture is already in the favorite of the user
[1082]786  $query = '
787SELECT COUNT(*) AS nb_fav
788  FROM '.FAVORITES_TABLE.'
789  WHERE image_id = '.$page['image_id'].'
790    AND user_id = '.$user['id'].'
791;';
[6615]792  $row = pwg_db_fetch_assoc( pwg_query($query) );
793        $is_favorite = $row['nb_fav'] != 0;
[1086]794
[6615]795  $template->assign(
796    'favorite',
797    array(
798                        'IS_FAVORITE' => $is_favorite,
799      'U_FAVORITE'    => add_url_params(
800        $url_self,
801        array('action'=> !$is_favorite ? 'add_to_favorites' : 'remove_from_favorites' )
802        ),
803      )
804    );
[2]805}
[368]806
[2]807//--------------------------------------------------------- picture information
[393]808// legend
[465]809if (isset($picture['current']['comment'])
810    and !empty($picture['current']['comment']))
[393]811{
[2227]812  $template->assign(
813      'COMMENT_IMG',
[2079]814        trigger_event('render_element_description',
815          $picture['current']['comment'])
[2227]816      );
[393]817}
818
[847]819// author
820if (!empty($picture['current']['author']))
[51]821{
[13074]822  $infos['INFO_AUTHOR'] = $picture['current']['author'];
[51]823}
[774]824
[847]825// creation date
826if (!empty($picture['current']['date_creation']))
[635]827{
[1051]828  $val = format_date($picture['current']['date_creation']);
[1503]829  $url = make_index_url(
[1825]830    array(
831      'chronology_field'=>'created',
832      'chronology_style'=>'monthly',
833      'chronology_view'=>'list',
[9073]834      'chronology_date' => explode('-', substr($picture['current']['date_creation'], 0, 10))
[1825]835      )
836    );
837  $infos['INFO_CREATION_DATE'] =
838    '<a href="'.$url.'" rel="nofollow">'.$val.'</a>';
[847]839}
840
841// date of availability
[3122]842$val = format_date($picture['current']['date_available']);
[1503]843$url = make_index_url(
[1825]844  array(
845    'chronology_field'=>'posted',
846    'chronology_style'=>'monthly',
847    'chronology_view'=>'list',
848    'chronology_date' => explode(
849      '-',
850      substr($picture['current']['date_available'], 0, 10)
[1090]851      )
[1825]852    )
853  );
[1135]854$infos['INFO_POSTED_DATE'] = '<a href="'.$url.'" rel="nofollow">'.$val.'</a>';
[847]855
856// size in pixels
[12797]857if ($picture['current']['src_image']->is_original() and isset($picture['current']['width']) )
[847]858{
[12796]859  $infos['INFO_DIMENSIONS'] =
860    $picture['current']['width'].'*'.$picture['current']['height'];
[10160]861}
[774]862
[847]863// filesize
[12796]864if (!empty($picture['current']['filesize']))
[847]865{
866  $infos['INFO_FILESIZE'] =
[10160]867    sprintf(l10n('%d Kb'), $picture['current']['filesize']);
[10157]868}
869
[847]870// number of visits
871$infos['INFO_VISITS'] = $picture['current']['hit'];
872
873// file
874$infos['INFO_FILE'] = $picture['current']['file'];
875
[2227]876$template->assign($infos);
[5304]877$template->assign('display_info', unserialize($conf['picture_informations']));
[2227]878
879// related tags
[1827]880$tags = get_common_tags( array($page['image_id']), -1);
881if ( count($tags) )
[847]882{
[2227]883  foreach ($tags as $tag)
[1119]884  {
[2227]885    $template->append(
886        'related_tags',
[2413]887        array_merge( $tag,
888          array(
889            'URL' => make_index_url(
[2227]890                      array(
891                        'tags' => array($tag)
892                        )
893                      ),
[2413]894            'U_TAG_IMAGE' => duplicate_picture_url(
[2227]895                      array(
896                        'section' => 'tags',
897                        'tags' => array($tag)
898                        )
899                    )
[1119]900          )
[2413]901        )
[2227]902      );
[1119]903  }
[847]904}
905
906// related categories
[2309]907if ( count($related_categories)==1 and
908    isset($page['category']) and
[18757]909    $related_categories[0]['id']==$page['category']['id'] )
[2309]910{ // no need to go to db, we have all the info
[2227]911  $template->append(
[2309]912      'related_categories',
913      get_cat_display_name( $page['category']['upper_names'] )
[847]914    );
915}
[2309]916else
917{ // use only 1 sql query to get names for all related categories
918  $ids = array();
919  foreach ($related_categories as $category)
920  {// add all uppercats to $ids
921    $ids = array_merge($ids, explode(',', $category['uppercats']) );
922  }
923  $ids = array_unique($ids);
924  $query = '
925SELECT id, name, permalink
926  FROM '.CATEGORIES_TABLE.'
927  WHERE id IN ('.implode(',',$ids).')';
928  $cat_map = hash_from_query($query, 'id');
929  foreach ($related_categories as $category)
930  {
931    $cats = array();
932    foreach ( explode(',', $category['uppercats']) as $id )
933    {
934      $cats[] = $cat_map[$id];
935    }
936    $template->append('related_categories', get_cat_display_name($cats) );
937  }
938}
[847]939
[1882]940// maybe someone wants a special display (call it before page_header so that
941// they can add stylesheets)
942$element_content = trigger_event(
943  'render_element_content',
944  '',
945  $picture['current']
946  );
[2227]947$template->assign( 'ELEMENT_CONTENT', $element_content );
[1882]948
[12797]949if (isset($picture['next'])
950    and $picture['next']['src_image']->is_original()
951    and strpos($_SERVER['HTTP_USER_AGENT'], 'Chrome/') === false)
952{
[15299]953  $template->assign(
954    'U_PREFETCH',
955    $picture['next']['derivatives'][pwg_get_session_var('picture_deriv', $conf['derivative_default_size'])]->get_url()
956    );
[12797]957}
958
[15299]959$template->assign(
960  'U_CANONICAL',
961  make_picture_url(
962    array(
963      'image_id' => $picture['current']['id'],
964      'image_file' => $picture['current']['file'])
965    )
966  );
[12797]967
[1082]968// +-----------------------------------------------------------------------+
969// |                               sub pages                               |
970// +-----------------------------------------------------------------------+
[847]971
[1082]972include(PHPWG_ROOT_PATH.'include/picture_rate.inc.php');
[12887]973if ($conf['activate_comments'])
974{
975  include(PHPWG_ROOT_PATH.'include/picture_comment.inc.php');
976}
[2407]977if ($metadata_showable and pwg_get_session_var('show_metadata') <> null )
[1107]978{
979  include(PHPWG_ROOT_PATH.'include/picture_metadata.inc.php');
980}
[345]981
[10812]982// include menubar
983$themeconf = $template->get_template_vars('themeconf');
[10824]984if ($conf['picture_menu'] AND (!isset($themeconf['hide_menu_on']) OR !in_array('thePicturePage', $themeconf['hide_menu_on'])))
[10812]985{
[10970]986  if (!isset($page['start'])) $page['start'] = 0;
[10812]987  include( PHPWG_ROOT_PATH.'include/menubar.inc.php');
[10814]988  if (is_admin()) $template->assign('U_ADMIN', $url_admin); // overwrited by the menu
[10812]989}
990
[1627]991include(PHPWG_ROOT_PATH.'include/page_header.php');
[1793]992trigger_action('loc_end_picture');
[15578]993include(PHPWG_ROOT_PATH.'include/page_messages.php');
[2549]994if ($page['slideshow'] and $conf['light_slideshow'])
995{
996  $template->pparse('slideshow');
997}
998else
999{
[18760]1000  $template->parse_picture_buttons();
[2549]1001  $template->pparse('picture');
1002}
[2327]1003//------------------------------------------------------------ log informations
1004pwg_log($picture['current']['id'], 'picture');
[369]1005include(PHPWG_ROOT_PATH.'include/page_tail.php');
[6615]1006?>
Note: See TracBrowser for help on using the repository browser.