source: trunk/admin/configuration.php @ 25372

Last change on this file since 25372 was 25372, checked in by mistic100, 10 years ago

feature 2995 and feature 2997
change organization of configuration page
add theme parameter on GUI
change links color of dark mail theme (pink)
remove main themes css files

  • Property svn:eol-style set to LF
File size: 17.3 KB
Line 
1<?php
2// +-----------------------------------------------------------------------+
3// | Piwigo - a PHP based photo gallery                                    |
4// +-----------------------------------------------------------------------+
5// | Copyright(C) 2008-2013 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
24if( !defined("PHPWG_ROOT_PATH") )
25{
26  die ("Hacking attempt!");
27}
28
29include_once(PHPWG_ROOT_PATH.'admin/include/functions.php');
30include_once(PHPWG_ROOT_PATH.'admin/include/functions_upload.inc.php');
31include_once(PHPWG_ROOT_PATH.'admin/include/tabsheet.class.php');
32
33// +-----------------------------------------------------------------------+
34// | Check Access and exit when user status is not ok                      |
35// +-----------------------------------------------------------------------+
36check_status(ACCESS_ADMINISTRATOR);
37
38//-------------------------------------------------------- sections definitions
39
40check_input_parameter('section', $_GET, false, '/^[a-z]+$/i');
41
42if (!isset($_GET['section']))
43{
44  $page['section'] = 'main';
45}
46else
47{
48  $page['section'] = $_GET['section'];
49}
50
51$main_checkboxes = array(
52    'allow_user_registration',
53    'obligatory_user_mail_address',
54    'rate',
55    'rate_anonymous',
56    'email_admin_on_new_user',
57    'allow_user_customization',
58    'log',
59    'history_admin',
60    'history_guest',
61   );
62
63$sizes_checkboxes = array(
64    'original_resize',
65  );
66
67$comments_checkboxes = array(
68    'activate_comments',
69    'comments_forall',
70    'comments_validation',
71    'email_admin_on_comment',
72    'email_admin_on_comment_validation',
73    'user_can_delete_comment',
74    'user_can_edit_comment',
75    'email_admin_on_comment_edition',
76    'email_admin_on_comment_deletion',
77    'comments_author_mandatory',
78    'comments_email_mandatory',
79  );
80
81$display_checkboxes = array(
82    'menubar_filter_icon',
83    'index_sort_order_input',
84    'index_flat_icon',
85    'index_posted_date_icon',
86    'index_created_date_icon',
87    'index_slideshow_icon',
88    'index_new_icon',
89    'picture_metadata_icon',
90    'picture_slideshow_icon',
91    'picture_favorite_icon',
92    'picture_download_icon',
93    'picture_navigation_icons',
94    'picture_navigation_thumb',
95    'picture_menu',
96  );
97
98$display_info_checkboxes = array(
99    'author',
100    'created_on',
101    'posted_on',
102    'dimensions',
103    'file',
104    'filesize',
105    'tags',
106    'categories',
107    'visits',
108    'rating_score',
109    'privacy_level',
110  );
111
112// image order management
113$sort_fields = array(
114  ''                    => '',
115  'file ASC'            => l10n('File name, A &rarr; Z'),
116  'file DESC'           => l10n('File name, Z &rarr; A'),
117  'name ASC'            => l10n('Photo title, A &rarr; Z'),
118  'name DESC'           => l10n('Photo title, Z &rarr; A'),
119  'date_creation DESC'  => l10n('Date created, new &rarr; old'),
120  'date_creation ASC'   => l10n('Date created, old &rarr; new'),
121  'date_available DESC' => l10n('Date posted, new &rarr; old'),
122  'date_available ASC'  => l10n('Date posted, old &rarr; new'),
123  'rating_score DESC'   => l10n('Rating score, high &rarr; low'),
124  'rating_score ASC'    => l10n('Rating score, low &rarr; high'),
125  'hit DESC'            => l10n('Visits, high &rarr; low'),
126  'hit ASC'             => l10n('Visits, low &rarr; high'),
127  'id ASC'              => l10n('Numeric identifier, 1 &rarr; 9'),
128  'id DESC'             => l10n('Numeric identifier, 9 &rarr; 1'),
129  'rank ASC'            => l10n('Manual sort order'),
130  );
131
132$comments_order = array(
133  'ASC' => l10n('Show oldest comments first'),
134  'DESC' => l10n('Show latest comments first'),
135  );
136
137$mail_themes = array(
138  'clear' => 'Clear',
139  'dark' => 'Dark',
140  );
141
142//------------------------------ verification and registration of modifications
143if (isset($_POST['submit']))
144{
145  $int_pattern = '/^\d+$/';
146
147  switch ($page['section'])
148  {
149    case 'main' :
150    {
151      if ( !isset($conf['order_by_custom']) and !isset($conf['order_by_inside_category_custom']) )
152      {
153        if ( !empty($_POST['order_by']) )
154        {
155          foreach ($_POST['order_by'] as $i => $val)
156          {
157            if (empty($val)) unset($_POST['order_by'][$i]);
158          }
159          if ( !count($_POST['order_by']) )
160          {
161            $page['errors'][] = l10n('No order field selected');
162          }
163          else
164          {
165            // limit to the number of available parameters
166            $order_by = $order_by_inside_category = array_slice($_POST['order_by'], 0, ceil(count($sort_fields)/2));
167
168            // there is no rank outside categories
169            if ( ($i = array_search('rank ASC', $order_by)) !== false)
170            {
171              unset($order_by[$i]);
172            }
173
174            // must define a default order_by if user want to order by rank only
175            if ( count($order_by) == 0 )
176            {
177              $order_by = array('id ASC');
178            }
179
180            $_POST['order_by'] = 'ORDER BY '.implode(', ', $order_by);
181            $_POST['order_by_inside_category'] = 'ORDER BY '.implode(', ', $order_by_inside_category);
182          }
183        }
184        else
185        {
186          $page['errors'][] = l10n('No order field selected');
187        }
188      }
189
190      foreach( $main_checkboxes as $checkbox)
191      {
192        $_POST[$checkbox] = empty($_POST[$checkbox])?'false':'true';
193      }
194      break;
195    }
196    case 'watermark' :
197    {
198      include(PHPWG_ROOT_PATH.'admin/include/configuration_watermark_process.inc.php');
199      break;
200    }
201    case 'sizes' :
202    {
203      include(PHPWG_ROOT_PATH.'admin/include/configuration_sizes_process.inc.php');
204      break;
205    }
206    case 'comments' :
207    {
208      // the number of comments per page must be an integer between 5 and 50
209      // included
210      if (!preg_match($int_pattern, $_POST['nb_comment_page'])
211           or $_POST['nb_comment_page'] < 5
212           or $_POST['nb_comment_page'] > 50)
213      {
214        $page['errors'][] = l10n('The number of comments a page must be between 5 and 50 included.');
215      }
216      foreach( $comments_checkboxes as $checkbox)
217      {
218        $_POST[$checkbox] = empty($_POST[$checkbox])?'false':'true';
219      }
220      break;
221    }
222    case 'default' :
223    {
224      // Never go here
225      break;
226    }
227    case 'display' :
228    {
229      if (!preg_match($int_pattern, $_POST['nb_categories_page'])
230            or $_POST['nb_categories_page'] < 4)
231      {
232        $page['errors'][] = l10n('The number of albums a page must be above 4.');
233      }
234      foreach( $display_checkboxes as $checkbox)
235      {
236        $_POST[$checkbox] = empty($_POST[$checkbox])?'false':'true';
237      }
238      foreach( $display_info_checkboxes as $checkbox)
239      {
240        $_POST['picture_informations'][$checkbox] =
241          empty($_POST['picture_informations'][$checkbox])? false : true;
242      }
243      $_POST['picture_informations'] = addslashes(serialize($_POST['picture_informations']));
244      break;
245    }
246  }
247
248  // updating configuration if no error found
249  if (!in_array($page['section'], array('sizes', 'watermark')) and count($page['errors']) == 0)
250  {
251    //echo '<pre>'; print_r($_POST); echo '</pre>';
252    $result = pwg_query('SELECT param FROM '.CONFIG_TABLE);
253    while ($row = pwg_db_fetch_assoc($result))
254    {
255      if (isset($_POST[$row['param']]))
256      {
257        $value = $_POST[$row['param']];
258
259        if ('gallery_title' == $row['param'])
260        {
261          if (!$conf['allow_html_descriptions'])
262          {
263            $value = strip_tags($value);
264          }
265        }
266
267        $query = '
268UPDATE '.CONFIG_TABLE.'
269SET value = \''. str_replace("\'", "''", $value).'\'
270WHERE param = \''.$row['param'].'\'
271;';
272        pwg_query($query);
273      }
274    }
275    $page['infos'][] = l10n('Information data registered in database');
276  }
277
278  //------------------------------------------------------ $conf reinitialization
279  load_conf_from_db();
280}
281
282// restore default derivatives settings
283if ('sizes' == $page['section'] and isset($_GET['action']) and 'restore_settings' == $_GET['action'])
284{
285  ImageStdParams::set_and_save( ImageStdParams::get_default_sizes() );
286  pwg_query('DELETE FROM '.CONFIG_TABLE.' WHERE param = \'disabled_derivatives\'');
287  clear_derivative_cache();
288
289  $page['infos'][] = l10n('Your configuration settings are saved');
290}
291
292//----------------------------------------------------- template initialization
293$template->set_filename('config', 'configuration.tpl');
294
295// TabSheet
296$tabsheet = new tabsheet();
297$tabsheet->set_id('configuration');
298$tabsheet->select($page['section']);
299$tabsheet->assign();
300
301$action = get_root_url().'admin.php?page=configuration';
302$action.= '&amp;section='.$page['section'];
303
304$template->assign(
305  array(
306    'U_HELP' => get_root_url().'admin/popuphelp.php?page=configuration',
307    'F_ACTION'=>$action
308    ));
309
310switch ($page['section'])
311{
312  case 'main' :
313  {
314
315    function order_by_is_local()
316    {
317      @include(PHPWG_ROOT_PATH. 'local/config/config.inc.php');
318      if (isset($conf['local_dir_site']))
319      {
320        @include(PHPWG_ROOT_PATH.PWG_LOCAL_DIR. 'config/config.inc.php');
321      }
322
323      return isset($conf['order_by']) or isset($conf['order_by_inside_category']);
324    }
325
326    if (order_by_is_local())
327    {
328      $page['warnings'][] = l10n('You have specified <i>$conf[\'order_by\']</i> in your local configuration file, this parameter in deprecated, please remove it or rename it into <i>$conf[\'order_by_custom\']</i> !');
329    }
330
331    if ( isset($conf['order_by_custom']) or isset($conf['order_by_inside_category_custom']) )
332    {
333      $order_by = array('');
334      $template->assign('ORDER_BY_IS_CUSTOM', true);
335    }
336    else
337    {
338      $out = array();
339      $order_by = trim($conf['order_by_inside_category']);
340      $order_by = str_replace('ORDER BY ', null, $order_by);
341      $order_by = explode(', ', $order_by);
342    }
343
344    $template->assign(
345      'main',
346      array(
347        'CONF_GALLERY_TITLE' => htmlspecialchars($conf['gallery_title']),
348        'CONF_PAGE_BANNER' => htmlspecialchars($conf['page_banner']),
349        'week_starts_on_options' => array(
350          'sunday' => $lang['day'][0],
351          'monday' => $lang['day'][1],
352          ),
353        'week_starts_on_options_selected' => $conf['week_starts_on'],
354        'mail_theme' => $conf['mail_theme'],
355        'mail_theme_options' => $mail_themes,
356        'order_by' => $order_by,
357        'order_by_options' => $sort_fields,
358        )
359      );
360
361    foreach ($main_checkboxes as $checkbox)
362    {
363      $template->append(
364          'main',
365          array(
366            $checkbox => $conf[$checkbox]
367            ),
368          true
369        );
370    }
371    break;
372  }
373  case 'comments' :
374  {
375    $template->assign(
376      'comments',
377      array(
378        'NB_COMMENTS_PAGE'=>$conf['nb_comment_page'],
379        'comments_order'=>$conf['comments_order'],
380        'comments_order_options'=> $comments_order
381        )
382      );
383
384    foreach ($comments_checkboxes as $checkbox)
385    {
386      $template->append(
387          'comments',
388          array(
389            $checkbox => $conf[$checkbox]
390            ),
391          true
392        );
393    }
394    break;
395  }
396  case 'default' :
397  {
398    $edit_user = build_user($conf['guest_id'], false);
399    include_once(PHPWG_ROOT_PATH.'profile.php');
400
401    $errors = array();
402    if (save_profile_from_post($edit_user, $errors))
403    {
404      // Reload user
405      $edit_user = build_user($conf['guest_id'], false);
406      $page['infos'][] = l10n('Information data registered in database');
407    }
408    $page['errors'] = array_merge($page['errors'], $errors);
409
410    load_profile_in_template(
411      $action,
412      '',
413      $edit_user
414      );
415    $template->assign('default', array());
416    break;
417  }
418  case 'display' :
419  {
420    foreach ($display_checkboxes as $checkbox)
421    {
422      $template->append(
423          'display',
424          array(
425            $checkbox => $conf[$checkbox]
426            ),
427          true
428        );
429    }
430    $template->append(
431        'display',
432        array(
433          'picture_informations' => unserialize($conf['picture_informations']),
434          'NB_CATEGORIES_PAGE' => $conf['nb_categories_page'],
435          ),
436        true
437      );
438    break;
439  }
440  case 'sizes' :
441  {
442    // we only load the derivatives if it was not already loaded: it occurs
443    // when submitting the form and an error remains
444    if (!isset($page['sizes_loaded_in_tpl']))
445    {
446      $is_gd = (pwg_image::get_library()=='gd')? true : false;
447      $template->assign('is_gd', $is_gd);
448      $template->assign(
449        'sizes',
450        array(
451          'original_resize_maxwidth' => $conf['original_resize_maxwidth'],
452          'original_resize_maxheight' => $conf['original_resize_maxheight'],
453          'original_resize_quality' => $conf['original_resize_quality'],
454          )
455        );
456
457      foreach ($sizes_checkboxes as $checkbox)
458      {
459        $template->append(
460          'sizes',
461          array(
462            $checkbox => $conf[$checkbox]
463            ),
464          true
465          );
466      }
467
468      // derivatives = multiple size
469      $enabled = ImageStdParams::get_defined_type_map();
470      $disabled = @unserialize(@$conf['disabled_derivatives']);
471      if ($disabled === false)
472      {
473        $disabled = array();
474      }
475
476      $tpl_vars = array();
477      foreach(ImageStdParams::get_all_types() as $type)
478      {
479        $tpl_var = array();
480
481        $tpl_var['must_square'] = ($type==IMG_SQUARE ? true : false);
482        $tpl_var['must_enable'] = ($type==IMG_SQUARE || $type==IMG_THUMB)? true : false;
483
484        if ($params = @$enabled[$type])
485        {
486          $tpl_var['enabled'] = true;
487        }
488        else
489        {
490          $tpl_var['enabled']=false;
491          $params=@$disabled[$type];
492        }
493
494        if ($params)
495        {
496          list($tpl_var['w'],$tpl_var['h']) = $params->sizing->ideal_size;
497          if ( ($tpl_var['crop'] = round(100*$params->sizing->max_crop)) > 0)
498          {
499            list($tpl_var['minw'],$tpl_var['minh']) = $params->sizing->min_size;
500          }
501          else
502          {
503            $tpl_var['minw'] = $tpl_var['minh'] = "";
504          }
505          $tpl_var['sharpen'] = $params->sharpen;
506        }
507        $tpl_vars[$type]=$tpl_var;
508      }
509      $template->assign('derivatives', $tpl_vars);
510      $template->assign('resize_quality', ImageStdParams::$quality);
511
512      $tpl_vars = array();
513      $now = time();
514      foreach(ImageStdParams::$custom as $custom=>$time)
515      {
516        $tpl_vars[$custom] = ($now-$time<=24*3600) ? l10n('today') : time_since($time, 'day');
517      }
518      $template->assign('custom_derivatives', $tpl_vars);
519    }
520
521    break;
522  }
523  case 'watermark' :
524  {
525    $watermark_files = array();
526    foreach (glob(PHPWG_ROOT_PATH.'themes/default/watermarks/*.png') as $file)
527    {
528      $watermark_files[] = substr($file, strlen(PHPWG_ROOT_PATH));
529    }
530    if ( ($glob=glob(PHPWG_ROOT_PATH.PWG_LOCAL_DIR.'watermarks/*.png')) !== false)
531    {
532      foreach ($glob as $file)
533      {
534        $watermark_files[] = substr($file, strlen(PHPWG_ROOT_PATH));
535      }
536    }
537    $watermark_filemap = array( '' => '---' );
538    foreach( $watermark_files as $file)
539    {
540      $display = basename($file);
541      $watermark_filemap[$file] = $display;
542    }
543    $template->assign('watermark_files', $watermark_filemap);
544
545    if ($template->get_template_vars('watermark') === null)
546    {
547      $wm = ImageStdParams::get_watermark();
548
549      $position = 'custom';
550      if ($wm->xpos == 0 and $wm->ypos == 0)
551      {
552        $position = 'topleft';
553      }
554      if ($wm->xpos == 100 and $wm->ypos == 0)
555      {
556        $position = 'topright';
557      }
558      if ($wm->xpos == 50 and $wm->ypos == 50)
559      {
560        $position = 'middle';
561      }
562      if ($wm->xpos == 0 and $wm->ypos == 100)
563      {
564        $position = 'bottomleft';
565      }
566      if ($wm->xpos == 100 and $wm->ypos == 100)
567      {
568        $position = 'bottomright';
569      }
570
571      if ($wm->xrepeat != 0)
572      {
573        $position = 'custom';
574      }
575
576      $template->assign(
577        'watermark',
578        array(
579          'file' => $wm->file,
580          'minw' => $wm->min_size[0],
581          'minh' => $wm->min_size[1],
582          'xpos' => $wm->xpos,
583          'ypos' => $wm->ypos,
584          'xrepeat' => $wm->xrepeat,
585          'opacity' => $wm->opacity,
586          'position' => $position,
587          )
588        );
589    }
590
591    break;
592  }
593}
594
595//----------------------------------------------------------- sending html code
596$template->assign_var_from_handle('ADMIN_CONTENT', 'config');
597?>
Note: See TracBrowser for help on using the repository browser.