- LSview : ajout de input hidden pour contenir les informations du type et du
authorBenjamin Renard <brenard@easter-eggs.com>
Thu, 25 Sep 2008 15:15:33 +0000 (15:15 +0000)
committerBenjamin Renard <brenard@easter-eggs.com>
Thu, 25 Sep 2008 15:15:33 +0000 (15:15 +0000)
  DN de l'objet affiché.
- LSmail : Ajout d'une fonctionalité d'envoie de mail depuis l'interface.
  -> Modification de LSformElement_mail pour utiliser cette fonctionalité
  -> Agrémentation du fichier index_ajax.php
  -> Ajout d'un LSaddons :: mail
- LSsession :
  -> Ajout d'une méthode getEmailSender()
  -> Utilisation de la méthode getEmailSender() pour la partie de récupération
     de mot de passe
  -> Revue des méthodes loadLSaddon() et loadLSaddons()
- LSconfirmBox :
  -> Ajout de binding onClose() et onCancel()
- LSsmoothbox :
  -> Déport de la creation de la structure dans la méthode build()
  -> Suppression du principe de refreshElement au profit de binding sur les
     évenements onClose, onValid et onCancel
      -> Ajout des méthodes addEvent() et fireEvent()
      -> Suppression de la méthode setRefreshElement()
  -> Ajout de la méthode asNew() pour remettre l'objet dans son état d'origine
     pour l'utilisation simultané de l'objet par plusieurs autres
  -> Vérification lors du clique sur le closeBtn qu'une précédente confirmBox
     n'est pas déjà ouvert
  -> La méthode close() ne fait plus que fermer la LSsmoothbox et les méthodes
     valid() et cancel() gère les cas de fermeture et lance la méthode close()
  -> Ajout de la méthode openHTML() pour l'ouverture de la LSsmoothbox avec un
     code HTML passé en paramètre
  -> Ajout de la méthode setOption()
- LSrelation & LSformElement_select_object :
  -> Utilisation du principe d'évenement de la LSsmoothbox plutôt que du
     refreshElement
  -> Utilisation de la méthode asNew() pour eviter tout problème de concurence
- LSdefault : Ajout de la méthode displayInfos()

14 files changed:
trunk/includes/addons/LSaddons.mail.php [new file with mode: 0644]
trunk/includes/class/class.LSformElement_mail.php
trunk/includes/class/class.LSsession.php
trunk/includes/js/LSconfirmBox.js
trunk/includes/js/LSdefault.js
trunk/includes/js/LSformElement_mail.js
trunk/includes/js/LSformElement_select_object.js
trunk/includes/js/LSmail.js [new file with mode: 0644]
trunk/includes/js/LSrelation.js
trunk/includes/js/LSsmoothbox.js
trunk/index_ajax.php
trunk/templates/LSmail.tpl [new file with mode: 0644]
trunk/templates/css/LSmail.css [new file with mode: 0644]
trunk/templates/view.tpl

