LSformRule :: password : Added minValidRegex parameter and use preg_match() function...
[ldapsaisie.git] / public_html / includes / class / class.LSformRule_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 /**
24  * Règle de validation d'un mot de passe
25  *
26  * @author Benjamin Renard <brenard@easter-eggs.com>
27  */
28 class LSformRule_password extends LSformRule {
29  
30   /**
31    * Vérification de la valeur.
32    *
33    * @param string $values Valeur à vérifier
34    * @param array $options Options de validation
35    *                          - 'minLength' : la longueur maximale
36    *                          - 'maxLength' : la longueur minimale
37    *                          - 'prohibitedValues' : Un tableau de valeurs interdites
38    *                          - 'regex' : une ou plusieurs expressions régulières
39    *                                      devant matche
40    *                          - 'minValidRegex' : le nombre minimun d'expressions
41    *                                              régulières à valider
42    * @param object $formElement L'objet formElement attaché
43    *
44    * @return boolean true si la valeur est valide, false sinon
45    */ 
46   function validate ($value,$options=array(),$formElement) {
47     if(isset($options['params']['maxLength'])) {
48       if (strlen($value)>$options['params']['maxLength'])
49         return;
50     }
51     
52     if(isset($options['params']['minLength'])) {
53       if (strlen($value)<$options['params']['minLength'])
54         return;
55     }
56     
57     if(isset($options['params']['regex'])) {
58       if (!is_array($options['params']['regex'])) {
59         $options['params']['regex']=array($options['params']['regex']);
60       }
61       if (isset($options['params']['minValidRegex'])) {
62         $options['params']['minValidRegex']=(int)$options['params']['minValidRegex'];
63         if ($options['params']['minValidRegex']==0 || $options['params']['minValidRegex']>count($options['params']['regex'])) {
64           $options['params']['minValidRegex']=count($options['params']['regex']);
65         }
66       }
67       else {
68         $options['params']['minValidRegex']=count($options['params']['regex']);
69       }
70       $valid=0;
71       foreach($options['params']['regex'] as $regex) {
72         if ($regex[0]!='/') {
73           LSerror :: addErrorCode('LSformRule_password_01');
74           continue;
75         }
76         if (preg_match($regex,$value))
77           $valid++;
78       }
79       if ($valid<$options['params']['minValidRegex'])
80         return;
81     }
82
83     if(isset($options['params']['prohibitedValues']) && is_array($options['params']['prohibitedValues'])) {
84       if (in_array($value,$options['params']['prohibitedValues']))
85         return;
86     }
87     
88     return true;
89   }
90   
91 }
92
93
94 /*
95  * Error Codes
96  */
97 LSerror :: defineError('LSformRule_password_01',
98 _("LSformRule_password : Invalid regex configured : %{regex}. You must use PCRE (begining by '/' caracter).")
99 );
100 ?>