/[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 514 by fraynaud, Thu Aug 25 12:16:31 2011 UTC revision 515 by mlimic, Wed Oct 17 16:22:13 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        /**
41         * Constructeur
42         *
43         * @param
44         * @param
45         * @param
46         * @param
47         * @param
48         */
49        function __construct($flag = NULL, $right = NULL, $title = NULL, $icon = NULL, $help = NULL) {
50    
51            //
52            $this->timestart = microtime(true);
53    
54            // Logger
55            $this->addToLog("__construct() : 0.000 sec", VERBOSE_MODE);
56    
57            // Logger
58            $this->addToLog("__construct()", EXTRA_VERBOSE_MODE);
59    
60            // Instanciation de la classe message
61            $this->m = new message();
62    
63            //
64            $this->setParamsFromFiles();
65            $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            // Connexion de l'utilisateur
87            if ($this->flag == "login") {
88                $this->login();
89            }
90    
91            // Demande de redéfinition du mot de passe
92            if ($this->flag == "password_reset") {
93                if ($this->authenticated) {
94                    $this->redirectAuthenticatedUsers();
95                }
96            }
97    
98            //
99            if ($this->authenticated) {
100                // Connexion à la base de données si l'utilisateur est authentifié
101                $this->connectDatabase();
102                // on verifie que l'utilisateur connecté est toujours valide
103                if (!defined('REST_REQUEST')) {
104                    $this->checkIfUserIsAlwaysValid();
105                }
106            }
107    
108            //
109            if (!in_array($this->flag, $this->special_flags)) {
110    
111                //
112                $this->getAllRights();
113    
114                //
115                $this->getCollectivite();
116    
117                //
118                $this->isAuthorized();
119    
120            }
121    
122            //
123            $this->setMoreParams();
124    
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    
146            // 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         * Cette methode permet de charger les differents fichiers de configs dans
168         * des attributs de la classe
169         *
170         * @return void
171         */
172        function setParamsFromFiles() {
173    
174            //
175            if (file_exists("../dyn/config.inc.php")) {
176                include_once("../dyn/config.inc.php");
177            }
178            if (isset($config)) {
179                $this->config = $config;
180            }
181    
182            //
183            if (file_exists("../dyn/database.inc.php")) {
184                include("../dyn/database.inc.php");
185            }
186    
187            if (isset($conn)) {
188                $this->conn = $conn;
189                //
190                foreach($this->conn as $key => $conn) {
191                    $this->database[$key] = array(
192                        'title' => $conn[0],
193                        'phptype' => $conn[1],
194                        'dbsyntax' => $conn[2],
195                        'username' => $conn[3],
196                        'password' => $conn[4],
197                        'protocol' => $conn[5],
198                        'hostspec' => $conn[6],
199                        'port' => $conn[7],
200                        'socket' => $conn[8],
201                        'database' => $conn[9],
202                        'formatdate' => $conn[10],
203                        'schema' => $conn[11],
204                        'prefixe' => (isset($conn[12]) ? $conn[12]: ""),
205                        'directory' => (isset($conn[13]) ? $conn[13]: ""),
206                        'mail' => (isset($conn[14]) ? $conn[14]: ""),
207                    );
208                }
209            }
210    
211            //
212            if (file_exists("../dyn/directory.inc.php")) {
213                include_once("../dyn/directory.inc.php");
214            }
215            if (isset($directory)) {
216                $this->directory = $directory;
217            }
218    
219            //
220            if (file_exists("../dyn/mail.inc.php")) {
221                include_once("../dyn/mail.inc.php");
222            }
223            if (isset($mail)) {
224                $this->mail = $mail;
225            }
226    
227            //
228            if (file_exists("../dyn/menu.inc.php")) {
229                include_once("../dyn/menu.inc.php");
230            }
231            if (isset($menu)) {
232                $this->menu = $menu;
233            }
234    
235            //
236            if (file_exists("../dyn/actions.inc.php")) {
237                include_once("../dyn/actions.inc.php");
238            }
239            if (isset($actions)) {
240                $this->actions = $actions;
241            }
242    
243            //
244            if (file_exists("../dyn/shortlinks.inc.php")) {
245                include_once("../dyn/shortlinks.inc.php");
246            }
247            if (isset($shortlinks)) {
248                $this->shortlinks = $shortlinks;
249            }
250    
251            //
252            if (file_exists("../dyn/footer.inc.php")) {
253                include_once("../dyn/footer.inc.php");
254            }
255            if (isset($footer)) {
256                $this->footer = $footer;
257            }
258    
259            //
260            if (file_exists("../dyn/version.inc.php")) {
261                include_once("../dyn/version.inc.php");
262            }
263            if (isset($version)) {
264                $this->version = $version;
265            }
266    
267        }
268    
269        
270        /**
271         * Cette méthode permet de vérifier si l'utilisateur est autorisé ou non à
272         * accéder à un élément et permet d'agir en conséquence
273         *
274         * @param
275         * @return mixed
276         */
277        function isAuthorized($obj = NULL, $operator = "AND") {
278    
279            //
280            if ($obj == NULL) {
281                $obj = $this->right;
282            }
283            //
284            if ($obj == NULL) {
285                return true;
286            }
287    
288            // L'utilisateur n'est pas autorisé à accéder à l'élément
289            if (!$this->isAccredited($obj, $operator)) {
290    
291                //
292                $message_class = "error";
293                $message = _("Droits insuffisants. Vous n'avez pas suffisament de ".
294                             "droits pour acceder a cette page.");
295                $this->addToMessage($message_class, $message);
296    
297                //
298                $this->setFlag(NULL);
299                if (!defined('REST_REQUEST')) {
300                    $this->display();
301                }
302    
303                // Arrêt du script
304                die();
305    
306            }
307    
308            // L'utilisateur est autorisé à accéder à l'élément
309            return true;
310    
311        }
312    
313    
314    
315        /**
316         *
317         */
318        function setDatabaseConfig() {
319    
320            // On recupere la liste des cles du tableau associatif de configuration
321            // de la connexion aux bases de donnees
322            $database_keys = array_keys($this->database);
323            //print '   database keys:';
324            //print_r($database_keys);
325            // Si il y a plusieurs cles
326            if (count($database_keys) != 0) {
327                // On configure la premiere par defaut
328                $coll = $database_keys[0];
329            } else { // Si il n'y a aucune cle
330                // Aucune base n'est configuree dans le fichier de configuration
331                // donc on affiche un message d'erreur
332                $class = "error";
333                $message = _("Erreur de configuration. Contactez votre administrateur.");
334                $this->addToMessage($class, $message);
335                // Debug
336                $this->addToLog("setDatabaseConfig(): ERR", DEBUG_MODE);
337                $this->addToLog("ERR: "._("Aucune entree dans le fichier de configuration"), DEBUG_MODE);
338                // On affiche la structure de la page
339                $this->setFlag(NULL);
340                $this->display();
341                // On arrete le traitement en cours
342                die();
343            }
344    
345            // Si la variable coll (representant la cle de la base sur laquelle
346            // nous travaillons) n'est pas en variable SESSION ou est en variable
347            // SESSION mais n'existe pas dans les cles du tableau associatif de
348            // configuration de la connexion aux bases de donnees
349            if (!isset($_SESSION['coll']) or
350                (isset($_SESSION['coll']) and
351                 !isset($this->database[$_SESSION['coll']]))) {
352                // On configure la premiere par defaut
353                $_SESSION['coll'] = $coll;
354            } else {
355                // On recupere la cle du tableau associatif de configuration de la
356                // connexion aux bases de donnees correspondante a la base de
357                // donnees sur laquelle nous travaillons
358                $coll = $_SESSION['coll'];
359            }
360    
361            // On renvoi le tableau de parametres pour la connexion a la base
362            //print '   $coll:'.$coll.'   ';
363            //print '   database:';
364            //print_r($this->database[$coll]);
365            $this->database_config = $this->database[$coll];
366        }
367    
368        
369            /**
370         * Cette méthode permet de se connecter à la base de données
371         * @return void
372         */
373        function connectDatabase() {
374            // On inclus la classe d'abstraction de base de donnees
375            require_once PATH_OPENMAIRIE."om_database.class.php";
376            // On recupere le tableau de parametres pour la connexion a la base
377            $this->setDatabaseConfig();
378            // On fixe les options
379            $options = array(
380                'debug' => 2,
381                'portability' => DB_PORTABILITY_ALL,
382            );
383            // Instanciation de l'objet connexion a la base de donnees
384            $db = database::connect($this->database_config, $options);
385            // Logger
386            $this->addToLog("connectDatabase(): "._("Tentative de connexion au SGBD"), EXTRA_VERBOSE_MODE);
387            // Traitement particulier de l'erreur en cas d'erreur de connexion a la
388            // base de donnees
389            if (database::isError($db, true)) {
390                // Deconnexion de l'utilisateur
391                $this->logout();
392                // On affiche la page de login a l'ecran
393                $this->setFlag("login");
394                // On affiche un message d'erreur convivial pour l'utilisateur
395                $class = "error";
396                $message = _("Erreur de base de donnees. Contactez votre administrateur.");
397                $this->addToMessage($class, $message);
398                // On affiche la page
399                if (!defined('REST_REQUEST')) {
400                    $this->display();
401                }
402                // On arrete le script
403                //print 'and we die';
404                die();
405            } else {
406                // On affecte la resource a l'attribut de la classe du meme nom
407                $this->db = $db;
408                // Logger
409                $this->addToLog("connectDatabase(): Connexion [".$this->database_config["phptype"]."] '".$this->database_config['database']."' OK", EXTRA_VERBOSE_MODE);
410    
411                // Compatibilite anterieure (deprecated)
412                $this->phptype = $this->database_config["phptype"];
413                $this->formatdate = $this->database_config["formatdate"];
414                $this->schema = $this->database_config["schema"];
415    
416                // Definition des constantes pour l'acces aux informations de la base
417                // donnees facilement.
418                $temp = "";
419                if ($this->database_config["schema"] != "") {
420                    $temp = $this->database_config["schema"].".";
421                }
422                $temp = $temp.$this->database_config["prefixe"];
423                define("DB_PREFIXE", $temp);
424                define("FORMATDATE", $this->database_config["formatdate"]);
425    
426                // Definition des constantes pour l'acces aux informations de la base
427                // donnees facilement.
428                define("OM_DB_FORMATDATE", $this->database_config["formatdate"]);
429                define("OM_DB_PHPTYPE", $this->database_config["phptype"]);
430                define("OM_DB_DATABASE", $this->database_config["database"]);
431                define("OM_DB_SCHEMA", $this->database_config["schema"]);
432                define("OM_DB_TABLE_PREFIX", $this->database_config["prefixe"]);
433            }
434    
435        }
436    
437    
438        /**
439         *
440         *
441         */
442        function isDatabaseError($dbobj = NULL, $return = false) {
443    
444            //
445            if (database::isError($dbobj, $return)) {
446    
447                if ($return == true) {
448    
449                    //
450                    return true;
451    
452                }
453    
454                //
455                $class = "error";
456                $message = _("Erreur de base de donnees. Contactez votre administrateur.");
457                $this->addToMessage($class, $message);
458    
459                // Logger
460                $this->addToLog("isDatabaseError(): ".$dbobj->getDebugInfo(), DEBUG_MODE);
461                $this->addToLog("isDatabaseError(): ".$dbobj->getMessage(), DEBUG_MODE);
462    
463                //
464                $this->setFlag(NULL);
465                if (!defined('REST_REQUEST')) {
466                    $this->display();
467                    //
468                    die();
469                }
470    
471            }
472    
473            //
474            return false;
475    
476        }
477        
478    
479            
480        /**
481         *
482         * @return void
483         */
484        function displayMessage($class = "", $message = "") {
485            if (!defined('REST_REQUEST')) {
486                $this->m->displayMessage($class, $message);
487            }
488        }
489    
490        
491        /**
492         *
493         */
494        function addToLog($message, $type = DEBUG_MODE) {
495            //
496            if (!defined('REST_REQUEST')) {
497                logger::instance()->log("class ".get_class($this)." - ".$message, $type);
498            }
499        }
500            
501    
502  }  }

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

[email protected]
ViewVC Help
Powered by ViewVC 1.1.26