diff --git a/trunk/includes/addons/LSaddons.mail.php b/trunk/includes/addons/LSaddons.mail.php
new file mode 100644 (file)
index 0000000..cc0e1ac
--- /dev/null
@@ -0,0 +1,159 @@
+<?php
+/*******************************************************************************
+ * Copyright (C) 2007 Easter-eggs
+ * http://ldapsaisie.labs.libre-entreprise.org
+ *
+ * Author: See AUTHORS file in top-level directory.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License version 2
+ * as published by the Free Software Foundation.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA  02111-1307, USA.
+
+******************************************************************************/
+
+
+ /**
+  * Données de configuration pour le support FTP
+  */
+
+      // Pear :: Mail
+      define('PEAR_MAIL','/usr/share/php/Mail.php');
+      
+      /*
+       * Méthode d'envoie :
+       *  - mail : envoie avec la méthode PHP mail()
+       *  - sendmail : envoie la commande sendmail du système
+       *  - smtp : envoie en utilisant un serveur SMTP
+       */
+      define('MAIL_SEND_METHOD','smtp');
+      
+      /*
+       * Paramètres d'envoie :
+       *   Ces paramètres dépende de la méthode utilisé. Repporté vous à la documentation
+       * de PEAR :: Mail pour plus d'information.
+       * Lien : http://pear.php.net/manual/en/package.mail.mail.factory.php
+       * Infos : 
+       *  List of parameter for the backends
+       *  mail
+       *    o If safe mode is disabled, $params will be passed as the fifth 
+       *      argument to the PHP mail() function. If $params is an array, 
+       *      its elements will be joined as a space-delimited string. 
+       *  sendmail
+       *    o $params["sendmail_path"] - The location of the sendmail program 
+       *      on the filesystem. Default is /usr/bin/sendmail.
+       *    o $params["sendmail_args"] - Additional parameters to pass to the 
+       *      sendmail. Default is -i. 
+       *  smtp
+       *    o $params["host"] - The server to connect. Default is localhost.
+       *    o $params["port"] - The port to connect. Default is 25.
+       *    o $params["auth"] - Whether or not to use SMTP authentication. 
+       *      Default is FALSE.
+       *    o $params["username"] - The username to use for SMTP authentication.
+       *    o $params["password"] - The password to use for SMTP authentication.
+       *    o $params["localhost"] - The value to give when sending EHLO or HELO.
+       *      Default is localhost
+       *    o $params["timeout"] - The SMTP connection timeout. 
+       *      Default is NULL (no timeout).
+       *    o $params["verp"] - Whether to use VERP or not. Default is FALSE.
+       *    o $params["debug"] - Whether to enable SMTP debug mode or not. 
+       *      Default is FALSE.
+       *    o $params["persist"] - Indicates whether or not the SMTP connection 
+       *      should persist over multiple calls to the send() method.
+       */
+      $MAIL_SEND_PARAMS = NULL;
+      
+      /*
+       * Headers :
+       */
+      $MAIL_HEARDERS = array(
+        "Content-Type"  =>  "text/plain",
+        "charset"       =>  "UTF-8",
+        "format"        =>  "flowed"
+      );
+
+      // Message d'erreur
+
+      $GLOBALS['LSerror_code']['FTP_SUPPORT_01']= array (
+        'msg' => _("MAIL Support : Pear::MAIL est introuvable."),
+        'level' => 'c'
+      );
+      
+      $GLOBALS['LSerror_code']['MAIL_00']= array (
+        'msg' => _("MAIL Error : %{msg}"),
+        'level' => 'c'
+      );
+      
+      $GLOBALS['LSerror_code']['MAIL_01']= array (
+        'msg' => _("MAIL : Problème durant l'envoie de votre mail"),
+        'level' => 'c'
+      );
+      
+ /**
+  * Fin des données de configuration
+  */
+
+
+ /**
+  * Verification du support MAIL par ldapSaisie
+  * 
+  * @author Benjamin Renard <brenard@easter-eggs.com>
+  *
+  * @retval boolean true si MAIL est pleinement supporté, false sinon
+  */
+  function LSaddon_mail_support() {
+    $retval=true;
+
+    // Dependance de librairie
+    if (!class_exists('Mail')) {
+      if(!@include(PEAR_MAIL)) {
+        $GLOBALS['LSerror'] -> addErrorCode('MAIL_SUPPORT_01');
+        $retval=false;
+      }
+    }
+    
+    return $retval;
+  }
+  
+  /**
+  * Envoie d'un mail
+  * 
+  * @author Benjamin Renard <brenard@easter-eggs.com>
+  *
+  * @retval boolean true si MAIL est pleinement supporté, false sinon
+  */
+  function sendMail($to,$subject,$msg) {
+    $mail_obj  = & Mail::factory(MAIL_SEND_METHOD, $MAIL_SEND_PARAMS);
+    
+    if(is_array($MAIL_HEARDERS)) {
+      $headers = $MAIL_HEARDERS;
+    }
+    else {
+      $headers = array();
+    }
+    $headers["Subject"] = $subject;
+    if (!isset($headers['From']) && ($GLOBALS['LSsession'] -> getEmailSender() != "")) {
+      $headers['From'] = $GLOBALS['LSsession'] -> getEmailSender();
+    }
+    
+    $ret = $mail_obj -> send($to,$headers,$msg);
+    
+    if ($ret instanceof PEAR_Error) {
+      $GLOBALS['LSerror'] -> addErrorCode('MAIL_01');
+      $GLOBALS['LSerror'] -> addErrorCode('MAIL_00',$ret -> getMessage());
+      return;
+    }
+    return true;
+  }
+
+
+
index 7bf7848..29b05e0 100644 (file)
@@ -55,7 +55,6 @@ class LSformElement_mail extends LSformElement {
         }
       }
       $return['html'] .= "</ul>\n";
