/[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 678 by nhaye, Tue Nov 13 17:33:34 2012 UTC revision 3238 by nhaye, Fri Jan 9 18:45:09 2015 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      var $om_utilisateur = array();      // Valeurs postées
41      var $user_is_instr = false;      var $submitted_post_value;
42      var $user_is_service_ext = false;  
43            // Valeurs passées à l'url
44      /**      var $submitted_get_value;
45       * Surcharge du constructeur de la classe  
      */  
     function __construct($flag = NULL, $right = NULL, $title = NULL, $icon = NULL, $help = NULL) {  
         parent::__construct($flag, $right, $title, $icon, $help);  
         $this->getUserInfos();  
     }  
46      /**      /**
47       * Desctructeur de la classe, cette methode (appelee automatiquement)       * Cette méthode permet de renvoyer la valeur soumise par post.
      * permet d'afficher le footer de la page, le footer HTML, et de  
      * deconnecter la base de donnees  
48       *       *
49       * @return void       * Si on ne trouve pas de paramètre correspondant alors on retourne chaîne vide
50         *
51         * @return null ou la valeur
52       */       */
53      function __destruct() {      function get_submitted_post_value($param = null) {
54            //
55          // Footer          if ($param == null) {
56          if (!defined('REST_REQUEST')) {              return $this->submitted_post_value;
             $this->displayFooter();  
57          }          }
58            //
59          // Deconnexion SGBD          if (isset($this->submitted_post_value[$param])) {
60          $this->disconnectDatabase();              //
61                return $this->submitted_post_value[$param];
         // Logger  
         $this->addToLog("__destruct()", EXTRA_VERBOSE_MODE);  
   
         // Logger  
         $this->addToLog("__destruct() : ".$this->elapsedtime()." sec", VERBOSE_MODE);  
   
         // Affichage des logs  
         logger::instance()->displayLog();  
   
         // Footer HTML  
         if (!defined('REST_REQUEST')) {  
             $this->displayHTMLFooter();  
62          }          }
63            //
64            return null;
65      }      }
66    
   
   
   
67      /**      /**
68       * Cette méthode permet de vérifier si l'utilisateur est autorisé ou non à       * Cette méthode permet de renvoyer la valeur soumise par get.
      * accéder à un élément et permet d'agir en conséquence  
69       *       *
70       * @param       * Si on ne trouve pas de paramètre correspondant alors on retourne chaîne vide
71       * @return mixed       *
72         * @return null ou la valeur
73       */       */
74      function isAuthorized($obj = NULL, $operator = "AND") {      function get_submitted_get_value($param = null) {
   
75          //          //
76          if ($obj == NULL) {          if ($param == null) {
77              $obj = $this->right;              return $this->submitted_get_value;
78          }          }
79          //          //
80          if ($obj == NULL) {          if (isset($this->submitted_get_value[$param])) {
             return true;  
         }  
   
         // L'utilisateur n'est pas autorisé à accéder à l'élément  
         if (!$this->isAccredited($obj, $operator)) {  
   
81              //              //
82              $message_class = "error";              return $this->submitted_get_value[$param];
             $message = _("Droits insuffisants. Vous n'avez pas suffisament de ".  
                          "droits pour acceder a cette page.");  
             $this->addToMessage($message_class, $message);  
   
             //  
             $this->setFlag(NULL);  
             if (!defined('REST_REQUEST')) {  
                 $this->display();  
             }  
   
             // Arrêt du script  
             die();  
   
83          }          }
84            //
85          // L'utilisateur est autorisé à accéder à l'élément          return null;
         return true;  
   
86      }      }
87    
88    
   
89      /**      /**
90         * Cette methode permet d'affecter des parametres dans un attribut de
91         * l'objet.
92       *       *
93         * @return void
94       */       */
95      function setDatabaseConfig() {      function setMoreParams() {
96            parent::setMoreParams();
97            $this->set_submitted_value();
98        }
99    
100          // On recupere la liste des cles du tableau associatif de configuration      function set_submitted_value() {
101          // de la connexion aux bases de donnees          if(isset($_GET) and !empty($_GET)) {
102          $database_keys = array_keys($this->database);              foreach ($_GET as $key => $value) {
103          // Si il y a plusieurs cles                  $this->submitted_get_value[$key]=$this->clean_break($value);
104          if (count($database_keys) != 0) {              }
             // On configure la premiere par defaut  
             $coll = $database_keys[0];  
         } else { // Si il n'y a aucune cle  
             // Aucune base n'est configuree dans le fichier de configuration  
             // donc on affiche un message d'erreur  
             $class = "error";  
             $message = _("Erreur de configuration. Contactez votre administrateur.");  
             $this->addToMessage($class, $message);  
             // Debug  
             $this->addToLog("setDatabaseConfig(): ERR", DEBUG_MODE);  
             $this->addToLog("ERR: "._("Aucune entree dans le fichier de configuration"), DEBUG_MODE);  
             // On affiche la structure de la page  
             $this->setFlag(NULL);  
             $this->display();  
             // On arrete le traitement en cours  
             die();  
105          }          }
106            if(isset($_POST) and !empty($_POST)) {
107          // Si la variable coll (representant la cle de la base sur laquelle              foreach ($_POST as $key => $value) {
108          // nous travaillons) n'est pas en variable SESSION ou est en variable                  $this->submitted_post_value[$key]=$this->clean_break($value);
109          // SESSION mais n'existe pas dans les cles du tableau associatif de              }
         // configuration de la connexion aux bases de donnees  
         if (!isset($_SESSION['coll']) or  
             (isset($_SESSION['coll']) and  
              !isset($this->database[$_SESSION['coll']]))) {  
             // On configure la premiere par defaut  
             $_SESSION['coll'] = $coll;  
         } else {  
             // On recupere la cle du tableau associatif de configuration de la  
             // connexion aux bases de donnees correspondante a la base de  
             // donnees sur laquelle nous travaillons  
             $coll = $_SESSION['coll'];  
110          }          }
   
         // On renvoi le tableau de parametres pour la connexion a la base  
         $this->database_config = $this->database[$coll];  
