source: trunk/picture.php @ 13670

Last change on this file since 13670 was 13115, checked in by rvelices, 12 years ago

improvement of picture title on picture page, drop boxes on index page ...
sharpening uses a zider scale range

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