source: trunk/picture.php @ 1590

Last change on this file since 1590 was 1590, checked in by rvelices, 17 years ago

plugins last modifications + events are triggered now from picture.php

  • Property svn:eol-style set to native
  • Property svn:keywords set to Author Date Id Revision
File size: 21.8 KB
Line 
1<?php
2// +-----------------------------------------------------------------------+
3// | PhpWebGallery - a PHP based picture gallery                           |
4// | Copyright (C) 2002-2003 Pierrick LE GALL - pierrick@phpwebgallery.net |
5// | Copyright (C) 2003-2006 PhpWebGallery Team - http://phpwebgallery.net |
6// +-----------------------------------------------------------------------+
7// | branch        : BSF (Best So Far)
8// | file          : $RCSfile$
9// | last update   : $Date: 2006-11-01 05:54:35 +0000 (Wed, 01 Nov 2006) $
10// | last modifier : $Author: rvelices $
11// | revision      : $Revision: 1590 $
12// +-----------------------------------------------------------------------+
13// | This program is free software; you can redistribute it and/or modify  |
14// | it under the terms of the GNU General Public License as published by  |
15// | the Free Software Foundation                                          |
16// |                                                                       |
17// | This program is distributed in the hope that it will be useful, but   |
18// | WITHOUT ANY WARRANTY; without even the implied warranty of            |
19// | MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU      |
20// | General Public License for more details.                              |
21// |                                                                       |
22// | You should have received a copy of the GNU General Public License     |
23// | along with this program; if not, write to the Free Software           |
24// | Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, |
25// | USA.                                                                  |
26// +-----------------------------------------------------------------------+
27
28define('PHPWG_ROOT_PATH','./');
29include_once(PHPWG_ROOT_PATH.'include/common.inc.php');
30include(PHPWG_ROOT_PATH.'include/section_init.inc.php');
31
32// Check Access and exit when user status is not ok
33check_status(ACCESS_GUEST);
34
35// access authorization check
36if (isset($page['category']))
37{
38  check_restrictions($page['category']);
39}
40
41// if this image_id doesn't correspond to this category, an error message is
42// displayed, and execution is stopped
43if (!in_array($page['image_id'], $page['items']))
44{
45  page_not_found('The requested image does not belong to this image set',
46      duplicate_index_url() );
47}
48
49// add default event handler for rendering element content
50add_event_handler('render_element_content', 'default_picture_content',
51  EVENT_HANDLER_PRIORITY_NEUTRAL, 2);
52trigger_action('loc_begin_picture');
53
54// this is the default handler that generates the display for the element
55function default_picture_content($content, $element_info)
56{
57  if ( !empty($content) )
58  {// someone hooked us - so we skip;
59    return $content;
60  }
61  if (!isset($element_info['image_url']))
62  { // nothing to do
63    return $content;
64  }
65  global $user;
66  $my_template = new Template(PHPWG_ROOT_PATH.'template/'.$user['template'],
67    $user['theme'] );
68  $my_template->set_filenames( array('default_content'=>'picture_content.tpl') );
69
70  if (isset($element_info['high_url']))
71  {
72    $uuid = uniqid(rand());
73    $my_template->assign_block_vars(
74      'high',
75      array(
76        'U_HIGH' => $element_info['high_url'],
77        'UUID'   => $uuid,
78        )
79      );
80  }
81  $my_template->assign_vars( array(
82      'SRC_IMG' => $element_info['image_url'],
83      'ALT_IMG' => $element_info['file'],
84      'WIDTH_IMG' => $element_info['scaled_width'],
85      'HEIGHT_IMG' => $element_info['scaled_height'],
86      )
87    );
88  return $my_template->parse( 'default_content', true);
89}
90
91
92
93// +-----------------------------------------------------------------------+
94// |                            initialization                             |
95// +-----------------------------------------------------------------------+
96
97$page['rank_of'] = array_flip($page['items']);
98
99// caching first_rank, last_rank, current_rank in the displayed
100// section. This should also help in readability.
101$page['first_rank']   = 0;
102$page['last_rank']    = count($page['items']) - 1;
103$page['current_rank'] = $page['rank_of'][ $page['image_id'] ];
104
105// caching current item : readability purpose
106$page['current_item'] = $page['image_id'];
107
108if ($page['current_rank'] != $page['first_rank'])
109{
110  // caching first & previous item : readability purpose
111  $page['previous_item'] = $page['items'][ $page['current_rank'] - 1 ];
112  $page['first_item'] = $page['items'][ $page['first_rank'] ];
113}
114
115if ($page['current_rank'] != $page['last_rank'])
116{
117  // caching next & last item : readability purpose
118  $page['next_item'] = $page['items'][ $page['current_rank'] + 1 ];
119  $page['last_item'] = $page['items'][ $page['last_rank'] ];
120}
121
122$url_up = duplicate_index_url(
123  array(
124    'start' =>
125      floor($page['current_rank'] / $user['nb_image_page'])
126      * $user['nb_image_page']
127    ),
128  array(
129    'start',
130    )
131  );
132
133$url_self = duplicate_picture_url();
134
135// +-----------------------------------------------------------------------+
136// |                                actions                                |
137// +-----------------------------------------------------------------------+
138
139/**
140 * Actions are favorite adding, user comment deletion, setting the picture
141 * as representative of the current category...
142 *
143 * Actions finish by a redirection
144 */
145
146if (isset($_GET['action']))
147{
148  switch ($_GET['action'])
149  {
150    case 'add_to_favorites' :
151    {
152      $query = '
153INSERT INTO '.FAVORITES_TABLE.'
154  (image_id,user_id)
155  VALUES
156  ('.$page['image_id'].','.$user['id'].')
157;';
158      pwg_query($query);
159
160      redirect($url_self);
161
162      break;
163    }
164    case 'remove_from_favorites' :
165    {
166      $query = '
167DELETE FROM '.FAVORITES_TABLE.'
168  WHERE user_id = '.$user['id'].'
169    AND image_id = '.$page['image_id'].'
170;';
171      pwg_query($query);
172
173      if ('favorites' == $page['section'])
174      {
175        redirect($url_up);
176      }
177      else
178      {
179        redirect($url_self);
180      }
181
182      break;
183    }
184    case 'set_as_representative' :
185    {
186      if (is_admin() and !is_adviser() and isset($page['category']))
187      {
188        $query = '
189UPDATE '.CATEGORIES_TABLE.'
190  SET representative_picture_id = '.$page['image_id'].'
191  WHERE id = '.$page['category'].'
192;';
193        pwg_query($query);
194      }
195
196      redirect($url_self);
197
198      break;
199    }
200    case 'toggle_metadata' :
201    {
202      break;
203    }
204    case 'add_to_caddie' :
205    {
206      fill_caddie(array($page['image_id']));
207      redirect($url_self);
208      break;
209    }
210    case 'rate' :
211    {
212      include_once(PHPWG_ROOT_PATH.'include/functions_rate.inc.php');
213      rate_picture($page['image_id'],
214          isset($_POST['rate']) ? $_POST['rate'] : $_GET['rate'] );
215      redirect($url_self);
216    }
217    case 'delete_comment' :
218    {
219      if (isset($_GET['comment_to_delete'])
220          and is_numeric($_GET['comment_to_delete'])
221          and is_admin() and !is_adviser() )
222      {
223        $query = '
224DELETE FROM '.COMMENTS_TABLE.'
225  WHERE id = '.$_GET['comment_to_delete'].'
226;';
227        pwg_query( $query );
228      }
229
230      redirect($url_self);
231    }
232  }
233}
234
235// incrementation of the number of hits, we do this only if no action
236$query = '
237UPDATE
238  '.IMAGES_TABLE.'
239  SET hit = hit+1
240  WHERE id = '.$page['image_id'].'
241;';
242pwg_query($query);
243
244//---------------------------------------------------------- related categories
245$query = '
246SELECT category_id,uppercats,commentable,global_rank
247  FROM '.IMAGE_CATEGORY_TABLE.'
248    INNER JOIN '.CATEGORIES_TABLE.' ON category_id = id
249  WHERE image_id = '.$page['image_id'].'
250    AND category_id NOT IN ('.$user['forbidden_categories'].')
251;';
252$result = pwg_query($query);
253$related_categories = array();
254while ($row = mysql_fetch_array($result))
255{
256  array_push($related_categories, $row);
257}
258usort($related_categories, 'global_rank_compare');
259//-------------------------first, prev, current, next & last picture management
260$picture = array();
261
262$ids = array($page['image_id']);
263if (isset($page['previous_item']))
264{
265  array_push($ids, $page['previous_item']);
266  array_push($ids, $page['first_item']);
267}
268if (isset($page['next_item']))
269{
270  array_push($ids, $page['next_item']);
271  array_push($ids, $page['last_item']);
272}
273
274$query = '
275SELECT *
276  FROM '.IMAGES_TABLE.'
277  WHERE id IN ('.implode(',', $ids).')
278;';
279
280$result = pwg_query($query);
281
282while ($row = mysql_fetch_array($result))
283{
284  if (isset($page['previous_item']) and $row['id'] == $page['previous_item'])
285  {
286    $i = 'previous';
287  }
288  else if (isset($page['next_item']) and $row['id'] == $page['next_item'])
289  {
290    $i = 'next';
291  }
292  else if (isset($page['first_item']) and $row['id'] == $page['first_item'])
293  {
294    $i = 'first';
295  }
296  else if (isset($page['last_item']) and $row['id'] == $page['last_item'])
297  {
298    $i = 'last';
299  }
300  else
301  {
302    $i = 'current';
303  }
304
305  foreach (array_keys($row) as $key)
306  {
307    if (!is_numeric($key))
308    {
309      $picture[$i][$key] = $row[$key];
310    }
311  }
312
313  $picture[$i]['is_picture'] = false;
314  if (in_array(get_extension($row['file']), $conf['picture_ext']))
315  {
316    $picture[$i]['is_picture'] = true;
317  }
318
319  $cat_directory = dirname($row['path']);
320  $file_wo_ext = get_filename_wo_extension($row['file']);
321
322  // ------ build element_path and element_url
323  $picture[$i]['element_url'] = $row['path'];
324  if ( ! url_is_remote($row['path']) )
325  {
326    $picture[$i]['element_url'] = get_root_url().$row['path'];
327  }
328
329  // ------ build image_path and image_url
330  if ($picture[$i]['is_picture'])
331  {
332    $picture[$i]['image_path'] = $row['path'];
333    // if we are working on the "current" element, we search if there is a
334    // high quality picture
335    if ($i == 'current')
336    {
337      if (($row['has_high'] == 'true') and ($user['enabled_high'] == 'true'))
338      {
339        $url_high=$cat_directory.'/pwg_high/'.$row['file'];
340         $picture[$i]['high_url'] = $picture[$i]['high_path'] = $url_high;
341        if ( ! url_is_remote($picture[$i]['high_path']) )
342        {
343          $picture[$i]['high_url'] = get_root_url().$picture[$i]['high_path'];
344        }
345      }
346    }
347  }
348  else
349  {// not a picture
350    if (isset($row['representative_ext']) and $row['representative_ext']!='')
351    {
352      $picture[$i]['image_path'] =
353        $cat_directory.'/pwg_representative/'
354        .$file_wo_ext.'.'.$row['representative_ext'];
355    }
356    else
357    {
358      $picture[$i]['image_path'] =
359        get_themeconf('mime_icon_dir')
360        .strtolower(get_extension($row['file'])).'.png';
361    }
362  }
363
364  $picture[$i]['image_url'] = $picture[$i]['image_path'];
365  if ( ! url_is_remote($picture[$i]['image_path']) )
366  {
367    $picture[$i]['image_url'] = get_root_url().$picture[$i]['image_path'];
368  }
369
370  if (!$picture[$i]['is_picture'])
371  {// if picture is not a file, we need the download link
372    $picture[$i]['download_url'] = $picture[$i]['element_url'];
373  }
374  else
375  {// if picture is a file with high, we put the download link
376    if ( isset($picture[$i]['high_path']) )
377    {
378      $picture[$i]['download_url'] = get_root_url().'action.php?dwn='
379        .$picture[$i]['high_path'];
380    }
381  }
382
383  $picture[$i]['thumbnail'] = get_thumbnail_src($row['path'], @$row['tn_ext']);
384
385  if ( !empty( $row['name'] ) )
386  {
387    $picture[$i]['name'] = $row['name'];
388  }
389  else
390  {
391    $picture[$i]['name'] = str_replace('_', ' ', $file_wo_ext);
392  }
393
394  $picture[$i]['url'] = duplicate_picture_url(
395    array(
396      'image_id' => $row['id'],
397      'image_file' => $row['file'],
398      ),
399    array(
400      'start',
401      )
402    );
403
404  if ('previous'==$i and $page['previous_item']==$page['first_item'])
405  {
406    $picture['first'] = $picture[$i];
407  }
408  if ('next'==$i and $page['next_item']==$page['last_item'])
409  {
410    $picture['last'] = $picture[$i];
411  }
412}
413
414// calculation of width and height for the current picture
415if (empty($picture['current']['width']))
416{
417  $taille_image = @getimagesize($picture['current']['image_path']);
418  if ($taille_image!==false)
419  {
420    $picture['current']['width'] = $taille_image[0];
421    $picture['current']['height']= $taille_image[1];
422  }
423}
424
425if (!empty($picture['current']['width']))
426{
427  list($picture['current']['scaled_width'],$picture['current']['scaled_height']) =
428    get_picture_size(
429      $picture['current']['width'],
430      $picture['current']['height'],
431      @$user['maxwidth'],
432      @$user['maxheight']
433    );
434}
435
436// now give an opportunity to the filters to alter element_url,
437// image_url, high_url and download_url
438$picture = trigger_event('picture_navigation', $picture);
439
440$url_admin =
441  get_root_url().'admin.php?page=picture_modify'
442  .'&amp;cat_id='.(isset($page['category']) ? $page['category'] : '')
443  .'&amp;image_id='.$page['image_id']
444;
445
446$url_slide = add_url_params(
447  $picture['current']['url'],
448  array( 'slideshow'=>$conf['slideshow_period'] )
449  );
450
451$title =  $picture['current']['name'];
452$refresh = 0;
453if ( isset( $_GET['slideshow'] ) and isset($page['next_item']) )
454{
455  // $redirect_msg, $refresh, $url_link and $title are required for creating an automated
456  // refresh page in header.tpl
457  $refresh= $_GET['slideshow'];
458  $url_link = add_url_params(
459      $picture['next']['url'],
460      array('slideshow'=>$refresh)
461    );
462  $redirect_msg = nl2br(l10n('redirect_msg'));
463}
464
465$title_nb = ($page['current_rank'] + 1).'/'.$page['cat_nb_images'];
466
467// metadata
468$url_metadata = duplicate_picture_url();
469
470// do we have a plugin that can show metadata for something else than images?
471$metadata_showable = trigger_event('get_element_metadata_available',
472    (
473      ($conf['show_exif'] or $conf['show_iptc'])
474      and isset($picture['current']['image_path'])
475    ),
476    $picture['current']['path'] );
477if ($metadata_showable)
478{
479  if ( !isset($_GET['metadata']) )
480  {
481    $url_metadata = add_url_params( $url_metadata, array('metadata'=>null) );
482  }
483}
484
485$page['body_id'] = 'thePicturePage';
486
487// maybe someone wants a special display (call it before page_header so that they
488// can add stylesheets)
489$element_content = trigger_event('render_element_content',
490                      '', $picture['current'] );
491
492if ( isset($picture['next']['image_url'])
493      and isset($picture['next']['is_picture']) )
494{
495  $template->assign_block_vars( 'prefetch',
496    array (
497      'URL' => $picture['next']['image_url']
498    )
499  );
500}
501include(PHPWG_ROOT_PATH.'include/page_header.php');
502$template->set_filenames(array('picture'=>'picture.tpl'));
503
504//------------------------------------------------------- navigation management
505foreach ( array('first','previous','next','last') as $which_image )
506{
507  if (isset($picture[$which_image]))
508  {
509    $template->assign_block_vars(
510      $which_image,
511      array(
512        'TITLE_IMG' => $picture[$which_image]['name'],
513        'IMG' => $picture[$which_image]['thumbnail'],
514        'U_IMG' => $picture[$which_image]['url'],
515        )
516      );
517  }
518}
519
520$template->assign_vars(
521  array(
522    'SECTION_TITLE' => $page['title'],
523    'PICTURE_TITLE' => $picture['current']['name'],
524    'PHOTO' => $title_nb,
525    'TITLE' => $picture['current']['name'],
526    'ELEMENT_CONTENT' => $element_content,
527
528    'LEVEL_SEPARATOR' => $conf['level_separator'],
529
530    'U_HOME' => make_index_url(),
531    'U_UP' => $url_up,
532    'U_METADATA' => $url_metadata,
533    'U_ADMIN' => $url_admin,
534    'U_SLIDESHOW'=> $url_slide,
535    'U_ADD_COMMENT' => $url_self,
536    )
537  );
538
539if ($conf['show_picture_name_on_title'])
540{
541  $template->assign_block_vars('title', array());
542}
543
544//------------------------------------------------------- upper menu management
545
546// download link
547if ( isset($picture['current']['download_url']) )
548{
549  $template->assign_block_vars(
550    'download',
551    array(
552      'U_DOWNLOAD' => $picture['current']['download_url']
553      )
554    );
555}
556
557// button to set the current picture as representative
558if (is_admin() and isset($page['category']))
559{
560  $template->assign_block_vars(
561    'representative',
562    array(
563      'URL' => add_url_params($url_self,
564                  array('action'=>'set_as_representative')
565               )
566      )
567    );
568}
569
570// caddie button
571if (is_admin())
572{
573  $template->assign_block_vars(
574    'caddie',
575    array(
576      'URL' => add_url_params($url_self,
577                  array('action'=>'add_to_caddie')
578               )
579      )
580    );
581}
582
583// favorite manipulation
584if (!$user['is_the_guest'])
585{
586  // verify if the picture is already in the favorite of the user
587  $query = '
588SELECT COUNT(*) AS nb_fav
589  FROM '.FAVORITES_TABLE.'
590  WHERE image_id = '.$page['image_id'].'
591    AND user_id = '.$user['id'].'
592;';
593  $result = pwg_query($query);
594  $row = mysql_fetch_array($result);
595
596  if ($row['nb_fav'] == 0)
597  {
598    $template->assign_block_vars(
599      'favorite',
600      array(
601        'FAVORITE_IMG'  => get_root_url().get_themeconf('icon_dir').'/favorite.png',
602        'FAVORITE_HINT' => $lang['add_favorites_hint'],
603        'FAVORITE_ALT'  => $lang['add_favorites_alt'],
604        'U_FAVORITE'    => add_url_params(
605                              $url_self,
606                              array('action'=>'add_to_favorites')
607                           ),
608        )
609      );
610  }
611  else
612  {
613    $template->assign_block_vars(
614      'favorite',
615      array(
616        'FAVORITE_IMG'  => get_root_url().get_themeconf('icon_dir').'/del_favorite.png',
617        'FAVORITE_HINT' => $lang['del_favorites_hint'],
618        'FAVORITE_ALT'  => $lang['del_favorites_alt'],
619        'U_FAVORITE'    => add_url_params(
620                              $url_self,
621                              array('action'=>'remove_from_favorites')
622                           )
623        )
624      );
625  }
626}
627//------------------------------------ admin link for information modifications
628if ( is_admin() )
629{
630  $template->assign_block_vars('admin', array());
631}
632
633//--------------------------------------------------------- picture information
634// legend
635if (isset($picture['current']['comment'])
636    and !empty($picture['current']['comment']))
637{
638  $template->assign_block_vars(
639    'legend',
640    array(
641      'COMMENT_IMG' => nl2br($picture['current']['comment'])
642      ));
643}
644
645$infos = array();
646
647// author
648if (!empty($picture['current']['author']))
649{
650  $infos['INFO_AUTHOR'] =
651    // FIXME because of search engine partial rewrite, giving the author
652    // name threw GET is not supported anymore. This feature should come
653    // back later, with a better design
654//     '<a href="'.
655//       PHPWG_ROOT_PATH.'category.php?cat=search'.
656//       '&amp;search=author:'.$picture['current']['author']
657//       .'">'.$picture['current']['author'].'</a>';
658    $picture['current']['author'];
659}
660else
661{
662  $infos['INFO_AUTHOR'] = l10n('N/A');
663}
664
665// creation date
666if (!empty($picture['current']['date_creation']))
667{
668  $val = format_date($picture['current']['date_creation']);
669  $url = make_index_url(
670        array(
671          'chronology_field'=>'created',
672          'chronology_style'=>'monthly',
673          'chronology_view'=>'list',
674          'chronology_date' => explode('-', $picture['current']['date_creation'])
675        )
676      );
677  $infos['INFO_CREATION_DATE'] = '<a href="'.$url.'" rel="nofollow">'.$val.'</a>';
678}
679else
680{
681  $infos['INFO_CREATION_DATE'] = l10n('N/A');
682}
683
684// date of availability
685$val = format_date($picture['current']['date_available'], 'mysql_datetime');
686$url = make_index_url(
687      array(
688        'chronology_field'=>'posted',
689        'chronology_style'=>'monthly',
690        'chronology_view'=>'list',
691        'chronology_date'=>explode('-', substr($picture['current']['date_available'],0,10))
692      )
693    );
694$infos['INFO_POSTED_DATE'] = '<a href="'.$url.'" rel="nofollow">'.$val.'</a>';
695
696// size in pixels
697if ($picture['current']['is_picture'] and isset($picture['current']['width']) )
698{
699  if ($picture['current']['scaled_width'] !== $picture['current']['width'] )
700  {
701    $infos['INFO_DIMENSIONS'] =
702      '<a href="'.$picture['current']['image_url'].'" title="'.
703      l10n('Original dimensions').'">'.
704      $picture['current']['width'].'*'.$picture['current']['height'].'</a>';
705  }
706  else
707  {
708    $infos['INFO_DIMENSIONS'] =
709      $picture['current']['width'].'*'.$picture['current']['height'];
710  }
711}
712else
713{
714  $infos['INFO_DIMENSIONS'] = l10n('N/A');
715}
716
717// filesize
718if (!empty($picture['current']['filesize']))
719{
720  $infos['INFO_FILESIZE'] =
721    sprintf(l10n('%d Kb'), $picture['current']['filesize']);
722}
723else
724{
725  $infos['INFO_FILESIZE'] = l10n('N/A');
726}
727
728// number of visits
729$infos['INFO_VISITS'] = $picture['current']['hit'];
730
731// file
732$infos['INFO_FILE'] = $picture['current']['file'];
733
734// tags
735$query = '
736SELECT id, name, url_name
737  FROM '.IMAGE_TAG_TABLE.'
738    INNER JOIN '.TAGS_TABLE.' ON tag_id = id
739  WHERE image_id = '.$page['image_id'].'
740;';
741$result = pwg_query($query);
742
743if (mysql_num_rows($result) > 0)
744{
745  $tags = array();
746
747  while ($row = mysql_fetch_array($result))
748  {
749    array_push(
750      $tags,
751      '<a href="'
752      .make_index_url(
753        array(
754          'tags' => array(
755            array(
756              'id' => $row['id'],
757              'url_name' => $row['url_name'],
758              ),
759            )
760          )
761        )
762      .'">'.$row['name'].'</a>'
763      );
764  }
765
766  $infos['INFO_TAGS'] = implode(', ', $tags);
767}
768else
769{
770  $infos['INFO_TAGS'] = l10n('N/A');
771}
772
773$template->assign_vars($infos);
774
775// related categories
776foreach ($related_categories as $category)
777{
778  $template->assign_block_vars(
779    'category',
780    array(
781      'LINE' => count($related_categories) > 3
782        ? get_cat_display_name_cache($category['uppercats'])
783        : get_cat_display_name_from_id($category['category_id'])
784      )
785    );
786}
787
788//slideshow end
789if (isset($_GET['slideshow']))
790{
791  if (!is_numeric($_GET['slideshow']))
792  {
793    $_GET['slideshow'] = $conf['slideshow_period'];
794  }
795
796  $template->assign_block_vars(
797    'stop_slideshow',
798    array(
799      'U_SLIDESHOW' => $picture['current']['url'],
800      )
801    );
802}
803
804// +-----------------------------------------------------------------------+
805// |                               sub pages                               |
806// +-----------------------------------------------------------------------+
807
808include(PHPWG_ROOT_PATH.'include/picture_rate.inc.php');
809include(PHPWG_ROOT_PATH.'include/picture_comment.inc.php');
810if ($metadata_showable and isset($_GET['metadata']))
811{
812  include(PHPWG_ROOT_PATH.'include/picture_metadata.inc.php');
813}
814//------------------------------------------------------------ log informations
815pwg_log('picture', $page['title'], $picture['current']['file']);
816
817$template->parse('picture');
818include(PHPWG_ROOT_PATH.'include/page_tail.php');
819?>
Note: See TracBrowser for help on using the repository browser.