LSformElement_password : Added possibility to have multiple contact mail attributes
[ldapsaisie.git] / public_html / includes / class / class.LSformElement_password.php
index 073761e..8f1f489 100644 (file)
@@ -60,7 +60,7 @@ class LSformElement_password extends LSformElement {
         return true;
       }
       
-      if ($this -> verifyPassword($return[$this -> name][0])) {
+      if ($this -> verifyPassword($return[$this -> name][0]) || (empty($return[$this -> name][0]) && empty($val))) {
         LSdebug("Password : no change");
         unset($return[$this -> name]);
         $this -> form -> _notUpdate[$this -> name] == true;
@@ -68,13 +68,19 @@ class LSformElement_password extends LSformElement {
       }
       
       //Mail
+
+      // Do not send mail if password is not set :
+      if (empty($return[$this -> name])) {
+        return true;
+      }
+
       if (isset($_POST['LSformElement_password_'.$this -> name.'_send'])) {
         if ($_POST['LSformElement_password_'.$this -> name.'_send']==1) {
           $this -> sendMail = true;
           LSdebug ('send by form');
         }
       }
-      else if ($this -> params['html_options']['mail']['send']==1) {
+      else if (isset($this -> params['html_options']['mail']['isset']) && $this -> params['html_options']['mail']['send']==1) {
         $this -> sendMail = true;
         LSdebug ('send by config');
       }
@@ -168,7 +174,16 @@ class LSformElement_password extends LSformElement {
     else {
       $hash = $this -> attr_html -> attribute -> ldap -> encodePassword($pwd);
       $find=false;
-      foreach($this -> attr_html -> attribute -> data as $val) {
+      if (is_array($this -> attr_html -> attribute -> data)) {
+        $data = $this -> attr_html -> attribute -> data;
+      }
+      elseif (!is_array($this -> attr_html -> attribute -> data) && !empty($this -> attr_html -> attribute -> data)) {
+        $data = array($this -> attr_html -> attribute -> data);
+      }
+      else {
+        return $find;
+      }
+      foreach($data as $val) {
         if ($hash == $val)
           $find=true;
       }
@@ -181,13 +196,28 @@ class LSformElement_password extends LSformElement {
       $mail = (String)$this -> sendMail['mail'];
       Lsdebug($mail);
       if ($mail=="") {
-        $mail_attr = $this -> attr_html -> attribute -> ldapObject -> attrs[$this -> params['html_options']['mail']['mail_attr']];
-        if ($mail_attr instanceOf LSattribute) {
-          $mail = $mail_attr -> getValue();
-          $mail=$mail[0];
+        $mail_attrs = $this -> params['html_options']['mail']['mail_attr'];
+        if (!is_array($mail_attrs)) {
+          $mail_attrs=array();
         }
-        else {
-          LSdebug("L'attribut $mail_attr pour l'envoie du nouveau mot de passe n'existe pas.");
+        foreach($mail_attrs as $attr) {
+          $mail_attr = $this -> attr_html -> attribute -> ldapObject -> attrs[$attr];
+          if ($mail_attr instanceOf LSattribute) {
+            $mail = $mail_attr -> getValue();
+            if (!empty($mail) && checkEmail($mail[0],NULL,true)) {
+              $mail=$mail[0];
+              break;
+            }
+            else {
+              $mail="";
+            }
+          }
+          else {
+            LSdebug("L'attribut $mail_attr pour l'envoie du nouveau mot de passe n'existe pas.");
+          }
+        }
+        if ($mail=="") {
+          LSerror :: addErrorCode('LSformElement_password_01');
           return;
         }
       }
@@ -195,16 +225,26 @@ class LSformElement_password extends LSformElement {
       if (checkEmail($mail,NULL,true)) {
         $this -> attr_html -> attribute -> ldapObject -> registerOtherValue('password',$this -> sendMail['pwd']);
         $msg = $this -> attr_html -> attribute -> ldapObject -> getFData($this -> sendMail['msg']);
+        if (isset($this -> params['html_options']['mail']['headers'])) {
+          $headers = $this -> params['html_options']['mail']['headers'];
+        }
+        else {
+          $headers = array();
+        }
+       if ($this -> params['html_options']['mail']['bcc']) {
+               $headers['Bcc']=$this -> params['html_options']['mail']['bcc'];
+       }
         if (sendMail(
           $mail,
           $this -> sendMail['subject'],
-          $msg
+          $msg,
+          $headers
         )) {
           LSsession :: addInfo(_('Notice mail sent.'));
         }
       }
       else {
-        LSdebug('Adresse mail incorrect : '.$mail);
+        LSerror :: addErrorCode('LSformElement_password_02',$mail);
         return;
       }
     }
@@ -275,5 +315,15 @@ class LSformElement_password extends LSformElement {
   }
 
 }
-  
+
+/*
+ * Error Codes
+ */
+LSerror :: defineError('LSformElement_password_01',
+_("LSformElement_password : No contact mail available to send password.")
+);
+LSerror :: defineError('LSformElement_password_02',
+_("LSformElement_password : Contact mail invalid (%{mail}). Can't send password.")
+);
+
 ?>