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

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

Parent Directory Parent Directory | Revision Log Revision Log


Revision 943 - (hide annotations)
Fri Nov 30 15:25:27 2012 UTC (12 years, 2 months ago) by fmichon
File size: 18200 byte(s)
Gestion de la confidentialité par division

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     $this->isDatabaseError($resUser);
78     $this->om_utilisateur=&$resUser->fetchRow(DB_FETCHMODE_ASSOC);
79    
80     // Récupération des infos instructeur
81 fmichon 943 $sqlInstr = "SELECT instructeur.instructeur, instructeur.nom, instructeur.telephone,
82     division.division, division.code, division.libelle ".
83 fmichon 924 "FROM ".DB_PREFIXE."instructeur INNER JOIN ".DB_PREFIXE."division ON division.division=instructeur.division ".
84 fmichon 817 "WHERE instructeur.om_utilisateur = ".$this->om_utilisateur['om_utilisateur'];
85     $resInstr=$this->db->query($sqlInstr);
86     $this->addToLog("getUserInfos(): db->query(\"".$sqlInstr."\");", VERBOSE_MODE);
87     $this->isDatabaseError($resInstr);
88     $tempInstr=&$resInstr->fetchRow(DB_FETCHMODE_ASSOC);
89     // Si il y a un resultat c'est un instructeur
90     if(count($tempInstr)>0) {
91     $this->user_is_instr=true;
92     $this->om_utilisateur = array_merge($this->om_utilisateur,$tempInstr);
93     } else {
94     $this->user_is_instr=false;
95     }
96    
97     // Récupération des infos de services ext consultés
98     $sqlServExt = "SELECT service.service, service.abrege, service.libelle ".
99 fmichon 924 "FROM ".DB_PREFIXE."service ".
100     "INNER JOIN ".DB_PREFIXE."lien_service_om_utilisateur ON lien_service_om_utilisateur.service=service.service ".
101 fmichon 817 "WHERE lien_service_om_utilisateur.om_utilisateur = ".$this->om_utilisateur['om_utilisateur'];
102     $resServExt=$this->db->query($sqlServExt);
103     $this->addToLog("getUserInfos(): db->query(\"".$sqlServExt."\");", VERBOSE_MODE);
104     $this->isDatabaseError($resServExt);
105    
106     while ($tempServExt=&$resServExt->fetchRow(DB_FETCHMODE_ASSOC)) {
107     $this->om_utilisateur['service'][]=$tempServExt;
108     }
109     // Si il y a un resultat c'est un utilisateur de service
110     if(isset($this->om_utilisateur['service'])) {
111     $this->user_is_service_ext=true;
112     } else {
113     $this->user_is_service_ext=false;
114     }
115     }
116     }
117    
118     /**
119     * getter user_is_service_ext
120     */
121     function isUserServiceExt() {
122     //
123     if (is_null($this->user_is_service_ext)) {
124     //
125     $this->getUserInfos();
126     }
127     //
128     return $this->user_is_service_ext;
129     }
130    
131     /**
132     * getter user_is_instr
133     */
134     function isUserInstructeur() {
135     //
136     if (is_null($this->user_is_instr)) {
137     //
138     $this->getUserInfos();
139     }
140     //
141     return $this->user_is_instr;
142     }
143    
144 fmichon 686 // Ajout de variables de session contenant la division pour permettre une
145     // utilisation plus efficace dans les requetes
146     function triggerAfterLogin($utilisateur = NULL) {
147     //
148     $sql = "SELECT instructeur.division, division.code
149     FROM ".DB_PREFIXE."instructeur
150     LEFT JOIN ".DB_PREFIXE."division
151     ON instructeur.division = division.division
152     WHERE instructeur.om_utilisateur='".$utilisateur["om_utilisateur"]."'";
153     $res = $this->db->query($sql);
154     $this->addToLog("triggerAfterLogin(): db->query(\"".$sql."\");", VERBOSE_MODE);
155     $this->isDatabaseError($res);
156     $row = $res->fetchrow(DB_FETCHMODE_ASSOC);
157     //
158     if (isset($row["division"]) && $row["division"] != NULL) {
159     $_SESSION["division"] = $row["division"];
160     $_SESSION["division_code"] = $row["code"];
161     } else {
162     $_SESSION["division"] = "0";
163     $_SESSION["division_code"] = "";
164     }
165    
166     }
167    
168     // Affichage des actions supplémentaires
169     function displayActionExtras() {
170     // Affichage de la division si l'utilisateur en possède une
171     if ($_SESSION["division"] != 0) {
172     echo "\t\t\t<li class=\"action-division\">";
173     echo "(".$_SESSION['division_code'].")";
174     echo "</li>\n";
175     }
176     }
177 fmichon 817
178 fmichon 686 // }}}
179    
180 fmichon 818 // {{{ SURCHARGES POUR LE FONCTIONNEMENT DES REQUETES REST
181    
182 mlimic 515 /**
183     * Cette méthode permet de vérifier si l'utilisateur est autorisé ou non à
184     * accéder à un élément et permet d'agir en conséquence
185     *
186     * @param
187     * @return mixed
188     */
189     function isAuthorized($obj = NULL, $operator = "AND") {
190    
191     //
192     if ($obj == NULL) {
193     $obj = $this->right;
194     }
195     //
196     if ($obj == NULL) {
197     return true;
198     }
199    
200     // L'utilisateur n'est pas autorisé à accéder à l'élément
201     if (!$this->isAccredited($obj, $operator)) {
202    
203     //
204     $message_class = "error";
205     $message = _("Droits insuffisants. Vous n'avez pas suffisament de ".
206     "droits pour acceder a cette page.");
207     $this->addToMessage($message_class, $message);
208    
209     //
210     $this->setFlag(NULL);
211     if (!defined('REST_REQUEST')) {
212     $this->display();
213     }
214    
215     // Arrêt du script
216     die();
217    
218     }
219    
220     // L'utilisateur est autorisé à accéder à l'élément
221     return true;
222    
223     }
224    
225    
226    
227     /**
228     *
229     */
230     function setDatabaseConfig() {
231    
232     // On recupere la liste des cles du tableau associatif de configuration
233     // de la connexion aux bases de donnees
234     $database_keys = array_keys($this->database);
235     // Si il y a plusieurs cles
236     if (count($database_keys) != 0) {
237     // On configure la premiere par defaut
238     $coll = $database_keys[0];
239     } else { // Si il n'y a aucune cle
240     // Aucune base n'est configuree dans le fichier de configuration
241     // donc on affiche un message d'erreur
242     $class = "error";
243     $message = _("Erreur de configuration. Contactez votre administrateur.");
244     $this->addToMessage($class, $message);
245     // Debug
246     $this->addToLog("setDatabaseConfig(): ERR", DEBUG_MODE);
247     $this->addToLog("ERR: "._("Aucune entree dans le fichier de configuration"), DEBUG_MODE);
248     // On affiche la structure de la page
249     $this->setFlag(NULL);
250     $this->display();
251     // On arrete le traitement en cours
252     die();
253     }
254    
255     // Si la variable coll (representant la cle de la base sur laquelle
256     // nous travaillons) n'est pas en variable SESSION ou est en variable
257     // SESSION mais n'existe pas dans les cles du tableau associatif de
258     // configuration de la connexion aux bases de donnees
259     if (!isset($_SESSION['coll']) or
260     (isset($_SESSION['coll']) and
261     !isset($this->database[$_SESSION['coll']]))) {
262     // On configure la premiere par defaut
263     $_SESSION['coll'] = $coll;
264     } else {
265     // On recupere la cle du tableau associatif de configuration de la
266     // connexion aux bases de donnees correspondante a la base de
267     // donnees sur laquelle nous travaillons
268     $coll = $_SESSION['coll'];
269     }
270    
271     // On renvoi le tableau de parametres pour la connexion a la base
272     $this->database_config = $this->database[$coll];
273     }
274    
275    
276     /**
277     * Cette méthode permet de se connecter à la base de données
278     * @return void
279     */
280     function connectDatabase() {
281     // On inclus la classe d'abstraction de base de donnees
282     require_once PATH_OPENMAIRIE."om_database.class.php";
283     // On recupere le tableau de parametres pour la connexion a la base
284     $this->setDatabaseConfig();
285     // On fixe les options
286     $options = array(
287     'debug' => 2,
288     'portability' => DB_PORTABILITY_ALL,
289     );
290     // Instanciation de l'objet connexion a la base de donnees
291     $db = database::connect($this->database_config, $options);
292     // Logger
293     $this->addToLog("connectDatabase(): "._("Tentative de connexion au SGBD"), EXTRA_VERBOSE_MODE);
294     // Traitement particulier de l'erreur en cas d'erreur de connexion a la
295     // base de donnees
296     if (database::isError($db, true)) {
297     // Deconnexion de l'utilisateur
298     $this->logout();
299     // On affiche la page de login a l'ecran
300     $this->setFlag("login");
301     // On affiche un message d'erreur convivial pour l'utilisateur
302     $class = "error";
303     $message = _("Erreur de base de donnees. Contactez votre administrateur.");
304     $this->addToMessage($class, $message);
305     // On affiche la page
306     if (!defined('REST_REQUEST')) {
307     $this->display();
308     }
309     // On arrete le script
310     die();
311     } else {
312     // On affecte la resource a l'attribut de la classe du meme nom
313     $this->db = $db;
314     // Logger
315     $this->addToLog("connectDatabase(): Connexion [".$this->database_config["phptype"]."] '".$this->database_config['database']."' OK", EXTRA_VERBOSE_MODE);
316    
317     // Compatibilite anterieure (deprecated)
318     $this->phptype = $this->database_config["phptype"];
319     $this->formatdate = $this->database_config["formatdate"];
320     $this->schema = $this->database_config["schema"];
321    
322     // Definition des constantes pour l'acces aux informations de la base
323     // donnees facilement.
324     $temp = "";
325     if ($this->database_config["schema"] != "") {
326     $temp = $this->database_config["schema"].".";
327     }
328     $temp = $temp.$this->database_config["prefixe"];
329     define("DB_PREFIXE", $temp);
330     define("FORMATDATE", $this->database_config["formatdate"]);
331    
332     // Definition des constantes pour l'acces aux informations de la base
333     // donnees facilement.
334     define("OM_DB_FORMATDATE", $this->database_config["formatdate"]);
335     define("OM_DB_PHPTYPE", $this->database_config["phptype"]);
336     define("OM_DB_DATABASE", $this->database_config["database"]);
337     define("OM_DB_SCHEMA", $this->database_config["schema"]);
338     define("OM_DB_TABLE_PREFIX", $this->database_config["prefixe"]);
339     }
340    
341     }
342    
343    
344     /**
345     *
346     *
347     */
348     function isDatabaseError($dbobj = NULL, $return = false) {
349    
350     //
351     if (database::isError($dbobj, $return)) {
352    
353     if ($return == true) {
354    
355     //
356     return true;
357    
358     }
359    
360     //
361     $class = "error";
362     $message = _("Erreur de base de donnees. Contactez votre administrateur.");
363     $this->addToMessage($class, $message);
364    
365     // Logger
366     $this->addToLog("isDatabaseError(): ".$dbobj->getDebugInfo(), DEBUG_MODE);
367     $this->addToLog("isDatabaseError(): ".$dbobj->getMessage(), DEBUG_MODE);
368    
369     //
370     $this->setFlag(NULL);
371     if (!defined('REST_REQUEST')) {
372     $this->display();
373     //
374     die();
375     }
376    
377     }
378    
379     //
380     return false;
381    
382     }
383    
384    
385    
386     /**
387     *
388     * @return void
389     */
390     function displayMessage($class = "", $message = "") {
391     if (!defined('REST_REQUEST')) {
392     $this->m->displayMessage($class, $message);
393     }
394     }
395    
396 fmichon 818 // }}}
397 nhaye 701
398 fmichon 818 // {{{ GESTION DES FICHIERS
399    
400 nhaye 701 /**
401     * Méthode de création de répertoire dans le dossier /trs correspondant
402     * à l'id du tableau de configuration de la connexion à la base de donnée
403     * (dyn/database.inc.php)
404     **/
405     function createFolder($folder) {
406     if (!mkdir($this->getPathFolderTrs().$folder)) {
407     // message
408     $message_class = "error";
409     $message = _("Echec lors de la creation du repertoires.");
410     $this->addToMessage ($message_class, $message);
411     }
412     }
413 nhaye 580
414     /*
415     * Methode permettant de lister tous les fichiers d'un dossier
416     */
417 nhaye 701 function getFolderFileList($id_folder) {
418 fmichon 565
419 nhaye 580 $file_list = array();
420 nhaye 700 if(is_dir($this->getPathFolderTrs().$id_folder)) {
421     if($dossier = opendir($this->getPathFolderTrs().$id_folder)) {
422 nhaye 580
423     while(false !== ($fichier = readdir($dossier))) {
424    
425     if($fichier != '.' && $fichier != '..' && !is_dir($fichier)) {
426 nhaye 700 $file_list[]=array( $fichier,
427     filemtime($this->getPathFolderTrs().$id_folder."/".$fichier));
428 nhaye 580 } // On ferme le if (qui permet de ne pas afficher index.php, etc.)
429    
430     } // On termine la boucle
431    
432     closedir($dossier);
433    
434     } else {
435 nhaye 701 $this->displayMessage("error", _("Les documents du repertoire ne sont pas accessible."));
436 nhaye 580 }
437     } else {
438 nhaye 701 $this->displayMessage("error", _("Ce repertoire n'a pas de document."));
439 nhaye 580 }
440     return $file_list;
441     }
442    
443 nhaye 637 /*
444     * Store the data recived in the request into a file on the
445     * local filesystem.
446     * @todo This function will need to be changed for the save to
447     * be on GED
448     * @param mixed $data The data received with the request
449     * @param string $id The consultation ID
450     * @return string OK on success, KO otherwise
451     */
452    
453     function storeDecisionFile(&$fichier_base64, $basename, $dossier, $prefix = '') {
454    
455     if (empty($fichier_base64)) {
456     $this -> addToMessage("error", _("Le fichier est vide"));
457     return false;
458     }
459     $dir = $this->getPathFolderTrs().$dossier;
460    
461     // if a file already exists by that name and it
462     // is not a directory, back out
463     /*if (file_exists($dir) AND is_dir($dir)) {
464     $this -> addToMessage("error", _("Le repertoire n'existe pas, le fichier ne peut pas etre enregistre."));
465     return false;
466     }*/
467     // if a dirextory by that name exists, make sure it does
468     // not already contain an avis de consultation, MAYBE WE DON'T NEED THIS
469 nhaye 638 if (file_exists($dir) AND is_dir($dir)) {
470 nhaye 637 $dir_contents = trim(shell_exec('ls '.$dir));
471     if (strpos($dir_contents, ' ') != false) {
472     $dir_contents = explode(' ', $dir_contents);
473     } else {
474     $dir_contents = array($dir_contents);
475     }
476     foreach ($dir_contents as $basefname) { // very useful for consultation
477     if (strpos($basefname, $prefix)!==false) {
478 nhaye 638 return _("Un retour d'avis existe deja.");
479    
480 nhaye 637 }
481     }
482 nhaye 675 } else {
483 nhaye 701 $this->createFolder($dossier);
484     }
485 nhaye 637
486     // store the file contents into the file named:
487     // consultation_<ID>_<file_name_received>
488     $file_len = strlen($fichier_base64);
489    
490     $filename = $dir."/".$prefix.$basename;
491    
492     $file = fopen($filename, 'w');
493     if (!$file) {
494 nhaye 638 return _("Echec a la creation du fichier.");
495 nhaye 637 }
496     // check that the number of bytes written is equal to the length
497     // of the data received
498     $num_written = fwrite($file, $fichier_base64, $file_len);
499    
500     if (!$num_written) {
501     // remove the file
502     // the return value from shell can't be used for checking since
503     // one can not know if the NULL returned is because there was no
504     // output or because there was an error
505     $ret = shell_exec("rm -f $filename 2>&1");
506     //if ($ret == NULL) { // an error occured while deleting the file
507     //}
508 nhaye 638 return _("La sauvegarde du fichier a echoue");
509 nhaye 637 }
510     fclose($file);
511     return true;
512     }
513 nhaye 677
514     /**
515     *
516     */
517     function notExistsError ($explanation = NULL) {
518     // message
519     $message_class = "error";
520     $message = _("Cette page n'existe pas.");
521     $this->addToMessage ($message_class, $message);
522     //
523     $this->setFlag(NULL);
524     $this->display();
525    
526     //
527     die();
528     }
529 fmichon 816
530 fmichon 818 // }}}
531    
532 fraynaud 96 }
533 fraynaud 3
534 fraynaud 96 ?>

[email protected]
ViewVC Help
Powered by ViewVC 1.1.26