source: trunk/admin/derivatives.php @ 13018

Last change on this file since 13018 was 12922, checked in by mistic100, 12 years ago

update Piwigo headers to 2012, last change before the expected (or not) apocalypse

File size: 10.0 KB
Line 
1<?php
2// +-----------------------------------------------------------------------+
3// | Piwigo - a PHP based photo gallery                                    |
4// +-----------------------------------------------------------------------+
5// | Copyright(C) 2008-2012 Piwigo Team                  http://piwigo.org |
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// +-----------------------------------------------------------------------+
23
24defined('PHPWG_ROOT_PATH') or trigger_error('Hacking attempt!', E_USER_ERROR);
25
26$errors = array();
27
28if ( isset($_POST['d']) )
29{
30  $pderivatives = $_POST['d'];
31  $pwatermark = $_POST['w'];
32
33  // step 1 - sanitize HTML input
34  foreach($pderivatives as $type => &$pderivative)
35  {
36    if ($pderivative['must_square'] = ($type==IMG_SQUARE ? true : false))
37    {
38      $pderivative['h'] = $pderivative['w'];
39      $pderivative['minh'] = $pderivative['minw'] = $pderivative['w'];
40      $pderivative['crop'] = 100;
41    }
42    $pderivative['must_enable'] = ($type==IMG_SQUARE || $type==IMG_THUMB)? true : false;
43    $pderivative['enabled'] = isset($pderivative['enabled']) || $pderivative['must_enable'] ? true : false;
44  }
45  unset($pderivative);
46
47  // step 2 - check validity
48  $prev_w = $prev_h = 0;
49  foreach(ImageStdParams::get_all_types() as $type)
50  {
51    $pderivative = $pderivatives[$type];
52    if (!$pderivative['enabled'])
53      continue;
54
55    $v = intval($pderivative['w']);
56    if ($v<=0 || $v<=$prev_w)
57    {
58      $errors[$type]['w'] = '>'.$prev_w;
59    }
60    $v = intval($pderivative['h']);
61    if ($v<=0 || $v<=$prev_h)
62    {
63      $errors[$type]['h'] = '>'.$prev_h;
64    }
65    $v = intval($pderivative['crop']);
66    if ($v<0 || $v>100)
67    {
68      $errors[$type]['crop'] = '[0..100]';
69    }
70   
71    if ($v!=0)
72    {
73      $v = intval($pderivative['minw']);
74      if ($v<0 || $v>intval($pderivative['w']))
75      {
76        $errors[$type]['minw'] = '[0..'.intval($pderivative['w']).']';
77      }
78      $v = intval($pderivative['minh']);
79      if ($v<0 || $v>intval($pderivative['h']))
80      {
81        $errors[$type]['minh'] = '[0..'.intval($pderivative['h']).']';
82      }
83    }
84   
85    if (count($errors)==0)
86    {
87      $prev_w = intval($pderivative['w']);
88      $prev_h = intval($pderivative['h']);
89    }
90   
91    $v = intval($pderivative['sharpen']);
92    if ($v<0 || $v>100)
93    {
94      $errors[$type]['sharpen'] = '[0..100]';
95    }
96    $v = intval($pderivative['quality']);
97    if ($v<=0 || $v>100)
98    {
99      $errors[$type]['quality'] = '(0..100]';
100    }
101  }
102  $v = intval($pwatermark['xpos']);
103  if ($v<0 || $v>100)
104  {
105    $errors['watermark']['xpos'] = '[0..100]';
106  }
107  $v = intval($pwatermark['ypos']);
108  if ($v<0 || $v>100)
109  {
110    $errors['watermark']['ypos'] = '[0..100]';
111  }
112  $v = intval($pwatermark['opacity']);
113  if ($v<=0 || $v>100)
114  {
115    $errors['watermark']['opacity'] = '(0..100]';
116  }
117
118
119  // step 3 - save data
120  if (count($errors)==0)
121  {
122    $watermark = new WatermarkParams();
123    $watermark->file = $pwatermark['file'];
124    $watermark->xpos = intval($pwatermark['xpos']);
125    $watermark->ypos = intval($pwatermark['ypos']);
126    $watermark->xrepeat = intval($pwatermark['xrepeat']);
127    $watermark->opacity = intval($pwatermark['opacity']);
128    $watermark->min_size = array(intval($pwatermark['minw']),intval($pwatermark['minh']));
129   
130    $old_watermark = ImageStdParams::get_watermark();
131    $watermark_changed = 
132      $watermark->file != $old_watermark->file
133      || $watermark->xpos != $old_watermark->xpos
134      || $watermark->ypos != $old_watermark->ypos
135      || $watermark->xrepeat != $old_watermark->xrepeat
136      || $watermark->opacity != $old_watermark->opacity;
137    ImageStdParams::set_watermark($watermark);
138   
139    $enabled = ImageStdParams::get_defined_type_map();
140    $disabled = @unserialize( @$conf['disabled_derivatives'] );
141    if ($disabled===false)
142    {
143      $disabled = array();
144    }
145    $changed_types = array();
146   
147    foreach(ImageStdParams::get_all_types() as $type)
148    {
149      $pderivative = $pderivatives[$type];
150     
151      if ($pderivative['enabled'])
152      {
153        $new_params = new DerivativeParams(
154            new SizingParams( 
155              array(intval($pderivative['w']), intval($pderivative['h'])),
156              round($pderivative['crop'] / 100, 2),
157              array(intval($pderivative['minw']), intval($pderivative['minh']))
158              ) 
159          );
160        $new_params->sharpen = intval($pderivative['sharpen']);
161        $new_params->quality = intval($pderivative['quality']);
162        ImageStdParams::apply_global($new_params);
163       
164        if (isset($enabled[$type]))
165        {
166          $old_params = $enabled[$type];
167          $same = true;
168          if ( !size_equals($old_params->sizing->ideal_size, $new_params->sizing->ideal_size)
169            or $old_params->sizing->max_crop != $new_params->sizing->max_crop)
170          {
171            $same = false;
172          }
173
174          if ( $same && $new_params->sizing->max_crop != 0 
175              && !size_equals($old_params->sizing->min_size, $new_params->sizing->min_size) )
176          {
177            $same = false;
178          }
179
180          if ( $same && 
181              ( $new_params->sharpen != $old_params->sharpen
182              || $new_params->quality > $old_params->quality)
183             )
184          {
185            $same = false;
186          }
187         
188          if ($same &&
189            ( $new_params->use_watermark != $old_params->use_watermark 
190             || $new_params->use_watermark && $watermark_changed )
191            )
192          {
193            $same = false;
194          }
195         
196          if (!$same)
197          {
198            $new_params->last_mod_time = time();
199            $changed_types[] = $type;
200          }
201          else
202          {
203            $new_params->last_mod_time = $old_params->last_mod_time;
204          }
205          $enabled[$type] = $new_params;
206        }
207        else
208        {// now enabled, before was disabled
209          $enabled[$type] = $new_params;
210          unset($disabled[$type]);
211        }
212      }
213      else
214      {// disabled
215        if (isset($enabled[$type]))
216        {// now disabled, before was enabled
217          $disabled[$type] = $enabled[$type];
218          unset($enabled[$type]);
219        }
220      }
221    }
222
223    $enabled_by = array(); // keys ordered by all types
224    foreach(ImageStdParams::get_all_types() as $type)
225    {
226      if (isset($enabled[$type]))
227      {
228        $enabled_by[$type] = $enabled[$type];
229      }
230    }   
231    ImageStdParams::set_and_save($enabled_by);
232    if (count($disabled)==0)
233    {
234      $query='DELETE FROM '.CONFIG_TABLE.' WHERE param = \'disabled_derivatives\'';
235      pwg_query($query);
236    }
237    else
238    {
239      conf_update_param('disabled_derivatives', addslashes(serialize($disabled)) );
240    }
241    $conf['disabled_derivatives']=serialize($disabled);
242   
243    if (count($changed_types))
244    {
245      clear_derivative_cache($changed_types);
246    }
247  }
248  else
249  {
250    $template->assign('derivatives', $pderivatives);
251    $template->assign('watermark', $pwatermark);
252    $template->assign('ferrors', $errors);
253  }
254}
255
256if (count($errors)==0)
257{
258  $enabled = ImageStdParams::get_defined_type_map();
259  $disabled = @unserialize( @$conf['disabled_derivatives'] );
260  if ($disabled===false)
261  {
262    $disabled = array();
263  }
264
265  $tpl_vars = array();
266  foreach(ImageStdParams::get_all_types() as $type)
267  {
268    $tpl_var = array();
269
270    $tpl_var['must_square'] = ($type==IMG_SQUARE ? true : false);
271    $tpl_var['must_enable'] = ($type==IMG_SQUARE || $type==IMG_THUMB)? true : false;
272
273    if ($params=@$enabled[$type])
274    {
275      $tpl_var['enabled']=true;
276    }
277    else
278    {
279      $tpl_var['enabled']=false;
280      $params=@$disabled[$type];
281    }
282
283    if ($params)
284    {
285      list($tpl_var['w'],$tpl_var['h']) = $params->sizing->ideal_size;
286      if ( ($tpl_var['crop'] = round(100*$params->sizing->max_crop)) > 0)
287      {
288        list($tpl_var['minw'],$tpl_var['minh']) = $params->sizing->min_size;
289      }
290      else
291      {
292        $tpl_var['minw'] = $tpl_var['minh'] = "";
293      }
294      $tpl_var['sharpen'] = $params->sharpen;
295      $tpl_var['quality'] = $params->quality;
296    }
297    $tpl_vars[$type]=$tpl_var;
298  }
299  $template->assign('derivatives', $tpl_vars);
300 
301  $wm = ImageStdParams::get_watermark();
302  $template->assign('watermark', array(
303      'file' => $wm->file,
304      'minw' => $wm->min_size[0],
305      'minh' => $wm->min_size[1],
306      'xpos' => $wm->xpos,
307      'ypos' => $wm->ypos,
308      'xrepeat' => $wm->xrepeat,
309      'opacity' => $wm->opacity,
310    ));
311}
312
313$watermark_files = array();
314foreach (glob(PHPWG_ROOT_PATH.'themes/default/watermarks/*.png') as $file)
315{
316  $watermark_files[] = substr($file, strlen(PHPWG_ROOT_PATH));
317}
318$watermark_filemap = array( '' => '---' );
319foreach( $watermark_files as $file)
320{
321  $display = basename($file);
322  $watermark_filemap[$file] = $display;
323}
324$template->assign('watermark_files', $watermark_filemap);
325
326$template->set_filename('derivatives', 'derivatives.tpl');
327$template->assign_var_from_handle('ADMIN_CONTENT', 'derivatives');
328?>
Note: See TracBrowser for help on using the repository browser.