-      $GLOBALS['LSsession'] -> addJSscript('LSformElement_mail.js');
     }
     else {
       $return['html'] = "<ul class='LSform'>\n";
@@ -65,11 +64,16 @@ class LSformElement_mail extends LSformElement {
       else {
         foreach ($this -> values as $value) {
           $return['html'] .= "<li><a href='mailto:".$value."'>".$value."</a><img src='templates/images/mail.png' alt='"._('Envoyer un mail.')."' title='"._('Envoyer un mail.')."' class='LSformElement_mail_btn btn'></li>\n";
-          $GLOBALS['LSsession'] -> addJSscript('LSformElement_mail.js');
         }
       }
       $return['html'] .= "</ul>\n";
     }
+    $GLOBALS['LSsession'] -> addJSscript('LSmail.js');
+    $GLOBALS['LSsession'] -> addJSscript('LSsmoothbox.js');
+    $GLOBALS['LSsession'] -> addCssFile('LSsmoothbox.css');
+    $GLOBALS['LSsession'] -> addJSscript('LSconfirmBox.js');
+    $GLOBALS['LSsession'] -> addCssFile('LSconfirmBox.css');
+    $GLOBALS['LSsession'] -> addJSscript('LSformElement_mail.js');
     return $return;
   }
 
index 5a6a346..9650c96 100644 (file)
@@ -155,7 +155,14 @@ class LSsession {
   * @retval boolean true si le chargement a réussi, false sinon.
   */
   function loadLSaddon($addon) {
-    return require_once LS_ADDONS_DIR .'LSaddons.'.$addon.'.php';
+    if(require_once LS_ADDONS_DIR .'LSaddons.'.$addon.'.php') {
+      if (!call_user_func('LSaddon_'. $addon .'_support')) {
+        $GLOBALS['LSerror'] -> addErrorCode(1002,$addon);
+        return;
+      }
+      return true;
+    }
+    return;
   }
 
  /**
@@ -174,9 +181,6 @@ class LSsession {
 
     foreach ($GLOBALS['LSaddons']['loads'] as $addon) {
       $this -> loadLSaddon($addon);
-      if (!call_user_func('LSaddon_'. $addon .'_support')) {
-        $GLOBALS['LSerror'] -> addErrorCode(1002,$addon);
-      }
     }
     return true;
   }
@@ -328,8 +332,8 @@ class LSsession {
                     if ($this -> ldapServer['recoverPassword']['recoveryEmailSender']) {
                       $headers.="\nFrom: ".$this -> ldapServer['recoverPassword']['recoveryEmailSender'];
                     }
-                    else if($this -> ldapServer['emailSender']) {
-                      $headers.="\nFrom: ".$this -> ldapServer['emailSender'];
+                    else if($this -> getEmailSender()) {
+                      $headers.="\nFrom: ".$this -> getEmailSender();
                     }
                     
                     if (checkEmail($emailAddress)) {
@@ -1482,6 +1486,15 @@ class LSsession {
       exit();
     }
   }
+  
+  /**
+   * Retourne l'adresse mail d'emission configurée pour le serveur courant
+   * 
+   * @retval string Adresse mail d'emission
+   */
+  function getEmailSender() {
+    return $this -> ldapServer['emailSender'];  
+  }
 }
 
 ?>
