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

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

Parent Directory Parent Directory | Revision Log Revision Log


Revision 531 - (hide annotations)
Mon Oct 22 16:21:15 2012 UTC (12 years, 3 months ago) by nhaye
File size: 16941 byte(s)
Ajout du fichier de configuration du SMTP pour envoi de mail
Surcharge de la méthode sendMail afin de pouvoir envoyer des pièces jointes

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 515 /**
41     * Constructeur
42     *
43     * @param
44     * @param
45     * @param
46     * @param
47     * @param
48     */
49     function __construct($flag = NULL, $right = NULL, $title = NULL, $icon = NULL, $help = NULL) {
50    
51     //
52     $this->timestart = microtime(true);
53    
54     // Logger
55     $this->addToLog("__construct() : 0.000 sec", VERBOSE_MODE);
56    
57     // Logger
58     $this->addToLog("__construct()", EXTRA_VERBOSE_MODE);
59    
60     // Instanciation de la classe message
61     $this->m = new message();
62    
63     //
64     $this->setParamsFromFiles();
65     $this->checkParams();
66    
67     //
68     $this->setDefaultValues();
69    
70     // Transformation des cinq éléments paramètres en attribut de l'objet
71     $this->setFlag($flag);
72     $this->setTitle($title);
73     $this->setRight($right);
74     $this->setHelp($help);
75     $this->setIcon($icon);
76    
77     // Vérification de l'authentification de l'utilisateur et stockage du
78     // résultat en attribut de l'objet
79     $this->authenticated = $this->isAuthenticated();
80    
81     // Déconnexion de l'utilisateur
82     if ($this->flag == "logout") {
83     $this->logout();
84     }
85    
86     // Connexion de l'utilisateur
87     if ($this->flag == "login") {
88     $this->login();
89     }
90    
91     // Demande de redéfinition du mot de passe
92     if ($this->flag == "password_reset") {
93     if ($this->authenticated) {
94     $this->redirectAuthenticatedUsers();
95     }
96     }
97    
98     //
99     if ($this->authenticated) {
100     // Connexion à la base de données si l'utilisateur est authentifié
101     $this->connectDatabase();
102     // on verifie que l'utilisateur connecté est toujours valide
103     if (!defined('REST_REQUEST')) {
104     $this->checkIfUserIsAlwaysValid();
105     }
106     }
107    
108     //
109     if (!in_array($this->flag, $this->special_flags)) {
110    
111     //
112     $this->getAllRights();
113    
114     //
115     $this->getCollectivite();
116    
117     //
118     $this->isAuthorized();
119    
120     }
121    
122     //
123     $this->setMoreParams();
124    
125     // Affichage HTML
126     $this->display();
127    
128     }
129 fraynaud 3
130 mlimic 515
131    
132     /**
133     * Desctructeur de la classe, cette methode (appelee automatiquement)
134     * permet d'afficher le footer de la page, le footer HTML, et de
135     * deconnecter la base de donnees
136     *
137     * @return void
138     */
139     function __destruct() {
140 fraynaud 3
141 mlimic 515 // Footer
142     if (!defined('REST_REQUEST')) {
143     $this->displayFooter();
144     }
145    
146     // Deconnexion SGBD
147     $this->disconnectDatabase();
148    
149     // Logger
150     $this->addToLog("__destruct()", EXTRA_VERBOSE_MODE);
151    
152     // Logger
153     $this->addToLog("__destruct() : ".$this->elapsedtime()." sec", VERBOSE_MODE);
154    
155     // Affichage des logs
156     logger::instance()->displayLog();
157    
158     // Footer HTML
159     if (!defined('REST_REQUEST')) {
160     $this->displayHTMLFooter();
161     }
162     }
163    
164    
165    
166     /**
167     * Cette methode permet de charger les differents fichiers de configs dans
168     * des attributs de la classe
169     *
170     * @return void
171     */
172     function setParamsFromFiles() {
173    
174     //
175     if (file_exists("../dyn/config.inc.php")) {
176     include_once("../dyn/config.inc.php");
177     }
178     if (isset($config)) {
179     $this->config = $config;
180     }
181    
182     //
183     if (file_exists("../dyn/database.inc.php")) {
184     include("../dyn/database.inc.php");
185     }
186    
187     if (isset($conn)) {
188     $this->conn = $conn;
189     //
190     foreach($this->conn as $key => $conn) {
191     $this->database[$key] = array(
192     'title' => $conn[0],
193     'phptype' => $conn[1],
194     'dbsyntax' => $conn[2],
195     'username' => $conn[3],
196     'password' => $conn[4],
197     'protocol' => $conn[5],
198     'hostspec' => $conn[6],
199     'port' => $conn[7],
200     'socket' => $conn[8],
201     'database' => $conn[9],
202     'formatdate' => $conn[10],
203     'schema' => $conn[11],
204     'prefixe' => (isset($conn[12]) ? $conn[12]: ""),
205     'directory' => (isset($conn[13]) ? $conn[13]: ""),
206     'mail' => (isset($conn[14]) ? $conn[14]: ""),
207     );
208     }
209     }
210    
211     //
212     if (file_exists("../dyn/directory.inc.php")) {
213     include_once("../dyn/directory.inc.php");
214     }
215     if (isset($directory)) {
216     $this->directory = $directory;
217     }
218    
219     //
220     if (file_exists("../dyn/mail.inc.php")) {
221     include_once("../dyn/mail.inc.php");
222     }
223     if (isset($mail)) {
224     $this->mail = $mail;
225     }
226    
227     //
228     if (file_exists("../dyn/menu.inc.php")) {
229     include_once("../dyn/menu.inc.php");
230     }
231     if (isset($menu)) {
232     $this->menu = $menu;
233     }
234    
235     //
236     if (file_exists("../dyn/actions.inc.php")) {
237     include_once("../dyn/actions.inc.php");
238     }
239     if (isset($actions)) {
240     $this->actions = $actions;
241     }
242    
243     //
244     if (file_exists("../dyn/shortlinks.inc.php")) {
245     include_once("../dyn/shortlinks.inc.php");
246     }
247     if (isset($shortlinks)) {
248     $this->shortlinks = $shortlinks;
249     }
250    
251     //
252     if (file_exists("../dyn/footer.inc.php")) {
253     include_once("../dyn/footer.inc.php");
254     }
255     if (isset($footer)) {
256     $this->footer = $footer;
257     }
258    
259     //
260     if (file_exists("../dyn/version.inc.php")) {
261     include_once("../dyn/version.inc.php");
262     }
263     if (isset($version)) {
264     $this->version = $version;
265     }
266    
267     }
268    
269    
270     /**
271     * Cette méthode permet de vérifier si l'utilisateur est autorisé ou non à
272     * accéder à un élément et permet d'agir en conséquence
273     *
274     * @param
275     * @return mixed
276     */
277     function isAuthorized($obj = NULL, $operator = "AND") {
278    
279     //
280     if ($obj == NULL) {
281     $obj = $this->right;
282     }
283     //
284     if ($obj == NULL) {
285     return true;
286     }
287    
288     // L'utilisateur n'est pas autorisé à accéder à l'élément
289     if (!$this->isAccredited($obj, $operator)) {
290    
291     //
292     $message_class = "error";
293     $message = _("Droits insuffisants. Vous n'avez pas suffisament de ".
294     "droits pour acceder a cette page.");
295     $this->addToMessage($message_class, $message);
296    
297     //
298     $this->setFlag(NULL);
299     if (!defined('REST_REQUEST')) {
300     $this->display();
301     }
302    
303     // Arrêt du script
304     die();
305    
306     }
307    
308     // L'utilisateur est autorisé à accéder à l'élément
309     return true;
310    
311     }
312    
313    
314    
315     /**
316     *
317     */
318     function setDatabaseConfig() {
319    
320     // On recupere la liste des cles du tableau associatif de configuration
321     // de la connexion aux bases de donnees
322     $database_keys = array_keys($this->database);
323     // Si il y a plusieurs cles
324     if (count($database_keys) != 0) {
325     // On configure la premiere par defaut
326     $coll = $database_keys[0];
327     } else { // Si il n'y a aucune cle
328     // Aucune base n'est configuree dans le fichier de configuration
329     // donc on affiche un message d'erreur
330     $class = "error";
331     $message = _("Erreur de configuration. Contactez votre administrateur.");
332     $this->addToMessage($class, $message);
333     // Debug
334     $this->addToLog("setDatabaseConfig(): ERR", DEBUG_MODE);
335     $this->addToLog("ERR: "._("Aucune entree dans le fichier de configuration"), DEBUG_MODE);
336     // On affiche la structure de la page
337     $this->setFlag(NULL);
338     $this->display();
339     // On arrete le traitement en cours
340     die();
341     }
342    
343     // Si la variable coll (representant la cle de la base sur laquelle
344     // nous travaillons) n'est pas en variable SESSION ou est en variable
345     // SESSION mais n'existe pas dans les cles du tableau associatif de
346     // configuration de la connexion aux bases de donnees
347     if (!isset($_SESSION['coll']) or
348     (isset($_SESSION['coll']) and
349     !isset($this->database[$_SESSION['coll']]))) {
350     // On configure la premiere par defaut
351     $_SESSION['coll'] = $coll;
352     } else {
353     // On recupere la cle du tableau associatif de configuration de la
354     // connexion aux bases de donnees correspondante a la base de
355     // donnees sur laquelle nous travaillons
356     $coll = $_SESSION['coll'];
357     }
358    
359     // On renvoi le tableau de parametres pour la connexion a la base
360     $this->database_config = $this->database[$coll];
361     }
362    
363    
364     /**
365     * Cette méthode permet de se connecter à la base de données
366     * @return void
367     */
368     function connectDatabase() {
369     // On inclus la classe d'abstraction de base de donnees
370     require_once PATH_OPENMAIRIE."om_database.class.php";
371     // On recupere le tableau de parametres pour la connexion a la base
372     $this->setDatabaseConfig();
373     // On fixe les options
374     $options = array(
375     'debug' => 2,
376     'portability' => DB_PORTABILITY_ALL,
377     );
378     // Instanciation de l'objet connexion a la base de donnees
379     $db = database::connect($this->database_config, $options);
380     // Logger
381     $this->addToLog("connectDatabase(): "._("Tentative de connexion au SGBD"), EXTRA_VERBOSE_MODE);
382     // Traitement particulier de l'erreur en cas d'erreur de connexion a la
383     // base de donnees
384     if (database::isError($db, true)) {
385     // Deconnexion de l'utilisateur
386     $this->logout();
387     // On affiche la page de login a l'ecran
388     $this->setFlag("login");
389     // On affiche un message d'erreur convivial pour l'utilisateur
390     $class = "error";
391     $message = _("Erreur de base de donnees. Contactez votre administrateur.");
392     $this->addToMessage($class, $message);
393     // On affiche la page
394     if (!defined('REST_REQUEST')) {
395     $this->display();
396     }
397     // On arrete le script
398     die();
399     } else {
400     // On affecte la resource a l'attribut de la classe du meme nom
401     $this->db = $db;
402     // Logger
403     $this->addToLog("connectDatabase(): Connexion [".$this->database_config["phptype"]."] '".$this->database_config['database']."' OK", EXTRA_VERBOSE_MODE);
404    
405     // Compatibilite anterieure (deprecated)
406     $this->phptype = $this->database_config["phptype"];
407     $this->formatdate = $this->database_config["formatdate"];
408     $this->schema = $this->database_config["schema"];
409    
410     // Definition des constantes pour l'acces aux informations de la base
411     // donnees facilement.
412     $temp = "";
413     if ($this->database_config["schema"] != "") {
414     $temp = $this->database_config["schema"].".";
415     }
416     $temp = $temp.$this->database_config["prefixe"];
417     define("DB_PREFIXE", $temp);
418     define("FORMATDATE", $this->database_config["formatdate"]);
419    
420     // Definition des constantes pour l'acces aux informations de la base
421     // donnees facilement.
422     define("OM_DB_FORMATDATE", $this->database_config["formatdate"]);
423     define("OM_DB_PHPTYPE", $this->database_config["phptype"]);
424     define("OM_DB_DATABASE", $this->database_config["database"]);
425     define("OM_DB_SCHEMA", $this->database_config["schema"]);
426     define("OM_DB_TABLE_PREFIX", $this->database_config["prefixe"]);
427     }
428    
429     }
430    
431    
432     /**
433     *
434     *
435     */
436     function isDatabaseError($dbobj = NULL, $return = false) {
437    
438     //
439     if (database::isError($dbobj, $return)) {
440    
441     if ($return == true) {
442    
443     //
444     return true;
445    
446     }
447    
448     //
449     $class = "error";
450     $message = _("Erreur de base de donnees. Contactez votre administrateur.");
451     $this->addToMessage($class, $message);
452    
453     // Logger
454     $this->addToLog("isDatabaseError(): ".$dbobj->getDebugInfo(), DEBUG_MODE);
455     $this->addToLog("isDatabaseError(): ".$dbobj->getMessage(), DEBUG_MODE);
456    
457     //
458     $this->setFlag(NULL);
459     if (!defined('REST_REQUEST')) {
460     $this->display();
461     //
462     die();
463     }
464    
465     }
466    
467     //
468     return false;
469    
470     }
471    
472    
473    
474     /**
475     *
476     * @return void
477     */
478     function displayMessage($class = "", $message = "") {
479     if (!defined('REST_REQUEST')) {
480     $this->m->displayMessage($class, $message);
481     }
482     }
483    
484    
485     /**
486     *
487     */
488     function addToLog($message, $type = DEBUG_MODE) {
489     //
490     if (!defined('REST_REQUEST')) {
491     logger::instance()->log("class ".get_class($this)." - ".$message, $type);
492     }
493     }
494    
495 nhaye 531 /**
496     * Envoie un mail avec piece jointe
497     *
498     * @param string $title Titre du mail
499     * @param string $message Corps du mail
500     * @param string $recipient Destinataire du mail
501     * @param array $file Destinataire du mail
502     * @access public
503     * @return bool True si le mail est correctement envoye, false sinon.
504     */
505     public function sendMail($title, $message, $recipient, $file = array()) {
506    
507     @include_once "../php/phpmailer/class.phpmailer.php";
508    
509     if (!class_exists("PHPMailer")) {
510     $this->addToLog("sendMail(): !class_exists(\"PHPMailer\")", DEBUG_MODE);
511     return false;
512     }
513 mlimic 515
514 nhaye 531 //
515     $this->setMailConfig();
516    
517     //
518     if ($this->mail_config == false) {
519     $this->addToLog("sendMail(): aucune configuration mail", DEBUG_MODE);
520     return false;
521     }
522    
523     //
524     $mail = new PHPMailer(true);
525    
526     //
527     $mail->IsSMTP();
528     $mail->Username = $this->mail_config["mail_username"];
529     $mail->Password = $this->mail_config["mail_pass"];
530     if ($this->mail_config["mail_username"] == '') {
531     $mail->SMTPAuth = false;
532     } else {
533     $mail->SMTPAuth = true;
534     }
535     $mail->Port = $this->mail_config["mail_port"];
536     $mail->Host = $this->mail_config["mail_host"];
537     $mail->AddReplyTo($this->mail_config["mail_from"], $this->mail_config["mail_from_name"]);
538     $mail->From = $this->mail_config["mail_from"];
539     $mail->FromName = $this->mail_config["mail_from_name"];
540     foreach (explode(",",$recipient) as $adresse) {
541     if (!$this->checkValidEmailAddress($adresse)) {
542     $this->addToLog("sendMail(): courriel incorrect ".$adresse, DEBUG_MODE);
543     return false;
544     } else
545     $mail->AddAddress(trim($adresse));
546     }
547     $mail->IsHTML(true);
548    
549     // Corps du message
550     $mail_body ="<html>";
551     $mail_body .= "<head><title>".$title."</title></head>";
552     $mail_body .= "<body>".$message."</body>";
553     $mail_body .= "</html>";
554    
555     $mail->Subject = $title;
556     $mail->MsgHTML($mail_body);
557     foreach($file as $oneFile) {
558    
559     if($oneFile['stream']){
560     $mail->AddStringAttachment($oneFile['content'], $oneFile['title'], $oneFile['encoding'] = 'base64',$oneFile['type'] = 'application/octet-stream');
561     } else{
562     $mail->AddAttachment($oneFile['url']);
563     }
564     }
565     // Envoie de l'email
566     if ($mail->Send()) {
567     return true;
568     } else {
569     $this->addToLog("sendMail(): ".$mail->ErrorInfo, DEBUG_MODE);
570     return false;
571     }
572     }
573    
574 fraynaud 96 }
575 fraynaud 3
576 fraynaud 96 ?>

[email protected]
ViewVC Help
Powered by ViewVC 1.1.26