LSformElement :: password : Added bcc feature in mail options
[ldapsaisie.git] / public_html / includes / class / class.LSformElement_password.php
index 04f6217..6fbd92c 100644 (file)
@@ -60,19 +60,32 @@ class LSformElement_password extends LSformElement {
         return true;
       }
       
+      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;
+        return true;
+      }
+      
       //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');
       }
       if ($this -> sendMail && LSsession :: loadLSaddon('mail')) {
-        $msg = getFData($this -> params['html_options']['mail']['msg'],$return[$this -> name][0]);
+        $msg = $this -> params['html_options']['mail']['msg'];
         $subject = $this -> params['html_options']['mail']['subject'];
         if (isset($_POST['LSformElement_password_'.$this -> name.'_msg'])) {
           $msgInfos = json_decode($_POST['LSformElement_password_'.$this -> name.'_msg']);
@@ -80,7 +93,7 @@ class LSformElement_password extends LSformElement {
             $subject = $msgInfos -> subject;
           }
           if ($msgInfos -> msg) {
-            $msg = getFData($msgInfos -> msg,$return[$this -> name][0]);
+            $msg = $msgInfos -> msg;
           }
           if ($msgInfos -> mail) {
             $mail = $msgInfos -> mail;
@@ -89,7 +102,8 @@ class LSformElement_password extends LSformElement {
         $this -> sendMail = array (
           'subject' => $subject,
           'msg' => $msg,
-          'mail' => $mail
+          'mail' => $mail,
+          'pwd' => $return[$this -> name][0]
         );
         $this -> attr_html -> attribute -> addObjectEvent('after_modify',$this,'send');
       }
@@ -117,6 +131,7 @@ class LSformElement_password extends LSformElement {
           'generate' => _('Generate a password.'),
           'verify' => _('Compare with stored password.'),
           'view' => _('Display password.'),
+          'viewHash' => _('Display hashed password.'),
           'hide' => _('Hide password.'),
           'mail' => _("The password will be sent by mail if changed. Click to disable automatic notification."),
           'nomail' => _("The password will not be sent if changed. Click to enable automatic notification."),
@@ -130,7 +145,8 @@ class LSformElement_password extends LSformElement {
       
       $params = array(
         'generate' => ($this -> params['html_options']['generationTool']==True),
-        'verify' => (!$this -> attr_html -> attribute -> ldapObject-> isNew())
+        'viewHash' => ($this -> params['html_options']['viewHash']==True),
+        'verify' => ( (!$this -> attr_html -> attribute -> ldapObject-> isNew()) && ( (isset($this -> params['html_options']['verify']) && $this -> params['html_options']['verify']) || (!isset($this -> params['html_options']['verify'])) ) )
       );
       if (isset($this -> params['html_options']['mail'])) {
         $params['mail'] = $this -> params['html_options']['mail'];
@@ -144,7 +160,7 @@ class LSformElement_password extends LSformElement {
     return $return;
   }
   
-  function generatePassword($param=NULL) {
+  function generatePassword($params=NULL) {
     return generatePassword($params['html_options']['chars'],$params['html_options']['lenght']);
   }
   
@@ -152,7 +168,27 @@ class LSformElement_password extends LSformElement {
     if ($this -> attr_html -> attribute -> ldapObject -> isNew()) {
       return false;
     }
-    return LSsession :: checkUserPwd($this -> attr_html -> attribute -> ldapObject,$pwd);
+    if ($this -> isLoginPassword()) {
+      return LSsession :: checkUserPwd($this -> attr_html -> attribute -> ldapObject,$pwd);
+    }
+    else {
+      $hash = $this -> attr_html -> attribute -> ldap -> encodePassword($pwd);
+      $find=false;
+      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;
+      }
+      return $find;
+    }
   }
   
   function send($params) {
@@ -172,10 +208,22 @@ 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'],
-          $this -> sendMail['msg']
+          $msg,
+          $headers
         )) {
           LSsession :: addInfo(_('Notice mail sent.'));
         }
@@ -226,6 +274,31 @@ class LSformElement_password extends LSformElement {
       }
     }
   }
+
+  public static function ajax_viewHash(&$data) {
+    if ((isset($_REQUEST['attribute'])) && (isset($_REQUEST['objecttype'])) && (isset($_REQUEST['objectdn'])) ) {
+      if (LSsession ::loadLSobject($_REQUEST['objecttype'])) {
+        $object = new $_REQUEST['objecttype']();
+        $object -> loadData($_REQUEST['objectdn']);
+        if (LSsession::canAccess($_REQUEST['objecttype'],$_REQUEST['objectdn'],null,$_REQUEST['attribute'])) {
+          $values = $object -> getValue($_REQUEST['attribute']);
+          if (is_string($values[0])) {
+            $data = array (
+              'hash' => $values[0]
+            );
+          }
+        }
+      }
+    }
+  }
+
+  public function isLoginPassword() {
+    if (!isset($this -> params['html_options']['isLoginPassword']) || $this -> params['html_options']['isLoginPassword']) {
+      return true;
+    }
+    return false;
+  }
+
 }
   
 ?>