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

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

Parent Directory Parent Directory | Revision Log Revision Log


Revision 700 - (hide annotations)
Thu Nov 15 13:47:38 2012 UTC (12 years, 2 months ago) by nhaye
File size: 21510 byte(s)
Modification de l'affichage des documments dans la synthèse de dossier des demandes d'avis,
correction de l'ordre des champs de la synthèse des dossiers
Modification de la méthode permettant de lister les fichiers liés aux dossiers.

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    
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 nhaye 678 var $om_utilisateur = array();
80     var $user_is_instr = false;
81     var $user_is_service_ext = false;
82    
83 mlimic 515 /**
84 nhaye 678 * 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 mlimic 515 * 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 fraynaud 3
99 mlimic 515 // 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 nhaye 531 /**
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 mlimic 515
369 nhaye 531 //
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 nhaye 532
384     $mail->SMTPAuth = true; // enable SMTP authentication
385     $mail->SMTPSecure = "tls";
386 nhaye 531 $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 fmichon 565 /**
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 nhaye 580
446     /*
447     * Methode permettant de lister tous les fichiers d'un dossier
448     */
449     function get_folder_file_list($id_folder) {
450 fmichon 565
451 nhaye 580 $file_list = array();
452 nhaye 700 if(is_dir($this->getPathFolderTrs().$id_folder)) {
453     if($dossier = opendir($this->getPathFolderTrs().$id_folder)) {
454 nhaye 580
455     while(false !== ($fichier = readdir($dossier))) {
456    
457     if($fichier != '.' && $fichier != '..' && !is_dir($fichier)) {
458 nhaye 700 $file_list[]=array( $fichier,
459     filemtime($this->getPathFolderTrs().$id_folder."/".$fichier));
460 nhaye 580 } // 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 nhaye 637 /*
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 nhaye 638 if (file_exists($dir) AND is_dir($dir)) {
502 nhaye 637 $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 nhaye 638 return _("Un retour d'avis existe deja.");
511    
512 nhaye 637 }
513     }
514 nhaye 675 } else {
515     return _("Le dossier n'existe pas.");
516 nhaye 637 }
517     // if no file by that name exists, create the directory
518    
519     if (!file_exists($dir)) {
520     if (!mkdir($dir, 0775)) {
521 nhaye 638 return _("Erreur dans la création de répertoire.");
522 nhaye 637 }
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 nhaye 638 return _("Echec a la creation du fichier.");
535 nhaye 637 }
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 nhaye 638 return _("La sauvegarde du fichier a echoue");
549 nhaye 637 }
550     fclose($file);
551     return true;
552     }
553 nhaye 677
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 nhaye 678
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 fraynaud 96 }
632 fraynaud 3
633 fraynaud 96 ?>

[email protected]
ViewVC Help
Powered by ViewVC 1.1.26