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

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

Parent Directory Parent Directory | Revision Log Revision Log


Revision 565 - (show annotations)
Wed Oct 31 13:00:45 2012 UTC (12 years, 3 months ago) by fmichon
File size: 14607 byte(s)
Changement de comportement important : les profils ne sont plus hiérarchiques et seul l'utilisateur 'admin' a tous les droits sur l'application

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 * 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
130
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
141 // 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 /**
168 * Cette méthode permet de vérifier si l'utilisateur est autorisé ou non à
169 * accéder à un élément et permet d'agir en conséquence
170 *
171 * @param
172 * @return mixed
173 */
174 function isAuthorized($obj = NULL, $operator = "AND") {
175
176 //
177 if ($obj == NULL) {
178 $obj = $this->right;
179 }
180 //
181 if ($obj == NULL) {
182 return true;
183 }
184
185 // L'utilisateur n'est pas autorisé à accéder à l'élément
186 if (!$this->isAccredited($obj, $operator)) {
187
188 //
189 $message_class = "error";
190 $message = _("Droits insuffisants. Vous n'avez pas suffisament de ".
191 "droits pour acceder a cette page.");
192 $this->addToMessage($message_class, $message);
193
194 //
195 $this->setFlag(NULL);
196 if (!defined('REST_REQUEST')) {
197 $this->display();
198 }
199
200 // Arrêt du script
201 die();
202
203 }
204
205 // L'utilisateur est autorisé à accéder à l'élément
206 return true;
207
208 }
209
210
211
212 /**
213 *
214 */
215 function setDatabaseConfig() {
216
217 // On recupere la liste des cles du tableau associatif de configuration
218 // de la connexion aux bases de donnees
219 $database_keys = array_keys($this->database);
220 // Si il y a plusieurs cles
221 if (count($database_keys) != 0) {
222 // On configure la premiere par defaut
223 $coll = $database_keys[0];
224 } else { // Si il n'y a aucune cle
225 // Aucune base n'est configuree dans le fichier de configuration
226 // donc on affiche un message d'erreur
227 $class = "error";
228 $message = _("Erreur de configuration. Contactez votre administrateur.");
229 $this->addToMessage($class, $message);
230 // Debug
231 $this->addToLog("setDatabaseConfig(): ERR", DEBUG_MODE);
232 $this->addToLog("ERR: "._("Aucune entree dans le fichier de configuration"), DEBUG_MODE);
233 // On affiche la structure de la page
234 $this->setFlag(NULL);
235 $this->display();
236 // On arrete le traitement en cours
237 die();
238 }
239
240 // Si la variable coll (representant la cle de la base sur laquelle
241 // nous travaillons) n'est pas en variable SESSION ou est en variable
242 // SESSION mais n'existe pas dans les cles du tableau associatif de
243 // configuration de la connexion aux bases de donnees
244 if (!isset($_SESSION['coll']) or
245 (isset($_SESSION['coll']) and
246 !isset($this->database[$_SESSION['coll']]))) {
247 // On configure la premiere par defaut
248 $_SESSION['coll'] = $coll;
249 } else {
250 // On recupere la cle du tableau associatif de configuration de la
251 // connexion aux bases de donnees correspondante a la base de
252 // donnees sur laquelle nous travaillons
253 $coll = $_SESSION['coll'];
254 }
255
256 // On renvoi le tableau de parametres pour la connexion a la base
257 $this->database_config = $this->database[$coll];
258 }
259
260
261 /**
262 * Cette méthode permet de se connecter à la base de données
263 * @return void
264 */
265 function connectDatabase() {
266 // On inclus la classe d'abstraction de base de donnees
267 require_once PATH_OPENMAIRIE."om_database.class.php";
268 // On recupere le tableau de parametres pour la connexion a la base
269 $this->setDatabaseConfig();
270 // On fixe les options
271 $options = array(
272 'debug' => 2,
273 'portability' => DB_PORTABILITY_ALL,
274 );
275 // Instanciation de l'objet connexion a la base de donnees
276 $db = database::connect($this->database_config, $options);
277 // Logger
278 $this->addToLog("connectDatabase(): "._("Tentative de connexion au SGBD"), EXTRA_VERBOSE_MODE);
279 // Traitement particulier de l'erreur en cas d'erreur de connexion a la
280 // base de donnees
281 if (database::isError($db, true)) {
282 // Deconnexion de l'utilisateur
283 $this->logout();
284 // On affiche la page de login a l'ecran
285 $this->setFlag("login");
286 // On affiche un message d'erreur convivial pour l'utilisateur
287 $class = "error";
288 $message = _("Erreur de base de donnees. Contactez votre administrateur.");
289 $this->addToMessage($class, $message);
290 // On affiche la page
291 if (!defined('REST_REQUEST')) {
292 $this->display();
293 }
294 // On arrete le script
295 die();
296 } else {
297 // On affecte la resource a l'attribut de la classe du meme nom
298 $this->db = $db;
299 // Logger
300 $this->addToLog("connectDatabase(): Connexion [".$this->database_config["phptype"]."] '".$this->database_config['database']."' OK", EXTRA_VERBOSE_MODE);
301
302 // Compatibilite anterieure (deprecated)
303 $this->phptype = $this->database_config["phptype"];
304 $this->formatdate = $this->database_config["formatdate"];
305 $this->schema = $this->database_config["schema"];
306
307 // Definition des constantes pour l'acces aux informations de la base
308 // donnees facilement.
309 $temp = "";
310 if ($this->database_config["schema"] != "") {
311 $temp = $this->database_config["schema"].".";
312 }
313 $temp = $temp.$this->database_config["prefixe"];
314 define("DB_PREFIXE", $temp);
315 define("FORMATDATE", $this->database_config["formatdate"]);
316
317 // Definition des constantes pour l'acces aux informations de la base
318 // donnees facilement.
319 define("OM_DB_FORMATDATE", $this->database_config["formatdate"]);
320 define("OM_DB_PHPTYPE", $this->database_config["phptype"]);
321 define("OM_DB_DATABASE", $this->database_config["database"]);
322 define("OM_DB_SCHEMA", $this->database_config["schema"]);
323 define("OM_DB_TABLE_PREFIX", $this->database_config["prefixe"]);
324 }
325
326 }
327
328
329 /**
330 *
331 *
332 */
333 function isDatabaseError($dbobj = NULL, $return = false) {
334
335 //
336 if (database::isError($dbobj, $return)) {
337
338 if ($return == true) {
339
340 //
341 return true;
342
343 }
344
345 //
346 $class = "error";
347 $message = _("Erreur de base de donnees. Contactez votre administrateur.");
348 $this->addToMessage($class, $message);
349
350 // Logger
351 $this->addToLog("isDatabaseError(): ".$dbobj->getDebugInfo(), DEBUG_MODE);
352 $this->addToLog("isDatabaseError(): ".$dbobj->getMessage(), DEBUG_MODE);
353
354 //
355 $this->setFlag(NULL);
356 if (!defined('REST_REQUEST')) {
357 $this->display();
358 //
359 die();
360 }
361
362 }
363
364 //
365 return false;
366
367 }
368
369
370
371 /**
372 *
373 * @return void
374 */
375 function displayMessage($class = "", $message = "") {
376 if (!defined('REST_REQUEST')) {
377 $this->m->displayMessage($class, $message);
378 }
379 }
380
381
382 /**
383 *
384 */
385 function addToLog($message, $type = DEBUG_MODE) {
386 //
387 if (!defined('REST_REQUEST')) {
388 logger::instance()->log("class ".get_class($this)." - ".$message, $type);
389 }
390 }
391
392 /**
393 * Envoie un mail avec piece jointe
394 *
395 * @param string $title Titre du mail
396 * @param string $message Corps du mail
397 * @param string $recipient Destinataire du mail
398 * @param array $file Destinataire du mail
399 * @access public
400 * @return bool True si le mail est correctement envoye, false sinon.
401 */
402 public function sendMail($title, $message, $recipient, $file = array()) {
403
404 @include_once "../php/phpmailer/class.phpmailer.php";
405
406 if (!class_exists("PHPMailer")) {
407 $this->addToLog("sendMail(): !class_exists(\"PHPMailer\")", DEBUG_MODE);
408 return false;
409 }
410
411 //
412 $this->setMailConfig();
413
414 //
415 if ($this->mail_config == false) {
416 $this->addToLog("sendMail(): aucune configuration mail", DEBUG_MODE);
417 return false;
418 }
419
420 //
421 $mail = new PHPMailer(true);
422
423 //
424 $mail->IsSMTP();
425
426 $mail->SMTPAuth = true; // enable SMTP authentication
427 $mail->SMTPSecure = "tls";
428 $mail->Username = $this->mail_config["mail_username"];
429 $mail->Password = $this->mail_config["mail_pass"];
430 if ($this->mail_config["mail_username"] == '') {
431 $mail->SMTPAuth = false;
432 } else {
433 $mail->SMTPAuth = true;
434 }
435 $mail->Port = $this->mail_config["mail_port"];
436 $mail->Host = $this->mail_config["mail_host"];
437 $mail->AddReplyTo($this->mail_config["mail_from"], $this->mail_config["mail_from_name"]);
438 $mail->From = $this->mail_config["mail_from"];
439 $mail->FromName = $this->mail_config["mail_from_name"];
440 foreach (explode(",",$recipient) as $adresse) {
441 if (!$this->checkValidEmailAddress($adresse)) {
442 $this->addToLog("sendMail(): courriel incorrect ".$adresse, DEBUG_MODE);
443 return false;
444 } else
445 $mail->AddAddress(trim($adresse));
446 }
447 $mail->IsHTML(true);
448
449 // Corps du message
450 $mail_body ="<html>";
451 $mail_body .= "<head><title>".$title."</title></head>";
452 $mail_body .= "<body>".$message."</body>";
453 $mail_body .= "</html>";
454
455 $mail->Subject = $title;
456 $mail->MsgHTML($mail_body);
457 foreach($file as $oneFile) {
458
459 if($oneFile['stream']){
460 $mail->AddStringAttachment($oneFile['content'], $oneFile['title'], $oneFile['encoding'] = 'base64',$oneFile['type'] = 'application/octet-stream');
461 } else{
462 $mail->AddAttachment($oneFile['url']);
463 }
464 }
465 // Envoie de l'email
466 if ($mail->Send()) {
467 return true;
468 } else {
469 $this->addToLog("sendMail(): ".$mail->ErrorInfo, DEBUG_MODE);
470 return false;
471 }
472 }
473
474 /**
475 *
476 */
477 function isAccredited($obj = NULL, $operator = "AND") {
478 // Lorsque l'utilisateur a le login 'admin' alors il est authorisé à
479 // accéder à toutes les fonctions du logiciel
480 // XXX à modifier pour changer ça vers un profil et non un login utilisateur
481 if ($_SESSION["login"] == "admin") {
482 return true;
483 }
484 // Fonctionnement standard
485 return parent::isAccredited($obj, $operator);
486 }
487
488 }
489
490 ?>

[email protected]
ViewVC Help
Powered by ViewVC 1.1.26