source: branches/2.1/profile.php @ 6276

Last change on this file since 6276 was 6276, checked in by plg, 14 years ago

merge r6265 from trunk to branch 2.1

Correct text alignement in .infos, .errors
30px => 53px

File size: 10.0 KB
RevLine 
[2]1<?php
[351]2// +-----------------------------------------------------------------------+
[2297]3// | Piwigo - a PHP based picture gallery                                  |
4// +-----------------------------------------------------------------------+
[5196]5// | Copyright(C) 2008-2010 Piwigo Team                  http://piwigo.org |
[2297]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// +-----------------------------------------------------------------------+
[2]23
24// customize appearance of the site for a user
[631]25// +-----------------------------------------------------------------------+
26// |                           initialization                              |
27// +-----------------------------------------------------------------------+
[808]28
[1753]29if (!defined('PHPWG_ROOT_PATH'))
30{//direct script access
31  define('PHPWG_ROOT_PATH','./');
32  include_once(PHPWG_ROOT_PATH.'include/common.inc.php');
[1036]33
[1753]34  // +-----------------------------------------------------------------------+
35  // | Check Access and exit when user status is not ok                      |
36  // +-----------------------------------------------------------------------+
37  check_status(ACCESS_CLASSIC);
[1072]38
[1753]39  $userdata = $user;
[808]40
[2237]41  trigger_action('loc_begin_profile');
42
[4003]43// Reset to default (Guest) custom settings
[3995]44  if (isset($_POST['reset_to_default']))
45  {
[4003]46    $fields = array(
47      'nb_image_line', 'nb_line_page', 'maxwidth', 'maxheight', 'expand',
48      'show_nb_comments', 'show_nb_hits', 'recent_period', 'show_nb_hits'
49      );
50
[3995]51    // Get the Guest custom settings
[4001]52    $query = '
[4003]53SELECT '.implode(',', $fields).'
54  FROM '.USER_INFOS_TABLE.'
55  WHERE user_id = '.$conf['default_user_id'].'
56;';
57    $result = pwg_query($query);
[4325]58    $default_user = pwg_db_fetch_assoc($result);
[4003]59    $userdata = array_merge($userdata, $default_user);
60  }
61
[1753]62  save_profile_from_post($userdata, $errors);
63
[5206]64  $title= l10n('Your Gallery Customization');
[1753]65  $page['body_id'] = 'theProfilePage';
66  include(PHPWG_ROOT_PATH.'include/page_header.php');
67
68  load_profile_in_template(
69    get_root_url().'profile.php', // action
70    make_index_url(), // for redirect
71    $userdata );
72
73  // +-----------------------------------------------------------------------+
74  // |                             errors display                            |
75  // +-----------------------------------------------------------------------+
76  if (count($errors) != 0)
77  {
[2246]78    $template->assign('errors', $errors);
[1753]79  }
80  $template->set_filename('profile', 'profile.tpl');
[2237]81  trigger_action('loc_end_profile');
[1753]82  $template->parse('profile');
83  include(PHPWG_ROOT_PATH.'include/page_tail.php');
84}
85
[2]86//------------------------------------------------------ update & customization
[2268]87function save_profile_from_post($userdata, &$errors)
[2]88{
[1753]89  global $conf;
90  $errors = array();
[2268]91
[1753]92  if (!isset($_POST['validate']))
93  {
[1926]94    return false;
[1753]95  }
96
[2268]97  $special_user = in_array($userdata['id'], array($conf['guest_id'], $conf['default_user_id']));
98  if ($special_user)
99  {
[5996]100    unset(
101      $_POST['mail_address'],
102      $_POST['password'],
103      $_POST['use_new_pwd'],
104      $_POST['passwordConf'],
105      $_POST['theme'],
106      $_POST['language']
107      );
[2268]108  }
109
[5328]110  if ($conf['allow_user_customization'] or defined('IN_ADMIN'))
[1043]111  {
[5328]112    $int_pattern = '/^\d+$/';
113    if (empty($_POST['nb_image_line'])
114        or (!preg_match($int_pattern, $_POST['nb_image_line'])))
115    {
116      $errors[] = l10n('The number of images per row must be a not null scalar');
117    }
[1043]118
[5328]119    if (empty($_POST['nb_line_page'])
120        or (!preg_match($int_pattern, $_POST['nb_line_page'])))
121    {
122      $errors[] = l10n('The number of rows per page must be a not null scalar');
123    }
[1620]124
[5328]125    if ($_POST['maxwidth'] != ''
126        and (!preg_match($int_pattern, $_POST['maxwidth'])
127             or $_POST['maxwidth'] < 50))
128    {
129      $errors[] = l10n('Maximum width must be a number superior to 50');
130    }
131    if ($_POST['maxheight']
132         and (!preg_match($int_pattern, $_POST['maxheight'])
133               or $_POST['maxheight'] < 50))
134    {
135      $errors[] = l10n('Maximum height must be a number superior to 50');
136    }
137    // periods must be integer values, they represents number of days
138    if (!preg_match($int_pattern, $_POST['recent_period'])
139        or $_POST['recent_period'] <= 0)
140    {
141      $errors[] = l10n('Recent period must be a positive integer value') ;
142    }
[2]143  }
[662]144
[1926]145  if (isset($_POST['mail_address']))
[662]146  {
[2124]147    // if $_POST and $userdata have are same email
148    // validate_mail_address allows, however, to check email
149    $mail_error = validate_mail_address($userdata['id'], $_POST['mail_address']);
[1926]150    if (!empty($mail_error))
151    {
152      $errors[] = $mail_error;
153    }
[662]154  }
[1620]155
[808]156  if (!empty($_POST['use_new_pwd']))
[630]157  {
[808]158    // password must be the same as its confirmation
159    if ($_POST['use_new_pwd'] != $_POST['passwordConf'])
[631]160    {
[1753]161      $errors[] = l10n('New password confirmation does not correspond');
[662]162    }
[1620]163
[1753]164    if ( !defined('IN_ADMIN') )
165    {// changing password requires old password
166      $query = '
167  SELECT '.$conf['user_fields']['password'].' AS password
168    FROM '.USERS_TABLE.'
169    WHERE '.$conf['user_fields']['id'].' = \''.$userdata['id'].'\'
170  ;';
[4325]171      list($current_password) = pwg_db_fetch_row(pwg_query($query));
[5206]172
[1753]173      if ($conf['pass_convert']($_POST['password']) != $current_password)
174      {
175        $errors[] = l10n('Current password is wrong');
176      }
[631]177    }
178  }
[1620]179
[662]180  if (count($errors) == 0)
[2]181  {
[808]182    // mass_updates function
183    include_once(PHPWG_ROOT_PATH.'admin/include/functions.php');
[1620]184
[1926]185    if (isset($_POST['mail_address']))
186    {
187      // update common user informations
188      $fields = array($conf['user_fields']['email']);
[2]189
[1926]190      $data = array();
[2268]191      $data{$conf['user_fields']['id']} = $userdata['id'];
[1926]192      $data{$conf['user_fields']['email']} = $_POST['mail_address'];
[808]193
[1926]194      // password is updated only if filled
195      if (!empty($_POST['use_new_pwd']))
196      {
197        array_push($fields, $conf['user_fields']['password']);
198        // password is encrpyted with function $conf['pass_convert']
199        $data{$conf['user_fields']['password']} =
200          $conf['pass_convert']($_POST['use_new_pwd']);
201      }
202      mass_updates(USERS_TABLE,
203                   array('primary' => array($conf['user_fields']['id']),
204                         'update' => $fields),
205                   array($data));
[2]206    }
[1620]207
[5328]208    if ($conf['allow_user_customization'] or defined('IN_ADMIN'))
209    {
210      // update user "additional" informations (specific to Piwigo)
211      $fields = array(
212        'nb_image_line', 'nb_line_page', 'language', 'maxwidth', 'maxheight',
213        'expand', 'show_nb_comments', 'show_nb_hits', 'recent_period', 'theme'
214        );
[1620]215
[5328]216      $data = array();
217      $data['user_id'] = $userdata['id'];
[1620]218
[5328]219      foreach ($fields as $field)
[772]220      {
[5328]221        if (isset($_POST[$field]))
222        {
223          $data[$field] = $_POST[$field];
224        }
[772]225      }
[5328]226      mass_updates(USER_INFOS_TABLE,
227                   array('primary' => array('user_id'), 'update' => $fields),
228                   array($data));
[631]229    }
[2268]230    trigger_action( 'save_profile_from_post', $userdata['id'] );
[5206]231
[1926]232    if (!empty($_POST['redirect']))
233    {
234      redirect($_POST['redirect']);
235    }
[2]236  }
[1926]237  return true;
[2]238}
[850]239
[808]240
[1753]241function load_profile_in_template($url_action, $url_redirect, $userdata)
242{
[2029]243  global $template, $conf;
[850]244
[1753]245  $template->set_filename('profile_content', 'profile_content.tpl');
[393]246
[2246]247  $template->assign('radio_options',
248    array(
[2268]249      'true' => l10n('Yes'),
250      'false' => l10n('No')));
[1620]251
[2246]252  $template->assign(
[1753]253    array(
[4304]254      'USERNAME'=>stripslashes($userdata['username']),
[2229]255      'EMAIL'=>get_email_address_as_display_text(@$userdata['email']),
[5328]256      'ALLOW_USER_CUSTOMIZATION'=>$conf['allow_user_customization'],
[1753]257      'NB_IMAGE_LINE'=>$userdata['nb_image_line'],
258      'NB_ROW_PAGE'=>$userdata['nb_line_page'],
259      'RECENT_PERIOD'=>$userdata['recent_period'],
260      'MAXWIDTH'=>@$userdata['maxwidth'],
261      'MAXHEIGHT'=>@$userdata['maxheight'],
[2246]262      'EXPAND' =>$userdata['expand'] ? 'true' : 'false',
263      'NB_COMMENTS'=>$userdata['show_nb_comments'] ? 'true' : 'false',
264      'NB_HITS'=>$userdata['show_nb_hits'] ? 'true' : 'false',
[1753]265      'REDIRECT' => $url_redirect,
266      'F_ACTION'=>$url_action,
267      ));
[1620]268
[5153]269  $template->assign('template_selection', $userdata['theme']);
270  $template->assign('template_options', get_pwg_themes());
[1620]271
[1753]272  foreach (get_languages() as $language_code => $language_name)
[854]273  {
[2246]274    if (isset($_POST['submit']) or $userdata['language'] == $language_code)
[1753]275    {
[2246]276      $template->assign('language_selection', $language_code);
[1753]277    }
[2246]278    $language_options[$language_code] = $language_name;
[854]279  }
[3995]280
[2246]281  $template->assign('language_options', $language_options);
[1926]282
[2268]283  $special_user = in_array($userdata['id'], array($conf['guest_id'], $conf['default_user_id']));
284  $template->assign('SPECIAL_USER', $special_user);
285  $template->assign('IN_ADMIN', defined('IN_ADMIN'));
[1926]286
[2268]287  // allow plugins to add their own form data to content
288  trigger_action( 'load_profile_in_template', $userdata );
[5206]289
[1753]290  $template->assign_var_from_handle('PROFILE_CONTENT', 'profile_content');
[854]291}
[362]292?>
Note: See TracBrowser for help on using the repository browser.