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

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

Parent Directory Parent Directory | Revision Log Revision Log


Revision 4225 - (show annotations)
Thu May 19 15:15:49 2016 UTC (8 years, 8 months ago) by softime
File size: 18725 byte(s)
* Correction de la requête de vérification des messages de notification : les valeurs utilisées sont désormais échappées.
1 <?php
2 //$Id: dossier_message.class.php 4685 2015-04-30 12:30:55Z nmeucci $
3 //gen openMairie le 15/11/2012 18:30
4
5 require_once ("../gen/obj/dossier_message.class.php");
6
7 class dossier_message extends dossier_message_gen {
8
9 /** @var boolean Les nouvelles actions sont activées sur cet objet */
10 var $activate_class_action;
11
12 /**
13 * Instance de om_utilisateur
14 *
15 * @var null
16 */
17 var $inst_om_utilisateur = null;
18
19 /**
20 * Instance de dossier
21 *
22 * @var null
23 */
24 var $inst_dossier = null;
25
26 function __construct($id, &$dnu1 = null, $dnu2 = null) {
27 // On active les nouvelles actions
28 $this->activate_class_action = true;
29 //
30 $this->constructeur($id);
31 }// fin constructeur
32
33 /**
34 * Définition des actions disponibles sur la classe.
35 *
36 * @return void
37 */
38 function init_class_actions() {
39 parent::init_class_actions();
40
41 // ACTION - 000 - ajouter
42 //
43 $this->class_actions[0]["condition"] = "is_ajoutable";
44
45 // ACTION - 001 - modifier
46 //
47 $this->class_actions[1]["condition"] = "is_modifiable";
48
49 // ACTION - 002 - supprimer
50 //
51 $this->class_actions[2]["condition"] = "is_supprimable";
52
53 // ACTION - 010 - marquer comme lu
54 //
55 $this->class_actions[10] = array(
56 "identifier" => "marquer_comme_lu",
57 "portlet" => array(
58 "type" => "action-direct",
59 "libelle" => _("Marquer comme lu"),
60 "order" => 30,
61 "class" => "lu-16",
62 ),
63 "view" => "formulaire",
64 "method" => "marquer_comme_lu",
65 "permission_suffix" => "modifier_lu",
66 "condition" => "is_marquable_comme_lu",
67 );
68
69 // ACTION - 020 - marquer comme non lu
70 //
71 $this->class_actions[20] = array(
72 "identifier" => "marquer_comme_non_lu",
73 "portlet" => array(
74 "type" => "action-direct",
75 "libelle" => _("Marquer comme non lu"),
76 "order" => 30,
77 "class" => "nonlu-16",
78 ),
79 "view" => "formulaire",
80 "method" => "marquer_comme_non_lu",
81 "permission_suffix" => "modifier_lu",
82 "condition" => "is_marquable_comme_non_lu",
83 );
84 }
85
86
87 /**
88 * CONDITION - is_marquable_comme_lu.
89 *
90 * Condition pour afficher le bouton marquer comme lu
91 *
92 * @return boolean
93 */
94 public function is_marquable_comme_lu() {
95 // Si déjà lu
96 if ($this->getVal("lu") == "t") {
97 return false;
98 }
99 // Si l'utilisateur est un intructeur qui ne correspond pas à la
100 // division du dossier et qu'il n'a pas de bypass
101 if (!$this->f->isAccredited("dossier_message_modifier_lu_bypass")
102 && $this->f->isUserInstructeur()
103 && isset($this->f->om_utilisateur["division"])
104 && $this->f->om_utilisateur["division"] != $this->getDivisionFromDossier()) {
105 return false;
106 }
107 // Récupération de l'ID et et de la classe du dossier lié
108 $idxformulaire = $this->getParameter("idxformulaire");
109 $retourformulaire = $this->getParameter("retourformulaire");
110 // Si le dossier d'instruction auquel est rattaché le message
111 // est cloturé
112 if ($this->is_in_context_of_foreign_key("dossier", $retourformulaire)) {
113 // On récupère le statut du dossier d'instruction
114 $statut = $this->f->getStatutDossier($idxformulaire);
115 if ($this->f->isUserInstructeur() && $statut == "cloture" ){
116 return false;
117 }
118 }
119 return true;
120 }
121
122
123 /**
124 * CONDITION - is_marquable_comme_non_lu.
125 *
126 * Condition pour afficher le bouton marquer comme non lu
127 *
128 * @return boolean
129 */
130 public function is_marquable_comme_non_lu() {
131 // Si déjà non lu
132 if ($this->getVal("lu") == "f") {
133 return false;
134 }
135 // Si l'utilisateur est un intructeur qui ne correspond pas à la
136 // division du dossier et qu'il n'a pas de bypass
137 if (!$this->f->isAccredited("dossier_message_modifier_lu_bypass")
138 && $this->f->isUserInstructeur()
139 && isset($this->f->om_utilisateur["division"])
140 && $this->f->om_utilisateur["division"] != $this->getDivisionFromDossier()) {
141 return false;
142 }
143 // Récupération de l'ID et et de la classe du dossier lié
144 $idxformulaire = $this->getParameter("idxformulaire");
145 $retourformulaire = $this->getParameter("retourformulaire");
146 // Si le dossier d'instruction auquel est rattaché le message
147 // est cloturé
148 if ($this->is_in_context_of_foreign_key("dossier", $retourformulaire)) {
149 // On récupère le statut du dossier d'instruction
150 $statut = $this->f->getStatutDossier($idxformulaire);
151 if ($this->f->isUserInstructeur() && $statut == "cloture" ){
152 return false;
153 }
154 }
155 return true;
156 }
157
158
159 /**
160 * TREATMENT - marquer_comme_lu.
161 *
162 * Cette methode permet de passer la message en "lu"
163 *
164 * @return boolean true si maj effectué false sinon
165 */
166 public function marquer_comme_lu() {
167 // Cette méthode permet d'exécuter une routine en début des méthodes
168 // dites de TREATMENT.
169 $this->begin_treatment(__METHOD__);
170
171 if($this->getVal("lu") == 'f') {
172 $this->correct = true;
173 $this->valF["lu"] = true;
174
175 $res = $this->f->db->autoExecute(
176 DB_PREFIXE.$this->table,
177 $this->valF,
178 DB_AUTOQUERY_UPDATE,
179 $this->clePrimaire."=".$this->getVal($this->clePrimaire)
180 );
181 if ($this->f->isDatabaseError($res, true)) {
182 // Appel de la methode de recuperation des erreurs
183 $this->erreur_db($res->getDebugInfo(), $res->getMessage(), '');
184 $this->correct = false;
185 // Termine le traitement
186 return $this->end_treatment(__METHOD__, false);
187 } else {
188 $this->addToMessage(_("Le message a été marqué comme lu."));
189 return $this->end_treatment(__METHOD__, true);
190 }
191
192 } else {
193 $this->addToMessage(_("Le message est déjà marqué comme lu."));
194 }
195
196 // Termine le traitement
197 return $this->end_treatment(__METHOD__, false);
198 }
199
200
201 /**
202 * TREATMENT - marquer_comme_non_lu.
203 *
204 * Cette methode permet de passer la message en "non lu"
205 *
206 * @return boolean true si maj effectué false sinon
207 */
208 public function marquer_comme_non_lu() {
209 // Cette méthode permet d'exécuter une routine en début des méthodes
210 // dites de TREATMENT.
211 $this->begin_treatment(__METHOD__);
212
213 if($this->getVal("lu") == 't') {
214 $this->correct = true;
215 $this->valF["lu"] = false;
216
217 $res = $this->f->db->autoExecute(
218 DB_PREFIXE.$this->table,
219 $this->valF,
220 DB_AUTOQUERY_UPDATE,
221 $this->clePrimaire."=".$this->getVal($this->clePrimaire)
222 );
223 if ($this->f->isDatabaseError($res, true)) {
224 // Appel de la methode de recuperation des erreurs
225 $this->erreur_db($res->getDebugInfo(), $res->getMessage(), '');
226 $this->correct = false;
227 // Termine le traitement
228 return $this->end_treatment(__METHOD__, false);
229 } else {
230 $this->addToMessage(_("Le message a été marqué comme non lu."));
231 return $this->end_treatment(__METHOD__, true);
232 }
233
234 } else {
235 $this->addToMessage(_("Le message est déjà marqué comme non lu."));
236 }
237
238 // Termine le traitement
239 return $this->end_treatment(__METHOD__, false);
240 }
241
242
243 /**
244 * CONDITION - is_ajoutable.
245 *
246 * Condition pour pouvoir ajouter
247 *
248 * @return boolean
249 */
250 function is_ajoutable() {
251 // Impossible d'ajouter un message manuellement
252 return false;
253 }
254
255 /**
256 * CONDITION - is_modifiable.
257 *
258 * Condition pour afficher le bouton modifier
259 *
260 * @return boolean
261 */
262 function is_modifiable() {
263 // Test du bypass
264 if ($this->f->isAccredited("dossier_message_modifier_bypass")) {
265 return true;
266 }
267 // Test des autres conditions
268 return $this->is_ajoutable_or_modifiable_or_supprimable();
269 }
270
271 /**
272 * CONDITION - is_supprimable.
273 *
274 * Condition pour afficher le bouton supprimer
275 * @return boolean
276 */
277 function is_supprimable() {
278 // Test du bypass
279 if ($this->f->isAccredited("dossier_message_supprimer_bypass")) {
280 return true;
281 }
282 // Test des autres conditions
283 return $this->is_ajoutable_or_modifiable_or_supprimable();
284 }
285
286 /**
287 * Conditions pour afficher les boutons modifier et supprimer
288 *
289 * @return boolean
290 */
291 function is_ajoutable_or_modifiable_or_supprimable() {
292 //
293 $dossier = ($this->getParameter("maj")==0)?$this->getParameter("idxformulaire"):$this->getVal("dossier");
294 /**
295 * Tester si le dossier est cloturé , de la meme division, instructeur, admin (?)
296 */
297 if($this->f->isUserInstructeur()
298 && isset($this->f->om_utilisateur["division"])
299 && $this->f->om_utilisateur["division"] != $this->getDivisionFromDossier()){
300 return false;
301 }
302 //
303 if ( $this->f->isUserInstructeur() && $this->f->getStatutDossier($dossier) == "cloture" ){
304 return false;
305 }
306 return true;
307 }
308
309 /**
310 * Cette variable permet de stocker le résultat de la méthode
311 * getDivisionFromDossier() afin de ne pas effectuer le recalcul à chacun de
312 * ces appels.
313 * @var string Code de la division du dossier en cours
314 */
315 var $_division_from_dossier = NULL;
316
317 /**
318 * Cette méthode permet de récupérer le code de division correspondant
319 * au dossier sur lequel on se trouve.
320 *
321 * @return string Code de la division du dossier en cours
322 */
323 function getDivisionFromDossier() {
324 // Cette méthode peut être appelée plusieurs fois lors d'une requête.
325 // Pour éviter de refaire le traitement de recherche de la division
326 // alors on vérifie si nous ne l'avons pas déjà calculé.
327 if ($this->_division_from_dossier != NULL) {
328 // Logger
329 $this->addToLog("getDivisionFromDossier(): retour de la valeur déjà calculée - '".$this->_division_from_dossier."'", EXTRA_VERBOSE_MODE);
330 // On retourne la valeur déjà calculée
331 return $this->_division_from_dossier;
332 }
333
334 // Par défaut, on définit la valeur du dossier à NULL
335 $dossier = NULL;
336 // Test sur le mode et le contexte du formulaire
337 if ($this->getParameter("maj") == 0
338 && $this->is_in_context_of_foreign_key("dossier", $this->getParameter("retourformulaire"))) {
339 // Si on se trouve en mode AJOUT (seul mode où l'enregistrement
340 // n'existe pas en base de données) ET que nous nous trouvons
341 // dans le contexte d'un dossier d'instruction alors on récupère
342 // le numéro de dossier depuis le paramètre 'idxformulaire'
343 $dossier = $this->getParameter("idxformulaire");
344 } else {
345 // Sinon on récupère le numéro de dossier dans le champs dossier de
346 // l'enregistrement (en base de données)
347 $dossier = $this->getVal("dossier");
348 }
349
350 // On appelle la méthode de la classe utils qui renvoi le code de la
351 // division d'un dossier, on la stocke pour ne pas refaire le calcul au
352 // prochain appel de cette méthode
353 $this->_division_from_dossier = $this->f->getDivisionFromDossier($dossier);
354 // Logger
355 $this->addToLog("getDivisionFromDossier(): retour de la valeur nouvellement calculée - '".$this->_division_from_dossier."'", EXTRA_VERBOSE_MODE);
356 // On retourne la valeur retournée
357 return $this->_division_from_dossier;
358
359 }
360
361 // }}}
362
363 /**
364 * Utilise dans la recherche avance pour remplir le select par
365 * le type du message
366 */
367 function setSelect(&$form, $maj, &$db, $debug) {
368 //
369 if (file_exists("../sql/".OM_DB_PHPTYPE."/".$this->table.".form.inc.php")) {
370 include "../sql/".OM_DB_PHPTYPE."/".$this->table.".form.inc.php";
371 } elseif (file_exists ("../sql/".OM_DB_PHPTYPE."/".$this->table.".form.inc")) {
372 include "../sql/".OM_DB_PHPTYPE."/".$this->table.".form.inc";
373 }
374
375 // import depuis de la BD les types des messages disponibles pour
376 // le dossier
377 $this->init_select($form, $db, $maj, $debug, "type", $sql_messages_type, null, false);
378 }
379
380 public function setType(&$form,$maj) {
381 //type
382 parent::setType($form, $maj);
383
384 // On cache le dossier
385 $form->setType('dossier','hidden');
386
387 // seulement la modification du champ lu est possible en modification
388 if ($maj==1){ //modifier
389 $form->setType('type','hiddenstatic');
390 $form->setType('emetteur','hiddenstatic');
391 $form->setType('date_emission','hiddenstatic');
392 $form->setType('lu','checkbox');
393 $form->setType('contenu','textareahiddenstatic');
394 $form->setType('categorie','hiddenstatic');
395 }// fin modifier
396
397 // Pour les actions marquer_comme_lu, marquer_comme_non_lu
398 if($maj == 10 || $maj == 20) {
399 //
400 foreach ($this->champs as $value) {
401 // Cache tous les champs
402 $form->setType($value, 'hidden');
403 }
404 }
405 }
406
407
408 public function setOnchange(&$form, $maj) {
409 parent::setOnchange($form, $maj);
410
411 // JS de contrôle de la date
412 $form->setOnchange('date_emission','fdate(this)');
413 }
414
415
416 public function setLib(&$form, $maj) {
417 parent::setLib($form, $maj);
418
419 //
420 $form->setLib('dossier_message',_('message'));
421 }
422
423
424 /**
425 * Surcharge du fil d'ariane en contexte sous-formulaire.
426 *
427 * @param string $subent Chaîne initiale.
428 *
429 * @return string
430 */
431 public function getSubFormTitle($subent) {
432 //
433 $subent = _("dossiers d'instruction")." -> "._("message")." -> ".$this->getVal('dossier_message');
434 //
435 return $subent;
436 }
437
438
439 /**
440 * Ajoute un message de notification.
441 *
442 * @param array $val Liste des valeurs.
443 *
444 * @return boolean
445 */
446 public function add_notification_message(array $val) {
447
448 // Liste des valeurs nécessaires à la création du message
449 $dossier = $val['dossier'];
450 $type = $val['type'];
451 $emetteur = $val['emetteur'];
452 $login = $val['login'];
453 $date_emission = $val['date_emission'];
454 $contenu = $val['contenu'];
455
456 // Récupère l'identifiant instructeur de l'emetteur
457 $inst_om_utilisateur = $this->get_inst_om_utilisateur(0);
458 $instructeur = $inst_om_utilisateur->get_instructeur_by_om_utilisateur_login($login);
459
460 // Récupère l'instructeur du dossier
461 $inst_dossier = $this->get_inst_dossier($dossier);
462 $di_instructeur = $inst_dossier->getVal('instructeur');
463
464 // Vérifie si l'instructeur est affecté au dossier
465 $transmitter_is_dossier_instructor = false;
466 if ($instructeur !== ''
467 && $instructeur !== null
468 && $instructeur === $di_instructeur) {
469 //
470 $transmitter_is_dossier_instructor = true;
471 }
472
473 // Requête SQL de recherche des messages
474 $sql = 'SELECT count(dossier_message)
475 FROM '.DB_PREFIXE.'dossier_message
476 WHERE dossier = \''.$dossier.'\'
477 AND type = \''.$this->f->db->escapeSimple($type).'\'
478 -- Permet de récupérer seulement la date sans l\'\'heure, les minutes et les secondes
479 AND date_trunc(\'day\', date_emission) = date_trunc(\'day\', timestamp \''.$date_emission.'\')
480 AND emetteur = \''.$this->f->db->escapeSimple($emetteur).'\'';
481 // Si l'emetteur n'est pas l'instructeur du dossier
482 if ($transmitter_is_dossier_instructor == false) {
483 // Vérifie que le message ne soit pas lu
484 $sql .= 'AND lu IS FALSE';
485 }
486 // Log
487 $this->f->addToLog(__METHOD__."() : db->getOne(\"".$sql."\")", VERBOSE_MODE);
488 // Exécute la requête
489 $count = $this->db->getOne($sql);
490 // Contrôle les erreurs de base de données
491 $this->f->isDatabaseError($count);
492
493 // Si au moins un message identique existe
494 if ($count !== '0') {
495 // Stop le traitement
496 return true;
497 }
498
499 // Liste des valeurs
500 $val = array();
501 $val['dossier_message'] = '';
502 $val['dossier'] = $dossier;
503 $val['type'] = $type;
504 $val['emetteur'] = $emetteur;
505 $val['date_emission'] = $date_emission;
506 $val['lu'] = $transmitter_is_dossier_instructor;
507 $val['contenu'] = $contenu;
508 $val['categorie'] = 'interne';
509 // Ajoute un message
510 $add = $this->ajouter($val);
511 // Si une erreur se produit pendant l'ajout
512 if ($add !== true) {
513 //
514 return false;
515 }
516
517 //
518 return true;
519 }
520
521
522 /**
523 * Récupère l'instance de om_utilisateur.
524 *
525 * @param string $om_utilisateur Identifiant de l'utilisateur.
526 *
527 * @return object
528 */
529 private function get_inst_om_utilisateur($om_utilisateur = null) {
530 //
531 return $this->get_inst_common("om_utilisateur", $om_utilisateur);
532 }
533
534
535 /**
536 * Récupère l'instance de dossier.
537 *
538 * @param string $dossier Identifiant du dossier d'instruction.
539 *
540 * @return object
541 */
542 private function get_inst_dossier($dossier = null) {
543 //
544 return $this->get_inst_common("dossier", $dossier);
545 }
546
547
548 }// fin classe
549 ?>

[email protected]
ViewVC Help
Powered by ViewVC 1.1.26