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

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

Parent Directory Parent Directory | Revision Log Revision Log


Revision 686 - (show annotations)
Wed Nov 14 12:50:34 2012 UTC (12 years, 2 months ago) by fmichon
File size: 21400 byte(s)
Amélioration de la gestion de la division par l'ajout de l'info en variable de session et des filtres dans les listings

1 <?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
7 * @version SVN : $Id: utils.class.php 547 2011-08-25 12:03:42Z fmichon $
8 */
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
40 // {{{
41
42 // Ajout de variables de session contenant la division pour permettre une
43 // utilisation plus efficace dans les requetes
44 function triggerAfterLogin($utilisateur = NULL) {
45 //
46 $sql = "SELECT instructeur.division, division.code
47 FROM ".DB_PREFIXE."instructeur
48 LEFT JOIN ".DB_PREFIXE."division
49 ON instructeur.division = division.division
50 WHERE instructeur.om_utilisateur='".$utilisateur["om_utilisateur"]."'";
51 $res = $this->db->query($sql);
52 $this->addToLog("triggerAfterLogin(): db->query(\"".$sql."\");", VERBOSE_MODE);
53 $this->isDatabaseError($res);
54 $row = $res->fetchrow(DB_FETCHMODE_ASSOC);
55 //
56 if (isset($row["division"]) && $row["division"] != NULL) {
57 $_SESSION["division"] = $row["division"];
58 $_SESSION["division_code"] = $row["code"];
59 } else {
60 $_SESSION["division"] = "0";
61 $_SESSION["division_code"] = "";
62 }
63
64 }
65
66 // Affichage des actions supplémentaires
67 function displayActionExtras() {
68 // Affichage de la division si l'utilisateur en possède une
69 if ($_SESSION["division"] != 0) {
70 echo "\t\t\t<li class=\"action-division\">";
71 echo "(".$_SESSION['division_code'].")";
72 echo "</li>\n";
73 }
74 }
75
76 // }}}
77
78
79 var $om_utilisateur = array();
80 var $user_is_instr = false;
81 var $user_is_service_ext = false;
82
83 /**
84 * Surcharge du constructeur de la classe
85 */
86 function __construct($flag = NULL, $right = NULL, $title = NULL, $icon = NULL, $help = NULL) {
87 parent::__construct($flag, $right, $title, $icon, $help);
88 $this->getUserInfos();
89 }
90 /**
91 * Desctructeur de la classe, cette methode (appelee automatiquement)
92 * permet d'afficher le footer de la page, le footer HTML, et de
93 * deconnecter la base de donnees
94 *
95 * @return void
96 */
97 function __destruct() {
98
99 // Footer
100 if (!defined('REST_REQUEST')) {
101 $this->displayFooter();
102 }
103
104 // Deconnexion SGBD
105 $this->disconnectDatabase();
106
107 // Logger
108 $this->addToLog("__destruct()", EXTRA_VERBOSE_MODE);
109
110 // Logger
111 $this->addToLog("__destruct() : ".$this->elapsedtime()." sec", VERBOSE_MODE);
112
113 // Affichage des logs
114 logger::instance()->displayLog();
115
116 // Footer HTML
117 if (!defined('REST_REQUEST')) {
118 $this->displayHTMLFooter();
119 }
120 }
121
122
123
124
125 /**
126 * Cette méthode permet de vérifier si l'utilisateur est autorisé ou non à
127 * accéder à un élément et permet d'agir en conséquence
128 *
129 * @param
130 * @return mixed
131 */
132 function isAuthorized($obj = NULL, $operator = "AND") {
133
134 //
135 if ($obj == NULL) {
136 $obj = $this->right;
137 }
138 //
139 if ($obj == NULL) {
140 return true;
141 }
142
143 // L'utilisateur n'est pas autorisé à accéder à l'élément
144 if (!$this->isAccredited($obj, $operator)) {
145
146 //
147 $message_class = "error";
148 $message = _("Droits insuffisants. Vous n'avez pas suffisament de ".
149 "droits pour acceder a cette page.");
150 $this->addToMessage($message_class, $message);
151
152 //
153 $this->setFlag(NULL);
154 if (!defined('REST_REQUEST')) {
155 $this->display();
156 }
157
158 // Arrêt du script
159 die();
160
161 }
162
163 // L'utilisateur est autorisé à accéder à l'élément
164 return true;
165
166 }
167
168
169
170 /**
171 *
172 */
173 function setDatabaseConfig() {
174
175 // On recupere la liste des cles du tableau associatif de configuration
176 // de la connexion aux bases de donnees
177 $database_keys = array_keys($this->database);
178 // Si il y a plusieurs cles
179 if (count($database_keys) != 0) {
180 // On configure la premiere par defaut
181 $coll = $database_keys[0];
182 } else { // Si il n'y a aucune cle
183 // Aucune base n'est configuree dans le fichier de configuration
184 // donc on affiche un message d'erreur
185 $class = "error";
186 $message = _("Erreur de configuration. Contactez votre administrateur.");
187 $this->addToMessage($class, $message);
188 // Debug
189 $this->addToLog("setDatabaseConfig(): ERR", DEBUG_MODE);
190 $this->addToLog("ERR: "._("Aucune entree dans le fichier de configuration"), DEBUG_MODE);
191 // On affiche la structure de la page
192 $this->setFlag(NULL);
193 $this->display();
194 // On arrete le traitement en cours
195 die();
196 }
197
198 // Si la variable coll (representant la cle de la base sur laquelle
199 // nous travaillons) n'est pas en variable SESSION ou est en variable
200 // SESSION mais n'existe pas dans les cles du tableau associatif de
201 // configuration de la connexion aux bases de donnees
202 if (!isset($_SESSION['coll']) or
203 (isset($_SESSION['coll']) and
204 !isset($this->database[$_SESSION['coll']]))) {
205 // On configure la premiere par defaut
206 $_SESSION['coll'] = $coll;
207 } else {
208 // On recupere la cle du tableau associatif de configuration de la
209 // connexion aux bases de donnees correspondante a la base de
210 // donnees sur laquelle nous travaillons
211 $coll = $_SESSION['coll'];
212 }
213
214 // On renvoi le tableau de parametres pour la connexion a la base
215 $this->database_config = $this->database[$coll];
216 }
217
218
219 /**
220 * Cette méthode permet de se connecter à la base de données
221 * @return void
222 */
223 function connectDatabase() {
224 // On inclus la classe d'abstraction de base de donnees
225 require_once PATH_OPENMAIRIE."om_database.class.php";
226 // On recupere le tableau de parametres pour la connexion a la base
227 $this->setDatabaseConfig();
228 // On fixe les options
229 $options = array(
230 'debug' => 2,
231 'portability' => DB_PORTABILITY_ALL,
232 );
233 // Instanciation de l'objet connexion a la base de donnees
234 $db = database::connect($this->database_config, $options);
235 // Logger
236 $this->addToLog("connectDatabase(): "._("Tentative de connexion au SGBD"), EXTRA_VERBOSE_MODE);
237 // Traitement particulier de l'erreur en cas d'erreur de connexion a la
238 // base de donnees
239 if (database::isError($db, true)) {
240 // Deconnexion de l'utilisateur
241 $this->logout();
242 // On affiche la page de login a l'ecran
243 $this->setFlag("login");
244 // On affiche un message d'erreur convivial pour l'utilisateur
245 $class = "error";
246 $message = _("Erreur de base de donnees. Contactez votre administrateur.");
247 $this->addToMessage($class, $message);
248 // On affiche la page
249 if (!defined('REST_REQUEST')) {
250 $this->display();
251 }
252 // On arrete le script
253 die();
254 } else {
255 // On affecte la resource a l'attribut de la classe du meme nom
256 $this->db = $db;
257 // Logger
258 $this->addToLog("connectDatabase(): Connexion [".$this->database_config["phptype"]."] '".$this->database_config['database']."' OK", EXTRA_VERBOSE_MODE);
259
260 // Compatibilite anterieure (deprecated)
261 $this->phptype = $this->database_config["phptype"];
262 $this->formatdate = $this->database_config["formatdate"];
263 $this->schema = $this->database_config["schema"];
264
265 // Definition des constantes pour l'acces aux informations de la base
266 // donnees facilement.
267 $temp = "";
268 if ($this->database_config["schema"] != "") {
269 $temp = $this->database_config["schema"].".";
270 }
271 $temp = $temp.$this->database_config["prefixe"];
272 define("DB_PREFIXE", $temp);
273 define("FORMATDATE", $this->database_config["formatdate"]);
274
275 // Definition des constantes pour l'acces aux informations de la base
276 // donnees facilement.
277 define("OM_DB_FORMATDATE", $this->database_config["formatdate"]);
278 define("OM_DB_PHPTYPE", $this->database_config["phptype"]);
279 define("OM_DB_DATABASE", $this->database_config["database"]);
280 define("OM_DB_SCHEMA", $this->database_config["schema"]);
281 define("OM_DB_TABLE_PREFIX", $this->database_config["prefixe"]);
282 }
283
284 }
285
286
287 /**
288 *
289 *
290 */
291 function isDatabaseError($dbobj = NULL, $return = false) {
292
293 //
294 if (database::isError($dbobj, $return)) {
295
296 if ($return == true) {
297
298 //
299 return true;
300
301 }
302
303 //
304 $class = "error";
305 $message = _("Erreur de base de donnees. Contactez votre administrateur.");
306 $this->addToMessage($class, $message);
307
308 // Logger
309 $this->addToLog("isDatabaseError(): ".$dbobj->getDebugInfo(), DEBUG_MODE);
310 $this->addToLog("isDatabaseError(): ".$dbobj->getMessage(), DEBUG_MODE);
311
312 //
313 $this->setFlag(NULL);
314 if (!defined('REST_REQUEST')) {
315 $this->display();
316 //
317 die();
318 }
319
320 }
321
322 //
323 return false;
324
325 }
326
327
328
329 /**
330 *
331 * @return void
332 */
333 function displayMessage($class = "", $message = "") {
334 if (!defined('REST_REQUEST')) {
335 $this->m->displayMessage($class, $message);
336 }
337 }
338
339
340 /**
341 *
342 */
343 function addToLog($message, $type = DEBUG_MODE) {
344 //
345 if (!defined('REST_REQUEST')) {
346 logger::instance()->log("class ".get_class($this)." - ".$message, $type);
347 }
348 }
349
350 /**
351 * Envoie un mail avec piece jointe
352 *
353 * @param string $title Titre du mail
354 * @param string $message Corps du mail
355 * @param string $recipient Destinataire du mail
356 * @param array $file Destinataire du mail
357 * @access public
358 * @return bool True si le mail est correctement envoye, false sinon.
359 */
360 public function sendMail($title, $message, $recipient, $file = array()) {
361
362 @include_once "../php/phpmailer/class.phpmailer.php";
363
364 if (!class_exists("PHPMailer")) {
365 $this->addToLog("sendMail(): !class_exists(\"PHPMailer\")", DEBUG_MODE);
366 return false;
367 }
368
369 //
370 $this->setMailConfig();
371
372 //
373 if ($this->mail_config == false) {
374 $this->addToLog("sendMail(): aucune configuration mail", DEBUG_MODE);
375 return false;
376 }
377
378 //
379 $mail = new PHPMailer(true);
380
381 //
382 $mail->IsSMTP();
383
384 $mail->SMTPAuth = true; // enable SMTP authentication
385 $mail->SMTPSecure = "tls";
386 $mail->Username = $this->mail_config["mail_username"];
387 $mail->Password = $this->mail_config["mail_pass"];
388 if ($this->mail_config["mail_username"] == '') {
389 $mail->SMTPAuth = false;
390 } else {
391 $mail->SMTPAuth = true;
392 }
393 $mail->Port = $this->mail_config["mail_port"];
394 $mail->Host = $this->mail_config["mail_host"];
395 $mail->AddReplyTo($this->mail_config["mail_from"], $this->mail_config["mail_from_name"]);
396 $mail->From = $this->mail_config["mail_from"];
397 $mail->FromName = $this->mail_config["mail_from_name"];
398 foreach (explode(",",$recipient) as $adresse) {
399 if (!$this->checkValidEmailAddress($adresse)) {
400 $this->addToLog("sendMail(): courriel incorrect ".$adresse, DEBUG_MODE);
401 return false;
402 } else
403 $mail->AddAddress(trim($adresse));
404 }
405 $mail->IsHTML(true);
406
407 // Corps du message
408 $mail_body ="<html>";
409 $mail_body .= "<head><title>".$title."</title></head>";
410 $mail_body .= "<body>".$message."</body>";
411 $mail_body .= "</html>";
412
413 $mail->Subject = $title;
414 $mail->MsgHTML($mail_body);
415 foreach($file as $oneFile) {
416
417 if($oneFile['stream']){
418 $mail->AddStringAttachment($oneFile['content'], $oneFile['title'], $oneFile['encoding'] = 'base64',$oneFile['type'] = 'application/octet-stream');
419 } else{
420 $mail->AddAttachment($oneFile['url']);
421 }
422 }
423 // Envoie de l'email
424 if ($mail->Send()) {
425 return true;
426 } else {
427 $this->addToLog("sendMail(): ".$mail->ErrorInfo, DEBUG_MODE);
428 return false;
429 }
430 }
431
432 /**
433 *
434 */
435 function isAccredited($obj = NULL, $operator = "AND") {
436 // Lorsque l'utilisateur a le login 'admin' alors il est authorisé à
437 // accéder à toutes les fonctions du logiciel
438 // XXX à modifier pour changer ça vers un profil et non un login utilisateur
439 if ($_SESSION["login"] == "admin") {
440 return true;
441 }
442 // Fonctionnement standard
443 return parent::isAccredited($obj, $operator);
444 }
445
446 /*
447 * Methode permettant de lister tous les fichiers d'un dossier
448 */
449 function get_folder_file_list($id_folder) {
450
451 $file_list = array();
452 if(is_dir('../trs/'.$id_folder)) {
453 if($dossier = opendir('../trs/'.$id_folder)) {
454
455 while(false !== ($fichier = readdir($dossier))) {
456
457 if($fichier != '.' && $fichier != '..' && !is_dir($fichier)) {
458
459 $file_list[]=$fichier;
460 } // On ferme le if (qui permet de ne pas afficher index.php, etc.)
461
462 } // On termine la boucle
463
464 closedir($dossier);
465
466 } else {
467 $this->displayMessage("error", _("Les documents du dossier ne sont pas accessible."));
468 }
469 } else {
470 $this->displayMessage("error", _("Ce dossier n'a pas de document."));
471 }
472 return $file_list;
473 }
474
475 /*
476 * Store the data recived in the request into a file on the
477 * local filesystem.
478 * @todo This function will need to be changed for the save to
479 * be on GED
480 * @param mixed $data The data received with the request
481 * @param string $id The consultation ID
482 * @return string OK on success, KO otherwise
483 */
484
485 function storeDecisionFile(&$fichier_base64, $basename, $dossier, $prefix = '') {
486
487 if (empty($fichier_base64)) {
488 $this -> addToMessage("error", _("Le fichier est vide"));
489 return false;
490 }
491 $dir = $this->getPathFolderTrs().$dossier;
492
493 // if a file already exists by that name and it
494 // is not a directory, back out
495 /*if (file_exists($dir) AND is_dir($dir)) {
496 $this -> addToMessage("error", _("Le repertoire n'existe pas, le fichier ne peut pas etre enregistre."));
497 return false;
498 }*/
499 // if a dirextory by that name exists, make sure it does
500 // not already contain an avis de consultation, MAYBE WE DON'T NEED THIS
501 if (file_exists($dir) AND is_dir($dir)) {
502 $dir_contents = trim(shell_exec('ls '.$dir));
503 if (strpos($dir_contents, ' ') != false) {
504 $dir_contents = explode(' ', $dir_contents);
505 } else {
506 $dir_contents = array($dir_contents);
507 }
508 foreach ($dir_contents as $basefname) { // very useful for consultation
509 if (strpos($basefname, $prefix)!==false) {
510 return _("Un retour d'avis existe deja.");
511
512 }
513 }
514 } else {
515 return _("Le dossier n'existe pas.");
516 }
517 // if no file by that name exists, create the directory
518
519 if (!file_exists($dir)) {
520 if (!mkdir($dir, 0775)) {
521 return _("Erreur dans la création de répertoire.");
522 }
523 }
524
525
526 // store the file contents into the file named:
527 // consultation_<ID>_<file_name_received>
528 $file_len = strlen($fichier_base64);
529
530 $filename = $dir."/".$prefix.$basename;
531
532 $file = fopen($filename, 'w');
533 if (!$file) {
534 return _("Echec a la creation du fichier.");
535 }
536 // check that the number of bytes written is equal to the length
537 // of the data received
538 $num_written = fwrite($file, $fichier_base64, $file_len);
539
540 if (!$num_written) {
541 // remove the file
542 // the return value from shell can't be used for checking since
543 // one can not know if the NULL returned is because there was no
544 // output or because there was an error
545 $ret = shell_exec("rm -f $filename 2>&1");
546 //if ($ret == NULL) { // an error occured while deleting the file
547 //}
548 return _("La sauvegarde du fichier a echoue");
549 }
550 fclose($file);
551 return true;
552 }
553
554 /**
555 *
556 */
557 function notExistsError ($explanation = NULL) {
558 // message
559 $message_class = "error";
560 $message = _("Cette page n'existe pas.");
561 $this->addToMessage ($message_class, $message);
562 //
563 $this->setFlag(NULL);
564 $this->display();
565
566 //
567 die();
568 }
569
570 /**
571 * Méthode de récupération des informations de l'utilisateur connecté.
572 */
573 function getUserInfos() {
574
575 // Si l'utilisateur est loggé $_SESSION existe
576 if(isset($_SESSION['login']) AND !empty($_SESSION['login'])) {
577
578 // Récupération des infos utilisateur
579 $sqlUser = "SELECT om_utilisateur, nom, email, login, om_collectivite, om_profil ".
580 "FROM om_utilisateur WHERE login = '".$_SESSION['login']."'";
581 $resUser=$this->db->query($sqlUser);
582 $this->addToLog("getUserInfos(): db->query(\"".$sqlUser."\");", VERBOSE_MODE);
583 $this->isDatabaseError($resUser);
584 $this->om_utilisateur=&$resUser->fetchRow(DB_FETCHMODE_ASSOC);
585
586 // Récupération des infos instructeur
587 $sqlInstr = "SELECT instructeur.instructeur, instructeur.nom, instructeur.telephone, division.code, division.libelle ".
588 "FROM instructeur INNER JOIN division ON division.division=instructeur.division ".
589 "WHERE instructeur.om_utilisateur = ".$this->om_utilisateur['om_utilisateur'];
590 $resInstr=$this->db->query($sqlInstr);
591 $this->addToLog("getUserInfos(): db->query(\"".$sqlInstr."\");", VERBOSE_MODE);
592 $this->isDatabaseError($resInstr);
593 $tempInstr=&$resInstr->fetchRow(DB_FETCHMODE_ASSOC);
594 // Si il y a un resultat c'est un instructeur
595 if(count($tempInstr)>0) {
596 $this->user_is_instr=true;
597 $this->om_utilisateur = array_merge($this->om_utilisateur,$tempInstr);
598 }
599
600 // Récupération des infos de services ext consultés
601 $sqlServExt = "SELECT service.service, service.abrege, service.libelle ".
602 "FROM service ".
603 "INNER JOIN lien_service_om_utilisateur ON lien_service_om_utilisateur.service=service.service ".
604 "WHERE lien_service_om_utilisateur.om_utilisateur = ".$this->om_utilisateur['om_utilisateur'];
605 $resServExt=$this->db->query($sqlServExt);
606 $this->addToLog("getUserInfos(): db->query(\"".$sqlServExt."\");", VERBOSE_MODE);
607 $this->isDatabaseError($resServExt);
608
609 while ($tempServExt=&$resServExt->fetchRow(DB_FETCHMODE_ASSOC)) {
610 $this->om_utilisateur['service'][]=$tempServExt;
611 }
612 // Si il y a un resultat c'est un utilisateur de service
613 if(isset($this->om_utilisateur['service'])) {
614 $this->user_is_service_ext=true;
615 }
616 }
617 }
618
619 /**
620 * getter user_is_service_ext
621 */
622 function isUserServiceExt() {
623 return $this->user_is_service_ext;
624 }
625 /**
626 * getter user_is_instr
627 */
628 function isUserInstructeur() {
629 return $this->user_is_instr;
630 }
631 }
632
633 ?>

[email protected]
ViewVC Help
Powered by ViewVC 1.1.26