/[openfoncier]/trunk/obj/utils.class.php
ViewVC logotype

Diff of /trunk/obj/utils.class.php

Parent Directory Parent Directory | Revision Log Revision Log | View Patch Patch

revision 580 by nhaye, Fri Nov 2 14:24:05 2012 UTC revision 816 by fmichon, Fri Nov 23 11:33:05 2012 UTC
# Line 37  require_once PATH_OPENMAIRIE."om_applica Line 37  require_once PATH_OPENMAIRIE."om_applica
37   */   */
38  class utils extends application {  class utils extends application {
39    
40                // {{{
     /**  
      * Desctructeur de la classe, cette methode (appelee automatiquement)  
      * permet d'afficher le footer de la page, le footer HTML, et de  
      * deconnecter la base de donnees  
      *  
      * @return void  
      */  
     function __destruct() {  
41    
42          // Footer      // Ajout de variables de session contenant la division pour permettre une
43          if (!defined('REST_REQUEST')) {      // utilisation plus efficace dans les requetes
44              $this->displayFooter();      function triggerAfterLogin($utilisateur = NULL) {
45            //
46            $sql = "SELECT instructeur.division, division.code
47            FROM ".DB_PREFIXE."instructeur
48            LEFT JOIN ".DB_PREFIXE."division
49            ON instructeur.division = division.division
50            WHERE instructeur.om_utilisateur='".$utilisateur["om_utilisateur"]."'";
51            $res = $this->db->query($sql);
52            $this->addToLog("triggerAfterLogin(): db->query(\"".$sql."\");", VERBOSE_MODE);
53            $this->isDatabaseError($res);
54            $row = $res->fetchrow(DB_FETCHMODE_ASSOC);
55            //
56            if (isset($row["division"]) && $row["division"] != NULL) {
57                $_SESSION["division"] = $row["division"];
58                $_SESSION["division_code"] = $row["code"];
59            } else {
60                $_SESSION["division"] = "0";
61                $_SESSION["division_code"] = "";
62          }          }
63    
64          // Deconnexion SGBD      }    
         $this->disconnectDatabase();  
   
         // Logger  
         $this->addToLog("__destruct()", EXTRA_VERBOSE_MODE);  
65    
66          // Logger      // Affichage des actions supplémentaires
67          $this->addToLog("__destruct() : ".$this->elapsedtime()." sec", VERBOSE_MODE);      function displayActionExtras() {
68            // Affichage de la division si l'utilisateur en possède une
69          // Affichage des logs          if ($_SESSION["division"] != 0) {
70          logger::instance()->displayLog();              echo "\t\t\t<li class=\"action-division\">";
71                echo "(".$_SESSION['division_code'].")";
72          // Footer HTML              echo "</li>\n";
         if (!defined('REST_REQUEST')) {  
             $this->displayHTMLFooter();  
73          }          }
74      }      }
75        
76        // }}}
77    
78    
79        var $om_utilisateur = array();
80        var $user_is_instr = NULL;
81        var $user_is_service_ext = NULL;
82    
83      /**      /**
84       * Cette méthode permet de vérifier si l'utilisateur est autorisé ou non à       * Cette méthode permet de vérifier si l'utilisateur est autorisé ou non à
# Line 287  class utils extends application { Line 294  class utils extends application {
294          }          }
295      }      }
296    
       
     /**  
      *  
      */  
     function addToLog($message, $type = DEBUG_MODE) {  
         //  
         if (!defined('REST_REQUEST')) {  
             logger::instance()->log("class ".get_class($this)." - ".$message, $type);  
         }  
     }  
       
     /**  
      * Envoie un mail avec piece jointe  
      *  
      * @param string $title Titre du mail  
      * @param string $message Corps du mail  
      * @param string $recipient Destinataire du mail  
      * @param array $file Destinataire du mail  
      * @access public  
      * @return bool True si le mail est correctement envoye, false sinon.  
      */  
     public function sendMail($title, $message, $recipient, $file = array()) {  
           
         @include_once "../php/phpmailer/class.phpmailer.php";  
           
         if (!class_exists("PHPMailer")) {  
             $this->addToLog("sendMail(): !class_exists(\"PHPMailer\")", DEBUG_MODE);  
             return false;  
         }  
   
         //  
         $this->setMailConfig();  
           
         //  
         if ($this->mail_config == false) {  
             $this->addToLog("sendMail(): aucune configuration mail", DEBUG_MODE);  
             return false;  
         }  
           
         //  
         $mail = new PHPMailer(true);  
           
         //  
         $mail->IsSMTP();  
   
         $mail->SMTPAuth = true; // enable SMTP authentication  
         $mail->SMTPSecure = "tls";  
         $mail->Username = $this->mail_config["mail_username"];  
         $mail->Password = $this->mail_config["mail_pass"];  
         if ($this->mail_config["mail_username"] == '') {  
             $mail->SMTPAuth = false;  
         } else {  
             $mail->SMTPAuth = true;  
         }  
         $mail->Port = $this->mail_config["mail_port"];  
         $mail->Host = $this->mail_config["mail_host"];  
         $mail->AddReplyTo($this->mail_config["mail_from"], $this->mail_config["mail_from_name"]);  
         $mail->From = $this->mail_config["mail_from"];  
         $mail->FromName = $this->mail_config["mail_from_name"];  
         foreach (explode(",",$recipient) as $adresse) {  
             if (!$this->checkValidEmailAddress($adresse)) {  
                 $this->addToLog("sendMail(): courriel incorrect ".$adresse, DEBUG_MODE);  
                 return false;  
             } else  
                 $mail->AddAddress(trim($adresse));  
         }  
         $mail->IsHTML(true);  
           
         // Corps du message  
         $mail_body ="<html>";  
         $mail_body .= "<head><title>".$title."</title></head>";  
         $mail_body .= "<body>".$message."</body>";  
         $mail_body .= "</html>";  
           
         $mail->Subject  = $title;  
         $mail->MsgHTML($mail_body);  
         foreach($file as $oneFile) {  
               
             if($oneFile['stream']){  
                 $mail->AddStringAttachment($oneFile['content'], $oneFile['title'], $oneFile['encoding'] = 'base64',$oneFile['type'] = 'application/octet-stream');  
             } else{  
                 $mail->AddAttachment($oneFile['url']);  
             }  
         }  
         // Envoie de l'email  
         if ($mail->Send()) {  
             return true;  
         } else {  
             $this->addToLog("sendMail(): ".$mail->ErrorInfo, DEBUG_MODE);  
             return false;  
         }  
     }  
   
297      /**      /**
298       *       *
299       */       */
# Line 393  class utils extends application { Line 307  class utils extends application {
307          // Fonctionnement standard          // Fonctionnement standard
308          return parent::isAccredited($obj, $operator);          return parent::isAccredited($obj, $operator);
309      }      }
310    
311        /**
312         * Méthode de création de répertoire dans le dossier /trs correspondant
313         * à l'id du tableau de configuration de la connexion à la base de donnée
314         * (dyn/database.inc.php)
315         **/
316        function createFolder($folder) {
317            if (!mkdir($this->getPathFolderTrs().$folder)) {
318                // message
319                $message_class = "error";
320                $message = _("Echec lors de la creation du repertoires.");
321                $this->addToMessage ($message_class, $message);
322            }
323        }
324            
325      /*      /*
326       * Methode permettant de lister tous les fichiers d'un dossier       * Methode permettant de lister tous les fichiers d'un dossier
327       */       */
328      function get_folder_file_list($id_folder) {      function getFolderFileList($id_folder) {
329    
330          $file_list = array();          $file_list = array();
331          if(is_dir('../trs/'.$id_folder)) {          if(is_dir($this->getPathFolderTrs().$id_folder)) {
332              if($dossier = opendir('../trs/'.$id_folder)) {              if($dossier = opendir($this->getPathFolderTrs().$id_folder)) {
333                                    
334                  while(false !== ($fichier = readdir($dossier))) {                  while(false !== ($fichier = readdir($dossier))) {
335                                    
336                      if($fichier != '.' && $fichier != '..' && !is_dir($fichier)) {                      if($fichier != '.' && $fichier != '..' && !is_dir($fichier)) {
337                                                $file_list[]=array( $fichier,
338                          $file_list[]=$fichier;                              filemtime($this->getPathFolderTrs().$id_folder."/".$fichier));
339                      } // On ferme le if (qui permet de ne pas afficher index.php, etc.)                      } // On ferme le if (qui permet de ne pas afficher index.php, etc.)
340                                    
341                  } // On termine la boucle                  } // On termine la boucle
# Line 415  class utils extends application { Line 343  class utils extends application {
343                  closedir($dossier);                  closedir($dossier);
344            
345              } else {              } else {
346                  $this->displayMessage("error", _("Les documents du dossier ne sont pas accessible."));                  $this->displayMessage("error", _("Les documents du repertoire ne sont pas accessible."));
347              }              }
348          } else {          } else {
349              $this->displayMessage("error", _("Ce dossier n'a pas de document."));              $this->displayMessage("error", _("Ce repertoire n'a pas de document."));
350          }          }
351          return $file_list;          return $file_list;
352      }      }
353    
354        /*
355         * Store the data recived in the request into a file on the
356         * local filesystem.
357         * @todo This function will need to be changed for the save to
358         * be on GED
359         * @param mixed $data The data received with the request
360         * @param string $id The consultation ID
361         * @return string OK on success, KO otherwise
362         */
363            
364        function storeDecisionFile(&$fichier_base64, $basename, $dossier, $prefix = '') {
365            
366            if (empty($fichier_base64)) {
367                $this -> addToMessage("error", _("Le fichier est vide"));
368                return false;
369            }
370            $dir = $this->getPathFolderTrs().$dossier;
371            
372            // if a file already exists by that name and it
373            // is not a directory, back out
374            /*if (file_exists($dir) AND is_dir($dir)) {
375                $this -> addToMessage("error", _("Le repertoire n'existe pas, le fichier ne peut pas etre enregistre."));
376                return false;
377            }*/
378            // if a dirextory by that name exists, make sure it does
379            // not already contain an avis de consultation, MAYBE WE DON'T NEED THIS
380            if (file_exists($dir) AND is_dir($dir)) {
381                $dir_contents = trim(shell_exec('ls '.$dir));
382                if (strpos($dir_contents, ' ') != false) {
383                    $dir_contents = explode(' ', $dir_contents);
384                } else {
385                    $dir_contents = array($dir_contents);
386                }
387                foreach ($dir_contents as $basefname) { // very useful for consultation
388                    if (strpos($basefname, $prefix)!==false) {
389                        return _("Un retour d'avis existe deja.");
390                        
391                    }
392                }
393            } else {
394                $this->createFolder($dossier);
395            }        
396            
397            // store the file contents into the file named:
398            //      consultation_<ID>_<file_name_received>
399            $file_len = strlen($fichier_base64);
400    
401            $filename = $dir."/".$prefix.$basename;
402    
403            $file = fopen($filename, 'w');
404            if (!$file) {
405                return _("Echec a la creation du fichier.");
406            }
407            // check that the number of bytes written is equal to the length
408            // of the data received
409            $num_written = fwrite($file, $fichier_base64, $file_len);
410            
411            if (!$num_written) {
412                // remove the file
413                // the return value from shell can't be used for checking since
414                // one can not know if the NULL returned is because there was no
415                // output or because there was an error
416                $ret = shell_exec("rm -f $filename 2>&1");
417                //if ($ret == NULL) { // an error occured while deleting the file
418                //}
419                return _("La sauvegarde du fichier a echoue");
420            }
421            fclose($file);
422            return true;
423        }
424        
425        /**
426         *
427         */
428        function notExistsError ($explanation = NULL) {
429            // message
430            $message_class = "error";
431            $message = _("Cette page n'existe pas.");
432            $this->addToMessage ($message_class, $message);
433            //
434            $this->setFlag(NULL);
435            $this->display();
436            
437            //
438            die();
439        }
440        
441        /**
442         * Méthode de récupération des informations de l'utilisateur connecté.
443         */
444        function getUserInfos() {
445            
446            // Si l'utilisateur est loggé $_SESSION existe
447            if(isset($_SESSION['login']) AND !empty($_SESSION['login'])) {
448                
449                // Récupération des infos utilisateur
450                $sqlUser = "SELECT om_utilisateur, nom, email, login, om_collectivite, om_profil ".
451                "FROM om_utilisateur WHERE login = '".$_SESSION['login']."'";
452                $resUser=$this->db->query($sqlUser);
453                $this->addToLog("getUserInfos(): db->query(\"".$sqlUser."\");", VERBOSE_MODE);
454                $this->isDatabaseError($resUser);
455                $this->om_utilisateur=&$resUser->fetchRow(DB_FETCHMODE_ASSOC);
456                
457                // Récupération des infos instructeur
458                $sqlInstr = "SELECT instructeur.instructeur, instructeur.nom, instructeur.telephone, division.code, division.libelle ".
459                "FROM instructeur INNER JOIN division ON division.division=instructeur.division ".
460                "WHERE instructeur.om_utilisateur = ".$this->om_utilisateur['om_utilisateur'];
461                $resInstr=$this->db->query($sqlInstr);
462                $this->addToLog("getUserInfos(): db->query(\"".$sqlInstr."\");", VERBOSE_MODE);
463                $this->isDatabaseError($resInstr);
464                $tempInstr=&$resInstr->fetchRow(DB_FETCHMODE_ASSOC);
465                // Si il y a un resultat c'est un instructeur
466                if(count($tempInstr)>0) {
467                    $this->user_is_instr=true;
468                    $this->om_utilisateur = array_merge($this->om_utilisateur,$tempInstr);
469                } else {
470                    $this->user_is_instr=false;
471                }
472                
473                // Récupération des infos de services ext consultés
474                $sqlServExt = "SELECT service.service, service.abrege, service.libelle ".
475                "FROM service ".
476                "INNER JOIN lien_service_om_utilisateur ON lien_service_om_utilisateur.service=service.service ".
477                "WHERE lien_service_om_utilisateur.om_utilisateur = ".$this->om_utilisateur['om_utilisateur'];
478                $resServExt=$this->db->query($sqlServExt);
479                $this->addToLog("getUserInfos(): db->query(\"".$sqlServExt."\");", VERBOSE_MODE);
480                $this->isDatabaseError($resServExt);
481                
482                while ($tempServExt=&$resServExt->fetchRow(DB_FETCHMODE_ASSOC)) {
483                    $this->om_utilisateur['service'][]=$tempServExt;
484                }
485                // Si il y a un resultat c'est un utilisateur de service
486                if(isset($this->om_utilisateur['service'])) {
487                    $this->user_is_service_ext=true;
488                } else {
489                    $this->user_is_service_ext=false;
490                }
491            }
492        }
493        
494        /**
495         * getter user_is_service_ext
496         */
497        function isUserServiceExt() {
498            //
499            if (is_null($this->user_is_service_ext)) {
500                //
501                $this->getUserInfos();
502            }
503            //
504            return $this->user_is_service_ext;
505        }
506        /**
507         * getter user_is_instr
508         */
509        function isUserInstructeur() {
510            //
511            if (is_null($this->user_is_instr)) {
512                //
513                $this->getUserInfos();
514            }
515            //
516            return $this->user_is_instr;
517        }
518    
519  }  }
520    
521  ?>  ?>

Legend:
Removed from v.580  
changed lines
  Added in v.816

[email protected]
ViewVC Help
Powered by ViewVC 1.1.26