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

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

Parent Directory Parent Directory | Revision Log Revision Log


Revision 638 - (hide annotations)
Fri Nov 9 10:14:19 2012 UTC (12 years, 2 months ago) by nhaye
File size: 16363 byte(s)
Modification du retour d'erreur de la méthode d'enregistrement de consultation,
ajout de commentaires et modification du nom de fichier en fonction de la réussite ou non de l'enregistrement

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

[email protected]
ViewVC Help
Powered by ViewVC 1.1.26