source: extensions/akBookStyle/trunk/include/akContent.class.php @ 10853

Revision 10853, 7.9 KB checked in by flop25, 9 years ago (diff)

really compatible 2.2

Line 
1<?php
2// +-----------------------------------------------------------------------+
3// | akBookStyle  - a plugin for Piwigo                                    |
4// +-----------------------------------------------------------------------+
5// | Copyright(C) 2009-2010 Nicolas Roudaire        http://www.nikrou.net  |
6// | Copyright(C) 2009      vdigital                                       |
7// +-----------------------------------------------------------------------+
8// | This program is free software; you can redistribute it and/or modify  |
9// | it under the terms of the GNU General Public License as published by  |
10// | the Free Software Foundation                                          |
11// |                                                                       |
12// | This program is distributed in the hope that it will be useful, but   |
13// | WITHOUT ANY WARRANTY; without even the implied warranty of            |
14// | MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU      |
15// | General Public License for more details.                              |
16// |                                                                       |
17// | You should have received a copy of the GNU General Public License     |
18// | along with this program; if not, write to the Free Software           |
19// | Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,            |
20// | MA 02110-1301 USA                                                     |
21// +-----------------------------------------------------------------------+
22
23if (!defined('PHPWG_ROOT_PATH')) {
24  die('Hacking attempt!');
25}
26
27include_once(PHPWG_ROOT_PATH.'include/functions_picture.inc.php');
28
29class akContent
30{
31  public function __construct($config) {
32    $this->plugin_config = $config;
33    $this->current_picture = 0;
34    $this->next_picture = null;
35    $this->previous_picture = null;
36    $this->applicable = false;
37
38    $this->picture_pattern_format = '`^%s/(?:start\-\d+/)?picture/(\d+)$`';
39  }
40
41  public function page_force() {
42    global $page;
43
44    if (!empty($page['category'])) {
45      if (in_array($page['category']['id'], $this->plugin_config->ak_categories))
46      {
47        $this->applicable = true;
48        $page['nb_image_page'] = $this->plugin_config->ak_by_page;
49        $GLOBALS['user']['nb_image_page'] = $this->plugin_config->ak_by_page;
50      }
51      else
52      {
53        $this->applicable = false;
54      }     
55    }
56  }
57
58  public function loc_begin_index_thumbnails($images) {
59    global $template;
60   
61    if (!$this->applicable) {
62      return;
63    }
64
65    load_language('plugin.lang', AK_PLUGIN_LANG);
66
67    $this->category_url = make_index_url(array('section' => 'category',
68                                               'category' => $GLOBALS['page']['category'],
69                                               'start' => $GLOBALS['page']['start']
70                                               ) 
71                                         );
72    $this->picture_pattern = sprintf($this->picture_pattern_format,
73                                     str_replace('?', '\?', $this->category_url)
74                                     );
75                                     
76    $this->current_picture = $this->getPictureId($images);
77    $template->set_filenames(array('index_thumbnails'=> AK_PLUGIN_TEMPLATE . '/ak_thumbnails.tpl'));
78    $template->assign('AK_PLUGIN_CSS', AK_PLUGIN_CSS);
79    $template->assign('AK_PLUGIN_JS', AK_PLUGIN_JS);
80
81    $template->assign('AK_DIR_THUMBNAIL', isset($GLOBALS['conf']['dir_thumbnail'])?$GLOBALS['conf']['dir_thumbnail']:'thumbnail');
82    $template->assign('AK_PREFIX_THUMBNAIL', $GLOBALS['conf']['prefix_thumbnail']);
83    $template->assign('AK_BY_LINE', $this->plugin_config->ak_by_line);
84    $template->assign('AK_MOUSE_EVENT', $this->plugin_config->ak_mouse_event);
85    $template->assign('AK_THUMBNAIL_SIZE', $this->plugin_config->ak_thumbnail_size);
86    $template->assign('AK_RELOADED_IMAGE_TPL', AK_PLUGIN_TEMPLATE. '/ak_reloaded_image.tpl');
87    $template->assign('AK_VERTICAL_TPL', AK_PLUGIN_TEMPLATE. '/ak_vertical.tpl');
88    $template->assign('AK_HORIZONTAL_TPL', AK_PLUGIN_TEMPLATE. '/ak_horizontal.tpl');
89    $template->assign('AK_THUMBNAILS_LOC', $this->plugin_config->ak_thumbnails_loc); 
90    $template->assign('AK_PIC_SRC', get_image_url($images[$this->current_picture]));
91                  $url = duplicate_picture_url(
92        array(
93          'image_id' => $images[$this->current_picture]['id'] ,
94          'image_file' => $images[$this->current_picture]['file']
95        ),
96        array('start')
97      );
98
99    $template->assign('AK_PIC_URL', $url);
100
101    $template->assign('AK_NEXT', $this->getNextPicture($this->current_picture, $images));
102    $template->assign('AK_PREVIOUS', $this->getPreviousPicture($this->current_picture, $images));
103    if (empty($_SESSION['ak_previous_image'])) {
104      $_SESSION['ak_previous_image'] = $images[$this->current_picture]['id'];
105    }
106  }
107   
108  public function loc_end_index_thumbnails($tpl_vars, $images) {
109    if (!$this->applicable) {
110      return $tpl_vars;
111    }
112
113    $selected_one = false;
114    foreach ($tpl_vars as &$tpl_var) {
115      list($thumbnail_width, $thumbnail_height) = getimagesize($tpl_var['TN_SRC']);
116      $thumbnail_x_center = $thumbnail_width/2;
117      $thumbnail_y_center = $thumbnail_height/2;
118      $tpl_var['CLIP_TOP'] = round($thumbnail_y_center - $this->plugin_config->ak_thumbnail_size/2);
119      $tpl_var['CLIP_RIGHT'] = round($thumbnail_x_center + $this->plugin_config->ak_thumbnail_size/2);
120      $tpl_var['CLIP_BOTTOM'] = round($thumbnail_y_center + $this->plugin_config->ak_thumbnail_size/2);
121      $tpl_var['CLIP_LEFT'] = round($thumbnail_x_center - $this->plugin_config->ak_thumbnail_size/2);
122
123      if (!empty($_SESSION['ak_previous_image'])
124          && ($tpl_var['ID']==$_SESSION['ak_previous_image'])) {
125        $tpl_var['SELECTED'] = true;
126        $selected_one  =true;
127      }
128      if (!$selected_one) {
129        $tpl_vars[0]['SELECTED'] = true;
130      }
131    }
132
133    return $tpl_vars;
134  }
135
136  public function loc_end_picture() {
137    if (isset($_SERVER['HTTP_X_REQUESTED_WITH']) 
138        && ($_SERVER['HTTP_X_REQUESTED_WITH']=='XMLHttpRequest')) {     
139
140      $response = array();
141      $tpl_vars = $GLOBALS['template']->smarty->_tpl_vars;
142      $response['AK_PIC_SRC'] = $tpl_vars['SRC_IMG'];
143      $response['AK_PIC_URL'] = $tpl_vars['current']['url'];
144      $response['AK_PIC_ALT'] = $tpl_vars['ALT_IMG'];
145      if (isset($tpl_vars['ALT_IMG'])) {
146        $response['AK_PIC_TITLE'] = $tpl_vars['ALT_IMG'];
147      } else {
148        $response['AK_PIC_TITLE'] = '';
149      }
150
151      if (isset($tpl_vars['previous'])) {
152        $response['AK_PREVIOUS'] = $tpl_vars['previous']['url'];
153      }
154      if (isset($tpl_vars['next'])) {
155        $response['AK_NEXT'] = $tpl_vars['next']['url'];
156      }
157      $_SESSION['ak_previous_image'] = $tpl_vars['current']['id'];
158      header("Content-Type: application/json");
159      echo json_encode($response);
160      exit();
161
162    }
163  }
164
165  /*** privates methods ***/
166  private function makeAkUrl($image) {
167    return duplicate_picture_url(array('image_id' => $image['id'],
168                                       'image_file' => $image['file']
169                                       ),
170                                 array('start')
171                                 );
172  }
173
174  private function getPictureId($images) {
175    if ($GLOBALS['conf']['question_mark_in_urls']==false and
176      isset($_SERVER["PATH_INFO"]) and !empty($_SERVER["PATH_INFO"]) ) {
177      $rewritten = $_SERVER["PATH_INFO"];
178      $rewritten = str_replace('//', '/', $rewritten);
179    } else {
180      $rewritten = '';
181      foreach (array_keys($_GET) as $keynum => $key) {
182        $rewritten = $key;
183        break;
184      }
185    }
186    $rewritten = make_index_url().$rewritten;
187
188    if (preg_match($this->picture_pattern, $rewritten, $matches)) {
189      foreach ($images as $index => $image) {
190        if ($image['id']==$matches[1]) {
191          return $index;
192        }
193      }
194      return false;
195    } else {
196      return false;
197    }
198  }
199
200  private function getPreviousPicture($current, $images) {
201    $previous = $current-1;
202    if ($previous>0) {
203      return $this->makeAkUrl($images[$previous]);
204    } else {
205      return null;
206    }
207  }
208
209  private function getNextPicture($current, $images) {
210    $next = $current+1;
211    if ($next<count($images)) {
212      return $this->makeAkUrl($images[$next]);
213    } else {
214      return null;
215    }
216  }
217}
218?>
Note: See TracBrowser for help on using the repository browser.