/[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 20 by fraynaud, Mon Jul 18 15:27:17 2011 UTC revision 556 by fmichon, Tue Oct 30 15:30:20 2012 UTC
# Line 1  Line 1 
1  <?php  <?php
2  /**  /**
3   *   * Ce fichier est destine a permettre la surcharge de certaines methodes de
4     * la classe om_application pour des besoins specifiques de l'application
5   *   *
6   * @package openmairie_exemple   * @package openmairie_exemple
7   * @version SVN : $Id: utils.class.php 489 2011-07-07 17:26:37Z fmichon $   * @version SVN : $Id: utils.class.php 547 2011-08-25 12:03:42Z fmichon $
8   */   */
9    
10  /**  /**
# Line 35  require_once PATH_OPENMAIRIE."om_applica Line 36  require_once PATH_OPENMAIRIE."om_applica
36   *   *
37   */   */
38  class utils extends application {  class utils extends application {
39        
     var $schema; //***  
       
       
40      /**      /**
41       * Cette methode permet de charger les differents fichiers de configs dans       * Constructeur
42       * des attributs de la classe       *
43       *       * @param
44       * @return void       * @param
45         * @param
46         * @param
47         * @param
48       */       */
49      function setParamsFromFiles() {      function __construct($flag = NULL, $right = NULL, $title = NULL, $icon = NULL, $help = NULL) {
50            
51          //          //
52          if (file_exists("../dyn/config.inc.php")) {          $this->timestart = microtime(true);
53              include_once("../dyn/config.inc.php");  
54          }          // Logger
55          if (isset($config)) {          $this->addToLog("__construct() : 0.000 sec", VERBOSE_MODE);
56              $this->config = $config;  
57          }          // Logger
58                    $this->addToLog("__construct()", EXTRA_VERBOSE_MODE);
59    
60            // Instanciation de la classe message
61            $this->m = new message();
62    
63          //          //
64          if (file_exists("../dyn/database.inc.php")) {          $this->setParamsFromFiles();
65              include_once("../dyn/database.inc.php");          $this->checkParams();
66    
67            //
68            $this->setDefaultValues();
69    
70            // Transformation des cinq éléments paramètres en attribut de l'objet
71            $this->setFlag($flag);
72            $this->setTitle($title);
73            $this->setRight($right);
74            $this->setHelp($help);
75            $this->setIcon($icon);
76    
77            // Vérification de l'authentification de l'utilisateur et stockage du
78            // résultat en attribut de l'objet
79            $this->authenticated = $this->isAuthenticated();
80    
81            // Déconnexion de l'utilisateur
82            if ($this->flag == "logout") {
83                $this->logout();
84          }          }
85            
86          if (isset($conn)) {          // Connexion de l'utilisateur
87              $this->conn = $conn;          if ($this->flag == "login") {
88              //              $this->login();
89              foreach($this->conn as $key => $conn) {          }
90                  $this->database[$key] = array(  
91                      'title' => $conn[0],          // Demande de redéfinition du mot de passe
92                      'phptype' => $conn[1],          if ($this->flag == "password_reset") {
93                      'dbsyntax' => $conn[2],              if ($this->authenticated) {
94                      'username' => $conn[3],                  $this->redirectAuthenticatedUsers();
                     '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' => $conn[12], //****  
                 );  
95              }              }
96          }          }
97            
98          //          //
99          if (file_exists("../dyn/menu.inc.php")) {          if ($this->authenticated) {
100              include_once("../dyn/menu.inc.php");              // Connexion à la base de données si l'utilisateur est authentifié
101          }              $this->connectDatabase();
102          if (isset($menu)) {              // on verifie que l'utilisateur connecté est toujours valide
103              $this->menu = $menu;              if (!defined('REST_REQUEST')) {
104                    $this->checkIfUserIsAlwaysValid();
105                }
106          }          }
107            
108          //          //
109          if (file_exists("../dyn/actions.inc.php")) {          if (!in_array($this->flag, $this->special_flags)) {
110              include_once("../dyn/actions.inc.php");  
111          }              //
112          if (isset($actions)) {              $this->getAllRights();
113              $this->actions = $actions;  
114                //
115                $this->getCollectivite();
116    
117                //
118                $this->isAuthorized();
119    
120          }          }
121            
122          //          //
123          if (file_exists("../dyn/shortlinks.inc.php")) {          $this->setMoreParams();
124              include_once("../dyn/shortlinks.inc.php");  
125            // Affichage HTML
126            $this->display();
127    
128        }
129        
130        
131        
132            /**
133         * Desctructeur de la classe, cette methode (appelee automatiquement)
134         * permet d'afficher le footer de la page, le footer HTML, et de
135         * deconnecter la base de donnees
136         *
137         * @return void
138         */
139        function __destruct() {
140    
141            // Footer
142            if (!defined('REST_REQUEST')) {
143                $this->displayFooter();
144          }          }
145          if (isset($shortlinks)) {  
146              $this->shortlinks = $shortlinks;          // Deconnexion SGBD
147            $this->disconnectDatabase();
148    
149            // Logger
150            $this->addToLog("__destruct()", EXTRA_VERBOSE_MODE);
151    
152            // Logger
153            $this->addToLog("__destruct() : ".$this->elapsedtime()." sec", VERBOSE_MODE);
154    
155            // Affichage des logs
156            logger::instance()->displayLog();
157    
158            // Footer HTML
159            if (!defined('REST_REQUEST')) {
160                $this->displayHTMLFooter();
161          }          }
162                }
163    
164    
165    
166    
167        /**
168         * Cette méthode permet de vérifier si l'utilisateur est autorisé ou non à
169         * accéder à un élément et permet d'agir en conséquence
170         *
171         * @param
172         * @return mixed
173         */
174        function isAuthorized($obj = NULL, $operator = "AND") {
175    
176          //          //
177          if (file_exists("../dyn/footer.inc.php")) {          if ($obj == NULL) {
178              include_once("../dyn/footer.inc.php");              $obj = $this->right;
179          }          }
         if (isset($footer)) {  
             $this->footer = $footer;  
         }  
           
180          //          //
181          if (file_exists("../dyn/version.inc.php")) {          if ($obj == NULL) {
182              include_once("../dyn/version.inc.php");              return true;
183            }
184    
185            // L'utilisateur n'est pas autorisé à accéder à l'élément
186            if (!$this->isAccredited($obj, $operator)) {
187    
188                //
189                $message_class = "error";
190                $message = _("Droits insuffisants. Vous n'avez pas suffisament de ".
191                             "droits pour acceder a cette page.");
192                $this->addToMessage($message_class, $message);
193    
194                //
195                $this->setFlag(NULL);
196                if (!defined('REST_REQUEST')) {
197                    $this->display();
198                }
199    
200                // Arrêt du script
201                die();
202    
203          }          }
204          if (isset($version)) {  
205              $this->version = $version;          // L'utilisateur est autorisé à accéder à l'élément
206            return true;
207    
208        }
209    
210    
211    
212        /**
213         *
214         */
215        function setDatabaseConfig() {
216    
217            // On recupere la liste des cles du tableau associatif de configuration
218            // de la connexion aux bases de donnees
219            $database_keys = array_keys($this->database);
220            // Si il y a plusieurs cles
221            if (count($database_keys) != 0) {
222                // On configure la premiere par defaut
223                $coll = $database_keys[0];
224            } else { // Si il n'y a aucune cle
225                // Aucune base n'est configuree dans le fichier de configuration
226                // donc on affiche un message d'erreur
227                $class = "error";
228                $message = _("Erreur de configuration. Contactez votre administrateur.");
229                $this->addToMessage($class, $message);
230                // Debug
231                $this->addToLog("setDatabaseConfig(): ERR", DEBUG_MODE);
232                $this->addToLog("ERR: "._("Aucune entree dans le fichier de configuration"), DEBUG_MODE);
233                // On affiche la structure de la page
234                $this->setFlag(NULL);
235                $this->display();
236                // On arrete le traitement en cours
237                die();
238            }
239    
240            // Si la variable coll (representant la cle de la base sur laquelle
241            // nous travaillons) n'est pas en variable SESSION ou est en variable
242            // SESSION mais n'existe pas dans les cles du tableau associatif de
243            // configuration de la connexion aux bases de donnees
244            if (!isset($_SESSION['coll']) or
245                (isset($_SESSION['coll']) and
246                 !isset($this->database[$_SESSION['coll']]))) {
247                // On configure la premiere par defaut
248                $_SESSION['coll'] = $coll;
249            } else {
250                // On recupere la cle du tableau associatif de configuration de la
251                // connexion aux bases de donnees correspondante a la base de
252                // donnees sur laquelle nous travaillons
253                $coll = $_SESSION['coll'];
254          }          }
255            
256            // On renvoi le tableau de parametres pour la connexion a la base
257            $this->database_config = $this->database[$coll];
258      }      }
259    
260            
261      /**          /**
262       * Cette methode permet de parametrer les valeurs par defaut pour les       * Cette méthode permet de se connecter à la base de données
      * fichiers css et javascript a appeler sur toutes les pages  
      *  
263       * @return void       * @return void
264       */       */
265      function setDefaultValues() {      function connectDatabase() {
266            // On inclus la classe d'abstraction de base de donnees
267          $js = array(          require_once PATH_OPENMAIRIE."om_database.class.php";
268              "../js/iepngfix_tilebg.js",          // On recupere le tableau de parametres pour la connexion a la base
269              "../lib/jquery/jquery.min.js",          $this->setDatabaseConfig();
270              "../lib/jquery-ui/jquery.ui.datepicker-fr.min.js",          // On fixe les options
271              "../lib/jquery-ui/jquery-ui.min.js",          $options = array(
272              "../lib/jquery-thirdparty/jquery.collapsible.js",              'debug' => 2,
273              "../js/script.js",              'portability' => DB_PORTABILITY_ALL,
274          );          );
275          $this->setHTMLHeadJs($js);          // Instanciation de l'objet connexion a la base de donnees
276            $db = database::connect($this->database_config, $options);
277            // Logger
278            $this->addToLog("connectDatabase(): "._("Tentative de connexion au SGBD"), EXTRA_VERBOSE_MODE);
279            // Traitement particulier de l'erreur en cas d'erreur de connexion a la
280            // base de donnees
281            if (database::isError($db, true)) {
282                // Deconnexion de l'utilisateur
283                $this->logout();
284                // On affiche la page de login a l'ecran
285                $this->setFlag("login");
286                // On affiche un message d'erreur convivial pour l'utilisateur
287                $class = "error";
288                $message = _("Erreur de base de donnees. Contactez votre administrateur.");
289                $this->addToMessage($class, $message);
290                // On affiche la page
291                if (!defined('REST_REQUEST')) {
292                    $this->display();
293                }
294                // On arrete le script
295                die();
296            } else {
297                // On affecte la resource a l'attribut de la classe du meme nom
298                $this->db = $db;
299                // Logger
300                $this->addToLog("connectDatabase(): Connexion [".$this->database_config["phptype"]."] '".$this->database_config['database']."' OK", EXTRA_VERBOSE_MODE);
301    
302                // Compatibilite anterieure (deprecated)
303                $this->phptype = $this->database_config["phptype"];
304                $this->formatdate = $this->database_config["formatdate"];
305                $this->schema = $this->database_config["schema"];
306    
307                // Definition des constantes pour l'acces aux informations de la base
308                // donnees facilement.
309                $temp = "";
310                if ($this->database_config["schema"] != "") {
311                    $temp = $this->database_config["schema"].".";
312                }
313                $temp = $temp.$this->database_config["prefixe"];
314                define("DB_PREFIXE", $temp);
315                define("FORMATDATE", $this->database_config["formatdate"]);
316    
317                // Definition des constantes pour l'acces aux informations de la base
318                // donnees facilement.
319                define("OM_DB_FORMATDATE", $this->database_config["formatdate"]);
320                define("OM_DB_PHPTYPE", $this->database_config["phptype"]);
321                define("OM_DB_DATABASE", $this->database_config["database"]);
322                define("OM_DB_SCHEMA", $this->database_config["schema"]);
323                define("OM_DB_TABLE_PREFIX", $this->database_config["prefixe"]);
324            }
325    
326          $css = array(      }
327              "../css/main.css",  
328              "../lib/jquery-ui-theme/jquery-ui.custom.css",  
329              "../css/specific.css",      /**
330          );       *
331          $this->setHTMLHeadCss($css);       *
332         */
333        function isDatabaseError($dbobj = NULL, $return = false) {
334    
335            //
336            if (database::isError($dbobj, $return)) {
337    
338          $extras = "\t<link rel=\"stylesheet\" type=\"text/css\" media=\"print\" href=\"../css/print.css\" />\n";              if ($return == true) {
339          $this->setHTMLHeadExtras($extras);  
340                    //
341                    return true;
342    
343                }
344    
345                //
346                $class = "error";
347                $message = _("Erreur de base de donnees. Contactez votre administrateur.");
348                $this->addToMessage($class, $message);
349    
350                // Logger
351                $this->addToLog("isDatabaseError(): ".$dbobj->getDebugInfo(), DEBUG_MODE);
352                $this->addToLog("isDatabaseError(): ".$dbobj->getMessage(), DEBUG_MODE);
353    
354                //
355                $this->setFlag(NULL);
356                if (!defined('REST_REQUEST')) {
357                    $this->display();
358                    //
359                    die();
360                }
361    
362            }
363    
364            //
365            return false;
366    
367      }      }
368            
369    
370            
371      /**      /**
372       * Cette methode permet d'affecter des parametres dans un attribut de       *
      * l'objet.  
      *  
373       * @return void       * @return void
374       */       */
375      function setMoreParams() {      function displayMessage($class = "", $message = "") {
376            if (!defined('REST_REQUEST')) {
377                $this->m->displayMessage($class, $message);
378            }
379        }
380    
381        
382        /**
383         *
384         */
385        function addToLog($message, $type = DEBUG_MODE) {
386            //
387            if (!defined('REST_REQUEST')) {
388                logger::instance()->log("class ".get_class($this)." - ".$message, $type);
389            }
390        }
391        
392        /**
393         * Envoie un mail avec piece jointe
394         *
395         * @param string $title Titre du mail
396         * @param string $message Corps du mail
397         * @param string $recipient Destinataire du mail
398         * @param array $file Destinataire du mail
399         * @access public
400         * @return bool True si le mail est correctement envoye, false sinon.
401         */
402        public function sendMail($title, $message, $recipient, $file = array()) {
403            
404            @include_once "../php/phpmailer/class.phpmailer.php";
405                    
406            if (!class_exists("PHPMailer")) {
407                $this->addToLog("sendMail(): !class_exists(\"PHPMailer\")", DEBUG_MODE);
408                return false;
409            }
410    
411          //          //
412          if (file_exists("../dyn/var.inc")) {          $this->setMailConfig();
413              include_once("../dyn/var.inc");          
414            //
415            if ($this->mail_config == false) {
416                $this->addToLog("sendMail(): aucune configuration mail", DEBUG_MODE);
417                return false;
418          }          }
419                    
420          //          //
421          if (isset($chemin_plan)) {          $mail = new PHPMailer(true);
422              $this->config['chemin_plan'] = $chemin_plan;          
423            //
424            $mail->IsSMTP();
425    
426            $mail->SMTPAuth = true; // enable SMTP authentication
427            $mail->SMTPSecure = "tls";
428            $mail->Username = $this->mail_config["mail_username"];
429            $mail->Password = $this->mail_config["mail_pass"];
430            if ($this->mail_config["mail_username"] == '') {
431                $mail->SMTPAuth = false;
432          } else {          } else {
433              $this->config['chemin_plan'] = "../trs/";              $mail->SMTPAuth = true;
434            }
435            $mail->Port = $this->mail_config["mail_port"];
436            $mail->Host = $this->mail_config["mail_host"];
437            $mail->AddReplyTo($this->mail_config["mail_from"], $this->mail_config["mail_from_name"]);
438            $mail->From = $this->mail_config["mail_from"];
439            $mail->FromName = $this->mail_config["mail_from_name"];
440            foreach (explode(",",$recipient) as $adresse) {
441                if (!$this->checkValidEmailAddress($adresse)) {
442                    $this->addToLog("sendMail(): courriel incorrect ".$adresse, DEBUG_MODE);
443                    return false;
444                } else
445                    $mail->AddAddress(trim($adresse));
446            }
447            $mail->IsHTML(true);
448            
449            // Corps du message
450            $mail_body ="<html>";
451            $mail_body .= "<head><title>".$title."</title></head>";
452            $mail_body .= "<body>".$message."</body>";
453            $mail_body .= "</html>";
454            
455            $mail->Subject  = $title;
456            $mail->MsgHTML($mail_body);
457            foreach($file as $oneFile) {
458                
459                if($oneFile['stream']){
460                    $mail->AddStringAttachment($oneFile['content'], $oneFile['title'], $oneFile['encoding'] = 'base64',$oneFile['type'] = 'application/octet-stream');
461                } else{
462                    $mail->AddAttachment($oneFile['url']);
463                }
464            }
465            // Envoie de l'email
466            if ($mail->Send()) {
467                return true;
468            } else {
469                $this->addToLog("sendMail(): ".$mail->ErrorInfo, DEBUG_MODE);
470                return false;
471          }          }
           
472      }      }
       
473    
 } //fin class  
 ?>  
474    }
475    
476    ?>

Legend:
Removed from v.20  
changed lines
  Added in v.556

[email protected]
ViewVC Help
Powered by ViewVC 1.1.26