111      }      }
112    
113        // {{{
114            
115          /**      /**
116       * Cette méthode permet de se connecter à la base de données       *
      * @return void  
117       */       */
118      function connectDatabase() {      function isAccredited($obj = NULL, $operator = "AND") {
119          // On inclus la classe d'abstraction de base de donnees          // Lorsque l'utilisateur a le login 'admin' alors il est authorisé à
120          require_once PATH_OPENMAIRIE."om_database.class.php";          // accéder à toutes les fonctions du logiciel
121          // On recupere le tableau de parametres pour la connexion a la base          // XXX à modifier pour changer ça vers un profil et non un login utilisateur
122          $this->setDatabaseConfig();          if ($_SESSION["login"] == "admin") {
123          // On fixe les options              return true;
         $options = array(  
             'debug' => 2,  
             'portability' => DB_PORTABILITY_ALL,  
         );  
         // Instanciation de l'objet connexion a la base de donnees  
         $db = database::connect($this->database_config, $options);  
         // Logger  
         $this->addToLog("connectDatabase(): "._("Tentative de connexion au SGBD"), EXTRA_VERBOSE_MODE);  
         // Traitement particulier de l'erreur en cas d'erreur de connexion a la  
         // base de donnees  
         if (database::isError($db, true)) {  
             // Deconnexion de l'utilisateur  
             $this->logout();  
             // On affiche la page de login a l'ecran  
             $this->setFlag("login");  
             // On affiche un message d'erreur convivial pour l'utilisateur  
             $class = "error";  
             $message = _("Erreur de base de donnees. Contactez votre administrateur.");  
             $this->addToMessage($class, $message);  
             // On affiche la page  
             if (!defined('REST_REQUEST')) {  
                 $this->display();  
             }  
             // On arrete le script  
             die();  
         } else {  
             // On affecte la resource a l'attribut de la classe du meme nom  
             $this->db = $db;  
             // Logger  
             $this->addToLog("connectDatabase(): Connexion [".$this->database_config["phptype"]."] '".$this->database_config['database']."' OK", EXTRA_VERBOSE_MODE);  
   
             // Compatibilite anterieure (deprecated)  
             $this->phptype = $this->database_config["phptype"];  
             $this->formatdate = $this->database_config["formatdate"];  
             $this->schema = $this->database_config["schema"];  
   
             // Definition des constantes pour l'acces aux informations de la base  
             // donnees facilement.  
             $temp = "";  
             if ($this->database_config["schema"] != "") {  
                 $temp = $this->database_config["schema"].".";  
             }  
             $temp = $temp.$this->database_config["prefixe"];  
             define("DB_PREFIXE", $temp);  
             define("FORMATDATE", $this->database_config["formatdate"]);  
   
             // Definition des constantes pour l'acces aux informations de la base  
             // donnees facilement.  
             define("OM_DB_FORMATDATE", $this->database_config["formatdate"]);  
             define("OM_DB_PHPTYPE", $this->database_config["phptype"]);  
             define("OM_DB_DATABASE", $this->database_config["database"]);  
             define("OM_DB_SCHEMA", $this->database_config["schema"]);  
             define("OM_DB_TABLE_PREFIX", $this->database_config["prefixe"]);  
124          }          }
125            // Fonctionnement standard
126            return parent::isAccredited($obj, $operator);
127      }      }
128        
129        // }}}
130    
131        // {{{
132    
133        var $om_utilisateur = array();
134        var $user_is_instr = NULL;
135        var $user_is_service = NULL;
136        var $user_is_admin = NULL;
137        var $user_is_service_ext = NULL;
138        var $user_is_qualificateur = NULL;
139        var $user_is_chef = NULL;
140        var $user_is_divisionnaire = NULL;
141        var $user_is_service_int = NULL;
142    
143      /**      /**
144       *       * Méthode de récupération des informations de l'utilisateur connecté.
      *  
145       */       */
146      function isDatabaseError($dbobj = NULL, $return = false) {      function getUserInfos() {
147            
148            // Si l'utilisateur est loggé $_SESSION existe
149            if(isset($_SESSION['login']) AND !empty($_SESSION['login'])) {
150                
151                // Récupération des infos utilisateur
152                $sqlUser = "SELECT om_utilisateur, nom, email, login, om_collectivite, om_profil ".
153                "FROM ".DB_PREFIXE."om_utilisateur WHERE login = '".$_SESSION['login']."'";
154                $resUser=$this->db->query($sqlUser);
155                $this->addToLog("getUserInfos(): db->query(\"".$sqlUser."\");", VERBOSE_MODE);
156                if ( database::isError($resUser)){
157                    die();
158                }
159                $this->om_utilisateur=&$resUser->fetchRow(DB_FETCHMODE_ASSOC);
160    
161          //              // Récupère le profil et test si c'est un
162          if (database::isError($dbobj, $return)) {              $sqlProfil = "SELECT libelle FROM ".DB_PREFIXE."om_profil WHERE om_profil = ".$this->om_utilisateur['om_profil'];
163                $resProfil=$this->db->getOne($sqlProfil);
164                $this->addToLog("getUserInfos(): db->getOne(\"".$sqlProfil."\");", VERBOSE_MODE);
165                if (database::isError($resProfil)){
166                    die();
167                }
168                // Sauvegarde le libelle du profil
169                $this->om_utilisateur["libelle_profil"] = $resProfil;
170    
171              if ($return == true) {              // si c'est un administrateur technique
172                // XXX Mauvaise méthode, il faut utiliser isAccredited
173                if ($resProfil == "ADMINISTRATEUR TECHNIQUE"
174                    || $resProfil == "ADMINISTRATEUR FONCTIONNEL") {
175                    $this->user_is_admin = true;
176                } else {
177                    $this->user_is_admin = false;
178                }
179    
180                  //              //si c'est un service externe
181                  return true;              if ($resProfil == "SERVICE CONSULTÉ") {
182                    $this->user_is_service_ext = true;
183                } else {
184                    $this->user_is_service_ext = false;
185                }
186    
187                //si c'est un service interne
188                if ($resProfil == "SERVICE CONSULTÉ INTERNE") {
189                    $this->user_is_service_int = true;
190                } else {
191                    $this->user_is_service_int = false;
192              }              }
193    
194              //              // si c'est un qualificateur
195              $class = "error";              if ($resProfil == "QUALIFICATEUR") {
196              $message = _("Erreur de base de donnees. Contactez votre administrateur.");                  $this->user_is_qualificateur = true;
197              $this->addToMessage($class, $message);              } else {
198                    $this->user_is_qualificateur = false;
199                }
200    
201              // Logger              // si c'est un chef de service
202              $this->addToLog("isDatabaseError(): ".$dbobj->getDebugInfo(), DEBUG_MODE);              if ($resProfil == "CHEF DE SERVICE") {
203              $this->addToLog("isDatabaseError(): ".$dbobj->getMessage(), DEBUG_MODE);                  $this->user_is_chef = true;
204                } else {
205                    $this->user_is_chef = false;
206                }
207    
208              //              // si c'est un divisionnaire
209              $this->setFlag(NULL);              if ($resProfil == "DIVISIONNAIRE") {
210              if (!defined('REST_REQUEST')) {                  $this->user_is_divisionnaire = true;
211                  $this->display();              } else {
212                  //                  $this->user_is_divisionnaire = false;
213                }
214                
215                // Récupération des infos instructeur
216                $sqlInstr = "SELECT instructeur.instructeur, instructeur.nom, instructeur.telephone,
217                division.division, division.code, division.libelle ".
218                "FROM ".DB_PREFIXE."instructeur INNER JOIN ".DB_PREFIXE."division ON division.division=instructeur.division ".
219                "WHERE instructeur.om_utilisateur = ".$this->om_utilisateur['om_utilisateur'];
220                $resInstr=$this->db->query($sqlInstr);
221                $this->addToLog("getUserInfos(): db->query(\"".$sqlInstr."\");", VERBOSE_MODE);
222                if ( database::isError($resInstr)){
223                  die();                  die();
224              }              }
225                $tempInstr=&$resInstr->fetchRow(DB_FETCHMODE_ASSOC);
226                // Si il y a un resultat c'est un instructeur
227                if(count($tempInstr)>0) {
228                    $this->user_is_instr=true;
229                    $this->om_utilisateur = array_merge($this->om_utilisateur,$tempInstr);
230                } else {
231                    $this->user_is_instr=false;
232                }
233                
234                // Récupération des infos de services consultés
235                $sqlServ = "SELECT service.service, service.abrege, service.libelle ".
236                "FROM ".DB_PREFIXE."service ".
237                "INNER JOIN ".DB_PREFIXE."lien_service_om_utilisateur ON lien_service_om_utilisateur.service=service.service ".
238                "WHERE lien_service_om_utilisateur.om_utilisateur = ".$this->om_utilisateur['om_utilisateur'];
239                $resServ=$this->db->query($sqlServ);
240                $this->addToLog("getUserInfos(): db->query(\"".$sqlServ."\");", VERBOSE_MODE);
241                if ( database::isError($resServ)){
242                    die();
243                }
244                
245                while ($tempServ=&$resServ->fetchRow(DB_FETCHMODE_ASSOC)) {
246                    $this->om_utilisateur['service'][]=$tempServ;
247                }
248                // Si il y a un resultat c'est un utilisateur de service
249                if(isset($this->om_utilisateur['service'])) {
250                    $this->user_is_service=true;
251                } else {
252                    $this->user_is_service=false;
253                }
254            }
255        }
256    
257        /**
258         * getter user_is_service
259         */
260        function isUserService() {
261            //
262            if (is_null($this->user_is_service)) {
263                //
264                $this->getUserInfos();
265          }          }
266            //
267            return $this->user_is_service;
268        }
269    
270        /**
271         * getter user_is_instr
272         */
273        function isUserInstructeur() {
274          //          //
275          return false;          if (is_null($this->user_is_instr)) {
276                //
277                $this->getUserInfos();
278            }
279            //
280            return $this->user_is_instr;
281        }
282    
283        function isUserAdministrateur() {
284            //
285            if (is_null($this->user_is_admin)) {
286                //
287                $this->getUserInfos();
288            }
289            //
290            return $this->user_is_admin;
291      }      }
       
