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

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

Parent Directory Parent Directory | Revision Log Revision Log


Revision 1859 - (hide annotations)
Tue May 7 11:55:24 2013 UTC (11 years, 8 months ago) by fmichon
File size: 16187 byte(s)
Ajout de tests de vérification de l'existence d'une constante avant sa définition. Si aucun n'effet de bord n'est constaté alors il faut reporter cette modification dans le code d'openmairie.

1 fraynaud 3 <?php
2     /**
3 fraynaud 96 * 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 fraynaud 3 *
6     * @package openmairie_exemple
7 fraynaud 96 * @version SVN : $Id: utils.class.php 547 2011-08-25 12:03:42Z fmichon $
8 fraynaud 3 */
9    
10     /**
11     *
12     */
13     require_once "../dyn/locales.inc.php";
14    
15     /**
16     *
17     */
18     require_once "../dyn/include.inc.php";
19    
20     /**
21     *
22     */
23     require_once "../dyn/debug.inc.php";
24    
25     /**
26     *
27     */
28     (defined("PATH_OPENMAIRIE") ? "" : define("PATH_OPENMAIRIE", ""));
29    
30     /**
31     *
32     */
33     require_once PATH_OPENMAIRIE."om_application.class.php";
34    
35     /**
36     *
37     */
38     class utils extends application {
39 fraynaud 96
40 fmichon 686 // {{{
41 fmichon 818
42     /**
43     *
44     */
45     function isAccredited($obj = NULL, $operator = "AND") {
46     // Lorsque l'utilisateur a le login 'admin' alors il est authorisé à
47     // accéder à toutes les fonctions du logiciel
48     // XXX à modifier pour changer ça vers un profil et non un login utilisateur
49     if ($_SESSION["login"] == "admin") {
50     return true;
51     }
52     // Fonctionnement standard
53     return parent::isAccredited($obj, $operator);
54     }
55    
56     // }}}
57 fmichon 686
58 fmichon 818 // {{{
59    
60 fmichon 817 var $om_utilisateur = array();
61     var $user_is_instr = NULL;
62     var $user_is_service_ext = NULL;
63    
64     /**
65     * Méthode de récupération des informations de l'utilisateur connecté.
66     */
67     function getUserInfos() {
68    
69     // Si l'utilisateur est loggé $_SESSION existe
70     if(isset($_SESSION['login']) AND !empty($_SESSION['login'])) {
71    
72     // Récupération des infos utilisateur
73     $sqlUser = "SELECT om_utilisateur, nom, email, login, om_collectivite, om_profil ".
74 fmichon 924 "FROM ".DB_PREFIXE."om_utilisateur WHERE login = '".$_SESSION['login']."'";
75 fmichon 817 $resUser=$this->db->query($sqlUser);
76     $this->addToLog("getUserInfos(): db->query(\"".$sqlUser."\");", VERBOSE_MODE);
77 vpihour 1777 if ( database::isError($resUser)){
78     die();
79     }
80 fmichon 817 $this->om_utilisateur=&$resUser->fetchRow(DB_FETCHMODE_ASSOC);
81    
82     // Récupération des infos instructeur
83 fmichon 943 $sqlInstr = "SELECT instructeur.instructeur, instructeur.nom, instructeur.telephone,
84     division.division, division.code, division.libelle ".
85 fmichon 924 "FROM ".DB_PREFIXE."instructeur INNER JOIN ".DB_PREFIXE."division ON division.division=instructeur.division ".
86 fmichon 817 "WHERE instructeur.om_utilisateur = ".$this->om_utilisateur['om_utilisateur'];
87     $resInstr=$this->db->query($sqlInstr);
88     $this->addToLog("getUserInfos(): db->query(\"".$sqlInstr."\");", VERBOSE_MODE);
89 vpihour 1777 if ( database::isError($resInstr)){
90     die();
91     }
92 fmichon 817 $tempInstr=&$resInstr->fetchRow(DB_FETCHMODE_ASSOC);
93     // Si il y a un resultat c'est un instructeur
94     if(count($tempInstr)>0) {
95     $this->user_is_instr=true;
96     $this->om_utilisateur = array_merge($this->om_utilisateur,$tempInstr);
97     } else {
98     $this->user_is_instr=false;
99     }
100    
101     // Récupération des infos de services ext consultés
102     $sqlServExt = "SELECT service.service, service.abrege, service.libelle ".
103 fmichon 924 "FROM ".DB_PREFIXE."service ".
104     "INNER JOIN ".DB_PREFIXE."lien_service_om_utilisateur ON lien_service_om_utilisateur.service=service.service ".
105 fmichon 817 "WHERE lien_service_om_utilisateur.om_utilisateur = ".$this->om_utilisateur['om_utilisateur'];
106     $resServExt=$this->db->query($sqlServExt);
107     $this->addToLog("getUserInfos(): db->query(\"".$sqlServExt."\");", VERBOSE_MODE);
108 vpihour 1777 if ( database::isError($resServExt)){
109     die();
110     }
111 fmichon 817
112     while ($tempServExt=&$resServExt->fetchRow(DB_FETCHMODE_ASSOC)) {
113     $this->om_utilisateur['service'][]=$tempServExt;
114     }
115     // Si il y a un resultat c'est un utilisateur de service
116     if(isset($this->om_utilisateur['service'])) {
117     $this->user_is_service_ext=true;
118     } else {
119     $this->user_is_service_ext=false;
120     }
121     }
122     }
123    
124     /**
125     * getter user_is_service_ext
126     */
127     function isUserServiceExt() {
128     //
129     if (is_null($this->user_is_service_ext)) {
130     //
131     $this->getUserInfos();
132     }
133     //
134     return $this->user_is_service_ext;
135     }
136    
137     /**
138     * getter user_is_instr
139     */
140     function isUserInstructeur() {
141     //
142     if (is_null($this->user_is_instr)) {
143     //
144     $this->getUserInfos();
145     }
146     //
147     return $this->user_is_instr;
148     }
149    
150 fmichon 686 // Ajout de variables de session contenant la division pour permettre une
151     // utilisation plus efficace dans les requetes
152     function triggerAfterLogin($utilisateur = NULL) {
153     //
154     $sql = "SELECT instructeur.division, division.code
155     FROM ".DB_PREFIXE."instructeur
156     LEFT JOIN ".DB_PREFIXE."division
157     ON instructeur.division = division.division
158     WHERE instructeur.om_utilisateur='".$utilisateur["om_utilisateur"]."'";
159     $res = $this->db->query($sql);
160     $this->addToLog("triggerAfterLogin(): db->query(\"".$sql."\");", VERBOSE_MODE);
161 vpihour 1777 if ( database::isError($res)){
162     die();
163     }
164 fmichon 686 $row = $res->fetchrow(DB_FETCHMODE_ASSOC);
165     //
166     if (isset($row["division"]) && $row["division"] != NULL) {
167     $_SESSION["division"] = $row["division"];
168     $_SESSION["division_code"] = $row["code"];
169     } else {
170     $_SESSION["division"] = "0";
171     $_SESSION["division_code"] = "";
172     }
173    
174     }
175    
176     // Affichage des actions supplémentaires
177     function displayActionExtras() {
178     // Affichage de la division si l'utilisateur en possède une
179     if ($_SESSION["division"] != 0) {
180     echo "\t\t\t<li class=\"action-division\">";
181     echo "(".$_SESSION['division_code'].")";
182     echo "</li>\n";
183     }
184     }
185 fmichon 817
186 fmichon 686 // }}}
187    
188 fmichon 949
189     function getDivisionFromDossier($dossier) {
190     //
191     $sql = "select division from ".DB_PREFIXE."dossier ";
192     $sql .= " where dossier='".$dossier."'";
193     //
194     $division = $this->db->getOne($sql);
195     $this->addToLog("getDivisionFromDossier(): db->getone(\"".$sql."\")", VERBOSE_MODE);
196     database::isError($division);
197     //
198     return $division;
199     }
200    
201 fmichon 818 // {{{ SURCHARGES POUR LE FONCTIONNEMENT DES REQUETES REST
202    
203 mlimic 515 /**
204     * Cette méthode permet de vérifier si l'utilisateur est autorisé ou non à
205     * accéder à un élément et permet d'agir en conséquence
206     *
207     * @param
208     * @return mixed
209     */
210     function isAuthorized($obj = NULL, $operator = "AND") {
211    
212     //
213     if ($obj == NULL) {
214     $obj = $this->right;
215     }
216     //
217     if ($obj == NULL) {
218     return true;
219     }
220    
221     // L'utilisateur n'est pas autorisé à accéder à l'élément
222     if (!$this->isAccredited($obj, $operator)) {
223    
224     //
225     $message_class = "error";
226 fmichon 1159 $message = _("Droits insuffisants. Vous n'avez pas suffisamment de ".
227 mlimic 515 "droits pour acceder a cette page.");
228     $this->addToMessage($message_class, $message);
229    
230     //
231     $this->setFlag(NULL);
232     if (!defined('REST_REQUEST')) {
233     $this->display();
234     }
235    
236     // Arrêt du script
237     die();
238    
239     }
240    
241     // L'utilisateur est autorisé à accéder à l'élément
242     return true;
243    
244     }
245    
246    
247    
248     /**
249     *
250     */
251     function setDatabaseConfig() {
252    
253     // On recupere la liste des cles du tableau associatif de configuration
254     // de la connexion aux bases de donnees
255     $database_keys = array_keys($this->database);
256     // Si il y a plusieurs cles
257     if (count($database_keys) != 0) {
258     // On configure la premiere par defaut
259     $coll = $database_keys[0];
260     } else { // Si il n'y a aucune cle
261     // Aucune base n'est configuree dans le fichier de configuration
262     // donc on affiche un message d'erreur
263     $class = "error";
264     $message = _("Erreur de configuration. Contactez votre administrateur.");
265     $this->addToMessage($class, $message);
266     // Debug
267     $this->addToLog("setDatabaseConfig(): ERR", DEBUG_MODE);
268     $this->addToLog("ERR: "._("Aucune entree dans le fichier de configuration"), DEBUG_MODE);
269     // On affiche la structure de la page
270     $this->setFlag(NULL);
271     $this->display();
272     // On arrete le traitement en cours
273     die();
274     }
275    
276     // Si la variable coll (representant la cle de la base sur laquelle
277     // nous travaillons) n'est pas en variable SESSION ou est en variable
278     // SESSION mais n'existe pas dans les cles du tableau associatif de
279     // configuration de la connexion aux bases de donnees
280     if (!isset($_SESSION['coll']) or
281     (isset($_SESSION['coll']) and
282     !isset($this->database[$_SESSION['coll']]))) {
283     // On configure la premiere par defaut
284     $_SESSION['coll'] = $coll;
285     } else {
286     // On recupere la cle du tableau associatif de configuration de la
287     // connexion aux bases de donnees correspondante a la base de
288     // donnees sur laquelle nous travaillons
289     $coll = $_SESSION['coll'];
290     }
291    
292     // On renvoi le tableau de parametres pour la connexion a la base
293     $this->database_config = $this->database[$coll];
294     }
295    
296    
297     /**
298     * Cette méthode permet de se connecter à la base de données
299     * @return void
300     */
301     function connectDatabase() {
302     // On inclus la classe d'abstraction de base de donnees
303     require_once PATH_OPENMAIRIE."om_database.class.php";
304     // On recupere le tableau de parametres pour la connexion a la base
305     $this->setDatabaseConfig();
306     // On fixe les options
307     $options = array(
308     'debug' => 2,
309     'portability' => DB_PORTABILITY_ALL,
310     );
311     // Instanciation de l'objet connexion a la base de donnees
312     $db = database::connect($this->database_config, $options);
313     // Logger
314     $this->addToLog("connectDatabase(): "._("Tentative de connexion au SGBD"), EXTRA_VERBOSE_MODE);
315     // Traitement particulier de l'erreur en cas d'erreur de connexion a la
316     // base de donnees
317     if (database::isError($db, true)) {
318     // Deconnexion de l'utilisateur
319     $this->logout();
320     // On affiche la page de login a l'ecran
321     $this->setFlag("login");
322     // On affiche un message d'erreur convivial pour l'utilisateur
323     $class = "error";
324     $message = _("Erreur de base de donnees. Contactez votre administrateur.");
325     $this->addToMessage($class, $message);
326     // On affiche la page
327     if (!defined('REST_REQUEST')) {
328     $this->display();
329     }
330     // On arrete le script
331     die();
332     } else {
333     // On affecte la resource a l'attribut de la classe du meme nom
334     $this->db = $db;
335     // Logger
336     $this->addToLog("connectDatabase(): Connexion [".$this->database_config["phptype"]."] '".$this->database_config['database']."' OK", EXTRA_VERBOSE_MODE);
337    
338     // Compatibilite anterieure (deprecated)
339     $this->phptype = $this->database_config["phptype"];
340     $this->formatdate = $this->database_config["formatdate"];
341     $this->schema = $this->database_config["schema"];
342    
343     // Definition des constantes pour l'acces aux informations de la base
344     // donnees facilement.
345     $temp = "";
346     if ($this->database_config["schema"] != "") {
347     $temp = $this->database_config["schema"].".";
348     }
349     $temp = $temp.$this->database_config["prefixe"];
350 fmichon 1859 (defined("DB_PREFIXE") ? "" : define("DB_PREFIXE", $temp));
351     (defined("FORMATDATE") ? "" : define("FORMATDATE", $this->database_config["formatdate"]));
352 mlimic 515
353     // Definition des constantes pour l'acces aux informations de la base
354     // donnees facilement.
355 fmichon 1859 (defined("OM_DB_FORMATDATE") ? "" : define("OM_DB_FORMATDATE", $this->database_config["formatdate"]));
356     (defined("OM_DB_PHPTYPE") ? "" : define("OM_DB_PHPTYPE", $this->database_config["phptype"]));
357     (defined("OM_DB_DATABASE") ? "" : define("OM_DB_DATABASE", $this->database_config["database"]));
358     (defined("OM_DB_SCHEMA") ? "" : define("OM_DB_SCHEMA", $this->database_config["schema"]));
359     (defined("OM_DB_TABLE_PREFIX") ? "" : define("OM_DB_TABLE_PREFIX", $this->database_config["prefixe"]));
360 mlimic 515 }
361    
362     }
363    
364    
365     /**
366     *
367     *
368     */
369     function isDatabaseError($dbobj = NULL, $return = false) {
370    
371     //
372     if (database::isError($dbobj, $return)) {
373    
374     if ($return == true) {
375    
376     //
377     return true;
378    
379     }
380    
381     //
382     $class = "error";
383     $message = _("Erreur de base de donnees. Contactez votre administrateur.");
384     $this->addToMessage($class, $message);
385    
386     // Logger
387     $this->addToLog("isDatabaseError(): ".$dbobj->getDebugInfo(), DEBUG_MODE);
388     $this->addToLog("isDatabaseError(): ".$dbobj->getMessage(), DEBUG_MODE);
389    
390     //
391     $this->setFlag(NULL);
392     if (!defined('REST_REQUEST')) {
393     $this->display();
394     //
395     die();
396     }
397    
398     }
399    
400     //
401     return false;
402    
403     }
404    
405    
406    
407     /**
408     *
409     * @return void
410     */
411     function displayMessage($class = "", $message = "") {
412     if (!defined('REST_REQUEST')) {
413 fmichon 1074 $this->layout->display_message($class, $message);
414 mlimic 515 }
415     }
416    
417 fmichon 818 // }}}
418 nhaye 701
419 fmichon 818 // {{{ GESTION DES FICHIERS
420    
421 nhaye 701 /**
422     * Méthode de création de répertoire dans le dossier /trs correspondant
423     * à l'id du tableau de configuration de la connexion à la base de donnée
424     * (dyn/database.inc.php)
425     **/
426     function createFolder($folder) {
427     if (!mkdir($this->getPathFolderTrs().$folder)) {
428     // message
429     $message_class = "error";
430     $message = _("Echec lors de la creation du repertoires.");
431     $this->addToMessage ($message_class, $message);
432     }
433     }
434 nhaye 580
435     /*
436     * Methode permettant de lister tous les fichiers d'un dossier
437     */
438 nhaye 701 function getFolderFileList($id_folder) {
439 fmichon 565
440 nhaye 580 $file_list = array();
441 nhaye 700 if(is_dir($this->getPathFolderTrs().$id_folder)) {
442     if($dossier = opendir($this->getPathFolderTrs().$id_folder)) {
443 nhaye 580
444     while(false !== ($fichier = readdir($dossier))) {
445    
446     if($fichier != '.' && $fichier != '..' && !is_dir($fichier)) {
447 nhaye 700 $file_list[]=array( $fichier,
448     filemtime($this->getPathFolderTrs().$id_folder."/".$fichier));
449 nhaye 580 } // On ferme le if (qui permet de ne pas afficher index.php, etc.)
450    
451     } // On termine la boucle
452    
453     closedir($dossier);
454    
455     } else {
456 nhaye 701 $this->displayMessage("error", _("Les documents du repertoire ne sont pas accessible."));
457 nhaye 580 }
458     } else {
459 nhaye 701 $this->displayMessage("error", _("Ce repertoire n'a pas de document."));
460 nhaye 580 }
461     return $file_list;
462     }
463 nhaye 677
464     /**
465     *
466     */
467     function notExistsError ($explanation = NULL) {
468     // message
469     $message_class = "error";
470     $message = _("Cette page n'existe pas.");
471     $this->addToMessage ($message_class, $message);
472     //
473     $this->setFlag(NULL);
474     $this->display();
475    
476     //
477     die();
478     }
479 fmichon 816
480 fmichon 818 // }}}
481    
482 fraynaud 96 }
483 fraynaud 3
484 fraynaud 96 ?>

[email protected]
ViewVC Help
Powered by ViewVC 1.1.26