- LSformElement_password : Bug dans la vérification du mot de passe via Ajax
[ldapsaisie.git] / trunk / includes / class / class.LSformElement_password.php
1 <?php
2 /*******************************************************************************
3  * Copyright (C) 2007 Easter-eggs
4  * http://ldapsaisie.labs.libre-entreprise.org
5  *
6  * Author: See AUTHORS file in top-level directory.
7  *
8  * This program is free software; you can redistribute it and/or
9  * modify it under the terms of the GNU General Public License version 2
10  * as published by the Free Software Foundation.
11  *
12  * This program is distributed in the hope that it will be useful,
13  * but WITHOUT ANY WARRANTY; without even the implied warranty of
14  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
15  * GNU General Public License for more details.
16  *
17  * You should have received a copy of the GNU General Public License
18  * along with this program; if not, write to the Free Software
19  * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA  02111-1307, USA.
20
21 ******************************************************************************/
22
23 LSsession :: loadLSclass('LSformElement');
24
25 /**
26  * Element password d'un formulaire pour LdapSaisie
27  *
28  * Cette classe définis les éléments password des formulaires.
29  * Elle étant la classe basic LSformElement.
30  *
31  * @author Benjamin Renard <brenard@easter-eggs.com>
32  */
33
34 class LSformElement_password extends LSformElement {
35   
36   var $fieldTemplate = 'LSformElement_password_field.tpl';
37   var $template = 'LSformElement_password.tpl';
38   
39   var $sendMail = false;
40
41   /**
42    * Recupère la valeur de l'élement passée en POST
43    *
44    * Cette méthode vérifie la présence en POST de la valeur de l'élément et la récupère
45    * pour la mettre dans le tableau passer en paramètre avec en clef le nom de l'élément
46    *
47    * @param[] array Pointeur sur le tableau qui recupèrera la valeur.
48    *
49    * @retval boolean true si la valeur est présente en POST, false sinon
50    */
51   function getPostData(&$return) {
52     // Récupère la valeur dans _POST, et les vérifie avec la fonction générale
53     $retval = parent :: getPostData($return);
54     // Si une valeur est recupérée
55     if ($retval) {
56       $val = $this -> form -> ldapObject -> attrs[$this -> name] -> getValue(); 
57       if( (empty($return[$this -> name][0]) ) && ( ! empty( $val ) ) ) {
58         unset($return[$this -> name]);
59         $this -> form -> _notUpdate[$this -> name] == true;
60         return true;
61       }
62       
63       //Mail
64       if (isset($_POST['LSformElement_password_'.$this -> name.'_send'])) {
65         if ($_POST['LSformElement_password_'.$this -> name.'_send']==1) {
66           $this -> sendMail = true;
67           LSdebug ('send by form');
68         }
69       }
70       else if ($this -> params['html_options']['mail']['send']==1) {
71         $this -> sendMail = true;
72         LSdebug ('send by config');
73       }
74       if ($this -> sendMail && LSsession :: loadLSaddon('mail')) {
75         $msg = getFData($this -> params['html_options']['mail']['msg'],$return[$this -> name][0]);
76         $subject = $this -> params['html_options']['mail']['subject'];
77         if (isset($_POST['LSformElement_password_'.$this -> name.'_msg'])) {
78           $msgInfos = json_decode($_POST['LSformElement_password_'.$this -> name.'_msg']);
79           if ($msgInfos -> subject) {
80             $subject = $msgInfos -> subject;
81           }
82           if ($msgInfos -> msg) {
83             $msg = getFData($msgInfos -> msg,$return[$this -> name][0]);
84           }
85           if ($msgInfos -> mail) {
86             $mail = $msgInfos -> mail;
87           }
88         }
89         $this -> sendMail = array (
90           'subject' => $subject,
91           'msg' => $msg,
92           'mail' => $mail
93         );
94         $this -> attr_html -> attribute -> addObjectEvent('after_modify',$this,'send');
95       }
96     }
97     return $retval;
98   }
99
100  /**
101   * Retourne les infos d'affichage de l'élément
102   * 
103   * Cette méthode retourne les informations d'affichage de l'élement
104   *
105   * @retval array
106   */
107   function getDisplay(){
108     LSsession :: addCssFile('LSformElement_password.css');
109     $return = $this -> getLabelInfos();
110     $pwd = "";
111     if (!$this -> isFreeze()) {
112       
113       // Help Infos
114       LSsession :: addHelpInfos(
115         'LSformElement_password',
116         array(
117           'generate' => _('Generate a password.'),
118           'verify' => _('Compare with stored password.'),
119           'view' => _('Display password.'),
120           'hide' => _('Hide password.'),
121           'mail' => _("The password will be sent by mail if changed. Click to disable automatic notification."),
122           'nomail' => _("The password will not be sent if changed. Click to enable automatic notification."),
123           'editmail' => _("Modify the mail sent to notice the user")
124         )
125       );
126       
127       if (($this -> params['html_options']['generationTool'])&&($this -> params['html_options']['autoGenerate'])&&(empty($this -> values))) {
128         $pwd=$this->generatePassword($this -> params);
129       }
130       
131       $params = array(
132         'generate' => ($this -> params['html_options']['generationTool']==True),
133         'verify' => (!$this -> attr_html -> attribute -> ldapObject-> isNew())
134       );
135       if (isset($this -> params['html_options']['mail'])) {
136         $params['mail'] = $this -> params['html_options']['mail'];
137       }
138       LSsession :: addJSconfigParam($this -> name,$params);
139       
140       LSsession :: addJSscript('LSformElement_password_field.js');
141       LSsession :: addJSscript('LSformElement_password.js');
142     }
143     $return['html'] = $this -> fetchTemplate(NULL,array('pwd' => $pwd));
144     return $return;
145   }
146   
147   function generatePassword($param=NULL) {
148     return generatePassword($params['html_options']['chars'],$params['html_options']['lenght']);
149   }
150   
151   function verifyPassword($pwd) {
152     if ($this -> attr_html -> attribute -> ldapObject -> isNew()) {
153       return false;
154     }
155     return LSsession :: checkUserPwd($this -> attr_html -> attribute -> ldapObject,$pwd);
156   }
157   
158   function send($params) {
159     if (is_array($this -> sendMail)) {
160       $mail = (String)$this -> sendMail['mail'];
161       Lsdebug($mail);
162       if ($mail=="") {
163         $mail_attr = $this -> attr_html -> attribute -> ldapObject -> attrs[$this -> params['html_options']['mail']['mail_attr']];
164         if ($mail_attr instanceOf LSattribute) {
165           $mail = $mail_attr -> getValue();
166           $mail=$mail[0];
167         }
168         else {
169           LSdebug("L'attribut $mail_attr pour l'envoie du nouveau mot de passe n'existe pas.");
170           return;
171         }
172       }
173               
174       if (checkEmail($mail,NULL,true)) {
175         if (sendMail(
176           $mail,
177           $this -> sendMail['subject'],
178           $this -> sendMail['msg']
179         )) {
180           LSsession :: addInfo(_('Notice mail sent.'));
181         }
182       }
183       else {
184         LSdebug('Adresse mail incorrect : '.$mail);
185         return;
186       }
187     }
188     return true;
189   }
190   
191   public static function ajax_verifyPassword(&$data) {
192     if ((isset($_REQUEST['attribute'])) && (isset($_REQUEST['objecttype'])) && (isset($_REQUEST['fieldValue'])) && (isset($_REQUEST['idform'])) && (isset($_REQUEST['objectdn'])) ) {
193       if (LSsession ::loadLSobject($_REQUEST['objecttype'])) {
194         $object = new $_REQUEST['objecttype']();
195         $object -> loadData($_REQUEST['objectdn']);
196         $form = $object -> getForm($_REQUEST['idform']);
197         if ($form) {
198           $field=$form -> getElement($_REQUEST['attribute']);
199           if ($field) {
200             $val = $field -> verifyPassword($_REQUEST['fieldValue']);
201             $data = array(
202               'verifyPassword' => $val
203             );
204           }
205           else {
206             LSdebug('Impossible de récupérer le LSformElement');
207           }
208         }
209         else {
210           LSdebug('Impossible de recuperer le LSform.');
211         }
212       }
213     }
214   }
215   
216   public static function ajax_generatePassword(&$data) {
217     if ((isset($_REQUEST['attribute'])) && (isset($_REQUEST['objecttype'])) && (isset($_REQUEST['objectdn'])) && (isset($_REQUEST['idform'])) ) {
218       if (LSsession ::loadLSobject($_REQUEST['objecttype'])) {
219         $params = LSconfig :: get("LSobjects.".$_REQUEST['objecttype'].".attrs.".$_REQUEST['attribute']);
220         $val = self :: generatePassword($params);
221         if ( $val ) {
222           $data = array(
223             'generatePassword' => $val
224           );
225         }
226       }
227     }
228   }
229 }
230   
231 ?>