source: trunk/admin/derivatives.php @ 12886

Last change on this file since 12886 was 12851, checked in by rvelices, 12 years ago

feature 2548 multisize - sharpen + watermarks (partially implemented / no test with imagick extension)

File size: 10.0 KB
Line 
1<?php
2// +-----------------------------------------------------------------------+
3// | Piwigo - a PHP based photo gallery                                    |
4// +-----------------------------------------------------------------------+
5// | Copyright(C) 2008-2011 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.