LSformRule :: password : Added minValidRegex parameter and use preg_match() function...
authorBenjamin Renard <brenard@easter-eggs.com>
Thu, 19 Jun 2014 14:41:27 +0000 (16:41 +0200)
committerBenjamin Renard <brenard@easter-eggs.com>
Thu, 19 Jun 2014 14:41:27 +0000 (16:41 +0200)
doc/conf/LSattribute/check_data/password.docbook
public_html/conf/LSobjects/config.LSobjects.LSpeople.php
public_html/includes/class/class.LSformRule_password.php

index cffccf1..51b1c64 100644 (file)
   <term>regex</term>
   <listitem>
     <simpara>Expression(s) régulière(s) que doit respecter le mot de passe. Ce
-    paramètre peut être une expression régulière ou un tableau d'expressions
-    régulières.</simpara>
+    paramètre peut être une expression régulière au format
+    <ulink url='http://php.net/pcre.pattern'>PCRE</ulink> ou un tableau
+    d'expressions régulières.</simpara>
   </listitem>
 </varlistentry>
 
+<varlistentry>
+  <term>minValidRegex</term>
+  <listitem>
+    <simpara>Le nombre minimum d'expression régulière qui doivent être validées
+    pour que le mot de passe soit considéré comme correct. Ce paramètre est
+    optionnel, par défaut, toutes les expressions régulières doivent être
+    validées.</simpara>
+  </listitem>
+</varlistentry>
+
+
 </variablelist>
 
 </sect4>
index 96ce030..0bd81f1 100644 (file)
@@ -513,7 +513,14 @@ $GLOBALS['LSobjects']['LSpeople'] = array (
           'msg' => 'Your password must contain from 8 to 10 characters.',
           'params' => array(
             'minLength' => 8,
-            'maxLength' => 10
+            'maxLength' => 10,
+            'regex' => array (
+              '/[A-Z]/',
+              '/[a-z]/',
+              '/[0-9]/',
+              '/[^A-Za-z0-9]/',
+            ),
+            'minValidRegex' => 3
           )
         )
       ),
index 501792e..0079134 100644 (file)
@@ -37,6 +37,8 @@ class LSformRule_password extends LSformRule {
    *                          - 'prohibitedValues' : Un tableau de valeurs interdites
    *                          - 'regex' : une ou plusieurs expressions régulières
    *                                      devant matche
+   *                          - 'minValidRegex' : le nombre minimun d'expressions
+   *                                              régulières à valider
    * @param object $formElement L'objet formElement attaché
    *
    * @return boolean true si la valeur est valide, false sinon
@@ -56,14 +58,30 @@ class LSformRule_password extends LSformRule {
       if (!is_array($options['params']['regex'])) {
         $options['params']['regex']=array($options['params']['regex']);
       }
+      if (isset($options['params']['minValidRegex'])) {
+        $options['params']['minValidRegex']=(int)$options['params']['minValidRegex'];
+        if ($options['params']['minValidRegex']==0 || $options['params']['minValidRegex']>count($options['params']['regex'])) {
+          $options['params']['minValidRegex']=count($options['params']['regex']);
+        }
+      }
+      else {
+        $options['params']['minValidRegex']=count($options['params']['regex']);
+      }
+      $valid=0;
       foreach($options['params']['regex'] as $regex) {
-        if (!ereg($regex,$value)) 
-          return;
+        if ($regex[0]!='/') {
+          LSerror :: addErrorCode('LSformRule_password_01');
+          continue;
+        }
+        if (preg_match($regex,$value))
+          $valid++;
       }
+      if ($valid<$options['params']['minValidRegex'])
+        return;
     }
-    
-    if(is_array($options['params']['prohibitedValues'])) {
-      if (in_array($value,$options['params']['prohibitedValues'])) 
+
+    if(isset($options['params']['prohibitedValues']) && is_array($options['params']['prohibitedValues'])) {
+      if (in_array($value,$options['params']['prohibitedValues']))
         return;
     }
     
@@ -72,4 +90,11 @@ class LSformRule_password extends LSformRule {
   
 }
 
+
+/*
+ * Error Codes
+ */
+LSerror :: defineError('LSformRule_password_01',
+_("LSformRule_password : Invalid regex configured : %{regex}. You must use PCRE (begining by '/' caracter).")
+);
 ?>