292    
           
293      /**      /**
294       *       * getter user_is_service_ext
      * @return void  
295       */       */
296      function displayMessage($class = "", $message = "") {      function isUserServiceExt() {
297          if (!defined('REST_REQUEST')) {          //
298              $this->m->displayMessage($class, $message);          if (is_null($this->user_is_service_ext)) {
299                //
300                $this->getUserInfos();
301          }          }
302            //
303            return $this->user_is_service_ext;
304      }      }
305    
       
306      /**      /**
307       *       * getter user_is_service_int
308       */       */
309      function addToLog($message, $type = DEBUG_MODE) {      function isUserServiceInt() {
310          //          //
311          if (!defined('REST_REQUEST')) {          if (is_null($this->user_is_service_int)) {
312              logger::instance()->log("class ".get_class($this)." - ".$message, $type);              //
313                $this->getUserInfos();
314          }          }
315            //
316            return $this->user_is_service_int;
317      }      }
318        
319      /**      /**
320       * Envoie un mail avec piece jointe       * getter user_is_qualificateur
      *  
      * @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.  
321       */       */
322      public function sendMail($title, $message, $recipient, $file = array()) {      function isUserQualificateur() {
323                    //
324          @include_once "../php/phpmailer/class.phpmailer.php";          if (is_null($this->user_is_qualificateur)) {
325                        //
326          if (!class_exists("PHPMailer")) {              $this->getUserInfos();
             $this->addToLog("sendMail(): !class_exists(\"PHPMailer\")", DEBUG_MODE);  
             return false;  
327          }          }
   
328          //          //
329          $this->setMailConfig();          return $this->user_is_qualificateur;
330                }
331    
332        /**
333         * getter user_is_chef
334         */
335        function isUserChef() {
336          //          //
337          if ($this->mail_config == false) {          if (is_null($this->user_is_chef)) {
338              $this->addToLog("sendMail(): aucune configuration mail", DEBUG_MODE);              //
339              return false;              $this->getUserInfos();
340          }          }
           
341          //          //
342          $mail = new PHPMailer(true);          return $this->user_is_chef;
343                }
344    
345        /**
346         * getter user_is_divisionnaire
347         */
348        function isUserDivisionnaire() {
349          //          //
350          $mail->IsSMTP();          if (is_null($this->user_is_divisionnaire)) {
351                //
352                $this->getUserInfos();
353            }
354            //
355            return $this->user_is_divisionnaire;
356        }
357    
358          $mail->SMTPAuth = true; // enable SMTP authentication      // Ajout de variables de session contenant la division pour permettre une
359          $mail->SMTPSecure = "tls";      // utilisation plus efficace dans les requetes
360          $mail->Username = $this->mail_config["mail_username"];      function triggerAfterLogin($utilisateur = NULL) {
361          $mail->Password = $this->mail_config["mail_pass"];          //
362          if ($this->mail_config["mail_username"] == '') {          $sql = "SELECT instructeur.division, division.code
363              $mail->SMTPAuth = false;          FROM ".DB_PREFIXE."instructeur
364            LEFT JOIN ".DB_PREFIXE."division
365            ON instructeur.division = division.division
366            WHERE instructeur.om_utilisateur='".$utilisateur["om_utilisateur"]."'";
367            $res = $this->db->query($sql);
368            $this->addToLog("triggerAfterLogin(): db->query(\"".$sql."\");", VERBOSE_MODE);
369            if ( database::isError($res)){
370                die();
371            }
372            $row = $res->fetchrow(DB_FETCHMODE_ASSOC);
373            //
374            if (isset($row["division"]) && $row["division"] != NULL) {
375                $_SESSION["division"] = $row["division"];
376                $_SESSION["division_code"] = $row["code"];
377          } else {          } else {
378              $mail->SMTPAuth = true;              $_SESSION["division"] = "0";
379                $_SESSION["division_code"] = "";
380          }          }
381          $mail->Port = $this->mail_config["mail_port"];  
382          $mail->Host = $this->mail_config["mail_host"];      }    
383          $mail->AddReplyTo($this->mail_config["mail_from"], $this->mail_config["mail_from_name"]);  
384          $mail->From = $this->mail_config["mail_from"];      // Affichage des actions supplémentaires
385          $mail->FromName = $this->mail_config["mail_from_name"];      function displayActionExtras() {
386          foreach (explode(",",$recipient) as $adresse) {          // Affichage de la division si l'utilisateur en possède une
387              if (!$this->checkValidEmailAddress($adresse)) {          if ($_SESSION["division"] != 0) {
388                  $this->addToLog("sendMail(): courriel incorrect ".$adresse, DEBUG_MODE);              echo "\t\t\t<li class=\"action-division\">";
389                  return false;              echo "(".$_SESSION['division_code'].")";
390              } else              echo "</li>\n";
                 $mail->AddAddress(trim($adresse));  
391          }          }
392          $mail->IsHTML(true);      }
393    
394        // }}}
395    
396        
397        function getDivisionFromDossier($dossier) {
398            //
399            $sql = "select division from ".DB_PREFIXE."dossier ";
400            $sql .= " where dossier='".$dossier."'";
401            //
402            $division = $this->db->getOne($sql);
403            $this->addToLog("getDivisionFromDossier(): db->getone(\"".$sql."\")", VERBOSE_MODE);
404            database::isError($division);
405            //
406            return $division;
407        }
408    
409        // {{{ GESTION DES FICHIERS
410        
411        /**
412         *
413         */
414        function notExistsError ($explanation = NULL) {
415            // message
416            $message_class = "error";
417            $message = _("Cette page n'existe pas.");
418            $this->addToMessage ($message_class, $message);
419            //
420            $this->setFlag(NULL);
421            $this->display();
422            
423            //
424            die();
425        }
426        
427         // }}}
428        /**
429         * Retourne le statut du dossier d'instruction
430         * @param string $idx Identifiant du dossier d'instruction
431         * @return string Le statut du dossier d'instruction
432         */
433        function getStatutDossier($idx){
434                    
435          // Corps du message          $statut = '';
         $mail_body ="<html>";  
         $mail_body .= "<head><title>".$title."</title></head>";  
         $mail_body .= "<body>".$message."</body>";  
         $mail_body .= "</html>";  
436                    
437          $mail->Subject  = $title;          //Si l'identifiant du dossier d'instruction fourni est correct
438          $mail->MsgHTML($mail_body);          if ( $idx != '' ){
         foreach($file as $oneFile) {  
439                            
440              if($oneFile['stream']){              //On récupère le statut de l'état du dossier à partir de l'identifiant du
441                  $mail->AddStringAttachment($oneFile['content'], $oneFile['title'], $oneFile['encoding'] = 'base64',$oneFile['type'] = 'application/octet-stream');              //dossier d'instruction
442              } else{              $sql = "SELECT etat.statut
443                  $mail->AddAttachment($oneFile['url']);                  FROM ".DB_PREFIXE."dossier
444                    LEFT JOIN
445                        ".DB_PREFIXE."etat
446                        ON
447                            dossier.etat = etat.etat
448                    WHERE dossier ='".$idx."'";
449                $statut = $this->db->getOne($sql);
450                $this->addToLog("getStatutDossier() : db->getOne(\"".$sql."\")", VERBOSE_MODE);
451                if ( database::isError($statut)){
452                    die();
453              }              }
454          }          }
455          // Envoie de l'email          return $statut;
456          if ($mail->Send()) {      }
457              return true;  
458          } else {      /**
459              $this->addToLog("sendMail(): ".$mail->ErrorInfo, DEBUG_MODE);       * Formate le champ pour le type Timestamp
460         * @param  date  $date_str          Date
461         * @param  boolean $show            Format pour l'affichage
462         * @return mixed                    False si le traitement échoue ou la date formatée
463         */
464        function formatTimestamp ($date_str, $show = true) {
465    
466            // Sépare la date et l'heure
467            $date = explode(" ", $date_str);
468            if (count($date) != 2) {
469              return false;              return false;
470          }          }
471    
472            // Date en BDD
473            $date_db = explode ('-', $date[0]);
474                    // Date en affichage
475            $date_show = explode ('/', $date[0]);
476    
477            // Contrôle la composition de la date
478            if (count ($date_db) != 3 and count ($date_show) != 3) {
479                return false;
480            }
481    
482            if (count ($date_db) == 3) {
483                // Vérifie que c'est une date valide
484                if (!checkdate($date_db[1], $date_db[2], $date_db[0])) {
485                    return false;
486                }
487                // Si c'est pour l'affichage de la date
488                if ($show == true) {
489                    return $date_db [2]."/".$date_db [1]."/".$date_db [0]." ".$date[1];
490                } else {
491                    return $date[0];
492                }
493            }
494    
495            //
496            if (count ($date_show) == 3) {
497                // Vérifie que c'est une date valide
498                if (!checkdate($date_show[1], $date_show[0], $date_show[2])) {
499                    return false;
500                }
501                // Si c'est pour l'affichage de la date
502                if ($show == true) {
503                    return $date[0];
504                } else {
505                    return $date_show [2]."-".$date_show [1]."-".$date_show [0]." ".$date[1];
506                }
507    
508            }
509            return false;
510    
511      }      }
512    
513      /**      /**
514         * Permet de calculer la liste des parcelles à partir de la chaîne passée en paramètre
515         * et la retourner sous forme d'un tableau associatif
516       *       *
517         * @param  string $strParcelles chaîne de la parcelles
518         * @return array (array(quartier, section, parcelle), ...)
519       */       */
520      function isAccredited($obj = NULL, $operator = "AND") {      function parseParcelles($strParcelles) {
521          // Lorsque l'utilisateur a le login 'admin' alors il est authorisé à          
522          // accéder à toutes les fonctions du logiciel          // Séparation des lignes
523          // XXX à modifier pour changer ça vers un profil et non un login utilisateur          $references = explode(";", $strParcelles);
524          if ($_SESSION["login"] == "admin") {          $liste_parcelles = array();
525              return true;          
526            // On boucle sur chaque ligne pour ajouter la liste des parcelles de chaque ligne
527            foreach ($references as $parcelles) {
528                
529                // On transforme la chaîne de la ligne de parcelles en tableau
530                $ref = str_split($parcelles);
531                // Les 1er caractères sont numériques
532                $num = true;
533                
534                // Tableau des champs de la ligne de références cadastrales
535                $reference_tab = array();
536                $temp = "";
537                foreach ($ref as $carac) {
538                    
539                    // Permet de tester si le caractère courant est de même type que le précédent
540                    if(is_numeric($carac) === $num) {
541                        $temp .= $carac;
542                    } else {
543                        // Bascule
544                        $num = !$num;
545                        // On stock le champ
546                        $reference_tab[] = $temp;
547                        // re-init de la valeur temporaire pour le champ suivant
548                        $temp = $carac;
549                    }
550                }
551                // Stockage du dernier champ sur lequel il n'y a pas eu de bascule
552                $reference_tab[] = $temp;
553                // Calcul des parcelles
554                $quartier = $reference_tab[0];
555                $sect = $reference_tab[1];
556    
557                $ancien_ref_parc = "";
558                for ($i=2; $i < count($reference_tab); $i+=2) {
559                    $parc["quartier"] = $quartier;
560                    // Met en majuscule si besoin
561                    $parc["section"] = strtoupper($sect);
562                    if( $ancien_ref_parc == "" OR $reference_tab[$i-1] == "/") {
563                        // 1ere parcelle ou parcelle individuelle
564                        // Compléte par des "0" le début de la chaîne si besoin
565                        $parc["parcelle"] = str_pad($reference_tab[$i], 4, "0", STR_PAD_LEFT);
566                        // Ajout d'une parcelle à la liste
567                        $liste_parcelles[] = $parc;
568                    } elseif ($reference_tab[$i-1] == "A") {
569                        // Interval de parcelles
570                        for ($j=$ancien_ref_parc+1; $j <= $reference_tab[$i]; $j++) {
571                            // Compléte par des "0" le début de la chaîne si besoin
572                            $parc["parcelle"] = str_pad($j, 4, "0", STR_PAD_LEFT);
573                            // Ajout d'une parcelle à la liste
574                            $liste_parcelles[] = $parc;
575                        }
576                    }
577                    //Gestion des erreurs
578                    else{
579                        
580                        echo _("Une erreur de formattage a ete detecte dans la reference cadastrale du dossier ").$this->row['dossier'];
581                    }
582                    // Sauvegarde de la référence courante de parcelle
583                    $ancien_ref_parc = $reference_tab[$i];
584                }
585          }          }
586          // Fonctionnement standard  
587          return parent::isAccredited($obj, $operator);          return $liste_parcelles;
588      }      }
589        
590      /*      /**
591       * Methode permettant de lister tous les fichiers d'un dossier       * Formate les parcelles en ajoutant le code impôt
592         * @param  array    $liste_parcelles   Tableau des parcelles
593         * @return string                      Liste des parcelles formatées
594       */       */
595      function get_folder_file_list($id_folder) {      function formatParcelleToSend($liste_parcelles) {
596    
597            //
598            $wParcelle = array();
599    
600          $file_list = array();          //Formatage des références cadastrales pour l'envoi
601          if(is_dir('../trs/'.$id_folder)) {          foreach ($liste_parcelles as $value) {
             if($dossier = opendir('../trs/'.$id_folder)) {  
602                                    
603                  while(false !== ($fichier = readdir($dossier))) {              // On ajoute les données dans le tableau que si quartier + section + parcelle
604                // a été fourni
605                if ($value["quartier"] !== ""
606                    && $value["section"] !== ""
607                    && $value["parcelle"] !== ""){
608                                    
609                      if($fichier != '.' && $fichier != '..' && !is_dir($fichier)) {                  //On récupère le code impôt de l'arrondissement
610                                        $arrondissement = $this->getCodeImpotByQuartier($value["quartier"]);
611                          $file_list[]=$fichier;                  
612                      } // On ferme le if (qui permet de ne pas afficher index.php, etc.)                  //On ajoute la parcelle, si un arrondissement a été trouvé
613                                    if ($arrondissement!=="") {
614                  } // On termine la boucle                      //
615                                $wParcelle[] = $arrondissement.$value["quartier"].
616                  closedir($dossier);                          str_pad($value["section"], 2, " ", STR_PAD_LEFT).
617                                $value["parcelle"];
618              } else {                  }
                 $this->displayMessage("error", _("Les documents du dossier ne sont pas accessible."));  
619              }              }
         } else {  
             $this->displayMessage("error", _("Ce dossier n'a pas de document."));  
620          }          }
621          return $file_list;  
622            //
623            return $wParcelle;
624      }      }
625    
626      /*      /**
627       * Store the data recived in the request into a file on the       * Récupère le code impôt par rapport au quartier
628       * local filesystem.       * @param  string $quartier Numéro de quartier
629       * @todo This function will need to be changed for the save to       * @return string           Code impôt
      * be on GED  
      * @param mixed $data The data received with the request  
      * @param string $id The consultation ID  
      * @return string OK on success, KO otherwise  
630       */       */
631                function getCodeImpotByQuartier($quartier) {
632      function storeDecisionFile(&$fichier_base64, $basename, $dossier, $prefix = '') {  
633                    $arrondissement = "";
634          if (empty($fichier_base64)) {  
635              $this -> addToMessage("error", _("Le fichier est vide"));          // Si le quartier fournis est correct
636              return false;          if ($quartier != "") {
637    
638                // Requête SQL
639                $sql = "SELECT
640                            arrondissement.code_impots
641                        FROM
642                            ".DB_PREFIXE."arrondissement
643                        LEFT JOIN
644                            ".DB_PREFIXE."quartier
645                            ON
646                                quartier.arrondissement = arrondissement.arrondissement
647                        WHERE
648                            quartier.code_impots = '".$quartier."'";
649                $this->addToLog("getCodeImpotByQuartier() : db->getOne(\"".$sql."\")", VERBOSE_MODE);
650                $arrondissement = $this->db->getOne($sql);
651                $this->isDatabaseError($arrondissement);
652          }          }
653          $dir = $this->getPathFolderTrs().$dossier;  
654            // Retour
655            return $arrondissement;
656        }
657    
658        /**
659         * Vérification des paramètres
660         */
661        function checkParams() {
662            parent::checkParams();
663    
664            (isset($this->config['path_scan']) ? "" : $this->config['path_scan'] = '../trs/numerisation/');
665                    
666          // if a file already exists by that name and it          $default_sig_elyx = array(
667          // is not a directory, back out              'wsdl' => '../tests/wsurbanisme.wsdl',
668          /*if (file_exists($dir) AND is_dir($dir)) {              'login' => 'sig',
669              $this -> addToMessage("error", _("Le repertoire n'existe pas, le fichier ne peut pas etre enregistre."));              'password' => 'sig',
670              return false;          );
671          }*/          (isset($this->config['sig_elyx']) ? "" : $this->config['sig_elyx'] = $default_sig_elyx);
672          // if a dirextory by that name exists, make sure it does      }
673          // not already contain an avis de consultation, MAYBE WE DON'T NEED THIS  
674          if (file_exists($dir) AND is_dir($dir)) {      /**
675              $dir_contents = trim(shell_exec('ls '.$dir));       * Retourne true si tous les paramètres du SIG externe ont bien été définis
676              if (strpos($dir_contents, ' ') != false) {       * @return bool true/false
677                  $dir_contents = explode(' ', $dir_contents);       */
678              } else {      public function issetSIGParameter() {
679                  $dir_contents = array($dir_contents);          if($this->getParameter("sig_web_server") != NULL AND
680              }              $this->getParameter("sig_web_server") != "" AND
681              foreach ($dir_contents as $basefname) { // very useful for consultation              $this->getParameter("sig_couche_emprise_dossier") != NULL AND
682                  if (strpos($basefname, $prefix)!==false) {              $this->getParameter("sig_couche_emprise_dossier") != "" AND
683                      return _("Un retour d'avis existe deja.");              $this->getParameter("sig_couche_affichage_dossier") != NULL AND
684                                    $this->getParameter("sig_couche_affichage_dossier") != "" AND
685                  }              $this->getParameter("sig_couche_affichage_parcelle") != NULL AND
686              }              $this->getParameter("sig_couche_affichage_parcelle") != "") {
687                return true;
688          } else {          } else {
689              return _("Le dossier n'existe pas.");              return false;
690          }          }
691          // if no file by that name exists, create the directory      }
692            
693          if (!file_exists($dir)) {      /**
694              if (!mkdir($dir, 0775)) {       * Permet de vérifier que des champs existe dans une table
695                  return _("Erreur dans la création de répertoire.");       * @param  array  $list_fields Liste des champs à tester
696         * @param  string $table       Table où les champs doivent exister
697         * @return mixed               Retourne les champs qui n'existent pas
698         *                             ou true
699         */
700        public function check_field_exist($list_fields, $table) {
701    
702            // Instance de la classe en paramètre
703            require_once "../obj/".$table.".class.php";
704            $object = new $table("]", $this->db, DEBUG);
705    
706            // Récupère les champs de la table
707            foreach ($object->champs as $champ) {
708                $list_column[] = $champ;
709            }
710    
711            // Tableau des champs en erreur
712            $error_fields = array();
713    
714            // Pour chaque champ à tester
715            foreach ($list_fields as $value) {
716                
717                // S'il n'apparaît pas dans la liste des champs possible
718                if (!in_array($value, $list_column)) {
719    
720                    // Alors le champ est ajouté au tableau des erreurs
721                    $error_fields[] = $value;
722              }              }
723          }          }
724    
725            // Si le tableau des erreurs n'est pas vide on le retourne
726            if (count($error_fields) > 0) {
727                return $error_fields;
728            }
729    
730            // Sinon on retourne le booléen true
731            return true;
732    
733        }
734    
735        /*
736         *
737         */
738        /**
739         * Récupère la lettre type lié à un événement
740         * @param  integer  $evenement L'identifiant de l'événement
741         * @return integer             Retourne l'idenfiant de la lettre-type                             ou true
742         */
743        function getLettreType($evenement){
744            
745             $lettretype = NULL;
746            
747             $sql =
748                "SELECT
749                    lettretype
750                FROM
751                    ".DB_PREFIXE."evenement
752                WHERE
753                    evenement = $evenement";
754                
755            $this->addToLog("getLettreType() : db->query(\"".$sql."\")", VERBOSE_MODE);
756            $res = $this->db->query($sql);
757            if ( database::isError($res)){
758                die();
759            }
760                    
761                    if ( $res->numrows() > 0 ){
762          // store the file contents into the file named:                  
763          //      consultation_<ID>_<file_name_received>              $row=& $res->fetchRow(DB_FETCHMODE_ASSOC);
764          $file_len = strlen($fichier_base64);              $lettretype = $row['lettretype'];
   
         $filename = $dir."/".$prefix.$basename;  
   
         $file = fopen($filename, 'w');  
         if (!$file) {  
             return _("Echec a la creation du fichier.");  
         }  
         // check that the number of bytes written is equal to the length  
         // of the data received  
         $num_written = fwrite($file, $fichier_base64, $file_len);  
           
         if (!$num_written) {  
             // remove the file  
             // the return value from shell can't be used for checking since  
             // one can not know if the NULL returned is because there was no  
             // output or because there was an error  
             $ret = shell_exec("rm -f $filename 2>&1");  
             //if ($ret == NULL) { // an error occured while deleting the file  
             //}  
             return _("La sauvegarde du fichier a echoue");  
765          }          }
766          fclose($file);        
767          return true;          return $lettretype;
768      }      }
769            
770      /**      /**
771       *       * Retourne le type de dossier d'autorisation du dossier courant :
772         * @param $idxDossier Le numéro du dossier d'instruction
773         * @return le code du type détaillée de dossier d'autorisation
774         **/
775        function getDATDCode($idxDossier) {
776            $sql = "SELECT dossier_autorisation_type_detaille.code
777                    FROM ".DB_PREFIXE."dossier_autorisation_type_detaille
778                    INNER JOIN ".DB_PREFIXE."dossier_autorisation
779                        ON dossier_autorisation_type_detaille.dossier_autorisation_type_detaille =
780                           dossier_autorisation.dossier_autorisation_type_detaille
781                    INNER JOIN ".DB_PREFIXE."dossier ON dossier.dossier_autorisation = dossier_autorisation.dossier_autorisation
782                    WHERE dossier.dossier = '".$idxDossier."'";
783            $res = $this->db->getOne($sql);
784            $this->addToLog("getDATDCode() : db->getOne(\"".$sql."\")", VERBOSE_MODE);
785            if ( database::isError($res)){
786                die();
787            }
788            return $res;
789        }
790    
791        /**
792         * Permet de copier un enregistrement
793         * @param  mixed $idx   Identifiant de l'enregistrment
794         * @param  string $obj   Objet de l'enregistrment
795         * @param  string $objsf Objets associés
796         * @return array        Tableau des nouveaux id et du message
797       */       */
798      function notExistsError ($explanation = NULL) {      function copier($idx, $obj, $objsf) {
799          // message  
800          $message_class = "error";          // Tableau de résultat
801          $message = _("Cette page n'existe pas.");          $resArray = array();
802          $this->addToMessage ($message_class, $message);          // Message retourné à l'utilisateur
803          //          $message = "";
804          $this->setFlag(NULL);          // Type du message (valid ou error)
805          $this->display();          $message_type = "valid";
806    
807            // Requête SQL permettant de récupérer les informations sur l'objet métier
808            $sql = "SELECT *
809                    FROM ".DB_PREFIXE.$obj."
810                    WHERE ".$obj." = ".$idx;
811            $res = $this->db->query($sql);
812            $this->isDatabaseError($res);
813    
814            // Valeurs clonées
815            $valF = array();
816            while ($row=& $res->fetchRow(DB_FETCHMODE_ASSOC)) {
817                // Recupère la valeur
818                $valF = $row;
819            }
820    
821            // Valeurs non clonées
822            // Identifiant modifié pour que ça soit un ajout
823            $valF[$obj] = "]";
824    
825            // Inclus la classe de l'objet métier
826            require_once "../obj/".$obj.".class.php";
827    
828            // Instance de l'objet métier
829            $clone_obj = new $obj("]", $this->db, DEBUG);
830            // Si dans l'objet métier la fonction "copier" existe
831            if (method_exists($clone_obj, "copier")) {
832                // Traitement sur les valeurs du duplicata
833                $valF = $clone_obj->copier($valF, $objsf, DEBUG);
834                // Recupère les messages retourné par la fonction
835                $message .= $valF['message'];
836                // Supprime les messages de la liste des valeurs
837                unset($valF['message']);
838            }
839            // Ajoute le duplicata
840            $clone_obj->ajouter($valF, $this->db, DEBUG);
841            // Si aucune erreur se produit dans la classe instanciée
842            if ($clone_obj->correct === true) {
843                // Récupère l'identifiant de l'objet créé
844                $clone_obj_id = $clone_obj->valF[$obj];
845    
846                // Message
847                $message .= sprintf(_("La copie de l'enregistrement %s avec l'identifiant %s s'est effectuee avec succes"), "<span class='bold'>"._($obj)."</span>", "<span class='bold'>".$idx."</span>")."<br />";
848    
849                // Ajout de l'identifant au tableau des résultat
850                $resArray[$obj.'_'.$idx] = $clone_obj_id;
851    
852                // S'il y a au moins un objet metier associé
853                if ($objsf != "") {
854                    // Liste des objet métier associés
855                    $list_objsf = explode(",", $objsf);
856                    // Pour chaque objet associé
857                    foreach ($list_objsf as $key => $objsf) {
858                        // Inclus la classe de l'objet métier associé
859                        require_once "../obj/".$objsf.".class.php";
860    
861                        // Requête SQL permettant de récupérer les informations sur
862                        // l'objet métier associé
863                        $sql = "SELECT *
864                                FROM ".DB_PREFIXE.$objsf."
865                                WHERE ".$obj." = ".$idx;
866                        $res = $this->db->query($sql);
867                        $this->isDatabaseError($res);                    
868    
869                        // Pour chaque élément associé
870                        while ($row=& $res->fetchRow(DB_FETCHMODE_ASSOC)) {
871                            // Identifiant de l'objet associé à copier
872                            $idxsf = $row[$objsf];
873    
874                            // Valeurs clonées
875                            $valF = $row;
876                            // Valeurs non clonées
877                            $valF[$obj] = $clone_obj_id;
878                            // Identifiant modifié pour que ça soit un ajout
879                            $valF[$objsf] = "]";
880                            // Instance de l'objet métier associé
881                            $clone_objsf = new $objsf("]", $this->db, DEBUG);
882                            // Si dans l'objet métier associé
883                            // la fonction "copier" existe
884                            if (method_exists($clone_objsf, "copier")) {
885                                // Traitement sur les valeurs du duplicata
886                                $valF = $clone_objsf->copier($valF, $objsf, DEBUG);
887                                // Recupère les messages retourné par la fonction
888                                $message .= $valF['message'];
889                                // Supprime les messages de la liste des valeurs
890                                unset($valF['message']);
891                            }
892                            // Ajoute le duplicata
893                            $clone_objsf->ajouter($valF, $this->db, DEBUG);
894                            // Si aucune erreur se produit dans la classe instanciée
895                            if ($clone_objsf->correct === true) {
896                                // Récupère l'identifiant de l'objet créé
897                                $clone_objsf_id = $clone_objsf->valF[$objsf];
898    
899                                // Message
900                                $message .= sprintf(_("La copie de l'enregistrement %s avec l'identifiant %s s'est effectuee avec succes"), "<span class='bold'>"._($objsf)."</span>", "<span class='bold'>".$idxsf."</span>")."<br />";
901    
902                                // Ajout de l'identifant au tableau des résultat
903                                $resArray[$objsf.'_'.$row[$objsf]] = $clone_objsf_id;
904                            } else {
905    
906                                // Message d'erreur récupéré depuis la classe
907                                $message .= $clone_objsf->msg;
908                                // Type du message
909                                $message_type = "error";
910                            }
911                        }
912                    }
913                }
914            //    
915            } else {
916    
917                // Message d'erreur récupéré depuis la classe
918                $message .= $clone_obj->msg;
919                // Type du message
920                $message_type = "error";
921            }
922    
923            // Ajout du message au tableau des résultats
924            $resArray['message'] = $message;
925            // Ajout du type de message au tableau des résultats
926            $resArray['message_type'] = $message_type;
927    
928            // Retourne le tableau des résultats
929            return $resArray;
930        }
931    
932        /**
933         * Permet de détailler les conditions pour l'affichage des contraintes dans
934         * une édition.
935         * @param string $contraintes_param    Chaine des conditions
936         *
937         * @return array                        Conditions
938         */
939        function explodeConditionContrainte($contraintes_param) {
940    
941            // Initialisation des variables
942            $return = array();
943            $listGroupes = "";
944            $listSousgroupes = "";
945            $service_consulte = "";
946    
947            // Coupe la condition au ";"
948            // Doit séparer groupe et sous-groupe
949            $contraintes_params = explode(";", $contraintes_param);
950                    
951            // Pour chaque paramètres
952            foreach ($contraintes_params as $value) {
953                // Si le mot-clés "liste_groupe="
954                if (strstr($value, "liste_groupe=")) {
955                    // On enlève le mots-clés "liste_groupe="
956                    $listGroupes = str_replace("liste_groupe=", "", $value);
957                }
958                // Si le mot-clés "liste_ssgroupe="
959                if (strstr($value, "liste_ssgroupe=")) {
960                    // On enlève le mots-clés "liste_ssgroupe="
961                    $listSousgroupes = str_replace("liste_ssgroupe=", "", $value);
962                }
963                // Si le mot-clés "service_consulte="
964                if (strstr($value, "service_consulte=")) {
965                    // On enlève le mots-clés "service_consulte="
966                    $service_consulte = str_replace("service_consulte=", "", $value);
967                }
968            }
969    
970            // Récupère la liste des groupes et sous-groupes qui doivent
971            // être utilisés pour la condition
972            if ($listGroupes != "") {
973                $listGroupes = explode(",", $listGroupes);
974            }
975            if ($listSousgroupes != "") {
976                $listSousgroupes = explode(",", $listSousgroupes);
977            }
978    
979            // Tableau à retourner
980            $return['groupes'] = $listGroupes;
981            $return['sousgroupes'] = $listSousgroupes;
982            $return['service_consulte'] = $service_consulte;
983    
984          //          //
985          die();          return $return;
986      }      }
987        
988      /**      /**
989       * Méthode de récupération des informations de l'utilisateur connecté.       * Traitement pour créer la condition sur les contraintes dans les éditions.
990         * @param string $part SQL et parti du pdf (sql, titre ou corps)
991         *
992         * @return string      Condition pour la requête sur les contraintes
993       */       */
994      function getUserInfos() {      function traitement_condition_contrainte($part) {
995            
996          // Si l'utilisateur est loggé $_SESSION existe          // Initialisationd de la condition
997          if(isset($_SESSION['login']) AND !empty($_SESSION['login'])) {          $whereContraintes = "";
998                
999              // Récupération des infos utilisateur          // Détaille la condtion
1000              $sqlUser = "SELECT om_utilisateur, nom, email, login, om_collectivite, om_profil ".          $explodeConditionContrainte = $this->explodeConditionContrainte($part);
1001              "FROM om_utilisateur WHERE login = '".$_SESSION['login']."'";  
1002              $resUser=$this->db->query($sqlUser);          // Récupère les groupes, sous-groupes et service_consulte pour la condition
1003              $this->addToLog("getUserInfos(): db->query(\"".$sqlUser."\");", VERBOSE_MODE);          $groupes = $explodeConditionContrainte['groupes'];
1004              $this->isDatabaseError($resUser);          $sousgroupes = $explodeConditionContrainte['sousgroupes'];
1005              $this->om_utilisateur=&$resUser->fetchRow(DB_FETCHMODE_ASSOC);          $service_consulte = $explodeConditionContrainte['service_consulte'];
1006                
1007              // Récupération des infos instructeur          // Pour chaque groupe
1008              $sqlInstr = "SELECT instructeur.instructeur, instructeur.nom, instructeur.telephone, division.code, division.libelle ".          if ($groupes != "") {
1009              "FROM instructeur INNER JOIN division ON division.division=instructeur.division ".              foreach ($groupes as $key => $groupe) {
1010              "WHERE instructeur.om_utilisateur = ".$this->om_utilisateur['om_utilisateur'];                  // Si le groupe n'est pas vide
1011              $resInstr=$this->db->query($sqlInstr);                  if (!empty($groupe)) {
1012              $this->addToLog("getUserInfos(): db->query(\"".$sqlInstr."\");", VERBOSE_MODE);                      // Choisit l'opérateur logique
1013              $this->isDatabaseError($resInstr);                      $op_logique = $key > 0 ? 'OR' : 'AND (';
1014              $tempInstr=&$resInstr->fetchRow(DB_FETCHMODE_ASSOC);                      // Ajoute la condition
1015              // Si il y a un resultat c'est un instructeur                      $whereContraintes .= " ".$op_logique." lower(trim(both E'\n\r\t' from contrainte.groupe)) = lower('"
1016              if(count($tempInstr)>0) {                          .pg_escape_string($groupe)."')";
1017                  $this->user_is_instr=true;                  }
                 $this->om_utilisateur = array_merge($this->om_utilisateur,$tempInstr);  
1018              }              }
1019                            // S'il y a des valeurs dans groupe
1020              // Récupération des infos de services ext consultés              if (count($groupe) > 0) {
1021              $sqlServExt = "SELECT service.service, service.abrege, service.libelle ".                  // Ferme la parenthèse
1022              "FROM service ".                  $whereContraintes .= " ) ";
             "INNER JOIN lien_service_om_utilisateur ON lien_service_om_utilisateur.service=service.service ".  
             "WHERE lien_service_om_utilisateur.om_utilisateur = ".$this->om_utilisateur['om_utilisateur'];  
             $resServExt=$this->db->query($sqlServExt);  
             $this->addToLog("getUserInfos(): db->query(\"".$sqlServExt."\");", VERBOSE_MODE);  
             $this->isDatabaseError($resServExt);  
               
             while ($tempServExt=&$resServExt->fetchRow(DB_FETCHMODE_ASSOC)) {  
                 $this->om_utilisateur['service'][]=$tempServExt;  
1023              }              }
1024              // Si il y a un resultat c'est un utilisateur de service          }
1025              if(isset($this->om_utilisateur['service'])) {  
1026                  $this->user_is_service_ext=true;          // Pour chaque sous-groupe
1027            if ($sousgroupes != "") {
1028                foreach ($sousgroupes as $key => $sousgroupe) {
1029                    // Si le sous-groupe n'est pas vide
1030                    if (!empty($sousgroupe)) {
1031                        // Choisit l'opérateur logique
1032                        $op_logique = $key > 0 ? 'OR' : 'AND (';
1033                        // Ajoute la condition
1034                        $whereContraintes .= " ".$op_logique." lower(trim(both E'\n\r\t' from contrainte.sousgroupe)) = lower('"
1035                            .pg_escape_string($sousgroupe)."')";
1036                    }
1037                }
1038                // S'il y a des valeurs dans sous-groupe
1039                if (count($sousgroupes) > 0) {
1040                    // Ferme la parenthèse
1041                    $whereContraintes .= " ) ";
1042              }              }
1043          }          }
1044    
1045            // Si l'option service_consulte n'est pas vide
1046            if ($service_consulte != "") {
1047                // Ajoute la condition
1048                $whereContraintes .= " AND service_consulte = cast(lower('".$service_consulte."') as boolean) ";
1049            }
1050    
1051            // Condition retournée
1052            return $whereContraintes;
1053      }      }
1054        
1055      /**      /**
1056       * getter user_is_service_ext       * Calcule une date par l'ajout ou la soustraction de mois
1057         * @param date    $date     Date de base
1058         * @param integer $delay    Délais à ajouter (en mois)
1059         * @param string  $operator Opérateur pour le calcul ("-" ou "+")
1060         *
1061         * @return date             Date calculée
1062       */       */
1063      function isUserServiceExt() {      function mois_date($date, $delay, $operator = "+") {
1064          return $this->user_is_service_ext;              
1065            // Si aucune date n'a été fournie ou si ce n'est pas une date correctement formatée
1066            if ( is_null($date) || $date == "" ||
1067                preg_match('/[0-9]{4}-[0-9]{2}-[0-9]{2}/', $date) == 0 ){
1068                return null;
1069            }
1070    
1071            // Découpage de la date
1072            $temp = explode("-", $date);
1073            $day = (int) $temp[2];
1074            $month = (int) $temp[1];
1075            $year = (int) $temp[0];
1076    
1077            // Si c'est une addition
1078            if ($operator == '+') {
1079                // Année à ajouter
1080                $year += floor($delay / 12);
1081                // Mois restant
1082                $nb_month = ($delay % 12);
1083                // S'il y a des mois restant
1084                if ($nb_month != 0) {
1085                    // Ajout des mois restant
1086                    $month += $nb_month;
1087                    // Si ça dépasse le mois 12 (décembre)
1088                    if ($month > 12) {
1089                        // Soustrait 12 au mois
1090                        $month -= 12;
1091                        // Ajoute 1 à l'année
1092                        $year += 1;
1093                    }
1094                }
1095            }
1096    
1097            // Si c'est une soustraction
1098            if ($operator == "-") {
1099                // Année à soustraire
1100                $year -= floor($delay / 12);
1101                // Mois restant
1102                $nb_month = ($delay % 12);
1103                // S'il y a des mois restant
1104                if ($nb_month != 0) {
1105                    // Soustrait le délais
1106                    $month -= $nb_month;
1107                    // Si ça dépasse le mois 1 (janvier)
1108                    if ($month < 1) {
1109                        // Soustrait 12 au mois
1110                        $month += 12;
1111                        // Ajoute 1 à l'année
1112                        $year -= 1;
1113                    }
1114                }
1115            }
1116    
1117            // Calcul du nombre de jours dans le mois sélectionné
1118            switch($month) {
1119                // Mois de février
1120                case "2":
1121                    if ($year % 4 == 0 && $year % 100 != 0 || $year % 400 == 0) {
1122                        $day_max = 29;
1123                    } else {
1124                        $day_max = 28;
1125                    }
1126                break;
1127                // Mois d'avril, juin, septembre et novembre
1128                case "4":
1129                case "6":
1130                case "9":
1131                case "11":
1132                    $day_max = 30;
1133                break;
1134                // Mois de janvier, mars, mai, juillet, août, octobre et décembre
1135                default:
1136                    $day_max = 31;
1137            }
1138    
1139            // Si le jour est supérieur au jour maximum du mois
1140            if ($day > $day_max) {
1141                // Le jour devient le jour maximum
1142                $day = $day_max;
1143            }
1144    
1145            // Compléte le mois et le jour par un 0 à gauche si c'est un chiffre
1146            $month = str_pad($month, 2, "0", STR_PAD_LEFT);
1147            $day = str_pad($day, 2, "0", STR_PAD_LEFT);
1148    
1149            // Retourne la date calculée
1150            return $year."-".$month."-".$day ;
1151      }      }
1152    
1153      /**      /**
1154       * getter user_is_instr       * Vérifie la valididité d'une date.
1155         * @param string $pDate  Date à vérifier
1156         *
1157         * @return boolean
1158       */       */
1159      function isUserInstructeur() {      function check_date($pDate) {
1160          return $this->user_is_instr;  
1161            // Vérifie si c'est une date valide
1162            if (preg_match("/^([0-9]{4})-([0-9]{2})-([0-9]{2})$/", $pDate, $date)
1163                && checkdate($date[2], $date[3], $date[1])
1164                && $date[1] >= 1900) {
1165                //
1166                return true;
1167            }
1168    
1169            //
1170            return false;
1171        }
1172        
1173        function clean_break($input) {
1174            if(is_array($input)) {
1175                foreach($input as $key => $value) {
1176                    $input[$key] = $this->clean_break($value);
1177                }
1178            } else {
1179                //remove whitespace...
1180                $input = trim($input);
1181                //disable magic quotes...
1182                if(get_magic_quotes_gpc()) {
1183                    stripslashes($input);
1184                }
1185                //prevent sql injection...
1186                if(!is_numeric($input)) {
1187                    if(isset($this->db)) {
1188                        $this->db->escapeSimple($input);
1189                    }
1190                }
1191                //prevent xss...
1192                $input = htmlentities($input);
1193            }
1194            return $input;
1195      }      }
1196  }  }
1197    

Legend:
Removed from v.678  
changed lines
  Added in v.3238

[email protected]
ViewVC Help
Powered by ViewVC 1.1.26