/[openfoncier]/branches/3.14.0-b13/obj/utils.class.php
ViewVC logotype

Diff of /branches/3.14.0-b13/obj/utils.class.php

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

revision 515 by mlimic, Wed Oct 17 16:22:13 2012 UTC revision 701 by nhaye, Thu Nov 15 14:00:20 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      /**      // {{{
      * Constructeur  
      *  
      * @param  
      * @param  
      * @param  
      * @param  
      * @param  
      */  
     function __construct($flag = NULL, $right = NULL, $title = NULL, $icon = NULL, $help = NULL) {  
   
         //  
         $this->timestart = microtime(true);  
   
         // Logger  
         $this->addToLog("__construct() : 0.000 sec", VERBOSE_MODE);  
   
         // Logger  
         $this->addToLog("__construct()", EXTRA_VERBOSE_MODE);  
   
         // Instanciation de la classe message  
         $this->m = new message();  
   
         //  
         $this->setParamsFromFiles();  
         $this->checkParams();  
   
         //  
         $this->setDefaultValues();  
   
         // Transformation des cinq éléments paramètres en attribut de l'objet  
         $this->setFlag($flag);  
         $this->setTitle($title);  
         $this->setRight($right);  
         $this->setHelp($help);  
         $this->setIcon($icon);  
   
         // Vérification de l'authentification de l'utilisateur et stockage du  
         // résultat en attribut de l'objet  
         $this->authenticated = $this->isAuthenticated();  
   
         // Déconnexion de l'utilisateur  
         if ($this->flag == "logout") {  
             $this->logout();  
         }  
41    
42          // Connexion de l'utilisateur      // Ajout de variables de session contenant la division pour permettre une
43          if ($this->flag == "login") {      // utilisation plus efficace dans les requetes
44              $this->login();      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          // Demande de redéfinition du mot de passe      }    
         if ($this->flag == "password_reset") {  
             if ($this->authenticated) {  
                 $this->redirectAuthenticatedUsers();  
             }  
         }  
65    
66          //      // Affichage des actions supplémentaires
67          if ($this->authenticated) {      function displayActionExtras() {
68              // Connexion à la base de données si l'utilisateur est authentifié          // Affichage de la division si l'utilisateur en possède une
69              $this->connectDatabase();          if ($_SESSION["division"] != 0) {
70              // on verifie que l'utilisateur connecté est toujours valide              echo "\t\t\t<li class=\"action-division\">";
71              if (!defined('REST_REQUEST')) {              echo "(".$_SESSION['division_code'].")";
72                  $this->checkIfUserIsAlwaysValid();              echo "</li>\n";
             }  
73          }          }
   
         //  
         if (!in_array($this->flag, $this->special_flags)) {  
   
             //  
             $this->getAllRights();  
   
             //  
             $this->getCollectivite();  
   
             //  
             $this->isAuthorized();  
   
         }  
   
         //  
         $this->setMoreParams();  
   
         // Affichage HTML  
         $this->display();  
   
74      }      }
75            
76        // }}}
77    
78    
79        var $om_utilisateur = array();
80        var $user_is_instr = false;
81        var $user_is_service_ext = false;
82            
83            /**
84          /**       * Surcharge du constructeur de la classe
85         */
86        function __construct($flag = NULL, $right = NULL, $title = NULL, $icon = NULL, $help = NULL) {
87            parent::__construct($flag, $right, $title, $icon, $help);
88            $this->getUserInfos();
89        }
90        /**
91       * Desctructeur de la classe, cette methode (appelee automatiquement)       * Desctructeur de la classe, cette methode (appelee automatiquement)
92       * permet d'afficher le footer de la page, le footer HTML, et de       * permet d'afficher le footer de la page, le footer HTML, et de
93       * deconnecter la base de donnees       * deconnecter la base de donnees
# Line 163  class utils extends application { Line 121  class utils extends application {
121    
122    
123    
     /**  
      * Cette methode permet de charger les differents fichiers de configs dans  
      * des attributs de la classe  
      *  
      * @return void  
      */  
     function setParamsFromFiles() {  
   
         //  
         if (file_exists("../dyn/config.inc.php")) {  
             include_once("../dyn/config.inc.php");  
         }  
         if (isset($config)) {  
             $this->config = $config;  
         }  
   
         //  
         if (file_exists("../dyn/database.inc.php")) {  
             include("../dyn/database.inc.php");  
         }  
   
         if (isset($conn)) {  
             $this->conn = $conn;  
             //  
             foreach($this->conn as $key => $conn) {  
                 $this->database[$key] = array(  
                     'title' => $conn[0],  
                     'phptype' => $conn[1],  
                     'dbsyntax' => $conn[2],  
                     'username' => $conn[3],  
                     'password' => $conn[4],  
                     'protocol' => $conn[5],  
                     'hostspec' => $conn[6],  
                     'port' => $conn[7],  
                     'socket' => $conn[8],  
                     'database' => $conn[9],  
                     'formatdate' => $conn[10],  
                     'schema' => $conn[11],  
                     'prefixe' => (isset($conn[12]) ? $conn[12]: ""),  
                     'directory' => (isset($conn[13]) ? $conn[13]: ""),  
                     'mail' => (isset($conn[14]) ? $conn[14]: ""),  
                 );  
             }  
         }  
   
         //  
         if (file_exists("../dyn/directory.inc.php")) {  
             include_once("../dyn/directory.inc.php");  
         }  
         if (isset($directory)) {  
             $this->directory = $directory;  
         }  
   
         //  
         if (file_exists("../dyn/mail.inc.php")) {  
             include_once("../dyn/mail.inc.php");  
         }  
         if (isset($mail)) {  
             $this->mail = $mail;  
         }  
   
         //  
         if (file_exists("../dyn/menu.inc.php")) {  
             include_once("../dyn/menu.inc.php");  
         }  
         if (isset($menu)) {  
             $this->menu = $menu;  
         }  
   
         //  
         if (file_exists("../dyn/actions.inc.php")) {  
             include_once("../dyn/actions.inc.php");  
         }  
         if (isset($actions)) {  
             $this->actions = $actions;  
         }  
   
         //  
         if (file_exists("../dyn/shortlinks.inc.php")) {  
             include_once("../dyn/shortlinks.inc.php");  
         }  
         if (isset($shortlinks)) {  
             $this->shortlinks = $shortlinks;  
         }  
   
         //  
         if (file_exists("../dyn/footer.inc.php")) {  
             include_once("../dyn/footer.inc.php");  
         }  
         if (isset($footer)) {  
             $this->footer = $footer;  
         }  
   
         //  
         if (file_exists("../dyn/version.inc.php")) {  
             include_once("../dyn/version.inc.php");  
         }  
         if (isset($version)) {  
             $this->version = $version;  
         }  
   
     }  
124    
       
125      /**      /**
126       * 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 à
127       * accéder à un élément et permet d'agir en conséquence       * accéder à un élément et permet d'agir en conséquence
# Line 320  class utils extends application { Line 175  class utils extends application {
175          // On recupere la liste des cles du tableau associatif de configuration          // On recupere la liste des cles du tableau associatif de configuration
176          // de la connexion aux bases de donnees          // de la connexion aux bases de donnees
177          $database_keys = array_keys($this->database);          $database_keys = array_keys($this->database);
         //print '   database keys:';  
         //print_r($database_keys);  
178          // Si il y a plusieurs cles          // Si il y a plusieurs cles
179          if (count($database_keys) != 0) {          if (count($database_keys) != 0) {
180              // On configure la premiere par defaut              // On configure la premiere par defaut
# Line 359  class utils extends application { Line 212  class utils extends application {
212          }          }
213    
214          // On renvoi le tableau de parametres pour la connexion a la base          // On renvoi le tableau de parametres pour la connexion a la base
         //print '   $coll:'.$coll.'   ';  
         //print '   database:';  
         //print_r($this->database[$coll]);  
215          $this->database_config = $this->database[$coll];          $this->database_config = $this->database[$coll];
216      }      }
217    
# Line 400  class utils extends application { Line 250  class utils extends application {
250                  $this->display();                  $this->display();
251              }              }
252              // On arrete le script              // On arrete le script
             //print 'and we die';  
253              die();              die();
254          } else {          } else {
255              // On affecte la resource a l'attribut de la classe du meme nom              // On affecte la resource a l'attribut de la classe du meme nom
# Line 498  class utils extends application { Line 347  class utils extends application {
347          }          }
348      }      }
349            
350        /**
351         * Envoie un mail avec piece jointe
352         *
353         * @param string $title Titre du mail
354         * @param string $message Corps du mail
355         * @param string $recipient Destinataire du mail
356         * @param array $file Destinataire du mail
357         * @access public
358         * @return bool True si le mail est correctement envoye, false sinon.
359         */
360        public function sendMail($title, $message, $recipient, $file = array()) {
361            
362            @include_once "../php/phpmailer/class.phpmailer.php";
363            
364            if (!class_exists("PHPMailer")) {
365                $this->addToLog("sendMail(): !class_exists(\"PHPMailer\")", DEBUG_MODE);
366                return false;
367            }
368    
369            //
370            $this->setMailConfig();
371            
372            //
373            if ($this->mail_config == false) {
374                $this->addToLog("sendMail(): aucune configuration mail", DEBUG_MODE);
375                return false;
376            }
377            
378            //
379            $mail = new PHPMailer(true);
380            
381            //
382            $mail->IsSMTP();
383    
384            $mail->SMTPAuth = true; // enable SMTP authentication
385            $mail->SMTPSecure = "tls";
386            $mail->Username = $this->mail_config["mail_username"];
387            $mail->Password = $this->mail_config["mail_pass"];
388            if ($this->mail_config["mail_username"] == '') {
389                $mail->SMTPAuth = false;
390            } else {
391                $mail->SMTPAuth = true;
392            }
393            $mail->Port = $this->mail_config["mail_port"];
394            $mail->Host = $this->mail_config["mail_host"];
395            $mail->AddReplyTo($this->mail_config["mail_from"], $this->mail_config["mail_from_name"]);
396            $mail->From = $this->mail_config["mail_from"];
397            $mail->FromName = $this->mail_config["mail_from_name"];
398            foreach (explode(",",$recipient) as $adresse) {
399                if (!$this->checkValidEmailAddress($adresse)) {
400                    $this->addToLog("sendMail(): courriel incorrect ".$adresse, DEBUG_MODE);
401                    return false;
402                } else
403                    $mail->AddAddress(trim($adresse));
404            }
405            $mail->IsHTML(true);
406            
407            // Corps du message
408            $mail_body ="<html>";
409            $mail_body .= "<head><title>".$title."</title></head>";
410            $mail_body .= "<body>".$message."</body>";
411            $mail_body .= "</html>";
412            
413            $mail->Subject  = $title;
414            $mail->MsgHTML($mail_body);
415            foreach($file as $oneFile) {
416                
417                if($oneFile['stream']){
418                    $mail->AddStringAttachment($oneFile['content'], $oneFile['title'], $oneFile['encoding'] = 'base64',$oneFile['type'] = 'application/octet-stream');
419                } else{
420                    $mail->AddAttachment($oneFile['url']);
421                }
422            }
423            // Envoie de l'email
424            if ($mail->Send()) {
425                return true;
426            } else {
427                $this->addToLog("sendMail(): ".$mail->ErrorInfo, DEBUG_MODE);
428                return false;
429            }
430        }
431    
432        /**
433         *
434         */
435        function isAccredited($obj = NULL, $operator = "AND") {
436            // Lorsque l'utilisateur a le login 'admin' alors il est authorisé à
437            // accéder à toutes les fonctions du logiciel
438            // XXX à modifier pour changer ça vers un profil et non un login utilisateur
439            if ($_SESSION["login"] == "admin") {
440                return true;
441            }
442            // Fonctionnement standard
443            return parent::isAccredited($obj, $operator);
444        }
445    
446        /**
447         * Méthode de création de répertoire dans le dossier /trs correspondant
448         * à l'id du tableau de configuration de la connexion à la base de donnée
449         * (dyn/database.inc.php)
450         **/
451        function createFolder($folder) {
452            if (!mkdir($this->getPathFolderTrs().$folder)) {
453                // message
454                $message_class = "error";
455                $message = _("Echec lors de la creation du repertoires.");
456                $this->addToMessage ($message_class, $message);
457            }
458        }
459        
460        /*
461         * Methode permettant de lister tous les fichiers d'un dossier
462         */
463        function getFolderFileList($id_folder) {
464    
465            $file_list = array();
466            if(is_dir($this->getPathFolderTrs().$id_folder)) {
467                if($dossier = opendir($this->getPathFolderTrs().$id_folder)) {
468                    
469                    while(false !== ($fichier = readdir($dossier))) {
470                    
471                        if($fichier != '.' && $fichier != '..' && !is_dir($fichier)) {
472                            $file_list[]=array( $fichier,
473                                filemtime($this->getPathFolderTrs().$id_folder."/".$fichier));
474                        } // On ferme le if (qui permet de ne pas afficher index.php, etc.)
475                    
476                    } // On termine la boucle
477            
478                    closedir($dossier);
479        
480                } else {
481                    $this->displayMessage("error", _("Les documents du repertoire ne sont pas accessible."));
482                }
483            } else {
484                $this->displayMessage("error", _("Ce repertoire n'a pas de document."));
485            }
486            return $file_list;
487        }
488    
489        /*
490         * Store the data recived in the request into a file on the
491         * local filesystem.
492         * @todo This function will need to be changed for the save to
493         * be on GED
494         * @param mixed $data The data received with the request
495         * @param string $id The consultation ID
496         * @return string OK on success, KO otherwise
497         */
498            
499        function storeDecisionFile(&$fichier_base64, $basename, $dossier, $prefix = '') {
500            
501            if (empty($fichier_base64)) {
502                $this -> addToMessage("error", _("Le fichier est vide"));
503                return false;
504            }
505            $dir = $this->getPathFolderTrs().$dossier;
506            
507            // if a file already exists by that name and it
508            // is not a directory, back out
509            /*if (file_exists($dir) AND is_dir($dir)) {
510                $this -> addToMessage("error", _("Le repertoire n'existe pas, le fichier ne peut pas etre enregistre."));
511                return false;
512            }*/
513            // if a dirextory by that name exists, make sure it does
514            // not already contain an avis de consultation, MAYBE WE DON'T NEED THIS
515            if (file_exists($dir) AND is_dir($dir)) {
516                $dir_contents = trim(shell_exec('ls '.$dir));
517                if (strpos($dir_contents, ' ') != false) {
518                    $dir_contents = explode(' ', $dir_contents);
519                } else {
520                    $dir_contents = array($dir_contents);
521                }
522                foreach ($dir_contents as $basefname) { // very useful for consultation
523                    if (strpos($basefname, $prefix)!==false) {
524                        return _("Un retour d'avis existe deja.");
525                        
526                    }
527                }
528            } else {
529                $this->createFolder($dossier);
530            }        
531            
532            // store the file contents into the file named:
533            //      consultation_<ID>_<file_name_received>
534            $file_len = strlen($fichier_base64);
535    
536            $filename = $dir."/".$prefix.$basename;
537    
538            $file = fopen($filename, 'w');
539            if (!$file) {
540                return _("Echec a la creation du fichier.");
541            }
542            // check that the number of bytes written is equal to the length
543            // of the data received
544            $num_written = fwrite($file, $fichier_base64, $file_len);
545            
546            if (!$num_written) {
547                // remove the file
548                // the return value from shell can't be used for checking since
549                // one can not know if the NULL returned is because there was no
550                // output or because there was an error
551                $ret = shell_exec("rm -f $filename 2>&1");
552                //if ($ret == NULL) { // an error occured while deleting the file
553                //}
554                return _("La sauvegarde du fichier a echoue");
555            }
556            fclose($file);
557            return true;
558        }
559        
560        /**
561         *
562         */
563        function notExistsError ($explanation = NULL) {
564            // message
565            $message_class = "error";
566            $message = _("Cette page n'existe pas.");
567            $this->addToMessage ($message_class, $message);
568            //
569            $this->setFlag(NULL);
570            $this->display();
571            
572            //
573            die();
574        }
575        
576        /**
577         * Méthode de récupération des informations de l'utilisateur connecté.
578         */
579        function getUserInfos() {
580            
581            // Si l'utilisateur est loggé $_SESSION existe
582            if(isset($_SESSION['login']) AND !empty($_SESSION['login'])) {
583                
584                // Récupération des infos utilisateur
585                $sqlUser = "SELECT om_utilisateur, nom, email, login, om_collectivite, om_profil ".
586                "FROM om_utilisateur WHERE login = '".$_SESSION['login']."'";
587                $resUser=$this->db->query($sqlUser);
588                $this->addToLog("getUserInfos(): db->query(\"".$sqlUser."\");", VERBOSE_MODE);
589                $this->isDatabaseError($resUser);
590                $this->om_utilisateur=&$resUser->fetchRow(DB_FETCHMODE_ASSOC);
591                
592                // Récupération des infos instructeur
593                $sqlInstr = "SELECT instructeur.instructeur, instructeur.nom, instructeur.telephone, division.code, division.libelle ".
594                "FROM instructeur INNER JOIN division ON division.division=instructeur.division ".
595                "WHERE instructeur.om_utilisateur = ".$this->om_utilisateur['om_utilisateur'];
596                $resInstr=$this->db->query($sqlInstr);
597                $this->addToLog("getUserInfos(): db->query(\"".$sqlInstr."\");", VERBOSE_MODE);
598                $this->isDatabaseError($resInstr);
599                $tempInstr=&$resInstr->fetchRow(DB_FETCHMODE_ASSOC);
600                // Si il y a un resultat c'est un instructeur
601                if(count($tempInstr)>0) {
602                    $this->user_is_instr=true;
603                    $this->om_utilisateur = array_merge($this->om_utilisateur,$tempInstr);
604                }
605                
606                // Récupération des infos de services ext consultés
607                $sqlServExt = "SELECT service.service, service.abrege, service.libelle ".
608                "FROM service ".
609                "INNER JOIN lien_service_om_utilisateur ON lien_service_om_utilisateur.service=service.service ".
610                "WHERE lien_service_om_utilisateur.om_utilisateur = ".$this->om_utilisateur['om_utilisateur'];
611                $resServExt=$this->db->query($sqlServExt);
612                $this->addToLog("getUserInfos(): db->query(\"".$sqlServExt."\");", VERBOSE_MODE);
613                $this->isDatabaseError($resServExt);
614                
615                while ($tempServExt=&$resServExt->fetchRow(DB_FETCHMODE_ASSOC)) {
616                    $this->om_utilisateur['service'][]=$tempServExt;
617                }
618                // Si il y a un resultat c'est un utilisateur de service
619                if(isset($this->om_utilisateur['service'])) {
620                    $this->user_is_service_ext=true;
621                }
622            }
623        }
624        
625        /**
626         * getter user_is_service_ext
627         */
628        function isUserServiceExt() {
629            return $this->user_is_service_ext;
630        }
631        /**
632         * getter user_is_instr
633         */
634        function isUserInstructeur() {
635            return $this->user_is_instr;
636        }
637  }  }
638    
639  ?>  ?>

Legend:
Removed from v.515  
changed lines
  Added in v.701

[email protected]
ViewVC Help
Powered by ViewVC 1.1.26