index 2824102..26d69cf 100644 (file)
@@ -97,6 +97,9 @@ var LSconfirmBox = new Class({
     onClose: function() {
       this.box.setStyle('display','none');
       this.purge();
+      if (this._options.onClose) {
+        $try(this._options.onClose);
+      }
     },
     
     purge: function() {
@@ -162,5 +165,8 @@ var LSconfirmBox = new Class({
     
     cancel: function() {
       this.hide();
+      if (this._options.onCancel) {
+        $try(this._options.onCancel);
+      }
     }
 });
index 07ce0c4..8c54f94 100644 (file)
@@ -92,7 +92,12 @@ var LSdefault = new Class({
       this.LSdebugInfos.set('html',html);
       this.displayDebugBox();
     },
-
+    
+    displayInfos: function(html) {
+      this.LSinfos.set('html',html);
+      this.displayInfosBox();
+    },
+    
     displayErrorBox: function() {
       this.LSerror.setStyle('top',getScrollTop()+10);
       this.fx.LSerror.start(0,0.8);
index 79f8c24..e0f3607 100644 (file)
@@ -4,6 +4,7 @@ var LSformElement_mail = new Class({
       if (typeof(varLSform) != "undefined") {
         varLSform.addModule("LSformElement_mail",this);
       }
+      this.LSmail_open = 0;
     },
     
     initialiseLSformElement_mail: function(el) {
@@ -20,13 +21,33 @@ var LSformElement_mail = new Class({
     },
     
     onBtnClick: function(btn) {
-      var href = btn.getParent().getFirst().href;
-      if (typeof(href)=="undefined") {
-        href = 'mailto:'+btn.getParent().getFirst().value;
-      }
-      if ((href!="")&&(href!="mailto:")) {
-        location.href = href;
+      if (this.LSmail_open==0) {
+        var mail = btn.getParent().getFirst().innerHTML;
+        if ((typeof(mail)!='string')||(mail=='')) {
+           mail = btn.getParent().getFirst().value;
+        }
+        if(!$type(this.LSmail)) {
+          this.LSmail = new LSmail();
+          this.LSmail.addEvent('close',this.onLSmailClose.bind(this));
+          this.LSmail.addEvent('valid',this.onLSmailValid.bind(this));
+        }
+        if ((mail!="")) {
+          this.LSmail_open = 1;
+          this.LSmail.setMails([mail]);
+          this.LSmail.setObject($('LSform_objecttype').value,$('LSform_objectdn').value);
+          this.LSmail.open(btn);
+        }
       }
+    },
+    
+    onLSmailClose: function(LSmail) {
+      LSdebug('LSformElement_mail : close LSmail');
+      this.LSmail_open = 0;
+    },
+    
+    onLSmailValid: function(LSmail) {
+      LSdebug('LSformElement_mail : valid LSmail');
+      LSmail.send();
     }
 });
 window.addEvent(window.ie ? 'load' : 'domready', function() {
index 98cb503..3e8c24d 100644 (file)
@@ -41,13 +41,14 @@ var LSformElement_select_object = new Class({
     onLSformElement_select_object_addBtnClickComplete: function(responseText, responseXML) {
       var data = JSON.decode(responseText);
       if ( varLSdefault.checkAjaxReturn(data) ) {
-        varLSsmoothbox.setRefreshElement(this);
+        varLSsmoothbox.asNew();
+        varLSsmoothbox.addEvent('valid',this.onLSsmoothboxValid.bind(this));
         varLSsmoothbox.displayValidBtn();
         varLSsmoothbox.openURL(data.href,{width: 615});
       }
     },
     
-    refresh: function() {
+    onLSsmoothboxValid: function() {
       var getAttrName = /LSformElement_select_object_(.*)_[0-9]*/
       var attrName = getAttrName.exec(this.refreshFields)[1];
       var data = {
@@ -60,10 +61,10 @@ var LSformElement_select_object = new Class({
         ul:         this.refreshFields
       };
       data.imgload=varLSdefault.loadingImgDisplay($('a_' + this.refreshFields));
-      new Request({url: 'index_ajax.php', data: data, onSuccess: this.onRefreshComplete.bind(this)}).send();
+      new Request({url: 'index_ajax.php', data: data, onSuccess: this.onLSsmoothboxValidComplete.bind(this)}).send();
     },
     
-    onRefreshComplete: function(responseText, responseXML) {
+    onLSsmoothboxValidComplete: function(responseText, responseXML) {
       var data = JSON.decode(responseText);
       if ( varLSdefault.checkAjaxReturn(data) ) {
         $(this.refreshFields).getParent().set('html',data.html);
diff --git a/trunk/includes/js/LSmail.js b/trunk/includes/js/LSmail.js
new file mode 100644 (file)
index 0000000..4a5e55d
--- /dev/null
@@ -0,0 +1,127 @@
+var LSmail = new Class({
+    initialize: function(mails,msg){
+      this.href = "LSmail.php";
+      this.setMails(mails);
+      this.setMsg(msg);
+      this.object = {};
+      this.opened = 0;
+      this.listeners = {
+        close:    new Array(),
+        valid:  new Array()
+      };
+    },
+    
+    setMails: function(mails) {
+      if ($type(mails)) {
+        this.mails = mails;
+      }
+      else {
+        this.mails = new Array();
+      }      
+    },
+    
+    setMsg: function(msg) {
+      if ($type(msg)) {
+        this.msg = msg;
+      }
+      else {
+        this.msg = "";
+      }      
+    },
+    
+    setObject: function(type,dn) {
+      this.object = {
+        type:   type,
+        dn:     dn
+      };
+    },
+    
+    open: function(startElement) {
+      if (this.opened==0) {
+        var data = {
+          template:   'LSmail',
+          action:     'display',
+          object:     this.object,
+          mails:      this.mails,
+          msg:        this.msg
+        };
+        
+        if ($type(startElement)) {
+          this.startElement = startElement;
+          data.imgload=varLSdefault.loadingImgDisplay(startElement,'inside');
+        }
+        new Request({url: 'index_ajax.php', data: data, onSuccess: this.onOpenGetHtmlComplete.bind(this)}).send();
+      }
+    },
+    
+    onOpenGetHtmlComplete: function(responseText, responseXML) {
+      var data = JSON.decode(responseText);
+      if ( varLSdefault.checkAjaxReturn(data) ) {
+        //varLSsmoothbox.setRefreshElement(this);
+        varLSsmoothbox.asNew();
+        varLSsmoothbox.addEvent('valid',this.onLSsmoothboxValid.bind(this));
+        varLSsmoothbox.addEvent('close',this.onLSsmoothboxClose.bind(this));
+        varLSsmoothbox.openHTML(data.html,{startElement: this.startElement, width: 580, height: 150});
+      }
+    },
+    
+    onLSsmoothboxValid: function(LSsmoothbox) {
+      if($type(LSsmoothbox.frame)) {
+        this.sendInfos = {
+          mail:     LSsmoothbox.frame.getElementById('LSmail_mail').value,
+          subject:  LSsmoothbox.frame.getElementById('LSmail_subject').value,
+          msg:      LSsmoothbox.frame.getElementById('LSmail_msg').value
+        };
+      }
+      this.fireEvent.bind(this)('valid');
+    },
+    
+    onLSsmoothboxClose: function(LSsmoothbox) {
+      this.opened=0;
+      this.fireEvent.bind(this)('close');
+    },
+    
+    send: function() {
+      if ($type(this.sendInfos)) {
+        var data = {
+          template:   'LSmail',
+          action:     'send',
+          infos:      this.sendInfos
+        };
+        LSdebug(data);
+        data.imgload=varLSdefault.loadingImgDisplay(this.startElement,'inside');
+        new Request({url: 'index_ajax.php', data: data, onSuccess: this.onSendComplete.bind(this)}).send();
+      }
+    },
+    
+    onSendComplete: function(responseText, responseXML) {
+      var data = JSON.decode(responseText);
+      if ( varLSdefault.checkAjaxReturn(data) ) {
+        if ($type(data.msgok)) {
+          varLSdefault.displayInfos(data.msgok);
+        }
+      }
+    },
+    
+    addEvent: function(event,fnct) {
+      if ($type(this.listeners[event])) {
+        if ($type(fnct)=="function") {
+          this.listeners[event].include(fnct);
+        }
+      }
+    },
+    
+    fireEvent: function(event) {
+      LSdebug('LSmail :: fireEvent('+event+')');
+      if ($type(this.listeners[event])) {
+        this.listeners[event].each(function(fnct) {
+          try {
+            fnct(this);
+          }
+          catch(e) {
+            LSdebug('LSmail :: '+event+'() -> rater');
+          }
+        },this);
+      }
+    }
+});
index db31fd2..55f1af8 100644 (file)
@@ -96,12 +96,13 @@ var LSrelation = new Class({
     onLSrelationModifyBtnClickComplete: function(responseText, responseXML) {
       var data = JSON.decode(responseText);
       if ( varLSdefault.checkAjaxReturn(data) ) {
-        varLSsmoothbox.setRefreshElement(this);
+        varLSsmoothbox.asNew();
+        varLSsmoothbox.addEvent('valid',this.onLSsmoothboxValid.bind(this));
         varLSsmoothbox.openURL(data.href,{startElement: $(data.id), width: 615});
       }
     },
     
-    refresh: function() {
+    onLSsmoothboxValid: function() {
       var data = {
         template:   'LSrelation',
         action:     'refreshList',
@@ -110,10 +111,10 @@ var LSrelation = new Class({
       
       LSdebug(data);
       data.imgload=varLSdefault.loadingImgDisplay('LSrelation_title_'+this.refreshRelation,'inside');
-      new Request({url: 'index_ajax.php', data: data, onSuccess: this.onRrefreshComplete.bind(this)}).send();
+      new Request({url: 'index_ajax.php', data: data, onSuccess: this.onLSsmoothboxValidComplete.bind(this)}).send();
     },
     
-    onRrefreshComplete: function(responseText, responseXML) {
+    onLSsmoothboxValidComplete: function(responseText, responseXML) {
       var data = JSON.decode(responseText);
       if ( varLSdefault.checkAjaxReturn(data) ) {
         $('LSrelation_ul_'+this.refreshRelation).set('html',data.html);
index 720c3c6..9a8ad32 100644 (file)
@@ -1,5 +1,32 @@
 var LSsmoothbox = new Class({
     initialize: function(options) {
+      
+      this.build();
+      
+      // Events
+      $$('a.LSsmoothbox').each(function(el) {
+        el.addEvent('click',this.clickA.bindWithEvent(this,el));
+      },this);
+      
+      $$('img.LSsmoothbox').each(function(el) {
+        el.addEvent('click',this.clickImg.bindWithEvent(this,el));
+        el.setStyle('cursor','pointer');
+      },this);
+      
+      // Fx
+      this.fx = {
+        over:      new Fx.Tween(this.over, {property: 'opacity', duration: 300}),
+        winOpen:   new Fx.Morph(this.win, {duration: 500, transition: Fx.Transitions.Sine.easeOut, onStart: this.hideContent.bind(this), onComplete: this.displayContent.bind(this)}),
+        winClose:  new Fx.Morph(this.win, {duration: 500, transition: Fx.Transitions.Sine.easeOut, onStart: this.hideContent.bind(this), onComplete: this.resetWin.bind(this)})
+      };
+      
+      this.asNew(options);
+      
+      window.addEvent('resize', this.position.bind(this));
+      window.addEvent('scroll', this.positionWhenScrolling.bind(this));
+    },
+    
+    build: function() {
       this.over = new Element('div');
       this.over.setProperty('id','over-LSsmoothbox');
       this.over.setStyles({
@@ -23,8 +50,6 @@ var LSsmoothbox = new Class({
       
       this.frame.injectInside(this.win);
       
-      this._closeConfirm = true;
-      
       this.closeBtn = new Element('span');
       this.closeBtn.setProperty('id','closeBtn-LSsmoothbox');
       this.closeBtn.injectInside(this.win);
@@ -35,26 +60,24 @@ var LSsmoothbox = new Class({
       this.validBtn.setProperty('id','validBtn-LSsmoothbox');
       this.validBtn.set('html','Valider');
       this.validBtn.injectInside(this.win);
-      this.validBtn.addEvent('click',this.close.bindWithEvent(this,true));
-      
-      $$('a.LSsmoothbox').each(function(el) {
-        el.addEvent('click',this.clickA.bindWithEvent(this,el));
-      },this);
+      this.validBtn.addEvent('click',this.valid.bindWithEvent(this,true));
+    },
+    
+    asNew: function(options) {
+      this._options = ($type(options))?option:{};
       
-      $$('img.LSsmoothbox').each(function(el) {
-        el.addEvent('click',this.clickImg.bindWithEvent(this,el));
-        el.setStyle('cursor','pointer');
-      },this);
-      this.fx = {
-        over:      new Fx.Tween(this.over, {property: 'opacity', duration: 300}),
-        winOpen:   new Fx.Morph(this.win, {duration: 500, transition: Fx.Transitions.Sine.easeOut, onStart: this.hideContent.bind(this), onComplete: this.displayContent.bind(this)}),
-        winClose:  new Fx.Morph(this.win, {duration: 500, transition: Fx.Transitions.Sine.easeOut, onStart: this.hideContent.bind(this), onComplete: this.resetWin.bind(this)})
+      // Listeners
+      this.listeners = {
+        close:    new Array(),
+        valid:    new Array(),
+        cancel:   new Array()
       };
+            
+      this._closeConfirm = true;
+      this._closeConfirmOpened = 0;
       
       this._open=0;
       this._scrolling=0;
-      window.addEvent('resize', this.position.bind(this));
-      window.addEvent('scroll', this.positionWhenScrolling.bind(this));
     },
     
     position: function(){ 
@@ -178,27 +201,34 @@ var LSsmoothbox = new Class({
       this.closeBtn.setStyle('visibility','visible');
     },
     
-    closeConfirm: function(refresh) {
+    closeConfirm: function() {
       if (this._closeConfirm && this._displayValidBtn) {
-        this.confirmBox = new LSconfirmBox({
-          text:         'Etês-vous sur de vouloir fermer cette fênetre et perdre toute les modifications apportées ?',
-          startElement: this.closeBtn,
-          onConfirm:    this.close.bind(this)
-        });
+        if (!this._closeConfirmOpened) {
+          this._closeConfirmOpened = 1;
+          this.confirmBox = new LSconfirmBox({
+            text:         'Etês-vous sur de vouloir fermer cette fênetre et perdre toute les modifications apportées ?',
+            startElement: this.closeBtn,
+            onConfirm:    this.cancel.bind(this),
+            onClose:      (function(){this._closeConfirmOpened=0;}).bind(this)
+          });
+        }
       }
       else {
-        this.close();
+        this.cancel();
       }
     },
     
-    close: function(refresh) {
-      if (typeof(refresh)=='undefined') {
-        refresh=false;
-      }
-      else {
-        refresh=true;
-      }
-      
+    valid: function() {
+      this.close();
+      this.fireEvent('valid');
+    },
+    
+    cancel: function() {
+      this.close();
+      this.fireEvent('cancel');
+    },
+    
+    close: function() {
       if (this._closeConfirm) {
         delete this.confirmBox;
       }
@@ -214,17 +244,13 @@ var LSsmoothbox = new Class({
         opacity:  [1, 0]
       });
       this._open=0;
+      
       [this.validBtn,this.closeBtn,this.frame].each(function(el){
         el.setStyle('display','none');
       },this);
-      if (refresh) {
-        try {
-          this.refreshElement.refresh();
-        }
-        catch (e){
-          console.log('rater');
-        }
-      }
+      
+      this.fireEvent('close');
+      
     },
     
     resetWin: function() {
@@ -300,10 +326,6 @@ var LSsmoothbox = new Class({
       this.img.injectInside(this.frame);
     },
 
-    setRefreshElement: function(el) {
-      this.refreshElement = el;
-    },
-    
     displayValidBtn: function() {
       this._displayValidBtn = true;
     },
@@ -324,6 +346,39 @@ var LSsmoothbox = new Class({
       new Request.HTML(options).send();
       this.openOptions = openOptions;
       this.open();
+    },
+    
+    openHTML: function(html,openOptions) {
+      this.displayValidBtn();
+      this.frame.set('html',html);
+      this.openOptions = openOptions;
+      this.open();
+    },
+    
+    setOption: function(name,value) {
+      this._options[name]=value;
+    },
+    
+    addEvent: function(event,fnct) {
+      if ($type(this.listeners[event])) {
+        if ($type(fnct)=="function") {
+          this.listeners[event].include(fnct);
+        }
+      }
+    },
+    
+    fireEvent: function(event) {
+      LSdebug('LSsmoothbox :: fireEvent('+event+')');
+      if ($type(this.listeners[event])) {
+        this.listeners[event].each(function(fnct) {
+          try {
+            fnct(this);
+          }
+          catch(e) {
+            LSdebug('LSsmoothbox :: '+event+'() -> rater');
+          }
+        },this);
+      }
     }
 });
 window.addEvent(window.ie ? 'load' : 'domready', function() {
index 1642af1..197e6fb 100644 (file)
@@ -338,6 +338,57 @@ if (!isset($_ERRORS)) {
         break;
       }
     break;
+    case 'LSmail':
+      switch($_REQUEST['action']) {
+        case 'display':
+          if ((isset($_REQUEST['object'])) && (isset($_REQUEST['mails'])) && (isset($_REQUEST['msg'])) ) {
+            if (isset($_REQUEST['object']['type']) && isset($_REQUEST['object']['dn'])) {
+              if ($GLOBALS['LSsession']->loadLSobject($_REQUEST['object']['type'])) {
+                $obj = new $_REQUEST['object']['type']();
+                $obj -> loadData($_REQUEST['object']['dn']);
+                $msg = $obj -> getFData($_REQUEST['msg']);
+              }
+              else {
+                $GLOBALS['LSerror'] -> addErrorCode(1004,$_REQUEST['object']['type']);
+              }
+            }
+            else {
+              $msg = $_REQUEST['msg'];
+            }
+            $GLOBALS['Smarty'] -> assign('LSmail_msg',$msg);
+            if (is_array($_REQUEST['mails'])) {
+              $GLOBALS['Smarty'] -> assign('LSmail_mails',$_REQUEST['mails']);
+            }
+            else if(empty($_REQUEST['mails'])) {
+              $GLOBALS['Smarty'] -> assign('LSmail_mails',array($_REQUEST['mails']));
+            }
+            $GLOBALS['Smarty'] -> assign('LSmail_mail_label',_('E-mail'));
+            $GLOBALS['Smarty'] -> assign('LSmail_subject_label',_('Sujet'));
+            $GLOBALS['Smarty'] -> assign('LSmail_msg_label',_('Message'));
+            
+            $data = array(
+              'html' => $GLOBALS['Smarty'] -> fetch('LSmail.tpl')
+            );
+          }
+          else {
+            $GLOBALS['LSerror'] -> addErrorCode(1012);
+          } 
+        break;
+        case 'send':
+          if (isset($_REQUEST['infos'])) {
+            if ($GLOBALS['LSsession'] -> loadLSaddon('mail')) {
+              if(sendMail($_REQUEST['infos']['mail'],$_REQUEST['infos']['subject'],$_REQUEST['infos']['msg'])) {
+                $data = array(
+                  'msgok' => _("Votre message a bien été envoyé.")
+                );
+              }
+            }
+          }
+          else {
+            $GLOBALS['LSerror'] -> addErrorCode(1012);
+          }
+      }
+    break;
   }
 }
 
diff --git a/trunk/templates/LSmail.tpl b/trunk/templates/LSmail.tpl
new file mode 100644 (file)
index 0000000..b2daad2
--- /dev/null
@@ -0,0 +1,20 @@
+<dl class='LSform'>
+  <dt class='LSform'>{$LSmail_mail_label}</dt>
+  <dd class='LSform'>
+    {if $LSmail_mails != ""}
+      <select name='LSmail_mail' id='LSmail_mail'>
+        {html_options values=$LSmail_mails output=$LSmail_mails}
+      </select>
+    {else}
+      <input type='text' name='LSmail_mail' id='LSmail_mail'/>
+    {/if}
+  </dd>
+  <dt class='LSform'>{$LSmail_subject_label}</dt>
+  <dd class='LSform'>
+    <input type='text' name='LSmail_subject' id='LSmail_subject'/>
+  </dd>
+  <dt class='LSform'>{$LSmail_msg_label}</dt>
+  <dd class='LSform'>
+    <textarea name='LSmail_msg' id='LSmail_msg'>{$LSmail_msg}</textarea>
+  </dd>
+</dl>
diff --git a/trunk/templates/css/LSmail.css b/trunk/templates/css/LSmail.css
new file mode 100644 (file)
index 0000000..8b13789
--- /dev/null
@@ -0,0 +1 @@
+
index cb8e9e6..6ee9ee0 100644 (file)
@@ -12,6 +12,8 @@
       <a href='{$LSformElement_image.img}.png' rel='rien ici' title='comment' class='mb'><img src='{$LSformElement_image.img}' class='LSformElement_image LSsmoothbox' id='LSformElement_image_{$LSformElement_image.id}' /></a>
     </div>
     {/if}
+    <input type='hidden' name='LSform_objecttype' id='LSform_objecttype'  value='{$LSform_object.type}'/>
+    <input type='hidden' name='LSform_objectdn' id='LSform_objectdn'  value='{$LSform_object.dn}'/>
     <dl class='LSform'>
       {foreach from=$LSform_fields item=field}
       <dt class='LSform'>{$field.label}</dt>