| /**␊ | 
| * Update user's details.␊ | 
| */␊ | 
| class IDF_Form_Admin_UserUpdate  extends Pluf_Form␊ | 
| class IDF_Form_Admin_UserUpdate extends Pluf_Form␊ | 
| {␊ | 
| public $user = null;␊ | 
| ␊ | 
| public function initFields($extra=array())␊ | 
| {␊ | 
| $this->user = $extra['user'];␊ | 
| $user_data = IDF_UserData::factory($this->user);␊ | 
| ␊ | 
| $this->fields['first_name'] = new Pluf_Form_Field_Varchar(␊ | 
| array('required' => false,␊ | 
| 'label' => __('First name'),␊ | 
|  | 
| 'initial' => $this->user->language,␊ | 
| 'widget' => 'Pluf_Form_Widget_SelectInput',␊ | 
| 'widget_attrs' => array(␊ | 
| 'choices' => ␊ | 
| 'choices' =>␊ | 
| Pluf_L10n::getInstalledLanguages()␊ | 
| ),␊ | 
| ));␊ | 
|  | 
| ),␊ | 
| ));␊ | 
| ␊ | 
| $this->fields['description'] = new Pluf_Form_Field_Varchar(␊ | 
| array('required' => false,␊ | 
| 'label' => __('Description'),␊ | 
| 'initial' => $user_data->description,␊ | 
| 'widget_attrs' => array('rows' => 3,␊ | 
| 'cols' => 40),␊ | 
| 'widget' => 'Pluf_Form_Widget_TextareaInput',␊ | 
| ));␊ | 
| ␊ | 
| $this->fields['twitter'] = new Pluf_Form_Field_Varchar(␊ | 
| array('required' => false,␊ | 
| 'label' => __('Twitter username'),␊ | 
| 'initial' => $user_data->twitter,␊ | 
| 'widget_attrs' => array(␊ | 
| 'maxlength' => 50,␊ | 
| 'size' => 15,␊ | 
| ),␊ | 
| ));␊ | 
| ␊ | 
| $this->fields['public_email'] = new Pluf_Form_Field_Email(␊ | 
| array('required' => false,␊ | 
| 'label' => __('Public email address'),␊ | 
| 'initial' => $user_data->public_email,␊ | 
| 'widget_attrs' => array(␊ | 
| 'maxlength' => 50,␊ | 
| 'size' => 15,␊ | 
| ),␊ | 
| ));␊ | 
| ␊ | 
| $this->fields['website'] = new Pluf_Form_Field_Url(␊ | 
| array('required' => false,␊ | 
| 'label' => __('Website URL'),␊ | 
| 'initial' => $user_data->website,␊ | 
| 'widget_attrs' => array(␊ | 
| 'maxlength' => 50,␊ | 
| 'size' => 15,␊ | 
| ),␊ | 
| ));␊ | 
| ␊ | 
| $this->fields['custom_avatar'] = new Pluf_Form_Field_File(␊ | 
| array('required' => false,␊ | 
| 'label' => __('Upload custom avatar'),␊ | 
| 'initial' => '',␊ | 
| 'max_size' => Pluf::f('max_upload_size', 2097152),␊ | 
| 'move_function_params' => array('upload_path' => Pluf::f('upload_path').'/avatars',␊ | 
| 'upload_path_create' => true,␊ | 
| 'upload_overwrite' => true,␊ | 
| 'file_name' => 'user_'.$this->user->id.'_%s'),␊ | 
| 'help_text' => __('An image file with a width and height not larger than 60 pixels (bigger images are scaled down).'),␊ | 
| ));␊ | 
| ␊ | 
| $this->fields['remove_custom_avatar'] = new Pluf_Form_Field_Boolean(␊ | 
| array('required' => false,␊ | 
| 'label' => __('Remove custom avatar'),␊ | 
| 'initial' => false,␊ | 
| 'widget' => 'Pluf_Form_Widget_CheckboxInput',␊ | 
| 'widget_attrs' => array(),␊ | 
| 'help_text' => __('Tick this to delete the custom avatar.'),␊ | 
| ));␊ | 
| ␊ | 
| if ($extra['request']->user->administrator) {␊ | 
| $this->fields['staff'] = new Pluf_Form_Field_Boolean(␊ | 
| array('required' => false,␊ | 
|  | 
| $update_pass = true;␊ | 
| }␊ | 
| $this->user->setFromFormData($this->cleaned_data);␊ | 
| ␊ | 
| if ($commit) {␊ | 
| $this->user->update();␊ | 
| ␊ | 
| // FIXME: go the extra mile and check the input lengths for␊ | 
| // all fields here!␊ | 
| // FIXME: this is all doubled in UserAccount!␊ | 
| ␊ | 
| $user_data = IDF_UserData::factory($this->user);␊ | 
| ␊ | 
| // Add or remove avatar - we need to do this here because every␊ | 
| // single setter directly leads to a save in the database␊ | 
| if ($user_data->avatar != '' &&␊ | 
| ($this->cleaned_data['remove_custom_avatar'] == 1 ||␊ | 
| $this->cleaned_data['custom_avatar'] != '')) {␊ | 
| $avatar_path = Pluf::f('upload_path').'/avatars/'.basename($user_data->avatar);␊ | 
| if (basename($avatar_path) != '' && is_file($avatar_path)) {␊ | 
| unlink($avatar_path);␊ | 
| }␊ | 
| $user_data->avatar = '';␊ | 
| }␊ | 
| ␊ | 
| if ($this->cleaned_data['custom_avatar'] != '') {␊ | 
| $user_data->avatar = $this->cleaned_data['custom_avatar'];␊ | 
| }␊ | 
| ␊ | 
| $user_data->description  = $this->cleaned_data['description'];␊ | 
| $user_data->twitter      = $this->cleaned_data['twitter'];␊ | 
| $user_data->public_email = $this->cleaned_data['public_email'];␊ | 
| $user_data->website      = $this->cleaned_data['website'];␊ | 
| ␊ | 
| if ($update_pass) {␊ | 
| /**␊ | 
| * [signal]␊ | 
|  | 
| {␊ | 
| $last_name = trim($this->cleaned_data['last_name']);␊ | 
| if ($last_name == mb_strtoupper($last_name)) {␊ | 
| return mb_convert_case(mb_strtolower($last_name), ␊ | 
| return mb_convert_case(mb_strtolower($last_name),␊ | 
| MB_CASE_TITLE, 'UTF-8');␊ | 
| }␊ | 
| return $last_name;␊ | 
|  | 
| throw new Pluf_Form_Invalid(__('--- is not a valid first name.'));␊ | 
| }␊ | 
| if ($first_name == mb_strtoupper($first_name)) {␊ | 
| $first_name = mb_convert_case(mb_strtolower($first_name), ␊ | 
| $first_name = mb_convert_case(mb_strtolower($first_name),␊ | 
| MB_CASE_TITLE, 'UTF-8');␊ | 
| }␊ | 
| return $first_name;␊ | 
|  | 
| return $email;␊ | 
| }␊ | 
| ␊ | 
| function clean_custom_avatar()␊ | 
| {␊ | 
| // Just png, jpeg/jpg or gif␊ | 
| if (!preg_match('/\.(png|jpg|jpeg|gif)$/i', $this->cleaned_data['custom_avatar']) &&␊ | 
| $this->cleaned_data['custom_avatar'] != '') {␊ | 
| @unlink(Pluf::f('upload_path').'/avatars/'.$this->cleaned_data['custom_avatar']);␊ | 
| throw new Pluf_Form_Invalid(__('For security reason, you cannot upload a file with this extension.'));␊ | 
| }␊ | 
| return $this->cleaned_data['custom_avatar'];␊ | 
| }␊ | 
| ␊ | 
| /**␊ | 
| * Check to see if the 2 passwords are the same.␊ | 
| * Check to see if the two passwords are the same.␊ | 
| */␊ | 
| public function clean()␊ | 
| {␊ | 
| if (!isset($this->errors['password']) ␊ | 
| if (!isset($this->errors['password'])␊ | 
| && !isset($this->errors['password2'])) {␊ | 
| $password1 = $this->cleaned_data['password'];␊ | 
| $password2 = $this->cleaned_data['password2'];␊ |