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

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

Parent Directory Parent Directory | Revision Log Revision Log


Revision 16749 - (show annotations)
Thu Feb 1 12:13:31 2024 UTC (11 months, 3 weeks ago) by softime
File size: 265151 byte(s)
chore(branch): fusion de la branche d'intégration 6.3.0-develop dans le trunk

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 6132 2016-03-09 09:18:18Z stimezouaght $
8 */
9
10 /**
11 *
12 */
13 if (file_exists("../dyn/locales.inc.php") === true) {
14 require_once "../dyn/locales.inc.php";
15 }
16
17 /**
18 *
19 */
20 if (file_exists("../dyn/include.inc.php") === true) {
21 require_once "../dyn/include.inc.php";
22 } else {
23 /**
24 * Définition de la constante représentant le chemin d'accès au framework
25 */
26 define("PATH_OPENMAIRIE", getcwd()."/../core/");
27
28 /**
29 * TCPDF specific config
30 */
31 define('K_TCPDF_EXTERNAL_CONFIG', true);
32 define('K_TCPDF_CALLS_IN_HTML', true);
33 define('K_PATH_FONTS', '../app/fonts/');
34
35 /**
36 * Dépendances PHP du framework
37 * On modifie la valeur de la directive de configuration include_path en
38 * fonction pour y ajouter les chemins vers les librairies dont le framework
39 * dépend.
40 */
41 set_include_path(
42 get_include_path().PATH_SEPARATOR.implode(
43 PATH_SEPARATOR,
44 array(
45 getcwd()."/../php/pear",
46 getcwd()."/../php/db",
47 getcwd()."/../php/fpdf",
48 getcwd()."/../php/phpmailer",
49 getcwd()."/../php/tcpdf",
50 )
51 )
52 );
53
54 /**
55 * Retourne l'URL de la racine d'openADS.
56 * Exemple : http://localhost/openads/
57 */
58 if (!function_exists("get_base_url")) {
59 function get_base_url() {
60 // Récupération du protocole
61 $protocol = 'http';
62 if (isset($_SERVER['HTTPS'])) {
63 $protocol = ($_SERVER['HTTPS'] && $_SERVER['HTTPS'] != "off") ? "https" : "http";
64 }
65 // Récupération du domaine
66 $domain = $_SERVER['HTTP_HOST'];
67 // Récupération du port
68 $port = $_SERVER['SERVER_PORT'];
69 $disp_port = ($protocol == 'http' && $port == 80 || $protocol == 'https' && $port == 443) ? '' : ":$port";
70 // Construction du chemin restant
71 $base_url = str_replace('app', '', rtrim(dirname($_SERVER['PHP_SELF']), '/\\'));
72 //
73 return $protocol."://".$domain.$disp_port.$base_url;
74 }
75 }
76 define("PATH_BASE_URL", get_base_url());
77 }
78
79 /**
80 *
81 */
82 if (file_exists("../dyn/debug.inc.php") === true) {
83 require_once "../dyn/debug.inc.php";
84 }
85
86 /**
87 *
88 */
89 (defined("PATH_OPENMAIRIE") ? "" : define("PATH_OPENMAIRIE", ""));
90
91 /**
92 * Constante donnant le code de la catégorie de document numérisé liée à Plat'AU
93 */
94 (defined("CODE_CATEGORIE_DOC_NUM_PLATAU") ? "" : define('CODE_CATEGORIE_DOC_NUM_PLATAU', 'PLATAU'));
95
96 /**
97 * Constantes donnant le nom de la catégorie des tâches liées à Plat'AU et ua portail citoyen
98 */
99 (defined("PLATAU") ? "" : define('PLATAU', 'platau'));
100 (defined("PORTAL") ? "" : define('PORTAL', 'portal'));
101 /**
102 *
103 */
104 require_once PATH_OPENMAIRIE."om_application.class.php";
105
106 /**
107 *
108 */
109 class utils extends application {
110
111 /**
112 * Gestion du nom de l'application.
113 *
114 * @var mixed Configuration niveau application.
115 */
116 protected $_application_name = "openADS";
117
118 /**
119 * Titre HTML.
120 *
121 * @var mixed Configuration niveau application.
122 */
123 protected $html_head_title = ":: openMairie :: openADS";
124
125 /**
126 * Gestion du nom de la session.
127 *
128 * @var mixed Configuration niveau application.
129 */
130 protected $_session_name = "openads";
131
132 /**
133 * Gestion du favicon de l'application.
134 *
135 * @var mixed Configuration niveau application.
136 */
137 var $html_head_favicon = '../app/img/favicon.ico';
138
139 /**
140 * Gestion du mode de gestion des permissions.
141 *
142 * @var mixed Configuration niveau application.
143 */
144 protected $config__permission_by_hierarchical_profile = false;
145
146 /**
147 * Stockage des paramètres des collectivités.
148 *
149 * @var array
150 */
151 protected $collectivitiesParameters = array();
152
153 // {{{
154
155 /**
156 * SURCHARGE DE LA CLASSE OM_APPLICATION.
157 *
158 * @see Documentation sur la méthode parent 'om_application:getCollectivite'.
159 */
160 function getCollectivite($om_collectivite_idx = null) {
161 // On vérifie si une valeur a été passée en paramètre ou non.
162 if ($om_collectivite_idx === null) {
163 // Cas d'utilisation n°1 : nous sommes dans le cas où on
164 // veut récupérer les informations de la collectivité de
165 // l'utilisateur et on stocke l'info dans un flag.
166 $is_get_collectivite_from_user = true;
167 // On initialise l'identifiant de la collectivité
168 // à partir de la variable de session de l'utilisateur.
169 $om_collectivite_idx = $_SESSION['collectivite'];
170 } else {
171 // Cas d'utilisation n°2 : nous sommes dans le cas où on
172 // veut récupérer les informations de la collectivité
173 // passée en paramètre et on stocke l'info dans le flag.
174 $is_get_collectivite_from_user = false;
175 }
176
177
178 if (array_key_exists($om_collectivite_idx, $this->collectivitiesParameters) === false
179 || empty($this->collectivitiesParameters[$om_collectivite_idx]) === true) {
180 $collectivite_parameters = parent::getCollectivite($om_collectivite_idx);
181
182 //// BEGIN - SURCHARGE OPENADS
183
184 // Ajout du paramétrage du sig pour la collectivité
185 if (file_exists("../dyn/var.inc")) {
186 include "../dyn/var.inc";
187 }
188 if (file_exists("../dyn/sig.inc.php")) {
189 include "../dyn/sig.inc.php";
190 }
191 if (!isset($sig_externe)) {
192 $sig_externe = "sig-default";
193 }
194 $idx_multi = $this->get_idx_collectivite_multi();
195
196 if (isset($collectivite_parameters['om_collectivite_idx'])
197 && isset($conf[$sig_externe][$collectivite_parameters['om_collectivite_idx']])
198 && isset($conf[$sig_externe]["sig_treatment_mod"])
199 && isset($collectivite_parameters["option_sig"])
200 && $collectivite_parameters["option_sig"] == "sig_externe") {
201 // Cas numéro 1 : conf sig définie sur la collectivité et option sig active
202 $collectivite_parameters["sig"] = $conf[$sig_externe][$collectivite_parameters['om_collectivite_idx']];
203 $collectivite_parameters["sig"]["sig_treatment_mod"] = $conf[$sig_externe]["sig_treatment_mod"];
204 } elseif ($idx_multi != ''
205 && isset($conf[$sig_externe][$idx_multi])
206 && isset($conf[$sig_externe]["sig_treatment_mod"])
207 && isset($collectivite_parameters["option_sig"])
208 && $collectivite_parameters["option_sig"] == "sig_externe") {
209 // Cas numéro : conf sig définie sur la collectivité multi et option_sig activé pour la collectivité mono
210 $collectivite_parameters["sig"] = $conf[$sig_externe][$idx_multi];
211 $collectivite_parameters["sig"]["sig_treatment_mod"] = $conf[$sig_externe]["sig_treatment_mod"];
212 }
213
214 //// END - SURCHARGE OPENADS
215
216 // Si on se trouve dans le cas d'utilisation n°1
217 if ($is_get_collectivite_from_user === true) {
218 // Alors on stocke dans l'attribut collectivite le tableau de
219 // paramètres pour utilisation depuis la méthode 'getParameter'.
220 $this->collectivite = $collectivite_parameters;
221 }
222 // On stocke le tableau de paramètres.
223 $this->collectivitiesParameters[$om_collectivite_idx] = $collectivite_parameters;
224 }
225 // Renvoie la liste des paramètres de la collectivité voulue
226 return $this->collectivitiesParameters[$om_collectivite_idx];
227 }
228
229 /**
230 * Affiche un bloc d'information.
231 *
232 * @param string $class Classe CSS.
233 * @param string $message Message à afficher.
234 *
235 * @return void
236 */
237 function display_panel_information($class = "", $message = "", $tableau=null, $legend=null, $id_suffixe='') {
238 if (!defined('REST_REQUEST')) {
239 if ($tableau !== null) {
240 $message .= '<fieldset id="fieldset-message-tab_'.$id_suffixe.'" class="cadre ui-corner-all ui-widget-content startClosed collapsed">';
241 $message .= '<legend class="ui-corner-all ui-widget-content ui-state-active">'.$legend.'</legend>';
242 $message .= '<div id="fieldset-message-tab-content" class="fieldsetContent" style="display: none;">';
243 $message .= '<ul>';
244 foreach ($tableau as $value) {
245 $message .= "<li>".$value."</li>";
246 }
247 $message .= '</ul>';
248 $message .= '</div>';
249 $message .= '</fieldset>';
250 }
251 //
252 if ($class == "ok") {
253 $class = "valid";
254 }
255 //
256 echo "\n<div class=\"panel_information ui-widget ui-corner-all ui-state-highlight ui-state-".$class."\">\n";
257 echo "<p>\n";
258 echo "\t<span class=\"ui-icon ui-icon-info\"><!-- --></span> \n\t";
259 echo "<span class=\"text\">";
260 echo $message;
261 echo "</span>";
262 echo "\n</p>\n";
263 echo "</div>\n";
264 }
265 }
266
267 /**
268 * Récupère toutes les collectivités ayant le niveau passé en
269 * paramètre. Si le niveau n'est pas donné ou que ce n'est pas
270 * un nombre renvoi une chaine vide.
271 *
272 * @param integer niveau de la collectivite
273 * @return string
274 */
275 protected function get_collectivite_par_niveau($niveau) {
276 if (empty($niveau) || ! is_numeric($niveau)) {
277 return '';
278 }
279 $qres = $this->get_one_result_from_db_query(
280 sprintf(
281 'SELECT
282 om_collectivite
283 FROM
284 %1$som_collectivite
285 WHERE
286 niveau = \'%2$d\'',
287 DB_PREFIXE,
288 intval($niveau)
289 ),
290 array(
291 "origin" => __METHOD__,
292 )
293 );
294 return $qres['result'];
295 }
296
297 /**
298 * Retourne l'identifiant de la collectivité multi ou l'identifiant de la
299 * seule collectivité dans le cas d'une installation mono.
300 *
301 * @return integer Identifiant de la collectivité multi.
302 */
303 public function get_idx_collectivite_multi() {
304 // Récupère l'identifiant de la collectivité de niveau 2
305 $idx = $this->get_collectivite_par_niveau(2);
306 // S'il n'y a pas de collectivité de niveau 2
307 if ($idx == null || $idx == '') {
308 // Compte le nombre de collectivité
309 $qres = $this->get_one_result_from_db_query(
310 sprintf(
311 'SELECT
312 count(om_collectivite)
313 FROM
314 %1$som_collectivite',
315 DB_PREFIXE
316 ),
317 array(
318 "origin" => __METHOD__,
319 )
320 );
321 $count = $qres["result"];
322 // S'il y qu'une collectivité
323 if ($count == 1) {
324 // Récupère l'identifiant de la seule collectivité
325 $idx = $this->get_collectivite_par_niveau(1);
326 }
327 }
328 // Retourne l'identifiant
329 return $idx;
330 }
331
332
333 /**
334 * Retourne l'identifiant de la collectivité de l'element de la table passée
335 * en paramètre.
336 *
337 * @param string $table Table de l'element.
338 * @param mixed $id Identifiant de l'element.
339 *
340 * @return string identifiant de la collectivite ou false si l'element n'existe pas.
341 */
342 public function get_collectivite_of_element($table, $id) {
343 $instance = $this->get_inst__om_dbform(array(
344 "obj" => $table,
345 "idx" => $id,
346 ));
347 if($instance->getVal($instance->clePrimaire) != '') {
348 return $instance->getVal('om_collectivite');
349 }
350 return false;
351 }
352
353
354 /**
355 * Retourne vrai si la collectivité passée en paramètre ou la collectivité
356 * de l'utilisateur connecté est mono.
357 *
358 * @param string $id Identifiant de la collectivité.
359 *
360 * @return boolean
361 */
362 public function isCollectiviteMono($id = null) {
363 // Si on ne passe pas de collectivité en argument
364 if ($id == null) {
365 // On vérifie la collectivité stockée en session de l'utilisateur
366 // connecté
367 $res = false;
368 if ($_SESSION['niveau'] === '1') {
369 //
370 $res = true;
371 }
372 //
373 return $res;
374 }
375
376 $inst_om_collectivite = $this->get_inst__om_dbform(array(
377 "obj" => "om_collectivite",
378 "idx" => $id,
379 ));
380 if ($inst_om_collectivite->getVal("niveau") === '1') {
381 //
382 return true;
383 }
384 //
385 return false;
386 }
387
388 // }}}
389
390 // {{{
391
392 var $om_utilisateur = array();
393 var $user_is_instr = NULL;
394 var $user_is_service = NULL;
395 public $user_is_tiers = NULL;
396 var $user_is_admin = NULL;
397 var $user_is_service_ext = NULL;
398 public $user_is_tiers_ext = NULL;
399 var $user_is_qualificateur = NULL;
400 var $user_is_chef = NULL;
401 var $user_is_divisionnaire = NULL;
402 var $user_is_service_int = NULL;
403 public $user_is_tiers_int = NULL;
404
405 /**
406 * Méthode de récupération des informations de l'utilisateur connecté.
407 */
408 function getUserInfos() {
409
410 // Si l'utilisateur est loggé $_SESSION existe
411 if(isset($_SESSION['login']) AND !empty($_SESSION['login'])) {
412
413 // Récupération des infos utilisateur
414 $qres = $this->get_all_results_from_db_query(
415 sprintf('
416 SELECT
417 om_utilisateur,
418 nom,
419 email,
420 login,
421 om_collectivite,
422 om_profil
423 FROM
424 %1$som_utilisateur
425 WHERE
426 login = \'%2$s\' ',
427 DB_PREFIXE,
428 $_SESSION['login']
429 ),
430 array(
431 "origin" => __METHOD__,
432 )
433 );
434
435 // On ne récupère que la 1ere ligne
436 $this->om_utilisateur = array_shift($qres['result']);
437
438 // Récupère le profil et test si c'est un
439 $inst_om_profil = $this->get_inst__om_dbform(array(
440 "obj" => "om_profil",
441 "idx" => $this->om_utilisateur['om_profil'],
442 ));
443 $resProfil = $inst_om_profil->getVal("libelle");
444 // Sauvegarde le libelle du profil
445 $this->om_utilisateur["libelle_profil"] = $resProfil;
446
447 // si c'est un administrateur technique
448 // XXX Mauvaise méthode, il faut utiliser isAccredited
449 if ($resProfil == "ADMINISTRATEUR TECHNIQUE"
450 || $resProfil == "ADMINISTRATEUR FONCTIONNEL") {
451 $this->user_is_admin = true;
452 } else {
453 $this->user_is_admin = false;
454 }
455
456 //si c'est un service externe
457 if ($resProfil == "SERVICE CONSULTÉ") {
458 $this->user_is_service_ext = true;
459 } else {
460 $this->user_is_service_ext = false;
461 }
462
463 //si c'est un service interne
464 if ($resProfil == "SERVICE CONSULTÉ INTERNE") {
465 $this->user_is_service_int = true;
466 } else {
467 $this->user_is_service_int = false;
468 }
469
470 // TODO : a vérifié parce que je me contente de copier le traitement pour les services
471 // je ne sais pas si ce sera utile ou pas
472 //si c'est un tiers externe
473 if ($resProfil == "TIERS CONSULTÉ") {
474 $this->user_is_tiers_ext = true;
475 } else {
476 $this->user_is_tiers_ext = false;
477 }
478
479 //si c'est un tiers interne
480 if ($resProfil == "TIERS CONSULTÉ INTERNE") {
481 $this->user_is_tiers_int = true;
482 } else {
483 $this->user_is_tiers_int = false;
484 }
485
486 // si c'est un qualificateur
487 if ($resProfil == "QUALIFICATEUR") {
488 $this->user_is_qualificateur = true;
489 } else {
490 $this->user_is_qualificateur = false;
491 }
492
493 // si c'est un chef de service
494 if ($resProfil == "CHEF DE SERVICE") {
495 $this->user_is_chef = true;
496 } else {
497 $this->user_is_chef = false;
498 }
499
500 // si c'est un divisionnaire
501 if ($resProfil == "DIVISIONNAIRE") {
502 $this->user_is_divisionnaire = true;
503 } else {
504 $this->user_is_divisionnaire = false;
505 }
506
507 // Récupération des infos instructeur
508 $qres = $this->get_all_results_from_db_query(
509 sprintf('
510 SELECT
511 instructeur.instructeur,
512 instructeur.nom,
513 instructeur.telephone,
514 division.division,
515 division.code,
516 division.libelle
517 FROM
518 %1$sinstructeur
519 INNER JOIN %1$sdivision
520 ON division.division=instructeur.division
521 WHERE
522 instructeur.om_utilisateur = %2$d ',
523 DB_PREFIXE,
524 intval($this->om_utilisateur['om_utilisateur'])
525 ),
526 array(
527 "origin" => __METHOD__,
528 )
529 );
530
531 // Si pas de résultat, initialisé à NULL
532 // Comme le comportement de la requête qui va être remplacé
533 // On ne récupère que la 1ere ligne
534 $tempInstr= (!empty($qres['result'])) ? array_shift($qres['result']) : NULL;
535
536 // Si il y a un resultat c'est un instructeur
537 if (is_array($tempInstr) === true && count($tempInstr) > 0) {
538 $this->user_is_instr=true;
539 $this->om_utilisateur = array_merge($this->om_utilisateur,$tempInstr);
540 } else {
541 $this->user_is_instr=false;
542 }
543
544 // Récupération des infos de services consultés
545 $qres = $this->get_all_results_from_db_query(
546 sprintf('
547 SELECT
548 service.service,
549 service.abrege,
550 service.libelle
551 FROM
552 %1$sservice
553 INNER JOIN %1$slien_service_om_utilisateur
554 ON lien_service_om_utilisateur.service=service.service
555 WHERE
556 lien_service_om_utilisateur.om_utilisateur = %2$d',
557 DB_PREFIXE,
558 intval($this->om_utilisateur['om_utilisateur'])
559 ),
560 array(
561 "origin" => __METHOD__,
562 )
563 );
564
565 foreach ($qres['result'] as $result) {
566 $this->om_utilisateur['service'][]=$result;
567 }
568
569 // Si il y a un resultat c'est un utilisateur de service
570 if(isset($this->om_utilisateur['service'])) {
571 $this->user_is_service=true;
572 } else {
573 $this->user_is_service=false;
574 }
575
576
577 // Récupération des infos de tiers consultés
578 $qres = $this->get_all_results_from_db_query(
579 sprintf('
580 SELECT
581 tiers_consulte.tiers_consulte,
582 tiers_consulte.abrege,
583 tiers_consulte.libelle
584 FROM
585 %1$slien_om_utilisateur_tiers_consulte
586 INNER JOIN %1$stiers_consulte
587 ON lien_om_utilisateur_tiers_consulte.tiers_consulte=tiers_consulte.tiers_consulte
588 WHERE
589 lien_om_utilisateur_tiers_consulte.om_utilisateur = %2$d',
590 DB_PREFIXE,
591 intval($this->om_utilisateur['om_utilisateur'])
592 ),
593 array(
594 "origin" => __METHOD__,
595 )
596 );
597
598 foreach ($qres['result'] as $result) {
599 $this->om_utilisateur['tiers'][]=$result;
600 }
601
602 // Si il y a un resultat c'est un utilisateur de tiers
603 $this->user_is_tiers = false;
604 if (isset($this->om_utilisateur['tiers'])) {
605 $this->user_is_tiers = true;
606 }
607 }
608 }
609
610 /**
611 * getter user_is_service
612 */
613 function isUserService() {
614 //
615 if (is_null($this->user_is_service)) {
616 //
617 $this->getUserInfos();
618 }
619 //
620 return $this->user_is_service;
621 }
622
623 /**
624 * getter user_is_tiers
625 */
626 function isUserTiers() {
627 //
628 if (is_null($this->user_is_tiers)) {
629 //
630 $this->getUserInfos();
631 }
632 //
633 return $this->user_is_tiers;
634 }
635
636 /**
637 * getter user_is_instr
638 */
639 function isUserInstructeur() {
640 //
641 if (is_null($this->user_is_instr)) {
642 //
643 $this->getUserInfos();
644 }
645 //
646 return $this->user_is_instr;
647 }
648
649 function isUserAdministrateur() {
650 //
651 if (is_null($this->user_is_admin)) {
652 //
653 $this->getUserInfos();
654 }
655 //
656 return $this->user_is_admin;
657 }
658
659 /**
660 * getter user_is_service_ext
661 */
662 function isUserServiceExt() {
663 //
664 if (is_null($this->user_is_service_ext)) {
665 //
666 $this->getUserInfos();
667 }
668 //
669 return $this->user_is_service_ext;
670 }
671
672 /**
673 * getter user_is_service_int
674 */
675 function isUserServiceInt() {
676 //
677 if (is_null($this->user_is_service_int)) {
678 //
679 $this->getUserInfos();
680 }
681 //
682 return $this->user_is_service_int;
683 }
684
685 /**
686 * getter user_is_qualificateur
687 */
688 function isUserQualificateur() {
689 //
690 if (is_null($this->user_is_qualificateur)) {
691 //
692 $this->getUserInfos();
693 }
694 //
695 return $this->user_is_qualificateur;
696 }
697
698 /**
699 * getter user_is_chef
700 */
701 function isUserChef() {
702 //
703 if (is_null($this->user_is_chef)) {
704 //
705 $this->getUserInfos();
706 }
707 //
708 return $this->user_is_chef;
709 }
710
711 /**
712 * getter user_is_divisionnaire
713 */
714 function isUserDivisionnaire() {
715 //
716 if (is_null($this->user_is_divisionnaire)) {
717 //
718 $this->getUserInfos();
719 }
720 //
721 return $this->user_is_divisionnaire;
722 }
723
724 /**
725 * Méthode permettant de définir si l'utilisateur connecté peut ajouter un
726 * événement d'instruction
727 *
728 * @param integer $idx identifiant du dossier
729 * @param string $obj objet
730 *
731 * @return boolean true si il peut false sinon
732 */
733 function isUserCanAddObj($idx, $obj) {
734 // Si il à le droit "bypass" il peut ajouter
735 if($this->isAccredited($obj."_ajouter_bypass") === true) {
736 return true;
737 }
738 if($this->isAccredited(array($obj."_ajouter", $obj), "OR") === false) {
739 return false;
740 }
741 $return = false;
742
743 $object_instance = $this->get_inst__om_dbform(array(
744 "obj" => $obj,
745 "idx" => "]",
746 ));
747 // Si il n'est pas dans la même division on défini le retour comme faux
748 // à moins qu'il ai un droit de changement de decision
749 if($this->isUserInstructeur() === true &&
750 ($object_instance->getDivisionFromDossier($idx) == $_SESSION["division"] or
751 ($obj == "instruction" &&
752 $object_instance->isInstrCanChangeDecision($idx) === true))) {
753
754 $return = true;
755 }
756
757 return $return;
758 }
759
760
761 /**
762 * Ajout de variables de session contenant la division pour permettre une
763 * utilisation plus efficace dans les requetes.
764 *
765 * @param array $utilisateur Tableau d'informations de l'utilisateur.
766 */
767 function triggerAfterLogin($utilisateur = NULL) {
768
769 // Récupération de la division de l'utilisateur.
770 $qres = $this->get_all_results_from_db_query(
771 sprintf('
772 SELECT
773 instructeur.division,
774 division.code
775 FROM
776 %1$sinstructeur
777 LEFT JOIN %1$sdivision
778 ON instructeur.division = division.division
779 WHERE
780 instructeur.om_utilisateur= %2$d ',
781 DB_PREFIXE,
782 intval($utilisateur["om_utilisateur"])
783 ),
784 array(
785 "origin" => __METHOD__,
786 )
787 );
788
789 // On ne récupère que la 1ere ligne
790 $row = array_shift($qres['result']);
791
792 // Enregistrement de la division en session
793 if (isset($row["division"]) && $row["division"] != NULL) {
794 $_SESSION["division"] = $row["division"];
795 $_SESSION["division_code"] = $row["code"];
796 } else {
797 $_SESSION["division"] = "0";
798 $_SESSION["division_code"] = "";
799 }
800
801 // Récupération du paramétrage des groupes de l'utilisateur
802 $qres = $this->get_all_results_from_db_query(
803 sprintf('
804 SELECT
805 groupe.code,
806 lien_om_utilisateur_groupe.confidentiel,
807 lien_om_utilisateur_groupe.enregistrement_demande,
808 groupe.libelle
809 FROM
810 %1$sgroupe
811 RIGHT JOIN %1$slien_om_utilisateur_groupe
812 ON lien_om_utilisateur_groupe.groupe = groupe.groupe
813 WHERE
814 lien_om_utilisateur_groupe.login = \'%2$s\'
815 ORDER BY
816 libelle',
817 DB_PREFIXE,
818 $this->db->escapeSimple($utilisateur["login"])
819 ),
820 array(
821 "origin" => __METHOD__,
822 )
823 );
824
825 $resGroupes=$qres['result'];
826
827 // Si aucun résultat alors récupération du paramétrage des groupes du profil
828 if (count($resGroupes) === 0) {
829
830 $qres = $this->get_all_results_from_db_query(
831 sprintf(
832 'SELECT
833 groupe.code,
834 lien_om_profil_groupe.confidentiel,
835 lien_om_profil_groupe.enregistrement_demande,
836 groupe.libelle
837 FROM
838 %1$sgroupe
839 RIGHT JOIN %1$slien_om_profil_groupe
840 ON lien_om_profil_groupe.groupe = groupe.groupe
841 AND
842 om_profil = %2$s
843 ORDER BY
844 libelle',
845 DB_PREFIXE,
846 $this->db->escapeSimple($utilisateur["om_profil"])
847 ),
848 array(
849 "origin" => __METHOD__,
850 )
851 );
852
853 $resGroupes = $qres['result'];
854 }
855 $_SESSION["groupe"] = array();
856 // Enregistrement des groupe en session
857 foreach ($resGroupes as $result) {
858 // $resGroupes=$result;
859 if ($result["confidentiel"] === 't') {
860 $result["confidentiel"] = true;
861 } else {
862 $result["confidentiel"] = false;
863 }
864 if ($result["enregistrement_demande"] === 't') {
865 $result["enregistrement_demande"] = true;
866 } else {
867 $result["enregistrement_demande"] = false;
868 }
869 $_SESSION["groupe"][$result["code"]] = array(
870 "confidentiel" => $result["confidentiel"],
871 "enregistrement_demande" => $result["enregistrement_demande"],
872 "libelle" => $result["libelle"],
873 );
874 }
875 }
876
877 // Affichage des actions supplémentaires
878 function displayActionExtras() {
879 // Affichage de la division si l'utilisateur en possède une
880 if ($_SESSION["division"] != 0) {
881 echo "\t\t\t<li class=\"action-division\">";
882 echo "(".$_SESSION['division_code'].")";
883 echo "</li>\n";
884 }
885 }
886
887 /**
888 * SURCHARGE
889 *
890 * Compose la liste des liens à afficher dans la section 'actions'.
891 *
892 * Cette méthode retourne la liste des liens disponibles pour l'utilisateur
893 * connecté dans le contexte actuel.
894 *
895 * @return array
896 */
897 function getActionsToDisplay() {
898 $actions_to_display = array();
899 if ($this->authenticated == false) {
900 return $actions_to_display;
901 }
902 // Récupère les actions
903 $actions = parent::getActionsToDisplay();
904 $change_linked_users = array(
905 "title" => __("Utilisateurs liés"),
906 "description" => __("Utilisateurs liés"),
907 "href" => "../app/change_linked_users.php",
908 "class" => "action-change_linked_users",
909 );
910 array_unshift($actions, $change_linked_users);
911 return $actions;
912 }
913
914 /**
915 * SURCHARGE
916 *
917 * Traitement de l'authentification.
918 *
919 * L'authentification "normale" ne doit pas prendre en compte les utilisateurs
920 * liés et afficher le même message.
921 *
922 * @param string $login Indentifiant de l'utilisateur
923 * @param string $password Mot de passe de l'utilisateur
924 * @access public
925 * @return bool Etat de l'authentification de l'utilisateur
926 */
927 public function processAuthentication($login, $password) {
928 // On recupere le mode d'authenfication de l'utilisateur
929 $mode = $this->retrieveUserAuthenticationMode($login);
930 // Si mode linked
931 if (strtolower($mode) == "linked") {
932 $this->authentication_message = __("Votre identifiant ou votre mot de passe est incorrect.");
933 return false;
934 }
935 // Sinon traitement standard
936 return $authenticated = parent::processAuthentication($login, $password);
937 }
938
939 /**
940 * Cette methode permet d'effectuer toutes les verifications et les
941 * traitements necessaires pour la gestion de l'authentification des
942 * utilisateurs liés.
943 *
944 * Est un dérivé de la méthode om_application.login()
945 *
946 * @return void
947 */
948 function login_linked_users() {
949 // Initialisation des paramètres
950 $params = array(
951 "came_from" => array(
952 "method" => array("post", ),
953 "default_value" => "",
954 ),
955 );
956 foreach ($this->get_initialized_parameters($params) as $key => $value) {
957 ${$key} = $value;
958 }
959 // Debug
960 $this->addToLog(__METHOD__."(): start", EXTRA_VERBOSE_MODE);
961 // Si l'utilisateur ne souhaite pas s'authentifier (le cas se presente
962 // si nous sommes sur la page de login et que l'utilisateur n'a pas
963 // valider le formulaire) alors on sort de la methode
964 if ($this->wantToAuthenticate() != true) {
965 // Logger
966 $this->addToLog(__METHOD__."(): end", EXTRA_VERBOSE_MODE);
967 // On retourne null
968 return null;
969 }
970 // On recupere le login et le mot de passe de l'utilisateur qui
971 // demande l'authentification
972 $login = $this->getUserLogin();
973 $password = $this->getUserPassword();
974 // Logger
975 $this->addToLog(__METHOD__."(): credentials \"".$login."\"/\"***\"", EXTRA_VERBOSE_MODE);
976 // On procede a l'authentification
977 $authenticated = $this->process_authentication_linked_users($login, $password);
978 //
979 if ($authenticated) {
980 $user_infos = $this->retrieveUserProfile($login);
981 }
982 //
983 if (isset($user_infos[$this->table_om_utilisateur_field_om_profil])) {
984 // Identification OK
985 $_SESSION["profil"] = $user_infos[$this->table_om_profil_field_hierarchie];
986 $_SESSION["login"] = $user_infos[$this->table_om_utilisateur_field_login];
987 $_SESSION["collectivite"] = $user_infos[$this->table_om_utilisateur_field_om_collectivite];
988 $_SESSION["niveau"] = $user_infos[$this->table_om_collectivite_field_niveau];
989 $_SESSION["justlogin"] = true;
990 //
991 $this->triggerAfterLogin($user_infos);
992 // Gestion des sessions spécifiques
993 unset($_SESSION['dossiers_consulte']);
994 //
995 $class = "ok";
996 $message = __("Votre session est maintenant ouverte.");
997 $this->addToMessage($class, $message);
998 //
999 // $this->disconnectDatabase();
1000 //
1001 if ($this->flag === "login_and_nohtml") {
1002 $this->authenticated = true;
1003 $this->setFlag("nohtml");
1004 return;
1005 }
1006 // Redirection vers le came_from si existant
1007 if ($came_from != "") {
1008 //
1009 header("Location: ".urldecode($came_from));
1010 exit();
1011 } else {
1012 // Sinon on redirige vers le tableau de bord
1013 $this->goToDashboard ();
1014 }
1015 } else {
1016 //
1017 $class = "error";
1018 $this->addToMessage($class, $this->authentication_message);
1019 $this->came_from = $came_from;
1020 }
1021 // Logger
1022 $this->addToLog(__METHOD__."(): end", EXTRA_VERBOSE_MODE);
1023 }
1024
1025 /**
1026 * Traitement de l'authentification d'un utilisateur lié.
1027 *
1028 * Est un dérivé de la méthode om_application.processAuthentication()
1029 *
1030 * @param string $login Indentifiant de l'utilisateur
1031 * @param string $password Mot de passe de l'utilisateur
1032 * @access public
1033 * @return bool Etat de l'authentification de l'utilisateur
1034 */
1035 public function process_authentication_linked_users($login, $password) {
1036 // Initialisation de la valeur de retour a false
1037 $authenticated = false;
1038 // On recupere le mode d'authenfication de l'utilisateur
1039 $mode = $this->retrieveUserAuthenticationMode($login);
1040 // Debug
1041 $this->addToLog(__METHOD__."(): le mode d'authentification est \"".$mode."\"", EXTRA_VERBOSE_MODE);
1042 // Si mode base de donnees ou utilisateur lié
1043 if (strtolower($mode) == "db" || strtolower($mode) == 'linked') {
1044 // On procede a l'authentification depuis la base de donnees
1045 // $authenticated = $this->processDatabaseAuthentication($login, $password);
1046 $authenticated = $this->process_database_authentication_linked_users($login, $password);
1047 } elseif (strtolower($mode) == "ldap") { // Si mode annuaire
1048 //
1049 if ($password == "") {
1050 $authenticated = false;
1051 $this->authentication_message = __("Votre identifiant ou votre mot de passe est incorrect.");
1052 } else {
1053 // On procede a l'authentification depuis l'annuaire
1054 $authenticated = $this->processDirectoryAuthentication($login, $password);
1055 }
1056 }
1057 // On retourne la valeur
1058 return $authenticated;
1059 }
1060
1061 /**
1062 * Traitement de l'authentification pour un utilisateur lié.
1063 *
1064 * Est un dérivé de la méthode om_application.processDatabaseAuthentication()
1065 *
1066 * @param string $login Identifiant de l'utilisateur
1067 * @param string $password Mot de passe de l'utilisateur
1068 * @return bool Etat de l'authentification de l'utilisateur
1069 * @access public
1070 */
1071 public function process_database_authentication_linked_users($login, $password) {
1072 // Initialisation de la valeur de retour a false
1073 $authenticated = false;
1074 // Récupération des infos de tiers consultés
1075 $qres = $this->get_all_results_from_db_query(
1076 sprintf('
1077 SELECT *
1078 FROM %s%s
1079 WHERE %s = \'%s\'
1080 AND %s = \'%s\'
1081 ',
1082 DB_PREFIXE,
1083 $this->db->escapeSimple($this->table_om_utilisateur),
1084 $this->db->escapeSimple($this->table_om_utilisateur_field_login),
1085 $this->db->escapeSimple($login),
1086 $this->db->escapeSimple($this->table_om_utilisateur_field_password),
1087 $this->db->escapeSimple($password)
1088 ),
1089 array(
1090 "origin" => __METHOD__,
1091 )
1092 );
1093 //
1094 if ($qres['row_count'] > 0) {
1095 $authenticated = true;
1096 }
1097 //
1098 if ($authenticated == false) {
1099 $this->authentication_message = __("Votre identifiant ou votre mot de passe est incorrect.");
1100 }
1101 // On retourne la valeur
1102 return $authenticated;
1103 }
1104
1105 // }}}
1106
1107
1108 // {{{ GESTION DES FICHIERS
1109
1110 /**
1111 *
1112 */
1113 function notExistsError ($explanation = NULL) {
1114 // message
1115 $message_class = "error";
1116 $message = _("Cette page n'existe pas.");
1117 $this->addToMessage ($message_class, $message);
1118 //
1119 $this->setFlag(NULL);
1120 $this->display();
1121
1122 //
1123 die();
1124 }
1125
1126 // }}}
1127 /**
1128 * Retourne le statut du dossier d'instruction
1129 * @param string $idx Identifiant du dossier d'instruction
1130 * @return string Le statut du dossier d'instruction
1131 */
1132 function getStatutDossier($idx){
1133 $statut = '';
1134 //Si l'identifiant du dossier d'instruction fourni est correct
1135 if ($idx != '') {
1136 //On récupère le statut de l'état du dossier à partir de l'identifiant du
1137 //dossier d'instruction
1138 $qres = $this->get_one_result_from_db_query(
1139 sprintf(
1140 'SELECT
1141 etat.statut
1142 FROM
1143 %1$sdossier
1144 LEFT JOIN %1$setat
1145 ON dossier.etat = etat.etat
1146 WHERE
1147 dossier = \'%2$s\'',
1148 DB_PREFIXE,
1149 $this->db->escapeSimple($idx)
1150 ),
1151 array(
1152 "origin" => __METHOD__,
1153 )
1154 );
1155 $statut = $qres["result"];
1156 }
1157 return $statut;
1158 }
1159
1160 /**
1161 * Formate le champ pour le type Timestamp
1162 * @param date $date_str Date
1163 * @param boolean $show Format pour l'affichage
1164 * @return mixed False si le traitement échoue ou la date formatée
1165 */
1166 function formatTimestamp ($date_str, $show = true) {
1167
1168 // Sépare la date et l'heure
1169 $date = explode(" ", $date_str);
1170 if (count($date) != 2) {
1171 return false;
1172 }
1173
1174 // Date en BDD
1175 $date_db = explode ('-', $date[0]);
1176 // Date en affichage
1177 $date_show = explode ('/', $date[0]);
1178
1179 // Contrôle la composition de la date
1180 if (count ($date_db) != 3 and count ($date_show) != 3) {
1181 return false;
1182 }
1183
1184 if (count ($date_db) == 3) {
1185 // Vérifie que c'est une date valide
1186 if (!checkdate($date_db[1], $date_db[2], $date_db[0])) {
1187 return false;
1188 }
1189 // Si c'est pour l'affichage de la date
1190 if ($show == true) {
1191 return $date_db [2]."/".$date_db [1]."/".$date_db [0]." ".$date[1];
1192 } else {
1193 return $date[0];
1194 }
1195 }
1196
1197 //
1198 if (count ($date_show) == 3) {
1199 // Vérifie que c'est une date valide
1200 if (!checkdate($date_show[1], $date_show[0], $date_show[2])) {
1201 return false;
1202 }
1203 // Si c'est pour l'affichage de la date
1204 if ($show == true) {
1205 return $date[0];
1206 } else {
1207 return $date_show [2]."-".$date_show [1]."-".$date_show [0]." ".$date[1];
1208 }
1209
1210 }
1211 return false;
1212
1213 }
1214
1215 /**
1216 * Permet de calculer la liste des parcelles à partir de la chaîne passée en paramètre
1217 * et la retourner sous forme d'un tableau associatif
1218 *
1219 * @param string $strParcelles Chaîne de la parcelles.
1220 * @param string $collectivite_idx Collectivite de la parcelle, false pour que la
1221 * collectivité ne soit pas récupérée.
1222 * @param string $dossier_id Identifiant du dossier d'instruction.
1223 *
1224 * @return array (array(prefixe, quartier, section, parcelle), ...)
1225 */
1226 function parseParcelles($strParcelles, $collectivite_idx = null, $dossier_id = null) {
1227
1228 // Séparation des lignes
1229 $references = explode(";", $strParcelles);
1230 $liste_parcelles = array();
1231
1232 // On boucle sur chaque ligne pour ajouter la liste des parcelles de chaque ligne
1233 foreach ($references as $parcelles) {
1234 // Si le contenu de la parcelle est vide on passe à la suite
1235 if (strval($parcelles) === ""){
1236 continue;
1237 }
1238 // Tableau des champs de la ligne de références cadastrales
1239 $reference_tab = array();
1240 // On récupère le quartier
1241 preg_match('/^[0-9]{3}/', $parcelles, $matches);
1242 if (empty($matches) === false) {
1243 $reference_tab[] = $matches[0];
1244 }
1245
1246 // Le dernier chiffre de la parcelle est soit au caractère 9 soit au caractère 8
1247 // Ceci nous permet de savoir si il y a une ou deux lettres dans la section
1248 if (substr($parcelles, 8, 1) == ''
1249 || substr($parcelles, 8, 1) == "A"
1250 || substr($parcelles, 8, 1) == "/" ) {
1251 //
1252 $only_one_letter = true;
1253 $regex_for_section = '/^[a-zA-Z]{1}/';
1254
1255 } else if ( preg_match('/^[0-9]+$/', substr($parcelles, 8, 1)) == 1 ) {
1256 $only_one_letter = false;
1257 $regex_for_section = '/^[0-9a-zA-Z]{2}/';
1258 }
1259
1260 // On récupère la section
1261 preg_match($regex_for_section, substr($parcelles, 3), $matches);
1262 if (empty($matches) === false) {
1263 $reference_tab[] = $matches[0];
1264 }
1265
1266 // On récupère la parcelle
1267 preg_match('/^[0-9]{4}/', substr($parcelles, $only_one_letter === true ? 4 : 5 ), $matches);
1268 if (empty($matches) === false) {
1269 $reference_tab[] = $matches[0];
1270 }
1271
1272 // On vérifie que la référence cadastrale possède au moins un séparateur
1273 if ( substr($parcelles, $only_one_letter === true ? 8 : 9 ) !== false ) {
1274 // Initialisation du tableau qui va contenir les séparateurs et les parcelles non triés
1275 $sep_parc_tab = array();
1276
1277 // On récupère les séparateurs et les parcelles dans un tableau
1278 $sep_parc_tab = preg_split('/(A)|(\/)/', substr($parcelles, $only_one_letter === true ? 8 : 9 ), -1, PREG_SPLIT_DELIM_CAPTURE | PREG_SPLIT_NO_EMPTY);
1279
1280 // Si le tableau est rempli on boucle sur les séparateurs + parcelles pour les ajouter dans le tableau
1281 if ( empty($sep_parc_tab) === false ) {
1282 foreach ($sep_parc_tab as $value) {
1283 $reference_tab[] = $value;
1284 }
1285 }
1286 }
1287
1288 // Vérification du format de la parcelle
1289 if (isset($reference_tab[0]) === false
1290 || isset($reference_tab[1]) === false) {
1291 //
1292 $msg = sprintf(
1293 "%sLa parcelle %s ne respectent pas le format imposé par openADS.",
1294 isset($dossier_id) === true && $dossier_id !== null ? sprintf("%s : ", $dossier_id) : '',
1295 $parcelles
1296 );
1297 $this->addToLog(__METHOD__."() : ".$msg, DEBUG_MODE);
1298 continue;
1299 }
1300
1301 // Calcul des parcelles
1302 $quartier = $reference_tab[0];
1303 $sect = $reference_tab[1];
1304
1305 $ancien_ref_parc = "";
1306 for ($i=2; $i < count($reference_tab); $i+=2) {
1307 if ($collectivite_idx !== null
1308 && $collectivite_idx !== false) {
1309 // Récupération du code impot de l'arrondissement
1310 $collectivite = $this->getCollectivite($collectivite_idx);
1311 $parc["prefixe"] = $this->get_arrondissement_code_impot($quartier);
1312 }
1313 $parc["quartier"] = $quartier;
1314 // Met en majuscule si besoin
1315 $parc["section"] = strtoupper($sect);
1316 if( $ancien_ref_parc == "" OR $reference_tab[$i-1] == "/") {
1317 // 1ere parcelle ou parcelle individuelle
1318 // Compléte par des "0" le début de la chaîne si besoin
1319 $parc["parcelle"] = str_pad($reference_tab[$i], 4, "0", STR_PAD_LEFT);
1320 // Ajout d'une parcelle à la liste
1321 $liste_parcelles[] = $parc;
1322 } elseif ($reference_tab[$i-1] == "A") {
1323 // Interval de parcelles
1324 for ($j=$ancien_ref_parc+1; $j <= $reference_tab[$i]; $j++) {
1325 // Compléte par des "0" le début de la chaîne si besoin
1326 $parc["parcelle"] = str_pad($j, 4, "0", STR_PAD_LEFT);
1327 // Ajout d'une parcelle à la liste
1328 $liste_parcelles[] = $parc;
1329 }
1330 }
1331 //Gestion des erreurs
1332 else{
1333 $msg = sprintf(
1334 "%sLa parcelle %s ne respectent pas le format imposé par openADS.",
1335 isset($dossier_id) === true && $dossier_id !== null ? sprintf("%s : ", $dossier_id) : '',
1336 $parcelles
1337 );
1338 $this->addToLog(__METHOD__."() : ".$msg, DEBUG_MODE);
1339 continue;
1340 }
1341 // Sauvegarde de la référence courante de parcelle
1342 $ancien_ref_parc = $reference_tab[$i];
1343 }
1344 }
1345
1346 return $liste_parcelles;
1347 }
1348
1349
1350 /**
1351 * Récupère le code impôt par rapport au quartier.
1352 *
1353 * @param string $quartier Numéro de quartier.
1354 * @return string Code impôts.
1355 */
1356 protected function get_arrondissement_code_impot($quartier) {
1357 // Si le quartier fournis est correct
1358 if ($quartier != "") {
1359 // Requête SQL
1360 $qres = $this->get_one_result_from_db_query(
1361 sprintf(
1362 'SELECT
1363 arrondissement.code_impots
1364 FROM
1365 %1$sarrondissement
1366 LEFT JOIN %1$squartier
1367 ON quartier.arrondissement = arrondissement.arrondissement
1368 WHERE
1369 quartier.code_impots = \'%2$s\'',
1370 DB_PREFIXE,
1371 $quartier
1372 ),
1373 array(
1374 "origin" => __METHOD__,
1375 )
1376 );
1377 }
1378 // Retour
1379 $code_impots = ! isset($qres["result"]) || $qres["result"] === null ?
1380 '' :
1381 $qres["result"];
1382 return $code_impots;
1383 }
1384
1385
1386 /**
1387 * Formate les parcelles en ajoutant le code impôt
1388 * @param array $liste_parcelles Tableau des parcelles
1389 * @return string Liste des parcelles formatées
1390 */
1391 function formatParcelleToSend($liste_parcelles) {
1392
1393 //
1394 $wParcelle = array();
1395
1396 //Formatage des références cadastrales pour l'envoi
1397 foreach ($liste_parcelles as $value) {
1398
1399 // On ajoute les données dans le tableau que si quartier + section + parcelle
1400 // a été fourni
1401 if ($value["quartier"] !== ""
1402 && $value["section"] !== ""
1403 && $value["parcelle"] !== ""){
1404
1405 //On récupère le code impôt de l'arrondissement
1406 $arrondissement = $this->get_arrondissement_code_impot($value["quartier"]);
1407
1408 //On ajoute la parcelle, si un arrondissement a été trouvé
1409 if ($arrondissement!=="") {
1410 //
1411 $wParcelle[] = $arrondissement.$value["quartier"].
1412 str_pad($value["section"], 2, " ", STR_PAD_LEFT).
1413 $value["parcelle"];
1414 }
1415 }
1416 }
1417
1418 //
1419 return $wParcelle;
1420 }
1421
1422 /**
1423 * Retourne true si tous les paramètres du SIG externe ont bien été définis
1424 * @return bool true/false
1425 */
1426 public function issetSIGParameter($idx) {
1427 $collectivite_idx = $this->get_collectivite_of_element("dossier", $idx);
1428 $collectivite = $this->getCollectivite($collectivite_idx);
1429 if(isset($collectivite["sig"])) {
1430 return true;
1431 } else {
1432 return false;
1433 }
1434 }
1435
1436 /**
1437 * Permet de vérifier que des champs existe dans une table
1438 * @param array $list_fields Liste des champs à tester
1439 * @param string $table Table où les champs doivent exister
1440 * @return mixed Retourne les champs qui n'existent pas
1441 * ou true
1442 */
1443 public function check_field_exist($list_fields, $table) {
1444
1445 // Instance de la classe en paramètre
1446 $object = $this->get_inst__om_dbform(array(
1447 "obj" => $table,
1448 "idx" => "]",
1449 ));
1450
1451 // Récupère les champs de la table
1452 foreach ($object->champs as $champ) {
1453 $list_column[] = $champ;
1454 }
1455
1456 // Tableau des champs en erreur
1457 $error_fields = array();
1458
1459 // Pour chaque champ à tester
1460 foreach ($list_fields as $value) {
1461
1462 // S'il n'apparaît pas dans la liste des champs possible
1463 if (!in_array($value, $list_column)) {
1464
1465 // Alors le champ est ajouté au tableau des erreurs
1466 $error_fields[] = $value;
1467 }
1468 }
1469
1470 // Si le tableau des erreurs n'est pas vide on le retourne
1471 if (count($error_fields) > 0) {
1472 return $error_fields;
1473 }
1474
1475 // Sinon on retourne le booléen true
1476 return true;
1477
1478 }
1479
1480 /*
1481 *
1482 */
1483 /**
1484 * Récupère la lettre type lié à un événement
1485 * @param integer $evenement L'identifiant de l'événement
1486 * @return integer Retourne l'idenfiant de la lettre-type ou true
1487 */
1488 function getLettreType($evenement){
1489
1490 $qres = $this->get_all_results_from_db_query(
1491 sprintf('
1492 SELECT
1493 lettretype
1494 FROM
1495 %1$sevenement
1496 WHERE
1497 evenement = %2$d',
1498 DB_PREFIXE,
1499 intval($evenement)
1500 ),
1501 array(
1502 "origin" => __METHOD__,
1503 )
1504 );
1505
1506
1507
1508 $lettretype = null;
1509
1510 if ($qres['row_count'] > 0) {
1511 $row = array_shift($qres['result']);
1512 $lettretype = $row['lettretype'];
1513 }
1514
1515 return $lettretype;
1516 }
1517
1518 /**
1519 * Retourne le type de dossier d'autorisation du dossier courant :
1520 * @param $idxDossier Le numéro du dossier d'instruction
1521 * @return le code du type détaillée de dossier d'autorisation
1522 **/
1523 function getDATDCode($idxDossier) {
1524 $qres = $this->get_one_result_from_db_query(
1525 sprintf(
1526 'SELECT
1527 dossier_autorisation_type_detaille.code
1528 FROM
1529 %1$sdossier_autorisation_type_detaille
1530 INNER JOIN %1$sdossier_autorisation
1531 ON dossier_autorisation_type_detaille.dossier_autorisation_type_detaille = dossier_autorisation.dossier_autorisation_type_detaille
1532 INNER JOIN %1$sdossier
1533 ON dossier.dossier_autorisation = dossier_autorisation.dossier_autorisation
1534 WHERE
1535 dossier.dossier = \'%2$s\'',
1536 DB_PREFIXE,
1537 $this->db->escapeSimple($idxDossier)
1538 ),
1539 array(
1540 "origin" => __METHOD__,
1541 )
1542 );
1543 return $qres["result"];
1544 }
1545
1546 /**
1547 * Retourne le type de dossier d'autorisation du dossier courant :
1548 * @param $idxDossier Le numéro du dossier d'instruction
1549 * @return le code du type de dossier d'autorisation
1550 **/
1551 function getDATCode($idxDossier) {
1552 $qres = $this->get_one_result_from_db_query(
1553 sprintf(
1554 'SELECT
1555 dossier_autorisation_type.code
1556 FROM
1557 %1$sdossier_autorisation_type
1558 INNER JOIN %1$sdossier_autorisation_type_detaille
1559 ON dossier_autorisation_type.dossier_autorisation_type = dossier_autorisation_type_detaille.dossier_autorisation_type
1560 INNER JOIN %1$sdossier_autorisation
1561 ON dossier_autorisation_type_detaille.dossier_autorisation_type_detaille = dossier_autorisation.dossier_autorisation_type_detaille
1562 INNER JOIN %1$sdossier
1563 ON dossier.dossier_autorisation = dossier_autorisation.dossier_autorisation
1564 WHERE
1565 dossier.dossier = \'%2$s\'',
1566 DB_PREFIXE,
1567 $this->db->escapeSimple($idxDossier)
1568 ),
1569 array(
1570 "origin" => __METHOD__,
1571 )
1572 );
1573 return $qres["result"];
1574 }
1575
1576 /**
1577 * Permet de copier un enregistrement
1578 * @param mixed $idx Identifiant de l'enregistrment
1579 * @param string $obj Objet de l'enregistrment
1580 * @param string $objsf Objets associés
1581 * @return array Tableau des nouveaux id et du message
1582 */
1583 function copier($idx, $obj, $objsf) {
1584
1585 // Tableau de résultat
1586 $resArray = array();
1587 // Message retourné à l'utilisateur
1588 $message = "";
1589 // Type du message (valid ou error)
1590 $message_type = "valid";
1591
1592 // Requête SQL permettant de récupérer les informations sur l'objet métier
1593 $qres = $this->get_all_results_from_db_query(
1594 sprintf('
1595 SELECT
1596 *
1597 FROM
1598 %1$s%2$s
1599 WHERE
1600 %2$s = %3$s',
1601 DB_PREFIXE,
1602 $obj,
1603 $idx
1604 ),
1605 array(
1606 "origin" => __METHOD__,
1607 )
1608 );
1609
1610 // Valeurs clonées
1611 $valF = array();
1612
1613 foreach ($qres['result'] as $result) {
1614 $valF = $result;
1615 }
1616
1617 // Valeurs non clonées
1618 // Identifiant modifié pour que ça soit un ajout
1619 $valF[$obj] = "]";
1620 // Instance de l'objet métier
1621 $clone_obj = $this->get_inst__om_dbform(array(
1622 "obj" => $obj,
1623 "idx" => "]",
1624 ));
1625 // Si dans l'objet métier la fonction "copier" existe
1626 if (method_exists($clone_obj, "update_for_copy")) {
1627 // Traitement sur les valeurs du duplicata
1628 $valF = $clone_obj->update_for_copy($valF, $objsf, DEBUG);
1629 // Recupère les messages retourné par la fonction
1630 $message .= $valF['message'];
1631 // Supprime les messages de la liste des valeurs
1632 unset($valF['message']);
1633 }
1634 // Ajoute le duplicata
1635 $clone_obj->ajouter($valF);
1636 // Si aucune erreur se produit dans la classe instanciée
1637 if ($clone_obj->correct === true) {
1638 // Récupère l'identifiant de l'objet créé
1639 $clone_obj_id = $clone_obj->valF[$obj];
1640
1641 // Message
1642 $message .= sprintf(_("La copie de l'enregistrement %s avec l'identifiant %s s'est effectuee avec succes"), "<span class='bold'>"._($obj)."</span>", "<span class='bold'>".$idx."</span>")."<br />";
1643 $message .= sprintf(
1644 '<a class="om-prev-icon" id="action-link--copy-of-%s-%s" href="%s">%s</a><br/><br/>',
1645 $obj,
1646 $idx,
1647 sprintf(
1648 '%s&obj=%s&action=3&idx=%s',
1649 OM_ROUTE_FORM,
1650 $obj,
1651 $clone_obj_id
1652 ),
1653 ("Cliquer ici pour accéder à la copie")
1654 );
1655 // Ajout de l'identifant au tableau des résultat
1656 $resArray[$obj.'_'.$idx] = $clone_obj_id;
1657
1658 // S'il y a au moins un objet metier associé
1659 if ($objsf != "") {
1660 // Liste des objet métier associés
1661 $list_objsf = explode(",", $objsf);
1662 // Pour chaque objet associé
1663 foreach ($list_objsf as $key => $objsf) {
1664 // Requête SQL permettant de récupérer les informations sur
1665 // l'objet métier associé
1666 $qres = $this->get_all_results_from_db_query(
1667 sprintf('
1668 SELECT
1669 *
1670 FROM
1671 %1$s%2$s
1672 WHERE
1673 %3$s = %4$s',
1674 DB_PREFIXE,
1675 $objsf,
1676 $obj,
1677 $idx
1678 ),
1679 array(
1680 "origin" => __METHOD__,
1681 )
1682 );
1683
1684 // Pour chaque élément associé
1685 foreach ($qres['result'] as $result) {
1686 // Identifiant de l'objet associé à copier
1687 $idxsf = $result[$objsf];
1688
1689 // Valeurs clonées
1690 $valF = $result;
1691 // Valeurs non clonées
1692 $valF[$obj] = $clone_obj_id;
1693 // Identifiant modifié pour que ça soit un ajout
1694 $valF[$objsf] = "]";
1695 // Instance de l'objet métier associé
1696 $clone_objsf = $this->get_inst__om_dbform(array(
1697 "obj" => $objsf,
1698 "idx" => "]",
1699 ));
1700 // Si dans l'objet métier associé
1701 // la fonction "copier" existe
1702 if (method_exists($clone_objsf, "update_for_copy")) {
1703 // Traitement sur les valeurs du duplicata
1704 $valF = $clone_objsf->update_for_copy($valF, $objsf, DEBUG);
1705 // Recupère les messages retourné par la fonction
1706 $message .= $valF['message'];
1707 // Supprime les messages de la liste des valeurs
1708 unset($valF['message']);
1709 }
1710 // Ajoute le duplicata
1711 $clone_objsf->ajouter($valF);
1712 // Si aucune erreur se produit dans la classe instanciée
1713 if ($clone_objsf->correct === true) {
1714 // Récupère l'identifiant de l'objet créé
1715 $clone_objsf_id = $clone_objsf->valF[$objsf];
1716
1717 // Message
1718 $message .= sprintf(
1719 _("La copie de l'enregistrement %s avec l'identifiant %s s'est effectuee avec succes"),
1720 "<span class='bold'>"._($objsf)."</span>",
1721 "<span class='bold'>".$idxsf."</span>"
1722 )."<br />";
1723
1724 // Ajout de l'identifant au tableau des résultat
1725 $resArray[$objsf.'_'.$result[$objsf]] = $clone_objsf_id;
1726 } else {
1727
1728 // Message d'erreur récupéré depuis la classe
1729 $message .= $clone_objsf->msg;
1730 // Type du message
1731 $message_type = "error";
1732 }
1733 }
1734 }
1735 }
1736 //
1737 } else {
1738
1739 // Message d'erreur récupéré depuis la classe
1740 $message .= $clone_obj->msg;
1741 // Type du message
1742 $message_type = "error";
1743 }
1744
1745 // Ajout du message au tableau des résultats
1746 $resArray['message'] = $message;
1747 // Ajout du type de message au tableau des résultats
1748 $resArray['message_type'] = $message_type;
1749
1750 // Retourne le tableau des résultats
1751 return $resArray;
1752 }
1753
1754 /**
1755 * Cette fonction prend en entrée le ou les paramètres du &contrainte qui sont entre
1756 * parenthèses (un ensemble de paramètres séparés par des points-virgules). Elle
1757 * sépare les paramètres et leurs valeurs puis construit et retourne un tableau
1758 * associatif qui contient pour les groupes et sous-groupes :
1759 * - un tableau de valeurs, avec un nom de groupe ou sous-groupe par ligne
1760 * pour les autres options :
1761 * - la valeur de l'option
1762 *
1763 * @param string $contraintes_param Chaîne contenant tous les paramètres
1764 *
1765 * @return array Tableau associatif avec paramètres et valeurs séparés
1766 */
1767 function explodeConditionContrainte($contraintes_param) {
1768
1769 // Initialisation des variables
1770 $return = array();
1771 $listGroupes = "";
1772 $listSousgroupes = "";
1773 $service_consulte = "";
1774 $affichage_sans_arborescence = "";
1775
1776 // Sépare toutes les conditions avec leurs valeurs et les met dans un tableau
1777 $contraintes_params = explode(";", $contraintes_param);
1778
1779 // Pour chaque paramètre de &contraintes
1780 foreach ($contraintes_params as $value) {
1781 // Récupère le mot-clé "liste_groupe" et les valeurs du paramètre
1782 if (strstr($value, "liste_groupe=")) {
1783 // On enlève le mots-clé "liste_groupe=", on garde les valeurs
1784 $listGroupes = str_replace("liste_groupe=", "", $value);
1785 }
1786 // Récupère le mot-clé "liste_ssgroupe" et les valeurs du paramètre
1787 if (strstr($value, "liste_ssgroupe=")) {
1788 // On enlève le mots-clé "liste_ssgroupe=", on garde les valeurs
1789 $listSousgroupes = str_replace("liste_ssgroupe=", "", $value);
1790 }
1791 // Récupère le mot-clé "service_consulte" et la valeur du paramètre
1792 if (strstr($value, "service_consulte=")) {
1793 // On enlève le mots-clé "service_consulte=", on garde sa valeur
1794 $service_consulte = str_replace("service_consulte=", "", $value);
1795 }
1796 // Récupère le mot-clé "affichage_sans_arborescence" et la valeur du
1797 // paramètre
1798 if (strstr($value, "affichage_sans_arborescence=")) {
1799 // On enlève le mots-clé "affichage_sans_arborescence=", on garde la valeur
1800 $affichage_sans_arborescence = str_replace("affichage_sans_arborescence=", "", $value);
1801 }
1802 }
1803
1804 // Récupère dans des tableaux la liste des groupes et sous-groupes qui
1805 // doivent être utilisés lors du traitement de la condition
1806 if ($listGroupes != "") {
1807 $listGroupes = array_map('trim', explode(",", $listGroupes));
1808 }
1809 if ($listSousgroupes != "") {
1810 $listSousgroupes = array_map('trim', explode(",", $listSousgroupes));
1811 }
1812
1813 // Tableau à retourner
1814 $return['groupes'] = $listGroupes;
1815 $return['sousgroupes'] = $listSousgroupes;
1816 $return['service_consulte'] = $service_consulte;
1817 $return['affichage_sans_arborescence'] = $affichage_sans_arborescence;
1818 return $return;
1819 }
1820
1821 /**
1822 * Méthode qui complète la clause WHERE de la requête SQL de récupération des
1823 * contraintes, selon les paramètres fournis. Elle permet d'ajouter une condition sur
1824 * les groupes, sous-groupes et les services consultés.
1825 *
1826 * @param $string $part Contient tous les paramètres fournis à &contraintes séparés
1827 * par des points-virgules, tel que définis dans l'état.
1828 * array[] $conditions Paramètre optionnel, contient les conditions déjà explosées
1829 * par la fonction explodeConditionContrainte()
1830 *
1831 * @return string Contient les clauses WHERE à ajouter à la requête SQL principale.
1832 */
1833 function traitement_condition_contrainte($part, $conditions = NULL) {
1834
1835 // Initialisation de la condition
1836 $whereContraintes = "";
1837 // Lorsqu'on a déjà les conditions explosées dans le paramètre $conditions, on
1838 // utilise ces données. Sinon, on appelle la méthode qui explose la chaîne de
1839 // caractères contenant l'ensemble des paramètres.
1840 if (is_array($conditions)){
1841 $explodeConditionContrainte = $conditions;
1842 }
1843 else {
1844 $explodeConditionContrainte = $this->explodeConditionContrainte($part);
1845 }
1846 // Récupère les groupes, sous-groupes et service_consulte pour la condition
1847 $groupes = $explodeConditionContrainte['groupes'];
1848 $sousgroupes = $explodeConditionContrainte['sousgroupes'];
1849 $service_consulte = $explodeConditionContrainte['service_consulte'];
1850
1851 // Pour chaque groupe
1852 if ($groupes != "") {
1853 foreach ($groupes as $key => $groupe) {
1854 // Si le groupe n'est pas vide
1855 if (!empty($groupe)) {
1856 // Choisit l'opérateur logique
1857 $op_logique = $key > 0 ? 'OR' : 'AND (';
1858 // Ajoute la condition
1859 $whereContraintes .= " ".$op_logique." lower(trim(both E'\n\r\t' from contrainte.groupe)) = lower('"
1860 .pg_escape_string($groupe)."')";
1861 }
1862 }
1863 // S'il y a des valeurs dans groupe
1864 if (count($groupes) > 0) {
1865 // Ferme la parenthèse
1866 $whereContraintes .= " ) ";
1867 }
1868 }
1869
1870 // Pour chaque sous-groupe
1871 if ($sousgroupes != "") {
1872 foreach ($sousgroupes as $key => $sousgroupe) {
1873 // Si le sous-groupe n'est pas vide
1874 if (!empty($sousgroupe)) {
1875 // Choisit l'opérateur logique
1876 $op_logique = $key > 0 ? 'OR' : 'AND (';
1877 // Ajoute la condition
1878 $whereContraintes .= " ".$op_logique." lower(trim(both E'\n\r\t' from contrainte.sousgroupe)) = lower('"
1879 .pg_escape_string($sousgroupe)."')";
1880 }
1881 }
1882 // S'il y a des valeurs dans sous-groupe
1883 if (count($sousgroupes) > 0) {
1884 // Ferme la parenthèse
1885 $whereContraintes .= " ) ";
1886 }
1887 }
1888
1889 // Si l'option service_consulte n'est pas vide
1890 if ($service_consulte != "") {
1891 // Ajoute la condition
1892 $whereContraintes .= " AND service_consulte = cast(lower('".$service_consulte."') as boolean) ";
1893 }
1894
1895 // Condition retournée
1896 return $whereContraintes;
1897 }
1898
1899 /**
1900 * Calcule une date par l'ajout ou la soustraction de mois ou de jours.
1901 *
1902 * @param date $date Date de base (format dd-mm-yyyy)
1903 * @param integer $delay Délais à ajouter
1904 * @param string $operator Opérateur pour le calcul ("-" ou "+")
1905 * @param string $type Type de calcul (mois ou jour)
1906 *
1907 * @return date Date calculée
1908 */
1909 function mois_date($date, $delay, $operator = "+", $type = "mois") {
1910 // On force le type du paramètre $delay
1911 $delay = intval($delay);
1912
1913 // Si un type n'est pas définit
1914 if ($type != "mois" && $type != "jour") {
1915 //
1916 return null;
1917 }
1918
1919 // Si aucune date n'a été fournie ou si ce n'est pas une date correctement
1920 // formatée
1921 if ( is_null($date) || $date == "" ||
1922 preg_match('/[0-9]{4}-[0-9]{2}-[0-9]{2}/', $date) == 0 ){
1923 return null;
1924 }
1925
1926 // Si l'opérateur n'est pas définit
1927 if ($operator != "+" && $operator != "-") {
1928 //
1929 return null;
1930 }
1931
1932 // Découpage de la date
1933 $temp = explode("-", $date);
1934 $day = (int) $temp[2];
1935 $month = (int) $temp[1];
1936 $year = (int) $temp[0];
1937
1938 // Si c'est un calcul sur des mois
1939 // Le calcul par mois ne se fait pas comme le calcul par jour car
1940 // les fonctions PHP ne réalisent pas les calculs réglementaires
1941 if ($type == "mois") {
1942
1943 // Si c'est une addition
1944 if ($operator == '+') {
1945 // Année à ajouter
1946 $year += floor($delay / 12);
1947 // Mois restant
1948 $nb_month = ($delay % 12);
1949 // S'il y a des mois restant
1950 if ($nb_month != 0) {
1951 // Ajout des mois restant
1952 $month += $nb_month;
1953 // Si ça dépasse le mois 12 (décembre)
1954 if ($month > 12) {
1955 // Soustrait 12 au mois
1956 $month -= 12;
1957 // Ajoute 1 à l'année
1958 $year += 1;
1959 }
1960 }
1961 }
1962
1963 // Si c'est une soustraction
1964 if ($operator == "-") {
1965 // Année à soustraire
1966 $year -= floor($delay / 12);
1967 // Mois restant
1968 $nb_month = ($delay % 12);
1969 // S'il y a des mois restant
1970 if ($nb_month != 0) {
1971 // Soustrait le délais
1972 $month -= $nb_month;
1973 // Si ça dépasse le mois 1 (janvier)
1974 if ($month < 1) {
1975 // Soustrait 12 au mois
1976 $month += 12;
1977 // Ajoute 1 à l'année
1978 $year -= 1;
1979 }
1980 }
1981 }
1982
1983 // Calcul du nombre de jours dans le mois sélectionné
1984 switch($month) {
1985 // Mois de février
1986 case "2":
1987 if ($year % 4 == 0 && $year % 100 != 0 || $year % 400 == 0) {
1988 $day_max = 29;
1989 } else {
1990 $day_max = 28;
1991 }
1992 break;
1993 // Mois d'avril, juin, septembre et novembre
1994 case "4":
1995 case "6":
1996 case "9":
1997 case "11":
1998 $day_max = 30;
1999 break;
2000 // Mois de janvier, mars, mai, juillet, août, octobre et décembre
2001 default:
2002 $day_max = 31;
2003 }
2004
2005 // Si le jour est supérieur au jour maximum du mois
2006 if ($day > $day_max) {
2007 // Le jour devient le jour maximum
2008 $day = $day_max;
2009 }
2010
2011 // Compléte le mois et le jour par un 0 à gauche si c'est un chiffre
2012 $month = str_pad($month, 2, "0", STR_PAD_LEFT);
2013 $day = str_pad($day, 2, "0", STR_PAD_LEFT);
2014
2015 // Résultat du calcul
2016 $date_result = $year."-".$month."-".$day;
2017 }
2018
2019 // Si c'est un calcul sur des jours
2020 if ($type == "jour") {
2021 //
2022 $datetime = new DateTime($date);
2023 // Si le délai est un numérique
2024 if (is_numeric($delay)) {
2025 // Modifie la date
2026 $datetime->modify($operator.$delay.' days');
2027 }
2028 // Résultat du calcul
2029 $date_result = $datetime->format('Y-m-d');
2030 }
2031
2032 // Retourne la date calculée
2033 return $date_result;
2034 }
2035
2036 /**
2037 * Vérifie la valididité d'une date.
2038 *
2039 * @param string $pDate Date à vérifier
2040 *
2041 * @return boolean
2042 */
2043 function check_date($pDate) {
2044
2045 // Vérifie si c'est une date valide
2046 if (preg_match("/^([0-9]{4})-([0-9]{2})-([0-9]{2})$/", $pDate, $date)
2047 && checkdate($date[2], $date[3], $date[1])
2048 && $date[1] >= 1900) {
2049 //
2050 return true;
2051 }
2052
2053 //
2054 return false;
2055 }
2056
2057 /**
2058 * Permet de tester le bypass
2059 *
2060 * @param string $obj le nom de l'objet
2061 * @param string $permission_suffix
2062 * @return boolean
2063 */
2064 function can_bypass($obj="", $permission_suffix=""){
2065 //On teste le droit bypass
2066 if ($permission_suffix!=""&&$obj!=""&&
2067 $this->isAccredited($obj."_".$permission_suffix."_bypass")){
2068 return true;
2069 }
2070 return false;
2071 }
2072
2073
2074 /**
2075 * Vérifie l'option de numérisation.
2076 *
2077 * @return boolean
2078 */
2079 public function is_option_digitalization_folder_enabled() {
2080 //
2081 if ($this->getParameter("option_digitalization_folder") !== true) {
2082 //
2083 return false;
2084 }
2085 //
2086 return true;
2087 }
2088
2089
2090 /**
2091 * Vérifie l'option de suppression d'un dossier d'instruction.
2092 *
2093 * @return boolean
2094 */
2095 public function is_option_suppression_dossier_instruction_enabled($om_collectivite=null) {
2096 //
2097 $parameters = $this->getCollectivite($om_collectivite);
2098 //
2099 if (isset($parameters['option_suppression_dossier_instruction']) === true
2100 && $parameters['option_suppression_dossier_instruction'] === 'true') {
2101 //
2102 return true;
2103 }
2104
2105 //
2106 return false;
2107 }
2108
2109
2110
2111 /**
2112 * Vérifie que l'option d'accès au portail citoyen est activée.
2113 *
2114 * @param integer $om_collectivite Identifiant de la collectivité.
2115 *
2116 * @return boolean
2117 */
2118 public function is_option_citizen_access_portal_enabled($om_collectivite=null) {
2119 //
2120 $parameters = $this->getCollectivite($om_collectivite);
2121 //
2122 if (isset($parameters['option_portail_acces_citoyen']) === true
2123 && $parameters['option_portail_acces_citoyen'] === 'true') {
2124 //
2125 return true;
2126 }
2127
2128 //
2129 return false;
2130 }
2131
2132
2133 /**
2134 * Vérifie que l'option du SIG est activée.
2135 *
2136 * @return boolean
2137 */
2138 public function is_option_sig_enabled($om_collectivite=null) {
2139 //
2140 $parameters = $this->getCollectivite($om_collectivite);
2141 //
2142 if (isset($parameters['option_sig']) === true
2143 && $parameters['option_sig'] === 'sig_externe') {
2144 //
2145 return true;
2146 }
2147 //
2148 return false;
2149 }
2150
2151 /**
2152 * Vérifie que l'option du SIG est activée.
2153 *
2154 * @return boolean
2155 */
2156 public function is_option_ws_synchro_contrainte_enabled($om_collectivite=null) {
2157 //
2158 $parameters = $this->getCollectivite($om_collectivite);
2159 //
2160 if (isset($parameters['option_ws_synchro_contrainte']) === true
2161 && $parameters['option_ws_synchro_contrainte'] === 'true') {
2162 //
2163 return true;
2164 }
2165 //
2166 return false;
2167 }
2168
2169
2170 /**
2171 * Vérifie que l'option de simulation des taxes est activée.
2172 *
2173 * @param integer $om_collectivite Identifiant de la collectivité.
2174 *
2175 * @return boolean
2176 */
2177 public function is_option_simulation_taxes_enabled($om_collectivite=null) {
2178 //
2179 $parameters = $this->getCollectivite($om_collectivite);
2180 //
2181 if (isset($parameters['option_simulation_taxes']) === true
2182 && $parameters['option_simulation_taxes'] === 'true') {
2183 //
2184 return true;
2185 }
2186
2187 //
2188 return false;
2189 }
2190
2191 /**
2192 * Vérifie que l'option de prévisualisation de l'édition est activée.
2193 *
2194 * @param integer $om_collectivite Identifiant de la collectivité.
2195 *
2196 * @return boolean
2197 */
2198 public function is_option_preview_pdf_enabled($om_collectivite=null) {
2199 //
2200 $parameters = $this->getCollectivite($om_collectivite);
2201 //
2202 if (isset($parameters['option_previsualisation_edition']) === true
2203 && $parameters['option_previsualisation_edition'] === 'true') {
2204 //
2205 return true;
2206 }
2207
2208 //
2209 return false;
2210 }
2211
2212 /**
2213 * Vérifie que l'option de rédaction libre de l'édition est activée.
2214 *
2215 * @param integer $om_collectivite Identifiant de la collectivité.
2216 *
2217 * @return boolean
2218 */
2219 public function is_option_redaction_libre_enabled($om_collectivite=null) {
2220 //
2221 $parameters = $this->getCollectivite($om_collectivite);
2222 //
2223 if (isset($parameters['option_redaction_libre']) === true
2224 && $parameters['option_redaction_libre'] === 'true') {
2225 //
2226 return true;
2227 }
2228
2229 //
2230 return false;
2231 }
2232
2233
2234 /**
2235 * Vérifie que l'option de finalisation automatique des instructions tacites
2236 * et retours est activée..
2237 *
2238 * @param integer $om_collectivite Identifiant de la collectivité.
2239 *
2240 * @return boolean
2241 */
2242 public function is_option_finalisation_auto_enabled($om_collectivite = null) {
2243 //
2244 $parameters = $this->getCollectivite($om_collectivite);
2245 //
2246 if (isset($parameters['option_final_auto_instr_tacite_retour']) === true
2247 && $parameters['option_final_auto_instr_tacite_retour'] === 'true') {
2248 //
2249 return true;
2250 }
2251
2252 //
2253 return false;
2254 }
2255
2256 /**
2257 * Vérifie que l'option de trouillotage numérique automatique des
2258 * pièces est activée.
2259 *
2260 * @param integer $om_collectivite Identifiant de la collectivité.
2261 *
2262 * @return boolean
2263 */
2264 public function is_option_trouillotage_numerique_enabled($om_collectivite = null) {
2265 //
2266 $parameters = $this->getCollectivite($om_collectivite);
2267 //
2268 if (isset($parameters['option_trouillotage_numerique']) === true
2269 && $parameters['option_trouillotage_numerique'] === 'true') {
2270 //
2271 return true;
2272 }
2273 //
2274 return false;
2275 }
2276
2277 /**
2278 * Vérifie que l'option de saisie du numéro de dossier est activée.
2279 *
2280 * @param integer $om_collectivite Identifiant de la collectivité.
2281 *
2282 * @return boolean
2283 */
2284 public function is_option_dossier_saisie_numero_enabled($om_collectivite=null) {
2285 //
2286 $parameters = $this->getCollectivite($om_collectivite);
2287 //
2288 if (isset($parameters['option_dossier_saisie_numero']) === true
2289 && $parameters['option_dossier_saisie_numero'] === 'true') {
2290 //
2291 return true;
2292 }
2293
2294 //
2295 return false;
2296 }
2297
2298 /**
2299 * Vérifie que l'option de saisie du numéro de dossier est activée.
2300 *
2301 * @param integer $om_collectivite Identifiant de la collectivité.
2302 *
2303 * @return boolean
2304 */
2305 public function is_option_dossier_saisie_numero_complet_enabled($om_collectivite=null) {
2306 //
2307 $parameters = $this->getCollectivite($om_collectivite);
2308 //
2309 if (isset($parameters['option_dossier_saisie_numero_complet']) === true
2310 && $parameters['option_dossier_saisie_numero_complet'] === 'true') {
2311 //
2312 return true;
2313 }
2314
2315 //
2316 return false;
2317 }
2318
2319 /**
2320 * Vérifie que l'option de la commune associée à un dossier est activée.
2321 *
2322 * @param integer $om_collectivite Identifiant de la collectivité.
2323 *
2324 * @return boolean
2325 */
2326 public function is_option_dossier_commune_enabled($om_collectivite=null) {
2327 $parameters = $this->getCollectivite($om_collectivite);
2328 return (
2329 isset($parameters['option_dossier_commune']) &&
2330 $parameters['option_dossier_commune'] === 'true');
2331 }
2332
2333 /**
2334 * Vérifie que l'option de récupération de la division de l'instructeur
2335 * affecté pour la numérotation des dossiers est activée.
2336 *
2337 * @param integer $om_collectivite Identifiant de la collectivité.
2338 *
2339 * @return boolean
2340 */
2341 public function is_option_instructeur_division_numero_dossier_enabled($om_collectivite=null) {
2342 //
2343 $parameters = $this->getCollectivite($om_collectivite);
2344 //
2345 if (isset($parameters['option_instructeur_division_numero_dossier']) === true
2346 && $parameters['option_instructeur_division_numero_dossier'] === 'true') {
2347 //
2348 return true;
2349 }
2350
2351 //
2352 return false;
2353 }
2354
2355 /**
2356 * Vérifie que l'option pour afficher les un surlignage en couleur des
2357 * numéros des dossiers dans les listings est activée.
2358 *
2359 * @param integer $om_collectivite Identifiant de la collectivité.
2360 *
2361 * @return boolean
2362 */
2363 public function is_option_afficher_couleur_dossier($om_collectivite=null) {
2364 //
2365 $parameters = $this->getCollectivite($om_collectivite);
2366 //
2367 if (isset($parameters['option_afficher_couleur_dossier']) === true
2368 && $parameters['option_afficher_couleur_dossier'] === 'true') {
2369 //
2370 return true;
2371 }
2372
2373 //
2374 return false;
2375 }
2376
2377 /**
2378 * Vérifie que l'option du suivi de numérisation est activée.
2379 * Les utilisateurs de la collectivité de niveau 2 peuvent accéder aux
2380 * fonctionnalités du suivi de numérisation même si l'option est activée seulement
2381 * sur une collectivité de niveau 1.
2382 *
2383 * @param integer $om_collectivite Identifiant de la collectivité.
2384 *
2385 * @return boolean
2386 */
2387 public function is_option_suivi_numerisation_enabled($om_collectivite=null) {
2388 //
2389 $parameters = $this->getCollectivite($om_collectivite);
2390 //
2391 if (isset($parameters['option_suivi_numerisation']) === true
2392 && $parameters['option_suivi_numerisation'] === 'true') {
2393 //
2394 return true;
2395 }
2396
2397 // Si l'utilisateur fait partie de la collectivité de niveau 2
2398 // et qu'au moins une des communes à l'option de numérisation activée
2399 if ($this->has_collectivite_multi() === true) {
2400 $qres = $this->get_one_result_from_db_query(
2401 sprintf(
2402 'SELECT
2403 valeur
2404 FROM
2405 %1$som_parametre
2406 WHERE
2407 libelle = \'option_suivi_numerisation\'',
2408 DB_PREFIXE
2409 ),
2410 array(
2411 "origin" => __METHOD__,
2412 "force_return" => true,
2413 )
2414 );
2415 if ($qres["code"] === "OK"
2416 && $qres["result"] === "true") {
2417 //
2418 return true;
2419 }
2420 }
2421
2422 //
2423 return false;
2424 }
2425
2426 // Mode MC
2427 public function is_option_om_collectivite_entity_enabled($om_collectivite=null) {
2428 //
2429 $parameters = $this->getCollectivite($om_collectivite);
2430 //
2431 if (isset($parameters['option_om_collectivite_entity']) === true
2432 && $parameters['option_om_collectivite_entity'] === 'true') {
2433 //
2434 return true;
2435 }
2436
2437 //
2438 return false;
2439 }
2440
2441 public function is_option_date_depot_mairie_enabled($om_collectivite=null) {
2442 //
2443 $parameters = $this->getCollectivite($om_collectivite);
2444 //
2445 if (isset($parameters['option_date_depot_mairie']) === true
2446 && $parameters['option_date_depot_mairie'] === 'true') {
2447 //
2448 return true;
2449 }
2450
2451 //
2452 return false;
2453 }
2454
2455 /**
2456 * [is_option_date_depot_mairie_enabled description]
2457 * @param [type] $om_collectivite [description]
2458 * @return boolean [description]
2459 */
2460 public function is_option_renommer_collectivite_enabled($om_collectivite=null) {
2461 //
2462 $parameters = $this->getCollectivite($om_collectivite);
2463 //
2464 if (isset($parameters['option_renommer_collectivite']) === true
2465 && $parameters['option_renommer_collectivite'] === 'true') {
2466 //
2467 return true;
2468 }
2469
2470 //
2471 return false;
2472 }
2473
2474 /**
2475 * [is_option_mode_service_consulte_enabled description]
2476 * @param [type] $om_collectivite [description]
2477 * @return boolean [description]
2478 */
2479 public function is_option_mode_service_consulte_enabled($om_collectivite=null) {
2480 //
2481 $parameters = $this->getCollectivite($om_collectivite);
2482 //
2483 if (isset($parameters['option_mode_service_consulte']) === true
2484 && $parameters['option_mode_service_consulte'] === 'true') {
2485 //
2486 return true;
2487 }
2488
2489 //
2490 return false;
2491 }
2492
2493 /**
2494 * Vérifie si l'option de notification automatique de dépôt de dossier
2495 * par voie dématérialisée est active ou pas.
2496 *
2497 * @param integer $om_collectivite identifiant de la collectivité
2498 * @return boolean
2499 */
2500 public function is_option_notification_depot_demat_enabled($om_collectivite=null) {
2501 $parameters = $this->getCollectivite($om_collectivite);
2502
2503 if (isset($parameters['option_notification_depot_demat']) === true
2504 && $parameters['option_notification_depot_demat'] === 'true') {
2505 return true;
2506 }
2507 return false;
2508 }
2509
2510 /**
2511 * Méthode permettant de récupérer le paramètrage de l'option
2512 * option_notification
2513 *
2514 * @param integer identifiant de la collectivité dont on veux le paramétrage
2515 * @return string la valeur du paramètre ou null si il n'est pas défini
2516 */
2517 public function get_param_option_notification($om_collectivite=null) {
2518 //
2519 $parameters = $this->getCollectivite($om_collectivite);
2520 //
2521 if (isset($parameters['option_notification']) === true) {
2522 return $parameters['option_notification'];
2523 }
2524 //
2525 return null;
2526 }
2527
2528 /**
2529 * Méthode permettant de récupérer le paramètrage de l'option
2530 * param_operateur
2531 *
2532 * @param integer identifiant de la collectivité. Par défaut, il est null
2533 * @return array
2534 */
2535 public function get_option_param_operateur($om_collectivite=null) {
2536
2537 $parameters = $this->getCollectivite($om_collectivite);
2538
2539 if (isset($parameters['param_operateur']) === true) {
2540 $param_operateur = json_decode($parameters['param_operateur']);
2541 return $param_operateur;
2542 }
2543
2544 return null;
2545 }
2546
2547 /**
2548 * Méthode permettant de récupérer le paramètre
2549 * affichage_di_listing_colonnes_masquees
2550 *
2551 * @param integer identifiant de la collectivité. Par défaut, il est null
2552 * @return array
2553 */
2554 public function get_affichage_di_listing_colonnes_masquees($om_collectivite=null) {
2555 $parameters = $this->getCollectivite($om_collectivite);
2556 if (isset($parameters['affichage_di_listing_colonnes_masquees']) === true) {
2557 $colonnes = explode(";", $parameters['affichage_di_listing_colonnes_masquees']);
2558 return $colonnes;
2559 }
2560
2561 return null;
2562 }
2563
2564 /**
2565 * Méthode permettant de récupérer le paramètre
2566 * option_afficher_localisation_colonne_dossier
2567 *
2568 * @param integer identifiant de la collectivité. Par défaut, il est null
2569 * @return boolean
2570 */
2571 public function is_option_afficher_localisation_colonne_dossier($om_collectivite=null) {
2572 $parameters = $this->getCollectivite($om_collectivite);
2573 if (isset($parameters['option_afficher_localisation_colonne_dossier']) === true
2574 && $parameters['option_afficher_localisation_colonne_dossier'] === 'true') {
2575 //
2576 return true;
2577 }
2578
2579 return false;
2580 }
2581
2582
2583 /**
2584 * Méthode permettant de récupérer le paramètrage de l'option
2585 * option_notification
2586 *
2587 * @return boolean
2588 */
2589 public function get_parametre_notification_url_acces($om_collectivite=null) {
2590 //
2591 $parameters = $this->getCollectivite($om_collectivite);
2592 //
2593 if (isset($parameters['parametre_notification_url_acces']) === true) {
2594 return $parameters['parametre_notification_url_acces'];
2595 }
2596 //
2597 return null;
2598 }
2599
2600 /**
2601 * Permet de récupérer le paramètre 'param_base_path_metadata_url_di'
2602 *
2603 * @param integer $om_collectivite Identifiant de la collectivité.
2604 * @return mixed Chaine de caractères ou null
2605 */
2606 public function get_param_base_path_metadata_url_di($om_collectivite=null) {
2607 //
2608 $parameters = $this->getCollectivite($om_collectivite);
2609 //
2610 if (isset($parameters['param_base_path_metadata_url_di']) === true) {
2611 return $parameters['param_base_path_metadata_url_di'];
2612 }
2613 //
2614 return null;
2615 }
2616
2617 /**
2618 * Permet de récupérer le paramètre 'portal_code_suivi_base_url'.
2619 *
2620 * @param integer $om_collectivite Identifiant de la collectivité.
2621 * @return mixed Chaine de caractères ou null.
2622 */
2623 public function get_portal_code_suivi_base_url($om_collectivite=null) {
2624 //
2625 $parameters = $this->getCollectivite($om_collectivite);
2626 //
2627 if (isset($parameters['portal_code_suivi_base_url']) === true
2628 && $parameters['portal_code_suivi_base_url'] !== null
2629 && $parameters['portal_code_suivi_base_url'] !== '') {
2630 //
2631 return $parameters['portal_code_suivi_base_url'];
2632 }
2633 //
2634 return null;
2635 }
2636
2637 /**
2638 * Méthode permettant de récupérer le corps et le titre du mail de notification
2639 * selon le type de notification voulu.
2640 *
2641 * @return boolean
2642 */
2643 public function get_notification_parametre_courriel_type($om_collectivite=null, $typeNotification = 'notification_demandeur') {
2644 $paramDefaut = array(
2645 'parametre_courriel_type_titre' => __("[openADS] Notification concernant votre dossier [DOSSIER]"),
2646 'parametre_courriel_type_message' => __("Bonjour, veuillez prendre connaissance du(des) document(s) suivant(s) :<br>[LIEN_TELECHARGEMENT_DOCUMENT]<br>[LIEN_TELECHARGEMENT_ANNEXE]"),
2647 );
2648 // Il existe 3 type de notification des demandeurs. Si la notification voulu appartiens a un de ces 3 types
2649 // alors ce sont les paramétre de la notification des demandeurs qui doivent être récupéré
2650 if (in_array($typeNotification, array('notification_instruction', 'notification_recepisse', 'notification_decision'))) {
2651 $typeNotification = 'notification_demandeur';
2652 }
2653 // Construit le nom de la méthode selon le type de notification
2654 // si la méthode existe elle est appellé sinon on renvoie le message défini par défaut
2655 $method = sprintf('get_%1$s_parametre_courriel_type', $typeNotification);
2656 if (method_exists($this, $method)) {
2657 $param = $this->$method($om_collectivite);
2658 // Si le titre du message n'a pas été récupéré c'est le titre par défaut qui est utilisé
2659 $param['parametre_courriel_type_titre'] =
2660 ! array_key_exists('parametre_courriel_type_titre', $param) ?
2661 $paramDefaut['parametre_courriel_type_titre'] :
2662 $param['parametre_courriel_type_titre'];
2663 // Si le corps du message n'a pas été récupéré c'est le titre par défaut qui est utilisé
2664 $param['parametre_courriel_type_message'] =
2665 ! array_key_exists('parametre_courriel_type_message', $param) ?
2666 $paramDefaut['parametre_courriel_type_message'] :
2667 $param['parametre_courriel_type_message'];
2668 return $param;
2669 }
2670 return $paramDefaut;
2671 }
2672
2673 /**
2674 * Permet de récupérer les phrases types composant la notification aux pétitionnaires.
2675 *
2676 * @param integer $om_collectivite Identifiant de la collectivité.
2677 *
2678 * @return array Tableau contenant les phrases types.
2679 */
2680 private function get_notification_demandeur_parametre_courriel_type($om_collectivite = null) {
2681 // Phrases types par défaut
2682 $result = array();
2683 // Récupération des paramètres
2684 $parameters = $this->getCollectivite($om_collectivite);
2685 // Vérification de l'existance des paramètres titre et message
2686 if (isset($parameters['parametre_courriel_type_message']) === true
2687 && $parameters['parametre_courriel_type_message'] !== null
2688 && $parameters['parametre_courriel_type_message'] !== '') {
2689 //
2690 $result['parametre_courriel_type_message'] = $parameters['parametre_courriel_type_message'];
2691 }
2692 if (isset($parameters['parametre_courriel_type_titre']) === true
2693 && $parameters['parametre_courriel_type_titre'] !== null
2694 && $parameters['parametre_courriel_type_titre'] !== '') {
2695 //
2696 $result['parametre_courriel_type_titre'] = $parameters['parametre_courriel_type_titre'];
2697 }
2698 //
2699 return $result;
2700 }
2701
2702 /**
2703 * Permet de récupérer les phrases types composant la notification aux services
2704 * consultés.
2705 *
2706 * @param integer $om_collectivite Identifiant de la collectivité.
2707 *
2708 * @return array Tableau contenant les phrases types.
2709 */
2710 private function get_notification_service_consulte_parametre_courriel_type($om_collectivite = null) {
2711 // Phrases types par défaut
2712 $result = array();
2713 // Récupération des paramètres
2714 $parameters = $this->getCollectivite($om_collectivite);
2715 // Vérification de l'existance des paramètres titre et message
2716 if (isset($parameters['parametre_courriel_service_type_message']) === true
2717 && $parameters['parametre_courriel_service_type_message'] !== null
2718 && $parameters['parametre_courriel_service_type_message'] !== '') {
2719 //
2720 $result['parametre_courriel_type_message'] = $parameters['parametre_courriel_service_type_message'];
2721 }
2722 if (isset($parameters['parametre_courriel_service_type_titre']) === true
2723 && $parameters['parametre_courriel_service_type_titre'] !== null
2724 && $parameters['parametre_courriel_service_type_titre'] !== '') {
2725 //
2726 $result['parametre_courriel_type_titre'] = $parameters['parametre_courriel_service_type_titre'];
2727 }
2728 //
2729 return $result;
2730 }
2731
2732 /**
2733 * Permet de récupérer les phrases types composant la notification aux tiers consultés.
2734 *
2735 * @param integer $om_collectivite Identifiant de la collectivité.
2736 *
2737 * @return array Tableau contenant les phrases types.
2738 */
2739 private function get_notification_tiers_consulte_parametre_courriel_type($om_collectivite = null) {
2740 // Phrases types par défaut
2741 $result = array();
2742 // Récupération des paramètres
2743 $parameters = $this->getCollectivite($om_collectivite);
2744 // Vérification de l'existance des paramètres titre et message
2745 if (isset($parameters['parametre_courriel_tiers_type_message']) === true
2746 && $parameters['parametre_courriel_tiers_type_message'] !== null
2747 && $parameters['parametre_courriel_type_message'] !== '') {
2748 //
2749 $result['parametre_courriel_type_message'] = $parameters['parametre_courriel_tiers_type_message'];
2750 }
2751 if (isset($parameters['parametre_courriel_tiers_type_titre']) === true
2752 && $parameters['parametre_courriel_tiers_type_titre'] !== null
2753 && $parameters['parametre_courriel_tiers_type_titre'] !== '') {
2754 //
2755 $result['parametre_courriel_type_titre'] = $parameters['parametre_courriel_tiers_type_titre'];
2756 }
2757 //
2758 return $result;
2759 }
2760
2761 /**
2762 * Permet de récupérer les phrases types composant la notification automatique du
2763 * dépôt de dossiers dématérialisés.
2764 *
2765 * @param integer $om_collectivite Identifiant de la collectivité.
2766 *
2767 * @return array Tableau contenant les phrases types.
2768 */
2769 private function get_notification_depot_demat_parametre_courriel_type($om_collectivite = null) {
2770 // Phrases types par défaut
2771 $result = array();
2772 // Récupération des paramètres
2773 $parameters = $this->getCollectivite($om_collectivite);
2774 // Vérification de l'existance des paramètres titre et message
2775 if (isset($parameters['param_courriel_de_notification_depot_demat_message']) === true
2776 && $parameters['param_courriel_de_notification_depot_demat_message'] !== null
2777 && $parameters['param_courriel_de_notification_depot_demat_message'] !== '') {
2778
2779 $result['parametre_courriel_type_message'] =
2780 $parameters['param_courriel_de_notification_depot_demat_message'];
2781 }
2782 if (isset($parameters['param_courriel_de_notification_depot_demat_titre']) === true
2783 && $parameters['param_courriel_de_notification_depot_demat_titre'] !== null
2784 && $parameters['param_courriel_de_notification_depot_demat_titre'] !== '') {
2785
2786 $result['parametre_courriel_type_titre'] =
2787 $parameters['param_courriel_de_notification_depot_demat_titre'];
2788 }
2789 return $result;
2790 }
2791
2792 /**
2793 * Permet de récupérer les phrases types composant la notification aux services
2794 * consultés.
2795 *
2796 * @param integer $om_collectivite Identifiant de la collectivité.
2797 *
2798 * @return array Tableau contenant les phrases types.
2799 */
2800 public function get_notification_commune_parametre_courriel_type($om_collectivite = null) {
2801 // Phrases types par défaut
2802 $result = array();
2803 // Récupération des paramètres
2804 $parameters = $this->getCollectivite($om_collectivite);
2805 // Vérification de l'existance des paramètres titre et message
2806 if (isset($parameters['param_courriel_de_notification_commune_modele_depuis_instruction']) === true
2807 && $parameters['param_courriel_de_notification_commune_modele_depuis_instruction'] !== null
2808 && $parameters['param_courriel_de_notification_commune_modele_depuis_instruction'] !== '') {
2809 //
2810 $result['parametre_courriel_type_message'] = $parameters['param_courriel_de_notification_commune_modele_depuis_instruction'];
2811 }
2812 if (isset($parameters['param_courriel_de_notification_commune_objet_depuis_instruction']) === true
2813 && $parameters['param_courriel_de_notification_commune_objet_depuis_instruction'] !== null
2814 && $parameters['param_courriel_de_notification_commune_objet_depuis_instruction'] !== '') {
2815 //
2816 $result['parametre_courriel_type_titre'] = $parameters['param_courriel_de_notification_commune_objet_depuis_instruction'];
2817 }
2818 //
2819 return $result;
2820 }
2821
2822 /**
2823 * Méthode permettant de récupérer le corps et le titre du mail de notification au signataire
2824 *
2825 * @param integer identifiant de la collectivité
2826 *
2827 * @return array tableau à deux entrées :
2828 * - parametre_courriel_type_titre : titre parametré pour les courriels
2829 * - parametre_courriel_type_message : contenu parametré pour les courriels
2830 */
2831 public function get_notification_signataire_parametre_courriel_type($om_collectivite = null) {
2832 // Phrases types par défaut
2833 $result = array(
2834 'parametre_courriel_type_titre' => __("[openADS] Nouveau document à signer pour le dossier [DOSSIER]"),
2835 'parametre_courriel_type_message' => __("Bonjour,<br/><br/>Un document concernant le dossier <DOSSIER_INSTRUCTION> est disponible à la signature.<br/><br/>Vous pouvez le signer en cliquant sur le lien suivant :<br/>[LIEN_PAGE_SIGNATURE]<br/><br/>Si vous possédez un compte sur openADS, vous pouvez retrouver l'intégralité du dossier en suivant le lien ci-dessous :<br/>[URL_DOSSIER]"),
2836 );
2837 // Récupération des paramètres
2838 $parameters = $this->getCollectivite($om_collectivite);
2839 if (isset($parameters['param_courriel_notification_signataire_type_message']) === true
2840 && $parameters['param_courriel_notification_signataire_type_message'] !== null
2841 && $parameters['param_courriel_notification_signataire_type_message'] !== '') {
2842 //
2843 $result['parametre_courriel_type_message'] = $parameters['param_courriel_notification_signataire_type_message'];
2844 }
2845 if (isset($parameters['param_courriel_notification_signataire_type_titre']) === true
2846 && $parameters['param_courriel_notification_signataire_type_titre'] !== null
2847 && $parameters['param_courriel_notification_signataire_type_titre'] !== '') {
2848 //
2849 $result['parametre_courriel_type_titre'] = $parameters['param_courriel_notification_signataire_type_titre'];
2850 }
2851 //
2852 return $result;
2853 }
2854
2855 /**
2856 * Récupère la liste des mails paramétrés pour l'envoi de notification email aux
2857 * communes
2858 *
2859 * @param integer $om_collectivite Identifiant de la collectivité.
2860 *
2861 * @return array Liste des adresses emails.
2862 */
2863 public function get_param_courriel_de_notification_commune($om_collectivite = null) {
2864 $listeEmail = array();
2865 // Récupération des paramètres
2866 $parameters = $this->getCollectivite($om_collectivite);
2867 // Récupération du contenu du paramèrtre
2868 if (! empty($parameters['param_courriel_de_notification_commune'])) {
2869 $listeEmail = explode("\n", $parameters['param_courriel_de_notification_commune']);
2870 }
2871 return $listeEmail;
2872 }
2873
2874 /**
2875 * Permet de récupérer la limite maximum du nombre d'annexe que l'on peux envoyer
2876 * lors de la notification des pétitionnaires via le paramètre "parametre_notification_max_annexes"
2877 *
2878 * @param integer $om_collectivite Identifiant de la collectivité.
2879 *
2880 * @return int Valeur maximale du nombre d'annexe notifiable
2881 */
2882 public function get_nb_max_annexe($om_collectivite = null) {
2883 $nb_annexe_max = 5;
2884 // Récupération des paramètres
2885 $parameters = $this->getCollectivite($om_collectivite);
2886 // Récupération de la valeur du paramètre 'parametre_notification_max_annexes'
2887 if (!empty($parameters['parametre_notification_max_annexes'])
2888 && is_numeric($parameters['parametre_notification_max_annexes'])) {
2889 // Si l'utilisateur à ajouté et correctement saisi le paramètre "parametre_notification_max_annexes"
2890 // cette valeur devient la nouvelle limite du nombre max d'annexe notifiable
2891 $nb_annexe_max = intVal($parameters['parametre_notification_max_annexes']);
2892 }
2893 return $nb_annexe_max;
2894 }
2895
2896 function is_type_dossier_platau($dossier_autorisation) {
2897 $inst_da = $this->get_inst__om_dbform(array(
2898 "obj" => "dossier_autorisation",
2899 "idx" => $dossier_autorisation,
2900 ));
2901
2902 $inst_datd = $inst_da->get_inst_dossier_autorisation_type_detaille();
2903
2904 if ($inst_datd->getVal('dossier_platau') === true || $inst_datd->getVal('dossier_platau') === 't'){
2905 return true;
2906 }
2907
2908 return false;
2909 }
2910
2911 /**
2912 * Définit si le type de dossier d'instruction est transmissible à Plat'AU.
2913 *
2914 * @param integer $dossier_instruction_type Identifiant du type de dossier d'instruction
2915 *
2916 * @return boolean
2917 */
2918 public function is_dit_transmitted_platau($dossier_instruction_type, $om_collectivite = null) {
2919 $parameters = $this->getCollectivite($om_collectivite);
2920 $inst_dit = $this->get_inst__om_dbform(array(
2921 "obj" => "dossier_instruction_type",
2922 "idx" => $dossier_instruction_type,
2923 ));
2924 // Si le code du type de dossier d'instruction est dans la liste des codes
2925 // identifiés comme transmissibles à Plat'AU grâce au paramètre dit_code__to_transmit__platau
2926 if (isset($parameters['dit_code__to_transmit__platau']) === true) {
2927 $dit_code__to_transmit__platau = explode(";", $parameters['dit_code__to_transmit__platau']);
2928 if (is_array($dit_code__to_transmit__platau) === true) {
2929 $dit_code__to_transmit__platau = array_map('mb_strtolower', $dit_code__to_transmit__platau);
2930 if (in_array(mb_strtolower($inst_dit->getVal('code')), $dit_code__to_transmit__platau, true)) {
2931 // Le type de DI est considéré comme transmissible
2932 return true;
2933 }
2934 }
2935 // Si le code n'est pas renseigné, alors le type de DI n'est pas transmissible
2936 return false;
2937 }
2938 // Si le paramètre n'est pas définit alors tous les types de DI sont considéré comme transmissible
2939 return true;
2940 }
2941
2942 /**
2943 * Vérifie que l'option du lien Google Street View est activée.
2944 *
2945 * @param integer $om_collectivite Identifiant de la collectivité.
2946 *
2947 * @return boolean
2948 */
2949 public function is_option_streetview_enabled($om_collectivite=null) {
2950 //
2951 $parameters = $this->getCollectivite($om_collectivite);
2952 //
2953 if (isset($parameters['option_streetview']) === true
2954 && $parameters['option_streetview'] === 'true') {
2955 //
2956 return true;
2957 }
2958
2959 //
2960 return false;
2961 }
2962
2963 /**
2964 * Vérifie que l'option d'affichage en lecture seule de la date
2965 * de l'événement d'instruction est activée.
2966 *
2967 * @param integer $om_collectivite Identifiant de la collectivité.
2968 *
2969 * @return boolean
2970 */
2971 public function is_option_date_evenement_instruction_lecture_seule($om_collectivite=null) {
2972 //
2973 $parameters = $this->getCollectivite($om_collectivite);
2974 //
2975 if (isset($parameters['option_date_evenement_instruction_lecture_seule']) === true
2976 && $parameters['option_date_evenement_instruction_lecture_seule'] === 'true') {
2977 //
2978 return true;
2979 }
2980
2981 //
2982 return false;
2983 }
2984
2985 /**
2986 * Vérifie que l'option référentiel ERP est activée.
2987 *
2988 * @param integer $om_collectivite Identifiant de la collectivité.
2989 *
2990 * @return boolean
2991 */
2992 public function is_option_geolocalisation_auto_contrainte_enabled($om_collectivite=null) {
2993 //
2994 $parameters = $this->getCollectivite($om_collectivite);
2995 //
2996 if (isset($parameters['option_geolocalisation_auto_contrainte']) === true
2997 && $parameters['option_geolocalisation_auto_contrainte'] === 'true') {
2998 //
2999 return true;
3000 }
3001
3002 //
3003 return false;
3004 }
3005
3006 /**
3007 * Vérifie que l'option de renommage des documents numérisés ajoutés par
3008 * une tâches "add_piece" est activée.
3009 *
3010 * Cette option doit être globale, c'est-à-dire soit sur la collectivité de
3011 * niveau 2, soit désactivée.
3012 *
3013 * @param integer $om_collectivite Identifiant de la collectivité.
3014 *
3015 * @return boolean
3016 */
3017 public function is_option_renommage_document_numerise_tache_enabled($om_collectivite=null) {
3018 //
3019 $parameters = $this->getCollectivite($om_collectivite);
3020 //
3021 if (isset($parameters['option_renommage_document_numerise_tache']) === true
3022 && $parameters['option_renommage_document_numerise_tache'] === 'true') {
3023 //
3024 return true;
3025 }
3026
3027 //
3028 return false;
3029 }
3030
3031 /**
3032 * Vérifie le niveau de la collectivité de l'utilisateur connecté
3033 *
3034 * @return boolean
3035 */
3036 function has_collectivite_multi() {
3037 $idx_multi = $this->get_idx_collectivite_multi();
3038 if (intval($_SESSION['collectivite']) === intval($idx_multi)) {
3039 return true;
3040 }
3041 return false;
3042 }
3043
3044
3045 /**
3046 * Pour un path absolu donné, retourne le relatif à la racine de
3047 * l'application.
3048 *
3049 * @param string $absolute Chemin absolu.
3050 *
3051 * @return mixed Faux si échec sinon chemin relatif.
3052 */
3053 public function get_relative_path($absolute) {
3054 if ($this->get_path_app() === false) {
3055 return false;
3056 }
3057 $path_app = $this->get_path_app();
3058 return str_replace($path_app, '', $absolute);
3059 }
3060
3061
3062 /**
3063 * Retourne le path absolu de la racine de l'application
3064 *
3065 * @return mixed Faux si échec sinon chemin absolu
3066 */
3067 public function get_path_app() {
3068 $match = array();
3069 preg_match( '/(.*)\/[a-zA-Z0-9]+\/\.\.\/core\/$/', PATH_OPENMAIRIE, $match);
3070 // On vérifie qu'il n'y a pas d'erreur
3071 if (isset($match[1]) === false) {
3072 return false;
3073 }
3074 return $match[1];
3075 }
3076
3077 /**
3078 * Compose un tableau et retourne son code HTML
3079 *
3080 * @param string $id ID CSS du conteneur
3081 * @param array $headers entêtes de colonnes
3082 * @param array $rows lignes
3083 * @return string code HTML
3084 */
3085 public function compose_generate_table($id, $headers, $rows) {
3086 //
3087 $html = '';
3088 // Début conteneur
3089 $html .= '<div id="'.$id.'">';
3090 // Début tableau
3091 $html .= '<table class="tab-tab">';
3092 // Début entête
3093 $html .= '<thead>';
3094 $html .= '<tr class="ui-tabs-nav ui-accordion ui-state-default tab-title">';
3095 // Colonnes
3096 $nb_colonnes = count($headers);
3097 $index_last_col = $nb_colonnes - 1;
3098 foreach ($headers as $i => $header) {
3099 if ($i === 0) {
3100 $col = ' firstcol';
3101 }
3102 if ($i === $index_last_col) {
3103 $col = ' lastcol';
3104 }
3105 $html .= '<th class="title col-'.$i.$col.'">';
3106 $html .= '<span class="name">';
3107 $html .= $header;
3108 $html .= '</span>';
3109 $html .= '</th>';
3110 }
3111 // Fin entête
3112 $html .= '</tr>';
3113 $html .= '</thead>';
3114 // Début corps
3115 $html .= '<tbody>';
3116 // Lignes
3117 foreach ($rows as $cells) {
3118 // Début ligne
3119 $html .= '<tr class="tab-data">';
3120 // Cellules
3121 foreach ($cells as $j => $cell) {
3122 if ($j === 0) {
3123 $col = ' firstcol';
3124 }
3125 if ($j === $index_last_col) {
3126 $col = ' lastcol';
3127 }
3128 $html .= '<td class="title col-'.$j.$col.'">';
3129 $html .= '<span class="name">';
3130 $html .= $cell;
3131 $html .= '</span>';
3132 $html .= '</td>';
3133 }
3134 // Fin ligne
3135 $html .= "</tr>";
3136 }
3137 // Fin corps
3138 $html .= '</tbody>';
3139 // Fin tableau
3140 $html .= '</table>';
3141 // Fin conteneur
3142 $html .= '</div>';
3143 //
3144 return $html;
3145 }
3146
3147 /**
3148 * Retourne le login de l'utilisateur connecté + entre parenthèses son nom
3149 * s'il en a un.
3150 *
3151 * @return string myLogin OU myLogin (myName)
3152 */
3153 public function get_connected_user_login_name() {
3154 // Requête et stockage des informations de l'user connecté
3155 $this->getUserInfos();
3156 // Si le nom existe et est défini on le récupère
3157 $nom = "";
3158 if (isset($this->om_utilisateur["nom"])
3159 && !empty($this->om_utilisateur["nom"])) {
3160 $nom = trim($this->om_utilisateur["nom"]);
3161 }
3162 // Définition de l'émetteur : obligatoirement son login
3163 $emetteur = $_SESSION['login'];
3164 // Définition de l'émetteur : + éventuellement son nom
3165 if ($nom != "") {
3166 $emetteur .= " (".$nom.")";
3167 }
3168 // Retour
3169 return $emetteur;
3170 }
3171
3172 /**
3173 * Cette méthode permet d'interfacer le module 'Settings'.
3174 */
3175 function view_module_settings() {
3176 //
3177 require_once "../obj/settings.class.php";
3178 $settings = new settings();
3179 $settings->view_main();
3180 }
3181
3182
3183 /**
3184 * Vérifie que l'option référentiel ERP est activée.
3185 *
3186 * @param integer $om_collectivite Identifiant de la collectivité.
3187 *
3188 * @return boolean
3189 */
3190 public function is_option_referentiel_erp_enabled($om_collectivite=null) {
3191 //
3192 $parameters = $this->getCollectivite($om_collectivite);
3193 //
3194 if (isset($parameters['option_referentiel_erp']) === true
3195 && $parameters['option_referentiel_erp'] === 'true') {
3196 //
3197 return true;
3198 }
3199
3200 //
3201 return false;
3202 }
3203
3204 /**
3205 * Vérifie que l'option d'affichage de la miniature des fichiers est activée.
3206 *
3207 * @param integer $om_collectivite Identifiant de la collectivité.
3208 *
3209 * @return boolean
3210 */
3211 public function is_option_miniature_fichier_enabled($om_collectivite=null) {
3212 //
3213 $parameters = $this->getCollectivite($om_collectivite);
3214 //
3215 if (isset($parameters['option_miniature_fichier']) === true
3216 && $parameters['option_miniature_fichier'] === 'true') {
3217 //
3218 return true;
3219 }
3220
3221 //
3222 return false;
3223 }
3224
3225 /**
3226 * Méthode générique permettant de savoir si une option donnée est active.
3227 *
3228 * @param string $opionName : nom de l'option dans la table om_parametre
3229 * @param string $om_collectivite : identifiant de la collectivite pour laquelle on souhaite vérifier
3230 * l'activation de l'option.
3231 *
3232 * @return boolean
3233 */
3234 public function is_option_enabled(string $optionName, $om_collectivite = null) {
3235 // Récupération des paramètres de la collectivité voulu
3236 $parameters = $this->getCollectivite($om_collectivite);
3237 // Vérification que l'option est active cad qu'elle existe et qu'elle a pour valeur 'true'
3238 return isset($parameters[$optionName]) === true && $parameters[$optionName] === 'true';
3239 }
3240
3241 /**
3242 * Interface avec le référentiel ERP.
3243 */
3244 function send_message_to_referentiel_erp($code, $infos) {
3245 //
3246 require_once "../obj/interface_referentiel_erp.class.php";
3247 $interface_referentiel_erp = new interface_referentiel_erp();
3248 $ret = $interface_referentiel_erp->send_message_to_referentiel_erp($code, $infos);
3249 return $ret;
3250 }
3251
3252 /**
3253 * Récupère la liste des identifiants des collectivités
3254 *
3255 * @param string $return_type 'string' ou 'array' selon que l'on retourne
3256 * respectivement une chaîne ou un tableau
3257 * @param string $separator caractère(s) séparateur(s) employé(s) lorsque
3258 * l'on retourne une chaîne, inutilisé si tableau
3259 * @return mixed possibilité de boolean/string/array :
3260 * false si erreur BDD sinon résultat
3261 */
3262 public function get_list_id_collectivites($return_type = 'string', $separator = ',') {
3263 $qres = $this->get_one_result_from_db_query(
3264 sprintf(
3265 'SELECT
3266 array_to_string(
3267 array_agg(om_collectivite),
3268 \'%2$s\'
3269 ) AS list_id_collectivites
3270 FROM
3271 %1$som_collectivite',
3272 DB_PREFIXE,
3273 $this->db->escapeSimple($separator)
3274 ),
3275 array(
3276 "origin" => __METHOD__,
3277 "force_return" => true,
3278 )
3279 );
3280
3281 if ($qres["code"] !== "OK") {
3282 return false;
3283 }
3284 if ($return_type === 'array') {
3285 return explode($separator, $qres["result"]);
3286 }
3287 return $qres["result"];
3288 }
3289
3290 /**
3291 * Teste si l'utilisateur connecté appartient au groupe indiqué en paramètre
3292 * ou s'il a le goupe bypass.
3293 *
3294 * @param string $groupe Code du groupe : ADS / CTX / CU / RU / ERP.
3295 * @return boolean vrai si utilisateur appartient au groupe fourni
3296 */
3297 public function is_user_in_group($groupe) {
3298 if (isset($_SESSION['groupe']) === true
3299 && (array_key_exists($groupe, $_SESSION['groupe']) === true
3300 || array_key_exists("bypass", $_SESSION['groupe']) === true)) {
3301 return true;
3302 }
3303 return false;
3304 }
3305
3306 /**
3307 * CONDITION - can_user_access_dossiers_confidentiels_from_groupe
3308 *
3309 * Permet de savoir si le type de dossier d'autorisation du dossier courant est
3310 * considéré comme confidentiel ou si l'utilisateur a le groupe bypass.
3311 *
3312 * @param string $groupe Code du groupe : ADS / CTX / CU / RU / ERP.
3313 * @return boolean true si l'utilisateur à accès aux dossiers confidentiels du groupe
3314 * passé en paramètre, sinon false.
3315 *
3316 */
3317 public function can_user_access_dossiers_confidentiels_from_groupe($groupe) {
3318 if ((isset($_SESSION['groupe'][$groupe]['confidentiel']) === true
3319 AND $_SESSION['groupe'][$groupe]['confidentiel'] === true)
3320 || array_key_exists("bypass", $_SESSION['groupe']) === true) {
3321 return true;
3322 }
3323 return false;
3324 }
3325
3326 public function starts_with($haystack, $needle) {
3327 $length = strlen($needle);
3328 return (substr($haystack, 0, $length) === $needle);
3329 }
3330
3331 public function ends_with($haystack, $needle) {
3332 $length = strlen($needle);
3333 if ($length == 0) {
3334 return true;
3335 }
3336 return (substr($haystack, -$length) === $needle);
3337 }
3338
3339 /**
3340 * Récupère le type définit dans la base de données des champs d'une table
3341 * entière ou d'un champs si celui-ci est précisé.
3342 *
3343 * Liste des types BDD :
3344 * - int4
3345 * - varchar
3346 * - bool
3347 * - numeric
3348 * - text
3349 *
3350 * @param string $table Nom de la table.
3351 * @param string $column Nom de la colonne (facultatif).
3352 *
3353 * @return array
3354 */
3355 public function get_type_from_db($table, $column = null) {
3356
3357 $qres = $this->get_all_results_from_db_query(
3358 sprintf('
3359 SELECT
3360 column_name,
3361 udt_name
3362 FROM
3363 information_schema.columns
3364 WHERE
3365 table_schema = \'%1$s\'
3366 AND
3367 table_name = \'%2$s\'
3368 %3$s
3369 ORDER BY
3370 ordinal_position',
3371 str_replace('.', '', DB_PREFIXE),
3372 $table,
3373 // Si une colonne est précisé
3374 ($column !== null || $column !== '') ?
3375 sprintf(" AND column_name = '%s' ", $column) :
3376 ''
3377 ),
3378 array(
3379 "origin" => __METHOD__,
3380 )
3381 );
3382
3383 $list_type = array();
3384 foreach ($qres['result'] as $result) {
3385 $list_type[$result['column_name']] = $result['udt_name'];
3386 }
3387
3388 // Retourne la liste des codes
3389 return $list_type;
3390 }
3391
3392
3393 /**
3394 * Cette méthode permet de récupérer le code de division correspondant
3395 * au dossier sur lequel on se trouve.
3396 *
3397 * Méthode identique à la méthode getDivisionFromDossier() de la classe
3398 * om_dbform à l'exception d'un cas de récupération du numéro de dossier par
3399 * la méthode getVal(). Cette exception permet d'utiliser cette méthode dans
3400 * les scripts instanciant seulement la classe utils tel que les *.inc.php.
3401 *
3402 * @param string $dossier Identifiant du dossier d'instruction.
3403 *
3404 * @return string Code de la division du dossier en cours
3405 */
3406 public function get_division_from_dossier_without_inst($dossier = null) {
3407
3408 // Cette méthode peut être appelée plusieurs fois lors d'une requête.
3409 // Pour éviter de refaire le traitement de recherche de la division
3410 // alors on vérifie si nous ne l'avons pas déjà calculé.
3411 if (isset($this->_division_from_dossier) === true
3412 && $this->_division_from_dossier !== null) {
3413 // Log
3414 $this->addToLog(__METHOD__."() : retour de la valeur déjà calculée - '".$this->_division_from_dossier."'", EXTRA_VERBOSE_MODE);
3415 // On retourne la valeur déjà calculée
3416 return $this->_division_from_dossier;
3417 }
3418
3419 // Récupère le paramétre retourformulaire présent dans l'URL
3420 $retourformulaire = $this->getParameter("retourformulaire");
3421 // Récupère le paramétre idxformulaire présent dans l'URL
3422 $idxformulaire = $this->getParameter("idxformulaire");
3423
3424 // Si le dossier n'est pas passé en paramètre de la méthode
3425 if ($dossier === null) {
3426
3427 // La méthode de récupération du dossier diffère selon le contexte
3428 // du formulaire
3429 if ($retourformulaire === "dossier"
3430 || $this->contexte_dossier_instruction()) {
3431
3432 // Récupère le numéro du dossier depuis le paramètre
3433 // idxformulaire présent dans l'URL
3434 $dossier = $idxformulaire;
3435 }
3436 //
3437 if ($retourformulaire === "lot") {
3438 $inst_lot = $this->get_inst__om_dbform(array(
3439 "obj" => "lot",
3440 "idx" => $idxformulaire,
3441 ));
3442 $dossier = $inst_lot->getVal("dossier");
3443 }
3444 }
3445
3446 // À cette étape si le dossier n'est toujours pas récupéré alors la
3447 // division ne pourra pas être récupérée
3448 if ($dossier === null) {
3449 //
3450 return null;
3451 }
3452
3453 $inst_dossier = $this->get_inst__om_dbform(array(
3454 "obj" => "dossier",
3455 "idx" => $dossier,
3456 ));
3457 $this->_division_from_dossier = $inst_dossier->getVal("division");
3458
3459 //
3460 return $this->_division_from_dossier;
3461
3462 }
3463
3464 /**
3465 *
3466 */
3467 function setDefaultValues() {
3468 $this->addHTMLHeadCss(
3469 array(
3470 "../app/lib/chosen/chosen.min.css",
3471 ),
3472 21
3473 );
3474 $this->addHTMLHeadJs(
3475 array(
3476 "../app/lib/chosen/chosen.jquery.min.js",
3477 ),
3478 21
3479 );
3480
3481 $this->addHTMLHeadCss(
3482 array(
3483 "../app/lib/gridjs/mermaid.min.css",
3484 ),
3485 22
3486 );
3487 $this->addHTMLHeadJs(
3488 array(
3489 "../app/lib/gridjs/gridjs.min.js",
3490 ),
3491 22
3492 );
3493 }
3494
3495
3496 /**
3497 * Permet de définir la configuration des liens du footer.
3498 *
3499 * @return void
3500 */
3501 protected function set_config__footer() {
3502 $footer = array();
3503 // Documentation du site
3504 $footer[] = array(
3505 "title" => __("Documentation"),
3506 "description" => __("Acceder a l'espace documentation de l'application"),
3507 "href" => "http://docs.openmairie.org/?project=openads&version=6.3&format=html&path=manuel_utilisateur",
3508 "target" => "_blank",
3509 "class" => "footer-documentation",
3510 );
3511
3512 // Portail openMairie
3513 $footer[] = array(
3514 "title" => __("openMairie.org"),
3515 "description" => __("Site officiel du projet openMairie"),
3516 "href" => "http://www.openmairie.org/catalogue/openads",
3517 "target" => "_blank",
3518 "class" => "footer-openmairie",
3519 );
3520 //
3521 $this->config__footer = $footer;
3522 }
3523
3524 /**
3525 * Surcharge - set_config__menu().
3526 *
3527 * @return void
3528 */
3529 protected function set_config__menu() {
3530 //
3531 $menu = array();
3532
3533 // {{{ Rubrique AUTORISATION
3534 //
3535 $rubrik = array(
3536 "title" => __("Autorisation"),
3537 "class" => "autorisation",
3538 "right" => "menu_autorisation"
3539 );
3540 //
3541 $links = array();
3542
3543 $links[] = array(
3544 "href" => "".OM_ROUTE_TAB."&obj=dossier_autorisation",
3545 "class" => "dossier_autorisation",
3546 "title" => _("Dossiers d'autorisation"),
3547 "right" => array("dossier_autorisation", "dossier_autorisation_tab", ),
3548 "open" => array("index.php|dossier_autorisation[module=tab]", "index.php|dossier_autorisation[module=form]", ),
3549 );
3550
3551 // Lien vers les dossiers d'autorisations qui ont une demande d'avis
3552 $links[] = array(
3553 "href" => "".OM_ROUTE_TAB."&obj=dossier_autorisation_avis",
3554 "class" => "dossier_autorisation",
3555 "title" => _("Dossiers d'autorisation"),
3556 "right" => array(
3557 "dossier_autorisation_avis",
3558 "dossier_autorisation_avis_tab",
3559 ),
3560 "open" => array("index.php|dossier_autorisation_avis[module=tab]", "index.php|dossier_autorisation[module=form]", ),
3561 );
3562
3563 //
3564 $rubrik['links'] = $links;
3565 //
3566 $menu[] = $rubrik;
3567 // }}}
3568
3569 // {{{ Rubrique GUICHET UNIQUE
3570 //
3571 $rubrik = array(
3572 "title" => _("Guichet Unique"),
3573 "class" => "guichet_unique",
3574 "right" => "menu_guichet_unique",
3575 );
3576 //
3577 $links = array();
3578 //
3579 $links[] = array(
3580 "href" => OM_ROUTE_DASHBOARD,
3581 "class" => "tableau-de-bord",
3582 "title" => _("tableau de bord"),
3583 "right" => "menu_guichet_unique_dashboard",
3584 "open" => array("index.php|[module=dashboard]",),
3585 );
3586 //
3587 $links[] = array(
3588 "class" => "category",
3589 "title" => _("nouvelle demande"),
3590 "right" => array(
3591 "demande",
3592 "demande_nouveau_dossier_ajouter",
3593 "demande_dossier_encours_ajouter", "demande_dossier_encours_tab",
3594 "demande_autre_dossier_ajouter", "demande_autre_dossier_tab",
3595 "demande_consulter","demande_tab",
3596 ),
3597 );
3598 $links[] = array(
3599 "title" => "<hr/>",
3600 "right" => array(
3601 "demande",
3602 "demande_dossier_encours_ajouter",
3603 "demande_dossier_encours_ajouter", "demande_dossier_encours_tab",
3604 ),
3605 );
3606 $links[] = array(
3607 "href" => "".OM_ROUTE_FORM."&obj=demande_nouveau_dossier&amp;action=0&amp;advs_id=&amp;tricol=&amp;valide=&amp;retour=tab&amp;new=",
3608 "class" => "nouveau-dossier",
3609 "title" => _("nouveau dossier"),
3610 "right" => array(
3611 "demande",
3612 "demande_nouveau_dossier_ajouter",
3613 ),
3614 "open" => array("index.php|demande_nouveau_dossier[module=form]",),
3615 );
3616 $links[] = array(
3617 "href" => "".OM_ROUTE_TAB."&obj=demande_dossier_encours",
3618 "class" => "dossier-existant",
3619 "title" => _("dossier en cours"),
3620 "right" => array(
3621 "demande",
3622 "demande_dossier_encours_ajouter",
3623 "demande_dossier_encours_tab",
3624 ),
3625 "open" => array("index.php|demande_dossier_encours[module=tab]", "index.php|demande_dossier_encours[module=form]"),
3626 );
3627 $links[] = array(
3628 "href" => "".OM_ROUTE_TAB."&obj=demande_autre_dossier",
3629 "class" => "autre-dossier",
3630 "title" => _("autre dossier"),
3631 "right" => array(
3632 "demande",
3633 "demande_autre_dossier_ajouter",
3634 "demande_autre_dossier_tab",
3635 ),
3636 "open" => array("index.php|demande_autre_dossier[module=tab]", "index.php|demande_autre_dossier[module=form]"),
3637 );
3638 $links[] = array(
3639 "title" => "<hr/>",
3640 "right" => array(
3641 "demande",
3642 "demande_consulter",
3643 "demande_tab"
3644 ),
3645 );
3646 $links[] = array(
3647 "href" => "".OM_ROUTE_TAB."&obj=demande",
3648 "class" => "pdf",
3649 "title" => _("recepisse"),
3650 "right" => array(
3651 "demande",
3652 "demande_consulter",
3653 "demande_tab"
3654 ),
3655 "open" => array("index.php|demande[module=tab]","index.php|demande[module=form]"),
3656 );
3657 $links[] = array(
3658 "title" => "<hr/>",
3659 "right" => array(
3660 "petitionnaire_frequent",
3661 "petitionnaire_frequent_consulter",
3662 "petitionnaire_frequent_tab"
3663 ),
3664 );
3665 $links[] = array(
3666 "href" => "".OM_ROUTE_TAB."&obj=petitionnaire_frequent",
3667 "class" => "petitionnaire_frequent",
3668 "title" => _("petitionnaire_frequent"),
3669 "right" => array(
3670 "petitionnaire_frequent",
3671 "petitionnaire_frequent_consulter",
3672 "petitionnaire_frequent_tab"
3673 ),
3674 "open" => array("index.php|petitionnaire_frequent[module=tab]","index.php|petitionnaire_frequent[module=form]"),
3675 );
3676 //
3677 $links[] = array(
3678 "class" => "category",
3679 "title" => _("affichage reglementaire"),
3680 "right" => array(
3681 "affichage_reglementaire_registre",
3682 "affichage_reglementaire_attestation",
3683 ),
3684 );
3685 $links[] = array(
3686 "title" => "<hr/>",
3687 "right" => array(
3688 "affichage_reglementaire_registre",
3689 "affichage_reglementaire_attestation",
3690 ),
3691 );
3692 $links[] = array(
3693 "href" => "".OM_ROUTE_FORM."&obj=demande_affichage_reglementaire_registre&action=110&idx=0",
3694 "class" => "affichage_reglementaire_registre",
3695 "title" => _("registre"),
3696 "right" => array(
3697 "affichage_reglementaire_registre",
3698 ),
3699 "open" => array("index.php|demande_affichage_reglementaire_registre[module=tab]", "index.php|demande_affichage_reglementaire_registre[module=form]"),
3700 );
3701 $links[] = array(
3702 "href" => "".OM_ROUTE_FORM."&obj=demande_affichage_reglementaire_attestation&action=120&idx=0",
3703 "class" => "affichage_reglementaire_attestation",
3704 "title" => _("attestation"),
3705 "right" => array(
3706 "affichage_reglementaire_attestation",
3707 ),
3708 "open" => array("index.php|demande_affichage_reglementaire_attestation[module=tab]", "index.php|demande_affichage_reglementaire_attestation[module=form]"),
3709 );
3710 //
3711 $rubrik['links'] = $links;
3712 //
3713 $menu[] = $rubrik;
3714 // }}}
3715
3716 // {{{ Rubrique QUALIFICATION
3717 //
3718 $rubrik = array(
3719 "title" => _("Qualification"),
3720 "class" => "qualification",
3721 "right" => "qualification_menu",
3722 );
3723 //
3724 $links = array();
3725 //
3726 $links[] = array(
3727 "href" => OM_ROUTE_DASHBOARD,
3728 "class" => "tableau-de-bord",
3729 "title" => _("tableau de bord"),
3730 "right" => "menu_qualification_dashboard",
3731 "open" => array("index.php|[module=dashboard]",),
3732 );
3733
3734 //
3735 $links[] = array(
3736 "href" => "".OM_ROUTE_TAB."&obj=dossier_qualifier_qualificateur",
3737 "class" => "dossier_qualifier_qualificateur",
3738 "title" => _("dossiers a qualifier"),
3739 "right" => array(
3740 "dossier_qualifier_qualificateur",
3741 "dossier_qualifier_qualificateur_tab",
3742 ),
3743 "open" => array("index.php|dossier_qualifier_qualificateur[module=tab]", "index.php|dossier_instruction[module=form]", ),
3744 );
3745
3746 //
3747 $rubrik['links'] = $links;
3748 //
3749 $menu[] = $rubrik;
3750 // }}}
3751
3752 // {{{ Rubrique INSTRUCTION
3753 //
3754 $rubrik = array(
3755 "title" => _("instruction"),
3756 "class" => "instruction",
3757 "right" => "menu_instruction",
3758 );
3759 //
3760 $links = array();
3761 //
3762 $links[] = array(
3763 "href" => OM_ROUTE_DASHBOARD,
3764 "class" => "tableau-de-bord",
3765 "title" => _("tableau de bord"),
3766 "right" => "menu_instruction_dashboard",
3767 "open" => array("index.php|[module=dashboard]",),
3768 );
3769 // Catégorie DOSSIERS D'INSTRUCTION
3770 $links[] = array(
3771 "class" => "category",
3772 "title" => _("dossiers d'instruction"),
3773 "right" => array(
3774 "dossier_instruction_mes_encours", "dossier_instruction_mes_encours_tab",
3775 "dossier_instruction_tous_encours", "dossier_instruction_tous_encours_tab",
3776 "dossier_instruction_mes_clotures", "dossier_instruction_mes_clotures_tab",
3777 "dossier_instruction_tous_clotures", "dossier_instruction_tous_clotures_tab",
3778 "dossier_instruction", "dossier_instruction_tab",
3779 "PC_modificatif", "PC_modificatif_tab",
3780 ),
3781 );
3782 $links[] = array(
3783 "title" => "<hr/>",
3784 "right" => array(
3785 "dossier_instruction_mes_encours", "dossier_instruction_mes_encours_tab",
3786 "dossier_instruction_tous_encours", "dossier_instruction_tous_encours_tab",
3787 ),
3788 );
3789 //
3790 $links[] = array(
3791 "href" => "".OM_ROUTE_TAB."&obj=dossier_instruction_mes_encours",
3792 "class" => "dossier_instruction_mes_encours",
3793 "title" => _("mes encours"),
3794 "right" => array("dossier_instruction_mes_encours", "dossier_instruction_mes_encours_tab", ),
3795 "open" => array("index.php|dossier_instruction_mes_encours[module=tab]", "index.php|dossier_instruction_mes_encours[module=form]", ),
3796 );
3797 //
3798 $links[] = array(
3799 "href" => "".OM_ROUTE_TAB."&obj=dossier_instruction_tous_encours",
3800 "class" => "dossier_instruction_tous_encours",
3801 "title" => _("tous les encours"),
3802 "right" => array("dossier_instruction_tous_encours", "dossier_instruction_tous_encours_tab", ),
3803 "open" => array("index.php|dossier_instruction_tous_encours[module=tab]", "index.php|dossier_instruction_tous_encours[module=form]", ),
3804 );
3805 //
3806 $links[] = array(
3807 "title" => "<hr/>",
3808 "right" => array(
3809 "dossier_instruction_mes_clotures", "dossier_instruction_mes_clotures_tab",
3810 "dossier_instruction_tous_clotures", "dossier_instruction_tous_clotures_tab",
3811 ),
3812 );
3813 //
3814 $links[] = array(
3815 "href" => "".OM_ROUTE_TAB."&obj=dossier_instruction_mes_clotures",
3816 "class" => "dossier_instruction_mes_clotures",
3817 "title" => _("mes clotures"),
3818 "right" => array("dossier_instruction_mes_clotures", "dossier_instruction_mes_clotures_tab", ),
3819 "open" => array("index.php|dossier_instruction_mes_clotures[module=tab]", "index.php|dossier_instruction_mes_clotures[module=form]", ),
3820 );
3821 //
3822 $links[] = array(
3823 "href" => "".OM_ROUTE_TAB."&obj=dossier_instruction_tous_clotures",
3824 "class" => "dossier_instruction_tous_clotures",
3825 "title" => _("tous les clotures"),
3826 "right" => array("dossier_instruction_tous_clotures", "dossier_instruction_tous_clotures_tab", ),
3827 "open" => array("index.php|dossier_instruction_tous_clotures[module=tab]", "index.php|dossier_instruction_tous_clotures[module=form]", ),
3828 );
3829 //
3830 $links[] = array(
3831 "title" => "<hr/>",
3832 "right" => array(
3833 "dossier_instruction", "dossier_instruction_tab",
3834 ),
3835 );
3836 //
3837 $links[] = array(
3838 "href" => "".OM_ROUTE_TAB."&obj=dossier_instruction",
3839 "class" => "dossier_instruction_recherche",
3840 "title" => _("recherche"),
3841 "right" => array("dossier_instruction", "dossier_instruction_tab", ),
3842 "open" => array("index.php|dossier_instruction[module=tab]", "index.php|dossier_instruction[module=form]", ),
3843 );
3844
3845 // Catégorier Qualification
3846 $links[] = array(
3847 "class" => "category",
3848 "title" => _("qualification"),
3849 "right" => array("dossier_qualifier", "architecte_frequent",),
3850 );
3851 //
3852 $links[] = array(
3853 "title" => "<hr/>",
3854 "right" => array("dossier_qualifier", "architecte_frequent", ),
3855 );
3856 //
3857 $links[] = array(
3858 "href" => "".OM_ROUTE_TAB."&obj=dossier_qualifier",
3859 "class" => "dossier_qualifier",
3860 "title" => _("dossiers a qualifier"),
3861 "right" => array("dossier_qualifier", "dossier_qualifier_tab", ),
3862 "open" => array("index.php|dossier_qualifier[module=tab]", "index.php|dossier_qualifier[module=form]", ),
3863 );
3864 //
3865 $links[] = array(
3866 "href" => "".OM_ROUTE_TAB."&obj=architecte_frequent",
3867 "class" => "architecte_frequent",
3868 "title" => _("architecte_frequent"),
3869 "right" => array("architecte_frequent", "architecte_frequent_tab", ),
3870 "open" => array("index.php|architecte_frequent[module=tab]", "index.php|architecte_frequent[module=form]", ),
3871 );
3872 // Catégorie CONSULTATIONS
3873 $links[] = array(
3874 "class" => "category",
3875 "title" => _("consultations"),
3876 "right" => array(
3877 "consultation",
3878 "consultation_mes_retours",
3879 "consultation_retours_ma_division",
3880 "consultation_tous_retours",
3881 ),
3882 );
3883 $links[] = array(
3884 "title" => "<hr/>",
3885 "right" => array(
3886 "consultation",
3887 "consultation_mes_retours",
3888 "consultation_retours_ma_division",
3889 "consultation_tous_retours",
3890 ),
3891 );
3892 $links[] = array(
3893 "href" => "".OM_ROUTE_TAB."&obj=consultation_mes_retours",
3894 "class" => "consultation_mes_retours",
3895 "title" => _("Mes retours"),
3896 "right" => array(
3897 "consultation",
3898 "consultation_mes_retours",
3899 "consultation_mes_retours_tab",
3900 ),
3901 "open" => array("index.php|consultation_mes_retours[module=tab]", "index.php|consultation_mes_retours[module=form]", ),
3902 );
3903 $links[] = array(
3904 "href" => "".OM_ROUTE_TAB."&obj=consultation_retours_ma_division",
3905 "class" => "consultation_retours_ma_division",
3906 "title" => _("Retours de ma division"),
3907 "right" => array(
3908 "consultation",
3909 "consultation_retours_ma_division",
3910 "consultation_retours_ma_division_tab",
3911 ),
3912 "open" => array("index.php|consultation_retours_ma_division[module=tab]", "index.php|consultation_retours_ma_division[module=form]", ),
3913 );
3914 $links[] = array(
3915 "href" => "".OM_ROUTE_TAB."&obj=consultation_tous_retours",
3916 "class" => "consultation_tous_retours",
3917 "title" => _("Tous les retours"),
3918 "right" => array(
3919 "consultation_tous_retours",
3920 "consultation_tous_retours_tab",
3921 ),
3922 "open" => array("index.php|consultation_tous_retours[module=tab]", "index.php|consultation_tous_retours[module=form]", ),
3923 );
3924 // Catégorie MESSAGES
3925 $links[] = array(
3926 "class" => "category",
3927 "title" => _("Messages"),
3928 "right" => array(
3929 "messages",
3930 "messages_mes_retours",
3931 "messages_retours_ma_division",
3932 "messages_tous_retours",
3933 ),
3934 );
3935 //
3936 $links[] = array(
3937 "title" => "<hr/>",
3938 "right" => array(
3939 "messages",
3940 "messages_mes_retours",
3941 "messages_retours_ma_division",
3942 "messages_tous_retours",
3943 ),
3944 );
3945 //
3946 $links[] = array(
3947 "href" => "".OM_ROUTE_TAB."&obj=messages_mes_retours",
3948 "class" => "messages_mes_retours",
3949 "title" => _("Mes messages"),
3950 "right" => array(
3951 "messages",
3952 "messages_mes_retours",
3953 "messages_mes_retours_tab",
3954 ),
3955 "open" => array("index.php|messages_mes_retours[module=tab]", "index.php|messages_mes_retours[module=form]", ),
3956 );
3957 //
3958 $links[] = array(
3959 "href" => "".OM_ROUTE_TAB."&obj=messages_retours_ma_division",
3960 "class" => "messages_retours_ma_division",
3961 "title" => _("Messages de ma division"),
3962 "right" => array(
3963 "messages",
3964 "messages_retours_ma_division",
3965 "messages_retours_ma_division_tab",
3966 ),
3967 "open" => array("index.php|messages_retours_ma_division[module=tab]", "index.php|messages_retours_ma_division[module=form]", ),
3968 );
3969 //
3970 $links[] = array(
3971 "href" => "".OM_ROUTE_TAB."&obj=messages_tous_retours",
3972 "class" => "messages_tous_retours",
3973 "title" => _("Tous les messages"),
3974 "right" => array(
3975 "messages",
3976 "messages_tous_retours",
3977 "messages_tous_retours_tab",
3978 ),
3979 "open" => array("index.php|messages_tous_retours[module=tab]", "index.php|messages_tous_retours[module=form]", ),
3980 );
3981 // Catégorie COMMISSIONS
3982 $links[] = array(
3983 "class" => "category",
3984 "title" => _("commissions"),
3985 "right" => array(
3986 "commission_mes_retours",
3987 "commission_mes_retours_tab",
3988 "commission_retours_ma_division",
3989 "commission_retours_ma_division_tab",
3990 "commission_tous_retours",
3991 "commission_tous_retours_tab",
3992 ),
3993 );
3994 $links[] = array(
3995 "title" => "<hr/>",
3996 "right" => array(
3997 "commission_mes_retours",
3998 "commission_mes_retours_tab",
3999 "commission_retours_ma_division",
4000 "commission_retours_ma_division_tab",
4001 "commission_tous_retours",
4002 "commission_tous_retours_tab",
4003 ),
4004 );
4005 $links[] = array(
4006 "href" => "".OM_ROUTE_TAB."&obj=commission_mes_retours",
4007 "class" => "commission_mes_retours",
4008 "title" => _("Mes retours"),
4009 "right" => array(
4010 "commission_mes_retours",
4011 "commission_mes_retours_tab",
4012 ),
4013 "open" => array("index.php|commission_mes_retours[module=tab]", "index.php|commission_mes_retours[module=form]", ),
4014 );
4015 $links[] = array(
4016 "href" => "".OM_ROUTE_TAB."&obj=commission_retours_ma_division",
4017 "class" => "commission_retours_ma_division",
4018 "title" => _("Retours de ma division"),
4019 "right" => array(
4020 "commission_retours_ma_division",
4021 "commission_retours_ma_division_tab",
4022 ),
4023 "open" => array("index.php|commission_retours_ma_division[module=tab]", "index.php|commission_retours_ma_division[module=form]", ),
4024 );
4025 $links[] = array(
4026 "href" => "".OM_ROUTE_TAB."&obj=commission_tous_retours",
4027 "class" => "commission_tous_retours",
4028 "title" => _("Tous les retours"),
4029 "right" => array(
4030 "commission_tous_retours",
4031 "commission_tous_retours_tab",
4032 ),
4033 "open" => array("index.php|commission_tous_retours[module=tab]", "index.php|commission_tous_retours[module=form]", ),
4034 );
4035
4036 //
4037 $rubrik['links'] = $links;
4038 //
4039 $menu[] = $rubrik;
4040 // }}}
4041
4042 // {{{ Rubrique Contentieux
4043 //
4044 $rubrik = array(
4045 "title" => _("Contentieux"),
4046 "class" => "contentieux",
4047 "right" => "menu_contentieux",
4048 );
4049 //
4050 $links = array();
4051 //
4052 $links[] = array(
4053 "href" => OM_ROUTE_DASHBOARD,
4054 "class" => "tableau-de-bord",
4055 "title" => _("tableau de bord"),
4056 "right" => "menu_contentieux_dashboard",
4057 "open" => array("index.php|[module=dashboard]", "index.php|dossier_contentieux_contradictoire[module=tab]", "index.php|dossier_contentieux_ait[module=tab]", "index.php|dossier_contentieux_audience[module=tab]", "index.php|dossier_contentieux_clotures[module=tab]", "index.php|dossier_contentieux_inaffectes[module=tab]", "index.php|dossier_contentieux_alerte_visite[module=tab]", "index.php|dossier_contentieux_alerte_parquet[module=tab]", ),
4058 );
4059 // Catégorie Nouvelle demande
4060 $links[] = array(
4061 "class" => "category",
4062 "title" => _("Nouvelle demande"),
4063 "right" => array(
4064 "demande_nouveau_dossier_contentieux_ajouter",
4065 ),
4066 );
4067 $links[] = array(
4068 "href" => "".OM_ROUTE_FORM."&obj=demande_nouveau_dossier_contentieux&amp;action=0&amp;advs_id=&amp;tricol=&amp;valide=&amp;retour=tab&amp;new=",
4069 "class" => "nouveau-dossier",
4070 "title" => _("nouveau dossier"),
4071 "right" => array(
4072 "demande_nouveau_dossier_contentieux_ajouter",
4073 ),
4074 "open" => array("index.php|demande_nouveau_dossier_contentieux[module=form]",),
4075 );
4076 // Catégorie Recours
4077 $links[] = array(
4078 "class" => "category",
4079 "title" => _("Recours"),
4080 "right" => array(
4081 "dossier_contentieux_mes_recours", "dossier_contentieux_mes_recours_tab",
4082 "dossier_contentieux_tous_recours", "dossier_contentieux_tous_recours_tab",
4083 ),
4084 );
4085 //
4086 $links[] = array(
4087 "href" => "".OM_ROUTE_TAB."&obj=dossier_contentieux_mes_recours",
4088 "class" => "dossier_contentieux_mes_recours",
4089 "title" => _("Mes recours"),
4090 "right" => array("dossier_contentieux_mes_recours", "dossier_contentieux_mes_recours_tab", ),
4091 "open" => array("index.php|dossier_contentieux_mes_recours[module=tab]", "index.php|dossier_contentieux_mes_recours[module=form]", ),
4092 );
4093 $links[] = array(
4094 "href" => "".OM_ROUTE_TAB."&obj=dossier_contentieux_tous_recours",
4095 "class" => "dossier_contentieux_tous_recours",
4096 "title" => _("Tous les recours"),
4097 "right" => array("dossier_contentieux_tous_recours", "dossier_contentieux_tous_recours_tab", ),
4098 "open" => array("index.php|dossier_contentieux_tous_recours[module=tab]", "index.php|dossier_contentieux_tous_recours[module=form]", ),
4099 );
4100 // Catégorie Infractions
4101 $links[] = array(
4102 "class" => "category",
4103 "title" => _("Infractions"),
4104 "right" => array(
4105 "dossier_contentieux_mes_infractions", "dossier_contentieux_mes_infractions_tab",
4106 "dossier_contentieux_toutes_infractions", "dossier_contentieux_toutes_infractions_tab",
4107 ),
4108 );
4109 //
4110 $links[] = array(
4111 "href" => "".OM_ROUTE_TAB."&obj=dossier_contentieux_mes_infractions",
4112 "class" => "dossier_contentieux_mes_infractions",
4113 "title" => _("Mes infractions"),
4114 "right" => array("dossier_contentieux_mes_infractions", "dossier_contentieux_mes_infractions_tab", ),
4115 "open" => array("index.php|dossier_contentieux_mes_infractions[module=tab]", "index.php|dossier_contentieux_mes_infractions[module=form]", ),
4116 );
4117 //
4118 $links[] = array(
4119 "href" => "".OM_ROUTE_TAB."&obj=dossier_contentieux_toutes_infractions",
4120 "class" => "dossier_contentieux_toutes_infractions",
4121 "title" => _("Toutes les infractions"),
4122 "right" => array("dossier_contentieux_toutes_infractions", "dossier_contentieux_toutes_infractions_tab", ),
4123 "open" => array("index.php|dossier_contentieux_toutes_infractions[module=tab]", "index.php|dossier_contentieux_toutes_infractions[module=form]", ),
4124 );
4125 // Catégorie MESSAGES
4126 $links[] = array(
4127 "class" => "category",
4128 "title" => _("Messages"),
4129 "right" => array(
4130 "messages_contentieux",
4131 "messages_contentieux_mes_retours",
4132 "messages_contentieux_retours_ma_division",
4133 "messages_contentieux_tous_retours",
4134 ),
4135 );
4136 //
4137 $links[] = array(
4138 "title" => "<hr/>",
4139 "right" => array(
4140 "messages_contentieux",
4141 "messages_contentieux_mes_retours",
4142 "messages_contentieux_retours_ma_division",
4143 "messages_contentieux_tous_retours",
4144 ),
4145 );
4146 //
4147 $links[] = array(
4148 "href" => "".OM_ROUTE_TAB."&obj=messages_contentieux_mes_retours",
4149 "class" => "messages_contentieux_mes_retours",
4150 "title" => _("Mes messages"),
4151 "right" => array(
4152 "messages_contentieux",
4153 "messages_contentieux_mes_retours",
4154 "messages_contentieux_mes_retours_tab",
4155 ),
4156 "open" => array("index.php|messages_contentieux_mes_retours[module=tab]", "index.php|messages_contentieux_mes_retours[module=form]", ),
4157 );
4158 //
4159 $links[] = array(
4160 "href" => "".OM_ROUTE_TAB."&obj=messages_contentieux_retours_ma_division",
4161 "class" => "messages_contentieux_retours_ma_division",
4162 "title" => _("Messages de ma division"),
4163 "right" => array(
4164 "messages_contentieux",
4165 "messages_contentieux_retours_ma_division",
4166 "messages_contentieux_retours_ma_division_tab",
4167 ),
4168 "open" => array("index.php|messages_contentieux_retours_ma_division[module=tab]", "index.php|messages_contentieux_retours_ma_division[module=form]", ),
4169 );
4170 //
4171 $links[] = array(
4172 "href" => "".OM_ROUTE_TAB."&obj=messages_contentieux_tous_retours",
4173 "class" => "messages_contentieux_tous_retours",
4174 "title" => _("Tous les messages"),
4175 "right" => array(
4176 "messages_contentieux",
4177 "messages_contentieux_tous_retours",
4178 "messages_contentieux_tous_retours_tab",
4179 ),
4180 "open" => array("index.php|messages_contentieux_tous_retours[module=tab]", "index.php|messages_contentieux_tous_retours[module=form]", ),
4181 );
4182
4183
4184 //
4185 $rubrik['links'] = $links;
4186 //
4187 $menu[] = $rubrik;
4188 // }}}
4189
4190 // {{{ Rubrique SUIVI
4191 //
4192 $rubrik = array(
4193 "title" => _("Suivi"),
4194 "class" => "suivi",
4195 "right" => "menu_suivi",
4196 );
4197 //
4198 $links = array();
4199 //
4200 $links[] = array(
4201 "href" => OM_ROUTE_DASHBOARD,
4202 "class" => "tableau-de-bord",
4203 "title" => _("tableau de bord"),
4204 "right" => "menu_suivi_dashboard",
4205 "open" => array("index.php|[module=dashboard]",),
4206 );
4207 $links[] = array(
4208 "class" => "category",
4209 "title" => _("suivi des pieces"),
4210 "right" => array(
4211 "instruction_suivi_retours_de_consultation", "instruction_suivi_mise_a_jour_des_dates",
4212 "instruction_suivi_envoi_lettre_rar", "instruction_suivi_bordereaux",
4213 "instruction_suivi_retours_de_consultation_consulter", "instruction_suivi_mise_a_jour_des_dates_consulter",
4214 "instruction_suivi_envoi_lettre_rar_consulter", "instruction_suivi_bordereaux_consulter",
4215 ),
4216 );
4217 //
4218 $links[] = array(
4219 "title" => "<hr/>",
4220 "right" => array(
4221 "instruction_suivi_retours_de_consultation", "instruction_suivi_mise_a_jour_des_dates",
4222 "instruction_suivi_envoi_lettre_rar", "instruction_suivi_bordereaux",
4223 "instruction_suivi_retours_de_consultation_consulter", "instruction_suivi_mise_a_jour_des_dates_consulter",
4224 "instruction_suivi_envoi_lettre_rar_consulter", "instruction_suivi_bordereaux_consulter",
4225 ),
4226 );
4227 //
4228 $links[] = array(
4229 "title" => "<hr/>",
4230 "right" => array(
4231 "instruction_suivi_mise_a_jour_des_dates", "instruction_suivi_mise_a_jour_des_dates_consulter",
4232 ),
4233 );
4234 //
4235 $links[] = array(
4236 "href" => "".OM_ROUTE_FORM."&obj=instruction_suivi_mise_a_jour_des_dates&action=170&idx=0",
4237 "class" => "suivi_mise_a_jour_des_dates",
4238 "title" => _("Mise a jour des dates"),
4239 "right" => array("instruction_suivi_mise_a_jour_des_dates", "instruction_suivi_mise_a_jour_des_dates_consulter", ),
4240 "open" => array("index.php|instruction_suivi_mise_a_jour_des_dates[module=tab]", "index.php|instruction_suivi_mise_a_jour_des_dates[module=form]"),
4241 );
4242 //
4243 $links[] = array(
4244 "title" => "<hr/>",
4245 "right" => array(
4246 "instruction_suivi_envoi_lettre_rar", "instruction_suivi_envoi_lettre_rar_consulter",
4247 ),
4248 );
4249 //
4250 $links[] = array(
4251 "href" => "".OM_ROUTE_FORM."&obj=instruction_suivi_envoi_lettre_rar&action=160&idx=0",
4252 "class" => "envoi_lettre_rar",
4253 "title" => _("envoi lettre AR"),
4254 "right" => array("instruction_suivi_envoi_lettre_rar", "instruction_suivi_envoi_lettre_rar_consulter", ),
4255 "open" => array("index.php|instruction_suivi_envoi_lettre_rar[module=tab]", "index.php|instruction_suivi_envoi_lettre_rar[module=form]"),
4256 );
4257 //
4258 $links[] = array(
4259 "title" => "<hr/>",
4260 "right" => array(
4261 "instruction_suivi_bordereaux", "instruction_suivi_bordereaux_consulter",
4262 ),
4263 );
4264 //
4265 $links[] = array(
4266 "href" => "".OM_ROUTE_FORM."&obj=instruction_suivi_bordereaux&action=150&idx=0",
4267 "class" => "bordereaux",
4268 "title" => _("Bordereaux"),
4269 "right" => array("instruction_suivi_bordereaux", "instruction_suivi_bordereaux_consulter", ),
4270 "open" => array("index.php|instruction_suivi_bordereaux[module=tab]", "index.php|instruction_suivi_bordereaux[module=form]"),
4271 );
4272 //
4273 $links[] = array(
4274 "href" => "".OM_ROUTE_FORM."&obj=bordereau_envoi_maire&action=190&idx=0",
4275 "class" => "bordereau_envoi_maire",
4276 "title" => _("Bordereau d'envoi au maire"),
4277 "right" => array("instruction_bordereau_envoi_maire","bordereau_envoi_maire"),
4278 "open" => array("index.php|bordereau_envoi_maire[module=form]",),
4279 );
4280 //
4281 $links[] = array(
4282 "class" => "category",
4283 "title" => _("Demandes d'avis"),
4284 "right" => array(
4285 "consultation_suivi_mise_a_jour_des_dates",
4286 "consultation_suivi_retours_de_consultation",
4287 ),
4288 );
4289 //
4290 $links[] = array(
4291 "href" => "".OM_ROUTE_FORM."&obj=consultation&idx=0&action=110",
4292 "class" => "demandes_avis_mise_a_jour_des_dates",
4293 "title" => _("Mise a jour des dates"),
4294 "right" => array("consultation_suivi_mise_a_jour_des_dates", ),
4295 "open" => array("index.php|consultation[module=form][action=110]"),
4296 );
4297 //
4298 $links[] = array(
4299 "href" => "".OM_ROUTE_FORM."&obj=consultation&idx=0&action=120",
4300 "class" => "consultation-retour",
4301 "title" => _("retours de consultation"),
4302 "right" => array("consultation_suivi_retours_de_consultation", ),
4303 "open" => array("index.php|consultation[module=form][action=120]", "index.php|consultation[module=form][action=100]", ),
4304 );
4305 // Catégorie COMMISSIONS
4306 $links[] = array(
4307 "class" => "category",
4308 "title" => _("commissions"),
4309 "right" => array(
4310 "commission",
4311 "commission_tab",
4312 "commission_demandes_passage",
4313 "commission_demandes_passage_tab",
4314 ),
4315 );
4316 //
4317 $links[] = array(
4318 "title" => "<hr/>",
4319 "right" => array(
4320 "commission",
4321 "commission_tab",
4322 "commission_demandes_passage",
4323 "commission_demandes_passage_tab",
4324 ),
4325 );
4326 //
4327 $links[] = array(
4328 "href" => "".OM_ROUTE_TAB."&obj=commission",
4329 "class" => "commissions",
4330 "title" => _("gestion"),
4331 "right" => array(
4332 "commission",
4333 ),
4334 "open" => array("index.php|commission[module=tab]", "index.php|commission[module=form]", ),
4335 );
4336 //
4337 $links[] = array(
4338 "href" => "".OM_ROUTE_TAB."&obj=commission_demandes_passage",
4339 "class" => "commissions-demande-passage",
4340 "title" => _("demandes"),
4341 "right" => array(
4342 "commission",
4343 "commission_demandes_passage",
4344 ),
4345 "open" => array("index.php|commission_demandes_passage[module=tab]", "index.php|commission_demandes_passage[module=form]", ),
4346 );
4347 //
4348 $rubrik['links'] = $links;
4349 //
4350 $menu[] = $rubrik;
4351 // }}}
4352
4353 // {{{ Rubrique DEMANDES D'AVIS
4354 //
4355 $rubrik = array(
4356 "title" => _("Demandes d'avis"),
4357 "class" => "demande_avis",
4358 "right" => "menu_demande_avis",
4359 );
4360 //
4361 $links = array();
4362 //
4363 $links[] = array(
4364 "href" => OM_ROUTE_DASHBOARD,
4365 "class" => "tableau-de-bord",
4366 "title" => _("tableau de bord"),
4367 "right" => "menu_demande_avis_dashboard",
4368 "open" => array("index.php|[module=dashboard]",),
4369 );
4370 //
4371 $links[] = array(
4372 "title" => "<hr/>",
4373 "right" => array(
4374 "demande_avis_encours", "demande_avis_encours_tab",
4375 "demande_avis_passee", "demande_avis_passee_tab",
4376 "demande_avis", "demande_avis_tab",
4377 ),
4378 );
4379 //
4380 $links[] = array(
4381 "href" => "".OM_ROUTE_TAB."&obj=demande_avis_encours",
4382 "class" => "demande_avis_encours",
4383 "title" => _("Demandes en cours"),
4384 "right" => array("demande_avis_encours", "demande_avis_encours_tab", ),
4385 "open" => array("index.php|demande_avis_encours[module=tab]", "index.php|demande_avis_encours[module=form]", ),
4386 );
4387
4388 $links[] = array(
4389 "href" => "".OM_ROUTE_TAB."&obj=demande_avis_passee",
4390 "class" => "demande_avis_passee",
4391 "title" => _("Demandes passees"),
4392 "right" => array("demande_avis_passee", "demande_avis_passee_tab", ),
4393 "open" => array("index.php|demande_avis_passee[module=tab]", "index.php|demande_avis_passee[module=form]", ),
4394 );
4395
4396 $links[] = array(
4397 "href" => "".OM_ROUTE_TAB."&obj=demande_avis",
4398 "class" => "demande_avis",
4399 "title" => _("Exports"),
4400 "right" => array("demande_avis", "demande_avis_tab", ),
4401 "open" => array("index.php|demande_avis[module=tab]", "index.php|demande_avis[module=form]", ),
4402 );
4403
4404 //
4405 $rubrik['links'] = $links;
4406 //
4407 $menu[] = $rubrik;
4408 // }}}
4409
4410
4411 // {{{ Rubrique NUMERISATION
4412 // Condition d'affichage de la rubrique
4413 if (isset($_SESSION['collectivite']) === true
4414 && $this->is_option_suivi_numerisation_enabled() === true) {
4415 //
4416 $rubrik = array(
4417 "title" => __("numerisation"),
4418 "class" => "numerisation",
4419 );
4420 //
4421 $links = array();
4422 //
4423 // --->
4424 $links[] = array(
4425 "class" => "category",
4426 "title" => __("traitement d'un lot"),
4427 "right" => array("num_dossier", "num_dossier_recuperation",
4428 "num_bordereau", "num_bordereau_tab", ) ,
4429 );
4430 //
4431 $links[] = array(
4432 "title" => "<hr/>",
4433 "right" => array("num_dossier_recuperation",
4434 "num_bordereau", "num_bordereau_tab", ) ,
4435 );
4436 //
4437 $links[] = array(
4438 "href" => OM_ROUTE_FORM."&obj=num_dossier_recuperation&idx=0&action=4",
4439 "class" => "num_dossier_recuperation",
4440 "title" => __("récupération du suivi des dossiers"),
4441 "right" => array( "num_dossier_recuperation", ) ,
4442 "open" => array( "index.php|num_dossier_recuperation[module=form]", ),
4443 );
4444 //
4445 $links[] = array(
4446 "title" => "<hr/>",
4447 "right" => array( "num_bordereau", "num_bordereau_tab", ) ,
4448 );
4449 //
4450 $links[] = array(
4451 "href" => OM_ROUTE_TAB."&obj=num_bordereau",
4452 "class" => "num_bordereau",
4453 "title" => __("tous les bordereaux"),
4454 "right" => array( "num_bordereau", "num_bordereau_tab", ),
4455 "open" => array("index.php|num_bordereau[module=tab]", "index.php|num_bordereau[module=form]", ),
4456 );
4457
4458 //
4459 // --->
4460 $links[] = array(
4461 "class" => "category",
4462 "title" => __("suivi dossier"),
4463 "right" => array("num_dossier_recuperation",
4464 "num_dossier", "num_dossier_tab",
4465 "num_dossier_a_attribuer", "num_dossier_a_attribuer_tab",
4466 "num_dossier_a_numeriser", "num_dossier_a_numeriser_tab",
4467 "num_dossier_traite", "num_dossier_traite_tab",
4468 ) ,
4469 );
4470 //
4471 $links[] = array(
4472 "title" => "<hr/>",
4473 "right" => array("num_dossier_recuperation",
4474 "num_dossier", "num_dossier_tab",
4475 "num_dossier_a_attribuer", "num_dossier_a_attribuer_tab",
4476 "num_dossier_a_numeriser", "num_dossier_a_numeriser_tab",
4477 "num_dossier_traite", "num_dossier_traite_tab",
4478 ) ,
4479 );
4480 //
4481 $links[] = array(
4482 "href" => OM_ROUTE_TAB."&obj=num_dossier_a_attribuer",
4483 "class" => "num_dossier_a_attribuer",
4484 "title" => __("num_dossier_a_attribuer"),
4485 "right" => array("num_dossier", "num_dossier_a_attribuer", "num_dossier_a_attribuer_tab",),
4486 "open" => array("index.php|num_dossier_a_attribuer[module=tab]","index.php|num_dossier_a_attribuer[module=form]", ),
4487 );
4488 //
4489 $links[] = array(
4490 "href" => OM_ROUTE_TAB."&obj=num_dossier_a_numeriser",
4491 "class" => "num_dossier_a_numeriser",
4492 "title" => __("num_dossier_a_numeriser"),
4493 "right" => array("num_dossier", "num_dossier_a_numeriser", "num_dossier_a_numeriser_tab",),
4494 "open" => array("index.php|num_dossier_a_numeriser[module=tab]","index.php|num_dossier_a_numeriser[module=form]", ),
4495 );
4496 //
4497 $links[] = array(
4498 "href" => OM_ROUTE_TAB."&obj=num_dossier_traite",
4499 "class" => "num_dossier_traite",
4500 "title" => __("num_dossier_traite"),
4501 "right" => array("num_dossier", "num_dossier_traite", "num_dossier_traite_tab",),
4502 "open" => array("index.php|num_dossier_traite[module=tab]","index.php|num_dossier_traite[module=form]", ),
4503 );
4504 //
4505 $links[] = array(
4506 "title" => "<hr/>",
4507 "right" => array( "num_dossier", "num_dossier_tab",) ,
4508 );
4509 //
4510 $links[] = array(
4511 "href" => OM_ROUTE_TAB."&obj=num_dossier",
4512 "class" => "num_dossier",
4513 "title" => __("tous les dossiers"),
4514 "right" => array("num_dossier", "num_dossier_tab",),
4515 "open" => array("index.php|num_dossier[module=tab]", "index.php|num_dossier[module=form]", ),
4516 );
4517
4518 //
4519 $rubrik['links'] = $links;
4520 //
4521 $menu["menu-rubrik-numerisation"] = $rubrik;
4522 // }}}
4523 }
4524
4525
4526 // Commentaire de la rubrique EXPORT qui n'est pas prévue d'être opérationnelle
4527 // dans cette version
4528 // {{{ Rubrique EXPORT
4529 //
4530 $rubrik = array(
4531 "title" => _("export / import"),
4532 "class" => "edition",
4533 "right" => "menu_export",
4534 );
4535 //
4536 $links = array();
4537
4538 //
4539 $links[] = array(
4540 "href" => "".OM_ROUTE_FORM."&obj=sitadel&action=6&idx=0",
4541 "class" => "sitadel",
4542 "title" => _("export sitadel"),
4543 "right" => "export_sitadel",
4544 "open" => "index.php|sitadel[module=form]",
4545 );
4546 //
4547 $links[] = array(
4548 "href" => "../app/versement_archives.php",
4549 "class" => "versement_archives",
4550 "title" => _("versement aux archives"),
4551 "right" => "versement_archives",
4552 "open" => "versement_archives.php|",
4553 );
4554 //
4555 $links[] = array(
4556 "href" => "../app/reqmo_pilot.php",
4557 "class" => "reqmo",
4558 "title" => _("statistiques a la demande"),
4559 "right" => "reqmo_pilot",
4560 "open" => "reqmo_pilot.php|",
4561 );
4562 //
4563 $links[] = array(
4564 "href" => OM_ROUTE_MODULE_REQMO,
4565 "class" => "reqmo",
4566 "title" => __("requetes memorisees"),
4567 "right" => "reqmo",
4568 "open" => array(
4569 "reqmo.php|",
4570 "index.php|[module=reqmo]",
4571 ),
4572 );
4573 //
4574 $rubrik['links'] = $links;
4575 //
4576 $menu[] = $rubrik;
4577 // }}}
4578
4579
4580 // {{{ Rubrique PARAMETRAGE
4581 //
4582 $rubrik = array(
4583 "title" => _("parametrage dossiers"),
4584 "class" => "parametrage-dossier",
4585 "right" => "menu_parametrage",
4586 );
4587 //
4588 $links = array();
4589 //
4590 $links[] = array(
4591 "class" => "category",
4592 "title" => _("dossiers"),
4593 "right" => array(
4594 "dossier_autorisation_type", "dossier_autorisation_type_tab",
4595 "dossier_autorisation_type_detaille",
4596 "dossier_autorisation_type_detaille_tab", "dossier_instruction_type",
4597 "dossier_instruction_type_tab", "cerfa", "cerfa_tab",
4598 ),
4599 );
4600 //
4601 $links[] = array(
4602 "title" => "<hr/>",
4603 "right" => array(
4604 "cerfa", "cerfa_tab",
4605 ),
4606 );
4607 //
4608 $links[] = array(
4609 "href" => "".OM_ROUTE_TAB."&obj=cerfa",
4610 "class" => "cerfa",
4611 "title" => _("cerfa"),
4612 "right" => array("cerfa", "cerfa_tab", ),
4613 "open" => array("index.php|cerfa[module=tab]", "index.php|cerfa[module=form]", ),
4614 );
4615 //
4616 $links[] = array(
4617 "title" => "<hr/>",
4618 "right" => array(
4619 "dossier_autorisation_type", "dossier_autorisation_type_tab",
4620 "dossier_autorisation_type_detaille",
4621 "dossier_autorisation_type_detaille_tab", "dossier_instruction_type",
4622 "dossier_instruction_type_tab",
4623 ),
4624 );
4625 //
4626 $links[] = array(
4627 "href" => "".OM_ROUTE_TAB."&obj=dossier_autorisation_type",
4628 "class" => "dossier_autorisation_type",
4629 "title" => _("type DA"),
4630 "right" => array("dossier_autorisation_type", "dossier_autorisation_type_tab", ),
4631 "open" => array("index.php|dossier_autorisation_type[module=tab]", "index.php|dossier_autorisation_type[module=form]", ),
4632 );
4633 //
4634 $links[] = array(
4635 "href" => "".OM_ROUTE_TAB."&obj=dossier_autorisation_type_detaille",
4636 "class" => "dossier_autorisation_type_detaille",
4637 "title" => _("type DA detaille"),
4638 "right" => array("dossier_autorisation_type_detaille", "dossier_autorisation_type_detaille_tab", ),
4639 "open" => array("index.php|dossier_autorisation_type_detaille[module=tab]", "index.php|dossier_autorisation_type_detaille[module=form]", ),
4640 );
4641 //
4642 $links[] = array(
4643 "href" => "".OM_ROUTE_TAB."&obj=dossier_instruction_type",
4644 "class" => "dossier_instruction_type",
4645 "title" => _("type DI"),
4646 "right" => array("dossier_instruction_type", "dossier_instruction_type_tab", ),
4647 "open" => array("index.php|dossier_instruction_type[module=tab]", "index.php|dossier_instruction_type[module=form]", ),
4648 );
4649 // Famille et Nature de travaux
4650 $links[] = array(
4651 "title" => "<hr/>",
4652 "right" => array(
4653 "famille_travaux", "famille_travaux_tab",
4654 "nature_travaux", "nature_travaux_tab",
4655 ),
4656 );
4657 //
4658 $links[] = array(
4659 "href" => "".OM_ROUTE_TAB."&obj=famille_travaux",
4660 "class" => "famille_travaux",
4661 "title" => __("Famille des travaux"),
4662 "right" => array("famille_travaux", "famille_travaux_tab", ),
4663 "open" => array(
4664 "index.php|famille_travaux[module=tab]",
4665 "index.php|famille_travaux[module=form][action=0]",
4666 "index.php|famille_travaux[module=form][action=1]",
4667 "index.php|famille_travaux[module=form][action=2]",
4668 "index.php|famille_travaux[module=form][action=3]",
4669 ),
4670 );
4671 //
4672 $links[] = array(
4673 "href" => "".OM_ROUTE_TAB."&obj=nature_travaux",
4674 "class" => "nature_travaux",
4675 "title" => __("Nature des travaux"),
4676 "right" => array("nature_travaux", "nature_travaux_tab", ),
4677 "open" => array(
4678 "index.php|nature_travaux[module=tab]",
4679 "index.php|nature_travaux[module=form][action=0]",
4680 "index.php|nature_travaux[module=form][action=1]",
4681 "index.php|nature_travaux[module=form][action=2]",
4682 "index.php|nature_travaux[module=form][action=3]",
4683 ),
4684 );
4685 //
4686 $links[] = array(
4687 "title" => "<hr/>",
4688 "right" => array(
4689 "contrainte", "contrainte_tab",
4690 "contrainte_souscategorie", "contrainte_souscategorie_tab",
4691 "contrainte_categorie", "contrainte_categorie_tab"
4692 ),
4693 );
4694 //
4695 $links[] = array(
4696 "href" => "".OM_ROUTE_TAB."&obj=contrainte",
4697 "class" => "contrainte",
4698 "title" => _("contrainte"),
4699 "right" => array("contrainte", "contrainte_tab", ),
4700 "open" => array(
4701 "index.php|contrainte[module=tab]",
4702 "index.php|contrainte[module=form][action=0]",
4703 "index.php|contrainte[module=form][action=1]",
4704 "index.php|contrainte[module=form][action=2]",
4705 "index.php|contrainte[module=form][action=3]",
4706 ),
4707 );
4708 $links[] = array(
4709 "href" => "".OM_ROUTE_TAB."&obj=enjeux",
4710 "class" => "enjeux",
4711 "title" => __("Enjeu"),
4712 "right" => array("enjeux", "enjeux_tab", ),
4713 "open" => array(
4714 "index.php|enjeux[module=tab]",
4715 "index.php|enjeux[module=form]",
4716 ),
4717 );
4718 //
4719 $links[] = array(
4720 "class" => "category",
4721 "title" => _("demandes"),
4722 "right" => array(
4723 "demande_type",
4724 "demande_type_tab", "demande_nature", "demande_nature_tab",
4725 ),
4726 );
4727 //
4728 $links[] = array(
4729 "title" => "<hr/>",
4730 "right" => array(
4731 "demande_type",
4732 "demande_type_tab", "demande_nature", "demande_nature_tab",
4733 ),
4734 );
4735 //
4736 $links[] = array(
4737 "href" => "".OM_ROUTE_TAB."&obj=demande_nature",
4738 "class" => "demande_nature",
4739 "title" => _("nature"),
4740 "right" => array("demande_nature", "demande_nature_tab", ),
4741 "open" => array("index.php|demande_nature[module=tab]", "index.php|demande_nature[module=form]", ),
4742 );
4743 //
4744 $links[] = array(
4745 "href" => "".OM_ROUTE_TAB."&obj=demande_type",
4746 "class" => "demande_type",
4747 "title" => _("type"),
4748 "right" => array("demande_type", "demande_type_tab",),
4749 "open" => array("index.php|demande_type[module=tab]", "index.php|demande_type[module=form]", ),
4750 );
4751 //
4752 $links[] = array(
4753 "class" => "category",
4754 "title" => _("workflows"),
4755 "right" => array(
4756 "workflows",
4757 "action", "action_tab", "etat",
4758 "etat_tab", "evenement", "evenement_tab", "bible", "bible_tab", "avis_decision",
4759 "avis_decision_tab", "avis_consultation", "avis_consultation_tab",
4760 "avis_decision_type", "avis_decision_type_tab",
4761 "avis_decision_nature", "avis_decision_nature_tab",
4762 ),
4763 );
4764
4765 //
4766 $links[] = array(
4767 "title" => "<hr/>",
4768 "right" => array(
4769 "workflows",
4770 "action", "action_tab", "etat",
4771 "etat_tab", "evenement", "evenement_tab", "bible", "bible_tab", "avis_decision",
4772 "avis_decision_tab", "avis_consultation", "avis_consultation_tab",
4773 "avis_decision_type", "avis_decision_type_tab",
4774 "avis_decision_nature", "avis_decision_nature_tab",
4775 ),
4776 );
4777 //
4778 $links[] = array(
4779 "href" => "../app/workflows.php",
4780 "class" => "workflows",
4781 "title" => _("workflows"),
4782 "right" => array("workflows", ),
4783 "open" => array("workflows.php|", ),
4784 );
4785 //
4786 $links[] = array(
4787 "title" => "<hr/>",
4788 "right" => array(
4789 "evenement", "evenement_tab",
4790 ),
4791 );
4792 //
4793 $links[] = array(
4794 "href" => "".OM_ROUTE_TAB."&obj=evenement",
4795 "class" => "evenement",
4796 "title" => _("evenement"),
4797 "right" => array("evenement", "evenement_tab", ),
4798 "open" => array("index.php|evenement[module=tab]", "index.php|evenement[module=form]", ),
4799 );
4800 //
4801 $links[] = array(
4802 "title" => "<hr/>",
4803 "right" => array(
4804 "action", "action_tab", "etat",
4805 "etat_tab", "avis_decision",
4806 "avis_decision_tab", "avis_decision_type", "avis_decision_type_tab",
4807 "avis_decision_nature", "avis_decision_nature_tab",
4808 ),
4809 );
4810 //
4811 $links[] = array(
4812 "href" => "".OM_ROUTE_TAB."&obj=etat",
4813 "class" => "workflow-etat",
4814 "title" => _("etat"),
4815 "right" => array("etat", "etat_tab", ),
4816 "open" => array("index.php|etat[module=tab]", "index.php|etat[module=form]", ),
4817 );
4818 //
4819 $links[] = array(
4820 "href" => "".OM_ROUTE_TAB."&obj=avis_decision",
4821 "class" => "avis_decision",
4822 "title" => _("avis decision"),
4823 "right" => array("avis_decision", "avis_decision_tab", ),
4824 "open" => array("index.php|avis_decision[module=tab]", "index.php|avis_decision[module=form]", ),
4825 );
4826 //
4827 $links[] = array(
4828 "href" => "".OM_ROUTE_TAB."&obj=avis_decision_type",
4829 "class" => "avis_decision_type",
4830 "title" => __("avis_decision_type"),
4831 "right" => array("avis_decision_type", "avis_decision_type_tab", ),
4832 "open" => array("index.php|avis_decision_type[module=tab]", "index.php|avis_decision_type[module=form]", ),
4833 );
4834 //
4835 $links[] = array(
4836 "href" => "".OM_ROUTE_TAB."&obj=avis_decision_nature",
4837 "class" => "avis_decision_nature",
4838 "title" => __("avis_decision_nature"),
4839 "right" => array("avis_decision_nature", "avis_decision_nature_tab", ),
4840 "open" => array("index.php|avis_decision_nature[module=tab]", "index.php|avis_decision_nature[module=form]", ),
4841 );
4842 //
4843 $links[] = array(
4844 "href" => "".OM_ROUTE_TAB."&obj=action",
4845 "class" => "action",
4846 "title" => _("action"),
4847 "right" => array("action", "action_tab", ),
4848 "open" => array("index.php|action[module=tab]", "index.php|action[module=form]", ),
4849 );
4850 //
4851 $links[] = array(
4852 "title" => "<hr/>",
4853 "right" => array(
4854 "bible", "bible_tab",
4855 ),
4856 );
4857 //
4858 $links[] = array(
4859 "href" => "".OM_ROUTE_TAB."&obj=bible",
4860 "class" => "bible",
4861 "title" => _("bible"),
4862 "right" => array("bible", "bible_tab", ),
4863 "open" => array("index.php|bible[module=tab]", "index.php|bible[module=form]", ),
4864 );
4865 //
4866 $links[] = array(
4867 "class" => "category",
4868 "title" => _("editions"),
4869 "right" => array(
4870 "om_etat", "om_etat_tab", "om_sousetat", "om_sousetat_tab",
4871 "om_lettretype", "om_lettretype_tab", "om_requete", "om_requete_tab",
4872 "om_logo", "om_logo_tab",
4873 ),
4874 );
4875 //
4876 $links[] = array(
4877 "title" => "<hr/>",
4878 "right" => array(
4879 "om_etat", "om_etat_tab", "om_lettretype", "om_lettretype_tab",
4880 ),
4881 );
4882 //
4883 $links[] = array(
4884 "href" => "".OM_ROUTE_TAB."&obj=om_etat",
4885 "class" => "om_etat",
4886 "title" => _("om_etat"),
4887 "right" => array("om_etat", "om_etat_tab", ),
4888 "open" => array("index.php|om_etat[module=tab]", "index.php|om_etat[module=form]", ),
4889 );
4890 //
4891 $links[] = array(
4892 "href" => "".OM_ROUTE_TAB."&obj=om_lettretype",
4893 "class" => "om_lettretype",
4894 "title" => _("om_lettretype"),
4895 "right" => array("om_lettretype", "om_lettretype_tab"),
4896 "open" => array("index.php|om_lettretype[module=tab]", "index.php|om_lettretype[module=form]", ),
4897 );
4898 //
4899 $links[] = array(
4900 "title" => "<hr/>",
4901 "right" => array(
4902 "om_logo", "om_logo_tab",
4903 ),
4904 );
4905 //
4906 $links[] = array(
4907 "href" => "".OM_ROUTE_TAB."&obj=om_logo",
4908 "class" => "om_logo",
4909 "title" => _("om_logo"),
4910 "right" => array("om_logo", "om_logo_tab", ),
4911 "open" => array("index.php|om_logo[module=tab]", "index.php|om_logo[module=form]", ),
4912 );
4913 //
4914 $rubrik['links'] = $links;
4915 //
4916 $menu[] = $rubrik;
4917 // }}}
4918
4919 // {{{ Rubrique PARAMETRAGE
4920 //
4921 $rubrik = array(
4922 "title" => _("parametrage"),
4923 "class" => "parametrage",
4924 "right" => "menu_parametrage",
4925 );
4926 //
4927 $links = array();
4928 //
4929 $links[] = array(
4930 "href" => "".OM_ROUTE_TAB."&obj=civilite",
4931 "class" => "civilite",
4932 "title" => _("civilite"),
4933 "right" => array("civilite", "civilite_tab", ),
4934 "open" => array("index.php|civilite[module=tab]", "index.php|civilite[module=form]", ),
4935 );
4936 //
4937 $links[] = array(
4938 "href" => "".OM_ROUTE_TAB."&obj=arrondissement",
4939 "class" => "arrondissement",
4940 "title" => _("arrondissement"),
4941 "right" => array("arrondissement", "arrondissement_tab", ),
4942 "open" => array("index.php|arrondissement[module=tab]", "index.php|arrondissement[module=form]", ),
4943 );
4944 //
4945 $links[] = array(
4946 "href" => "".OM_ROUTE_TAB."&obj=quartier",
4947 "class" => "quartier",
4948 "title" => _("quartier"),
4949 "right" => array("quartier", "quartier_tab", ),
4950 "open" => array("index.php|quartier[module=tab]", "index.php|quartier[module=form]", ),
4951 );
4952 //
4953 $links[] = array(
4954 "class" => "category",
4955 "title" => _("Organisation"),
4956 "right" => array(
4957 "direction", "direction_tab", "division", "division_tab", "instructeur_qualite",
4958 "instructeur_qualite_tab", "instructeur", "instructeur_tab", "groupe",
4959 "groupe_tab", "genre", "genre_tab", "signataire_habilitation",
4960 "signataire_habilitation_tab", "signataire_arrete", "signataire_arrete_tab",
4961 "taxe_amenagement_tab", "taxe_amenagement",
4962 ),
4963 );
4964 $links[] = array(
4965 "title" => "<hr/>",
4966 "right" => array(
4967 "direction", "direction_tab", "division", "division_tab", "instructeur_qualite",
4968 "instructeur_qualite_tab", "instructeur", "instructeur_tab", "groupe",
4969 "groupe_tab", "genre", "genre_tab", "signataire_arrete", "signataire_arrete_tab",
4970 "taxe_amenagement_tab", "taxe_amenagement",
4971 ),
4972 );
4973 //
4974 $links[] = array(
4975 "href" => "".OM_ROUTE_TAB."&obj=genre",
4976 "class" => "genre",
4977 "title" => _("genre"),
4978 "right" => array("genre", "genre_tab", ),
4979 "open" => array("index.php|genre[module=tab]", "index.php|genre[module=form]", ),
4980 );
4981 //
4982 $links[] = array(
4983 "href" => "".OM_ROUTE_TAB."&obj=groupe",
4984 "class" => "groupe",
4985 "title" => _("groupe"),
4986 "right" => array("groupe", "groupe_tab", ),
4987 "open" => array("index.php|groupe[module=tab]", "index.php|groupe[module=form]", ),
4988 );
4989 //
4990 $links[] = array(
4991 "href" => "".OM_ROUTE_TAB."&obj=direction",
4992 "class" => "direction",
4993 "title" => _("direction"),
4994 "right" => array("direction", "direction_tab", ),
4995 "open" => array("index.php|direction[module=tab]", "index.php|direction[module=form]", ),
4996 );
4997 //
4998 $links[] = array(
4999 "href" => "".OM_ROUTE_TAB."&obj=division",
5000 "class" => "division",
5001 "title" => _("division"),
5002 "right" => array("division", "division_tab", ),
5003 "open" => array("index.php|division[module=tab]", "index.php|division[module=form]", ),
5004 );
5005 //
5006 $links[] = array(
5007 "href" => "".OM_ROUTE_TAB."&obj=instructeur_qualite",
5008 "class" => "instructeur_qualite",
5009 "title" => _("instructeur_qualite"),
5010 "right" => array("instructeur_qualite", "instructeur_qualite_tab", ),
5011 "open" => array("index.php|instructeur_qualite[module=tab]", "index.php|instructeur_qualite[module=form]", ),
5012 );
5013 //
5014 $links[] = array(
5015 "href" => "".OM_ROUTE_TAB."&obj=instructeur",
5016 "class" => "instructeur",
5017 "title" => _("instructeur"),
5018 "right" => array("instructeur", "instructeur_tab", ),
5019 "open" => array("index.php|instructeur[module=tab]", "index.php|instructeur[module=form]", ),
5020 );
5021 //
5022 $links[] = array(
5023 "href" => "".OM_ROUTE_TAB."&obj=signataire_habilitation",
5024 "class" => "signataire_habilitation",
5025 "title" => _("signataire habilitation"),
5026 "right" => array("signataire_habilitation", "signataire_habilitation", ),
5027 "open" => array("index.php|signataire_habilitation[module=tab]", "index.php|signataire_habilitation[module=form]", ),
5028 );
5029 //
5030 $links[] = array(
5031 "href" => "".OM_ROUTE_TAB."&obj=signataire_arrete",
5032 "class" => "signataire_arrete",
5033 "title" => _("signataire arrete"),
5034 "right" => array("signataire_arrete", "signataire_arrete", ),
5035 "open" => array("index.php|signataire_arrete[module=tab]", "index.php|signataire_arrete[module=form]", ),
5036 );
5037 //
5038 $links[] = array(
5039 "href" => "".OM_ROUTE_TAB."&obj=taxe_amenagement",
5040 "class" => "taxe_amenagement",
5041 "title" => _("taxes"),
5042 "right" => array("taxe_amenagement", "taxe_amenagement_tab", ),
5043 "open" => array("index.php|taxe_amenagement[module=tab]", "index.php|taxe_amenagement[module=form]", ),
5044 );
5045 //
5046 $links[] = array(
5047 "class" => "category",
5048 "title" => _("gestion des commissions"),
5049 "right" => array(
5050 "commission_type", "commission_type_tab",
5051 ),
5052 );
5053 //
5054 $links[] = array(
5055 "title" => "<hr/>",
5056 "right" => array(
5057 "commission_type", "commission_type_tab",
5058 ),
5059 );
5060 //
5061 $links[] = array(
5062 "href" => "".OM_ROUTE_TAB."&obj=commission_type",
5063 "class" => "commission-type",
5064 "title" => _("commission_type"),
5065 "right" => array("commission_type", "commission_type_tab", ),
5066 "open" => array("index.php|commission_type[module=tab]", "index.php|commission_type[module=form]", ),
5067 );
5068 //
5069 $links[] = array(
5070 "class" => "category",
5071 "title" => _("gestion des consultations"),
5072 "right" => array(
5073 "avis_consultation", "avis_consultation_tab", "service", "service_tab",
5074 "service_categorie", "service_categorie_tab",
5075 "lien_service_service_categorie", "lien_service_service_categorie_tab",
5076 ),
5077 );
5078 //
5079 $links[] = array(
5080 "title" => "<hr/>",
5081 "right" => array(
5082 "avis_consultation", "avis_consultation_tab", "service", "service_tab",
5083 "service_categorie", "service_categorie_tab",
5084 "lien_service_service_categorie", "lien_service_service_categorie_tab",
5085 ),
5086 );
5087 //
5088 $links[] = array(
5089 "href" => "".OM_ROUTE_TAB."&obj=avis_consultation",
5090 "class" => "avis_consultation",
5091 "title" => _("avis consultation"),
5092 "right" => array("avis_consultation", "avis_consultation_tab", ),
5093 "open" => array("index.php|avis_consultation[module=tab]", "index.php|avis_consultation[module=form]", ),
5094 );
5095 //
5096 $links[] = array(
5097 "href" => "".OM_ROUTE_TAB."&obj=service",
5098 "class" => "service",
5099 "title" => _("service"),
5100 "right" => array("service", "service_tab", ),
5101 "open" => array("index.php|service[module=tab]", "index.php|service[module=form]", ),
5102 );
5103 $links[] = array(
5104 "href" => "".OM_ROUTE_TAB."&obj=service_categorie",
5105 "class" => "service_categorie",
5106 "title" => _("thematique des services"),
5107 "right" => array("service_categorie", "service_categorie_tab", ),
5108 "open" => array("index.php|service_categorie[module=tab]", "index.php|service_categorie[module=form]", ),
5109 );
5110 $links[] = array(
5111 "href" => "".OM_ROUTE_TAB."&obj=categorie_tiers_consulte",
5112 "class" => "categorie_tiers_consulte",
5113 "title" => __("catégorie des tiers consultés"),
5114 "right" => array("categorie_tiers_consulte", "categorie_tiers_consulte_tab", ),
5115 "open" => array("index.php|categorie_tiers_consulte[module=tab]", "index.php|categorie_tiers_consulte[module=form]", ),
5116 );
5117 $links[] = array(
5118 "href" => "".OM_ROUTE_TAB."&obj=tiers_consulte",
5119 "class" => "tiers_consulte",
5120 "title" => __("tiers"),
5121 "right" => array("tiers_consulte", "tiers_consulte_tab", ),
5122 "open" => array("index.php|tiers_consulte[module=tab]", "index.php|tiers_consulte[module=form]", ),
5123 );
5124 $links[] = array(
5125 "href" => "".OM_ROUTE_TAB."&obj=type_habilitation_tiers_consulte",
5126 "class" => "type_habilitation_tiers_consulte",
5127 "title" => __("type d'habilitation des tiers consultés"),
5128 "right" => array("type_habilitation_tiers_consulte", "type_habilitation_tiers_consulte_tab", ),
5129 "open" => array("index.php|type_habilitation_tiers_consulte[module=tab]", "index.php|type_habilitation_tiers_consulte[module=form]", ),
5130 );
5131 $links[] = array(
5132 "href" => "".OM_ROUTE_TAB."&obj=habilitation_tiers_consulte",
5133 "class" => "habilitation_tiers_consulte",
5134 "title" => __("habilitation des tiers consultés"),
5135 "right" => array("habilitation_tiers_consulte", "habilitation_tiers_consulte_tab", ),
5136 "open" => array("index.php|habilitation_tiers_consulte[module=tab]", "index.php|habilitation_tiers_consulte[module=form]", ),
5137 );
5138 $links[] = array(
5139 "href" => "".OM_ROUTE_TAB."&obj=specialite_tiers_consulte",
5140 "class" => "specialite_tiers_consulte",
5141 "title" => __("spécialité des tiers consultés"),
5142 "right" => array("specialite_tiers_consulte", "specialite_tiers_consulte_tab", ),
5143 "open" => array("index.php|specialite_tiers_consulte[module=tab]", "index.php|specialite_tiers_consulte[module=form]", ),
5144 );
5145 $links[] = array(
5146 "href" => "".OM_ROUTE_TAB."&obj=motif_consultation",
5147 "class" => "motif_consultation",
5148 "title" => __("motif de consultation"),
5149 "right" => array("motif_consultation", "motif_consultation_tab", ),
5150 "open" => array("index.php|motif_consultation[module=tab]", "index.php|motif_consultation[module=form]", ),
5151 );
5152 //
5153 $links[] = array(
5154 "class" => "category",
5155 "title" => _("Gestion des dossiers"),
5156 "right" => array(
5157 "dossier_autorisation_type", "dossier_autorisation_type_tab",
5158 "dossier_autorisation_type_detaille",
5159 "dossier_autorisation_type_detaille_tab", "dossier_instruction_type",
5160 "dossier_instruction_type_tab",
5161 "autorite_competente", "autorite_competente_tab",
5162 "affectation_automatique", "affectation_automatique_tab",
5163 "pec_metier", "pec_metier_tab",
5164 ),
5165 );
5166 //
5167 $links[] = array(
5168 "title" => "<hr/>",
5169 "right" => array(
5170 "dossier_autorisation_type", "dossier_autorisation_type_tab",
5171 "dossier_autorisation_type_detaille",
5172 "dossier_autorisation_type_detaille_tab", "dossier_instruction_type",
5173 "dossier_instruction_type_tab",
5174 "autorite_competente", "autorite_competente_tab",
5175 "affectation_automatique", "affectation_automatique_tab",
5176 "pec_metier", "pec_metier_tab",
5177 ),
5178 );
5179 //
5180 $links[] = array(
5181 "href" => "".OM_ROUTE_TAB."&obj=etat_dossier_autorisation",
5182 "class" => "etat_dossier_autorisation",
5183 "title" => _("etat dossiers autorisations"),
5184 "right" => array("etat_dossier_autorisation", "etat_dossier_autorisation_tab", ),
5185 "open" => array("index.php|etat_dossier_autorisation[module=tab]", "index.php|etat_dossier_autorisation[module=form]", ),
5186 );
5187 //
5188 $links[] = array(
5189 "href" => "".OM_ROUTE_TAB."&obj=affectation_automatique",
5190 "class" => "affectation_automatique",
5191 "title" => _("affectation automatique"),
5192 "right" => array("affectation_automatique", "affectation_automatique_tab", ),
5193 "open" => array("index.php|affectation_automatique[module=tab]", "index.php|affectation_automatique[module=form]", ),
5194 );
5195 //
5196 $links[] = array(
5197 "href" => "".OM_ROUTE_TAB."&obj=autorite_competente",
5198 "class" => "autorite_competente",
5199 "title" => _("autorite")." "._("competente"),
5200 "right" => array("autorite_competente", "autorite_competente_tab", ),
5201 "open" => array("index.php|autorite_competente[module=tab]", "index.php|autorite_competente[module=form]", ),
5202 );
5203 //
5204 $links[] = array(
5205 "href" => "".OM_ROUTE_TAB."&obj=phase",
5206 "class" => "phase",
5207 "title" => _("phase"),
5208 "right" => array("phase", "phase_tab", ),
5209 "open" => array("index.php|phase[module=tab]", "index.php|phase[module=form]", ),
5210 );
5211 //
5212 $links[] = array(
5213 "href" => "".OM_ROUTE_TAB."&obj=pec_metier",
5214 "class" => "pec_metier",
5215 "title" => _("pec_metier"),
5216 "right" => array("pec_metier", "pec_metier_tab", ),
5217 "open" => array("index.php|pec_metier[module=tab]", "index.php|pec_metier[module=form]", ),
5218 );
5219
5220 //Gestion des pièces
5221 $links[] = array(
5222 "class" => "category",
5223 "title" => _("Gestion des pièces"),
5224 "right" => array(
5225 "document_numerise_type_categorie", "document_numerise_type_categorie_tab",
5226 "document_numerise_type",
5227 "document_numerise_type_tab", "document_numerise_traitement_metadonnees",
5228 "document_numerise_traitement_metadonnees_executer",
5229 ),
5230 );
5231 //
5232 $links[] = array(
5233 "title" => "<hr/>",
5234 "right" => array(
5235 "document_numerise_type_categorie", "document_numerise_type_categorie_tab",
5236 "document_numerise_type",
5237 "document_numerise_type_tab", "document_numerise_traitement_metadonnees",
5238 "document_numerise_traitement_metadonnees_executer",
5239 ),
5240 );
5241 //
5242 $links[] = array(
5243 "href" => "".OM_ROUTE_TAB."&obj=document_numerise_type_categorie",
5244 "class" => "document_numerise_type_categorie",
5245 "title" => _("Catégorie des pièces"),
5246 "right" => array(
5247 "document_numerise_type_categorie",
5248 "document_numerise_type_categorie_tab",
5249 ),
5250 "open" => array(
5251 "index.php|document_numerise_type_categorie[module=tab]",
5252 "index.php|document_numerise_type_categorie[module=form]",
5253 ),
5254 );
5255 //
5256 $links[] = array(
5257 "href" => "".OM_ROUTE_TAB."&obj=document_numerise_type",
5258 "class" => "document_numerise_type",
5259 "title" => _("Type des pièces"),
5260 "right" => array(
5261 "document_numerise_type",
5262 "document_numerise_type_tab",
5263 ),
5264 "open" => array(
5265 "index.php|document_numerise_type[module=tab]",
5266 "index.php|document_numerise_type[module=form][action=0]",
5267 "index.php|document_numerise_type[module=form][action=1]",
5268 "index.php|document_numerise_type[module=form][action=2]",
5269 "index.php|document_numerise_type[module=form][action=3]",
5270 ),
5271 );
5272 //
5273 $links[] = array(
5274 "href" => "".OM_ROUTE_TAB."&obj=lien_document_n_type_d_i_t",
5275 "class" => "lien_document_n_type_d_i_t",
5276 "title" => _("Nomenclature des pièces"),
5277 "right" => array(
5278 "lien_document_n_type_d_i_t",
5279 "lien_document_n_type_d_i_t_tab",
5280 ),
5281 "open" => array(
5282 "index.php|lien_document_n_type_d_i_t[module=tab]",
5283 "index.php|lien_document_n_type_d_i_t[module=form][action=0]",
5284 "index.php|lien_document_n_type_d_i_t[module=form][action=1]",
5285 "index.php|lien_document_n_type_d_i_t[module=form][action=2]",
5286 "index.php|lien_document_n_type_d_i_t[module=form][action=3]",
5287 ),
5288 );
5289 //
5290 $links[] = array(
5291 "href" => "".OM_ROUTE_FORM."&obj=document_numerise_traitement_metadonnees&action=100&idx=0",
5292 "class" => "document_numerise_traitement_metadonnees",
5293 "title" => _("Mise à jour des métadonnées"),
5294 "description" => _("Mettre à jour les métadonnées de tous les documents numérisés."),
5295 "right" => array(
5296 "document_numerise_traitement_metadonnees",
5297 "document_numerise_traitement_metadonnees_executer",
5298 ),
5299 "open" => array("index.php|document_numerise_traitement_metadonnees[module=form]", ),
5300 );
5301
5302 // Gestion des contentieux
5303 $links[] = array(
5304 "class" => "category",
5305 "title" => _("Gestion des contentieux"),
5306 "right" => array(
5307 "objet_recours", "objet_recours_tab", "moyen_souleve", "moyen_souleve_tab",
5308 "moyen_retenu_juge", "moyen_retenu_juge_tab",
5309 ),
5310 );
5311 //
5312 $links[] = array(
5313 "title" => "<hr/>",
5314 "right" => array(
5315 "objet_recours", "objet_recours_tab", "moyen_souleve", "moyen_souleve_tab",
5316 "moyen_retenu_juge", "moyen_retenu_juge_tab",
5317 ),
5318 );
5319 //
5320 $links[] = array(
5321 "href" => "".OM_ROUTE_TAB."&obj=objet_recours",
5322 "class" => "objet_recours",
5323 "title" => _("objet_recours"),
5324 "right" => array(
5325 "objet_recours", "objet_recours_tab",
5326 ),
5327 "open" => array(
5328 "index.php|objet_recours[module=tab]", "index.php|objet_recours[module=form]",
5329 ),
5330 );
5331 //
5332 $links[] = array(
5333 "href" => "".OM_ROUTE_TAB."&obj=moyen_souleve",
5334 "class" => "moyen_souleve",
5335 "title" => _("moyen_souleve"),
5336 "right" => array(
5337 "moyen_souleve", "moyen_souleve_tab",
5338 ),
5339 "open" => array(
5340 "index.php|moyen_souleve[module=tab]", "index.php|moyen_souleve[module=form]",
5341 ),
5342 );
5343 //
5344 $links[] = array(
5345 "href" => "".OM_ROUTE_TAB."&obj=moyen_retenu_juge",
5346 "class" => "moyen_retenu_juge",
5347 "title" => _("moyen_retenu_juge"),
5348 "right" => array(
5349 "moyen_retenu_juge", "moyen_retenu_juge_tab",
5350 ),
5351 "open" => array(
5352 "index.php|moyen_retenu_juge[module=tab]", "index.php|moyen_retenu_juge[module=form]",
5353 ),
5354 );
5355
5356 //
5357 $links[] = array(
5358 "class" => "category",
5359 "title" => _("géolocalisation"),
5360 "right" => array(
5361 "sig_groupe",
5362 "sig_sousgroupe",
5363 "sig_contrainte"
5364 ),
5365 );
5366 //
5367 $links[] = array(
5368 "href" => "".OM_ROUTE_TAB."&obj=sig_couche",
5369 "class" => "sig_couche",
5370 "title" => _("Couches"),
5371 "right" => array("sig_contrainte", "sig_contrainte_tab","sig_couche", "sig_couche_tab", ),
5372 "open" => array("index.php|sig_couche[module=tab]", "index.php|sig_couche[module=form]", ),
5373 );
5374 //
5375 $links[] = array(
5376 "href" => "".OM_ROUTE_TAB."&obj=sig_groupe",
5377 "class" => "sig_groupe",
5378 "title" => _("sig_groupe"),
5379 "right" => array(
5380 "sig_groupe", "sig_groupe_tab",
5381 ),
5382 "open" => array(
5383 "index.php|sig_groupe[module=tab]", "index.php|sig_groupe[module=form]",
5384 ),
5385 );
5386 //
5387 $links[] = array(
5388 "href" => "".OM_ROUTE_TAB."&obj=sig_sousgroupe",
5389 "class" => "sig_sousgroupe",
5390 "title" => _("sig_sousgroupe"),
5391 "right" => array(
5392 "sig_sousgroupe", "sig_sousgroupe_tab",
5393 ),
5394 "open" => array(
5395 "index.php|sig_sousgroupe[module=tab]", "index.php|sig_sousgroupe[module=form]",
5396 ),
5397 );
5398 //
5399 $links[] = array(
5400 "href" => "".OM_ROUTE_TAB."&obj=sig_contrainte",
5401 "class" => "sig_contrainte",
5402 "title" => _("sig_contrainte"),
5403 "right" => array(
5404 "sig_contrainte", "sig_contrainte_tab", "sig_attribut", "sig_attribut_tab"
5405 ),
5406 "open" => array(
5407 "index.php|sig_contrainte[module=tab]", "index.php|sig_contrainte[module=form]",
5408 ),
5409 );
5410 //
5411 $rubrik['links'] = $links;
5412 //
5413 $menu[] = $rubrik;
5414 // }}}
5415
5416 // {{{ Rubrique ADMINISTRATION
5417 //
5418 $rubrik = array(
5419 "title" => _("administration"),
5420 "class" => "administration",
5421 "right" => "menu_administration",
5422 );
5423 //
5424 $links = array();
5425 //
5426 // Renomme la collectivité en service
5427 $om_collectivite_title = __("om_collectivite");
5428 if (isset($_SESSION['collectivite']) === true
5429 && $this->is_option_renommer_collectivite_enabled() === true) {
5430 //
5431 $om_collectivite_title = __("service");
5432 }
5433 $links[] = array(
5434 "href" => "".OM_ROUTE_TAB."&obj=om_collectivite",
5435 "class" => "collectivite",
5436 "title" => $om_collectivite_title,
5437 "right" => array("om_collectivite", "om_collectivite_tab", ),
5438 "open" => array("index.php|om_collectivite[module=tab]", "index.php|om_collectivite[module=form]", ),
5439 );
5440 //
5441 $links[] = array(
5442 "href" => "".OM_ROUTE_TAB."&obj=om_parametre",
5443 "class" => "parametre",
5444 "title" => _("om_parametre"),
5445 "right" => array("om_parametre", "om_parametre_tab", ),
5446 "open" => array("index.php|om_parametre[module=tab]", "index.php|om_parametre[module=form]", ),
5447 );
5448 //
5449 $links[] = array(
5450 "title" => "<hr/>",
5451 "right" => array("commune", "commune_tab", )
5452 );
5453 $links[] = array(
5454 "href" => "".OM_ROUTE_TAB."&obj=commune",
5455 "title" => __("communes"),
5456 "right" => array("commune", "commune_tab"),
5457 "open" => array("index.php|commune[module=tab]", "index.php|commune[module=form]", ),
5458 );
5459 $links[] = array(
5460 "href" => "".OM_ROUTE_TAB."&obj=departement",
5461 "title" => __("départements"),
5462 "right" => array("departement", "departement_tab"),
5463 "open" => array("index.php|departement[module=tab]", "index.php|departement[module=form]")
5464 );
5465 $links[] = array(
5466 "href" => "".OM_ROUTE_TAB."&obj=region",
5467 "title" => __("régions"),
5468 "right" => array("region", "region_tab"),
5469 "open" => array("index.php|region[module=tab]", "index.php|region[module=form]")
5470 );
5471 //
5472 $links[] = array(
5473 "class" => "category",
5474 "title" => _("gestion des utilisateurs"),
5475 "right" => array(
5476 "om_utilisateur", "om_utilisateur_tab", "om_profil", "om_profil_tab",
5477 "om_droit", "om_droit_tab", "directory",
5478 ),
5479 );
5480 //
5481 $links[] = array(
5482 "title" => "<hr/>",
5483 "right" => array(
5484 "om_utilisateur", "om_utilisateur_tab", "om_profil", "om_profil_tab",
5485 "om_droit", "om_droit_tab",
5486 ),
5487 );
5488 //
5489 $links[] = array(
5490 "href" => "".OM_ROUTE_TAB."&obj=om_profil",
5491 "class" => "profil",
5492 "title" => _("om_profil"),
5493 "right" => array("om_profil", "om_profil_tab", ),
5494 "open" => array("index.php|om_profil[module=tab]", "index.php|om_profil[module=form]", ),
5495 );
5496 //
5497 $links[] = array(
5498 "href" => "".OM_ROUTE_TAB."&obj=om_droit",
5499 "class" => "droit",
5500 "title" => _("om_droit"),
5501 "right" => array("om_droit", "om_droit_tab", ),
5502 "open" => array("index.php|om_droit[module=tab]", "index.php|om_droit[module=form]", ),
5503 );
5504 //
5505 $links[] = array(
5506 "href" => "".OM_ROUTE_TAB."&obj=om_utilisateur",
5507 "class" => "utilisateur",
5508 "title" => _("om_utilisateur"),
5509 "right" => array("om_utilisateur", "om_utilisateur_tab", ),
5510 "open" => array(
5511 "index.php|om_utilisateur[module=tab]",
5512 "index.php|om_utilisateur[module=form][action=0]",
5513 "index.php|om_utilisateur[module=form][action=1]",
5514 "index.php|om_utilisateur[module=form][action=2]",
5515 "index.php|om_utilisateur[module=form][action=3]",
5516 ),
5517 );
5518 //
5519 $links[] = array(
5520 "title" => "<hr/>",
5521 "right" => array("om_utilisateur", "om_utilisateur_synchroniser", ),
5522 "parameters" => array("isDirectoryOptionEnabled" => true, ),
5523 );
5524 //
5525 $links[] = array(
5526 "href" => "".OM_ROUTE_FORM."&obj=om_utilisateur&idx=0&action=11",
5527 "class" => "annuaire",
5528 "title" => _("annuaire"),
5529 "right" => array("om_utilisateur", "om_utilisateur_synchroniser", ),
5530 "open" => array("index.php|om_utilisateur[module=form][action=11]", ),
5531 "parameters" => array("isDirectoryOptionEnabled" => true, ),
5532 );
5533 //
5534 $links[] = array(
5535 "class" => "category",
5536 "title" => _("tableaux de bord"),
5537 "right" => array(
5538 "om_widget", "om_widget_tab", "om_dashboard",
5539 ),
5540 );
5541 //
5542 $links[] = array(
5543 "title" => "<hr/>",
5544 "right" => array(
5545 "om_widget", "om_widget_tab", "om_dashboard",
5546 ),
5547 );
5548 //
5549 $links[] = array(
5550 "href" => "".OM_ROUTE_TAB."&obj=om_widget",
5551 "class" => "om_widget",
5552 "title" => _("om_widget"),
5553 "right" => array("om_widget", "om_widget_tab", ),
5554 "open" => array("index.php|om_widget[module=tab]", "index.php|om_widget[module=form]", ),
5555 );
5556 $links[] = array(
5557 "href" => "".OM_ROUTE_TAB."&obj=compteur",
5558 "class" => "compteur",
5559 "title" => __("Compteur & quota"),
5560 "right" => array("compteur", "compteur_tab", ),
5561 "open" => array("index.php|compteur[module=tab]", "index.php|compteur[module=form]", ),
5562 );
5563 //
5564 $links[] = array(
5565 "href" => "".OM_ROUTE_FORM."&obj=om_dashboard&amp;idx=0&amp;action=4",
5566 "class" => "om_dashboard",
5567 "title" => _("composition"),
5568 "right" => array("om_dashboard", ),
5569 "open" => array("index.php|om_dashboard[module=form][action=4]", ),
5570 );
5571 //
5572 $links[] = array(
5573 "class" => "category",
5574 "title" => _("sig"),
5575 "right" => array(
5576 "om_sig_map", "om_sig_map_tab", "om_sig_flux", "om_sig_flux_tab", "om_sig_extent", "om_sig_extent_tab",
5577 ),
5578 "parameters" => array("option_localisation" => "sig_interne", ),
5579 );
5580 //
5581 $links[] = array(
5582 "title" => "<hr/>",
5583 "right" => array(
5584 "om_sig_map", "om_sig_map_tab", "om_sig_flux", "om_sig_flux_tab", "om_sig_extent", "om_sig_extent_tab",
5585 ),
5586 "parameters" => array("option_localisation" => "sig_interne", ),
5587 );
5588 //
5589 $links[] = array(
5590 "href" => "".OM_ROUTE_TAB."&obj=om_sig_extent",
5591 "class" => "om_sig_extent",
5592 "title" => _("om_sig_extent"),
5593 "right" => array("om_sig_extent", "om_sig_extent_tab", ),
5594 "open" => array("index.php|om_sig_extent[module=tab]", "index.php|om_sig_extent[module=form]", ),
5595 "parameters" => array("option_localisation" => "sig_interne", ),
5596 );
5597 //
5598 $links[] = array(
5599 "href" => "".OM_ROUTE_TAB."&obj=om_sig_map",
5600 "class" => "om_sig_map",
5601 "title" => _("om_sig_map"),
5602 "right" => array("om_sig_map", "om_sig_map_tab", ),
5603 "open" => array("index.php|om_sig_map[module=tab]", "index.php|om_sig_map[module=form]", ),
5604 "parameters" => array("option_localisation" => "sig_interne", ),
5605 );
5606 //
5607 $links[] = array(
5608 "href" => "".OM_ROUTE_TAB."&obj=om_sig_flux",
5609 "class" => "om_sig_flux",
5610 "title" => _("om_sig_flux"),
5611 "right" => array("om_sig_flux", "om_sig_flux_tab", ),
5612 "open" => array("index.php|om_sig_flux[module=tab]", "index.php|om_sig_flux[module=form]", ),
5613 "parameters" => array("option_localisation" => "sig_interne", ),
5614 );
5615 //
5616 $links[] = array(
5617 "class" => "category",
5618 "title" => _("options avancees"),
5619 "right" => array("import", "gen", "om_requete", "om_requete_tab",
5620 "om_sousetat", "om_sousetat_tab",),
5621 );
5622 //
5623 $links[] = array(
5624 "title" => "<hr/>",
5625 "right" => array(
5626 "interface_referentiel_erp",
5627 ),
5628 );
5629 //
5630 $links[] = array(
5631 "href" => "../app/settings.php?controlpanel=interface_referentiel_erp",
5632 "class" => "interface_referentiel_erp",
5633 "title" => _("interface_referentiel_erp"),
5634 "right" => array("interface_referentiel_erp", ),
5635 "open" => array("settings.php|[controlpanel=interface_referentiel_erp]", ),
5636 );
5637 //
5638 $links[] = array(
5639 "title" => "<hr/>",
5640 "right" => array(
5641 "om_sousetat", "om_sousetat_tab",
5642 ),
5643 );
5644 //
5645 $links[] = array(
5646 "href" => "".OM_ROUTE_TAB."&obj=om_sousetat",
5647 "class" => "om_sousetat",
5648 "title" => _("om_sousetat"),
5649 "right" => array("om_sousetat", "om_sousetat_tab", ),
5650 "open" => array("index.php|om_sousetat[module=tab]", "index.php|om_sousetat[module=form]", ),
5651 );
5652 //
5653 $links[] = array(
5654 "title" => "<hr/>",
5655 "right" => array("om_requete", "om_requete_tab", ),
5656 );
5657 //
5658 $links[] = array(
5659 "href" => "".OM_ROUTE_TAB."&obj=om_requete",
5660 "class" => "om_requete",
5661 "title" => _("om_requete"),
5662 "right" => array("om_requete", "om_requete_tab", ),
5663 "open" => array("index.php|om_requete[module=tab]", "index.php|om_requete[module=form]", ),
5664 );
5665 //
5666 $links[] = array(
5667 "title" => "<hr/>",
5668 "right" => array("task", "task_tab", ),
5669 );
5670 //
5671 $links[] = array(
5672 "href" => "".OM_ROUTE_TAB."&obj=task",
5673 "class" => "task",
5674 "title" => _("Moniteur Plat'AU"),
5675 "right" => array("task", "task_tab", ),
5676 "open" => array("index.php|task[module=tab]", "index.php|task[module=form]", ),
5677 );
5678
5679 //Afficher le menu moniteur IDE'AU si l'option notification portal est activée.
5680 if (isset($_SESSION['collectivite']) === true
5681 && $this->get_param_option_notification() === PORTAL)
5682 {
5683 $links[] = array(
5684 "href" => "".OM_ROUTE_TAB."&obj=task_portal",
5685 "class" => "task_portal",
5686 "title" => __("Moniteur iDE'AU"),
5687 "right" => array("task_portal", "task_portal_tab", ),
5688 "open" => array("index.php|task_portal[module=tab]", "index.php|task_portal[module=form]", ),
5689 );
5690 }
5691
5692 //
5693 $links[] = array(
5694 "title" => "<hr/>",
5695 "right" => array("import", ),
5696 );
5697 //
5698 $links[] = array(
5699 "href" => OM_ROUTE_MODULE_IMPORT,
5700 "class" => "import",
5701 "title" => __("Import"),
5702 "description" => __("Ce module permet l'intégration de données dans l'application depuis des fichiers CSV."),
5703 "right" => array("import", ),
5704 "open" => array(
5705 "import.php|",
5706 "index.php|[module=import]",
5707 ),
5708 );
5709 //
5710 $links[] = array(
5711 "href" => "../app/import_specific.php",
5712 "class" => "import_specific",
5713 "title" => _("Import specifique"),
5714 "right" => array("import", ),
5715 "open" => array("import_specific.php|", ),
5716 );
5717 //
5718 $links[] = array(
5719 "title" => "<hr/>",
5720 "right" => array("gen", ),
5721 );
5722 //
5723 $links[] = array(
5724 "title" => _("Generateur"),
5725 "href" => OM_ROUTE_MODULE_GEN,
5726 "class" => "generator",
5727 "right" => array("gen", ),
5728 "open" => array(
5729 "gen.php|","genauto.php|", "gensup.php|", "genfull.php|",
5730 "genetat.php|", "gensousetat.php|", "genlettretype.php|",
5731 "genimport.php|",
5732 ),
5733 );
5734 //
5735 $links[] = array(
5736 "title" => "<hr/>",
5737 "right" => array("contrainte", "contrainte_synchronisation"),
5738 );
5739 //
5740 $links[] = array(
5741 "href" => "".OM_ROUTE_FORM."&obj=contrainte&action=100&idx=0",
5742 "class" => "contrainte",
5743 "title" => _("synchronisation des contraintes"),
5744 "right" => array("contrainte", "contrainte_synchronisation", ),
5745 "open" => array("index.php|contrainte[module=form][action=100]", ),
5746 "parameters" => array(
5747 "option_sig" => "sig_externe",
5748 ),
5749 );
5750 //
5751 $links[] = array(
5752 "href" => "".OM_ROUTE_FORM."&obj=dossier_instruction&action=126&idx=0",
5753 "class" => "geocoder",
5754 "title" => _("Géolocalisation des dossiers"),
5755 "right" => array("dossier_instruction_geocoder", ),
5756 "open" => array("index.php|dossier_instruction[module=form][action=126]", ),
5757 "parameters" => array(
5758 "option_sig" => "sig_externe",
5759 ),
5760 );
5761 //
5762 $rubrik['links'] = $links;
5763 //
5764 $menu[] = $rubrik;
5765 $this->config__menu = $menu;
5766 }
5767
5768 /**
5769 * Récupère tous les résultats d'une requête SQL.
5770 *
5771 * @param string $query Requête SQL
5772 * @param array $extras Tableau de paramètres :
5773 * - force_return (bool) : Force le retour d'un boolean en cas d'erreur
5774 * - origin (string) : Origine d'appel de la méthode
5775 * - get_columns_name (bool) : Renvoie le nom des colonnes de la requête sous la forme d'un tableau
5776 * - mode (string) : détermine la façon dont les lignes de résultats sont importés.
5777 * Par défaut : DB_FETCHMODE_ASSOC
5778 *
5779 * @return array
5780 */
5781 function get_all_results_from_db_query(string $query, array $extras = array()) {
5782 $res = $this->db->query($query);
5783 $origin = __METHOD__;
5784 if (array_key_exists("origin", $extras) === true
5785 && is_string($extras["origin"]) === true) {
5786 //
5787 $origin = $extras["origin"];
5788 }
5789 $this->addToLog(
5790 $origin."(): #db->query(\"".$query."\");",
5791 VERBOSE_MODE
5792 );
5793 $result = array(
5794 'code' => '',
5795 'message' => '',
5796 'result' => array(),
5797 'row_count' => 0
5798 );
5799 $force_return = false;
5800 if (array_key_exists("force_return", $extras) === true
5801 && is_bool($extras["force_return"]) === true) {
5802 //
5803 $force_return = $extras["force_return"];
5804 }
5805 if ($this->isDatabaseError($res, $force_return) !== false) {
5806 $result['code'] = 'KO';
5807 $result['message'] = __("Erreur de base de donnees. Contactez votre administrateur.");
5808 return $result;
5809 }
5810 $result['code'] = 'OK';
5811 $mode = DB_FETCHMODE_ASSOC;
5812 if (array_key_exists("mode", $extras) === true) {
5813 $mode = $extras["mode"];
5814 }
5815
5816 while ($row =& $res->fetchrow($mode)) {
5817 array_push($result['result'], $row);
5818 }
5819
5820 // Récupération du nom des colonnes
5821 if (array_key_exists("get_columns_name", $extras) === true
5822 && $extras["get_columns_name"] === true) {
5823
5824 $infos = $res->tableInfo();
5825 $result['columns_name'] = array();
5826 foreach($infos as $info) {
5827 $result['columns_name'][] = $info['name'];
5828 }
5829 }
5830 // Nombre de lignes retournées par la requête
5831 $result['row_count'] = $res->numRows();
5832
5833 $res->free();
5834 return $result;
5835 }
5836
5837 /**
5838 * Récupère un résultat d'une requête SQL.
5839 *
5840 * @param string $query Requête SQL
5841 * @param array $extras Tableau de paramètres :
5842 * - force_return (bool) : Force le retour d'un boolean en cas d'erreur
5843 * - origin (string) : Origine d'appel de la méthode
5844 *
5845 * @return array
5846 */
5847 function get_one_result_from_db_query(string $query, array $extras = array()) {
5848 $res = $this->db->getone($query);
5849 $origin = __METHOD__;
5850 if (array_key_exists("origin", $extras) === true
5851 && is_string($extras["origin"]) === true) {
5852 //
5853 $origin = $extras["origin"];
5854 }
5855 $this->addToLog(
5856 $origin."(): #db->getone(\"".$query."\");",
5857 VERBOSE_MODE
5858 );
5859 $result = array(
5860 "code" => "",
5861 "message" => "",
5862 "result" => array(),
5863 );
5864 $force_return = false;
5865 if (array_key_exists("force_return", $extras) === true
5866 && is_bool($extras["force_return"]) === true) {
5867 //
5868 $force_return = $extras["force_return"];
5869 }
5870 if ($this->isDatabaseError($res, $force_return) !== false) {
5871 $result["code"] = "KO";
5872 $result["message"] = __("Erreur de base de donnees. Contactez votre administrateur.");
5873 return $result;
5874 }
5875 $result["code"] = "OK";
5876 $result["result"] = $res;
5877 return $result;
5878 }
5879
5880 /**
5881 * Exécute requête SQL.
5882 *
5883 * @param string $query Requête SQL
5884 * @param array $extras Tableau de paramètres :
5885 * - force_return (bool) : Force le retour d'un boolean en cas d'erreur
5886 * - origin (string) : Origine d'appel de la méthode
5887 *
5888 * @return array
5889 */
5890 function execute_db_query(string $query, array $extras = array()) {
5891 $res = $this->db->query($query);
5892 $origin = __METHOD__;
5893 if (array_key_exists("origin", $extras) === true
5894 && is_string($extras["origin"]) === true) {
5895 //
5896 $origin = $extras["origin"];
5897 }
5898 $this->addToLog(
5899 $origin."(): #db->query(\"".$query."\");",
5900 VERBOSE_MODE
5901 );
5902 $result = array(
5903 'code' => '',
5904 'message' => '',
5905 'result' => array(),
5906 );
5907 $force_return = false;
5908 if (array_key_exists("force_return", $extras) === true
5909 && is_bool($extras["force_return"]) === true) {
5910 //
5911 $force_return = $extras["force_return"];
5912 }
5913
5914 if ($this->isDatabaseError($res, $force_return) !== false) {
5915 $result['code'] = 'KO';
5916 $result['message'] = __("Erreur de base de donnees. Contactez votre administrateur.");
5917 return $result;
5918 }
5919 $result['code'] = 'OK';
5920 return $result;
5921 }
5922
5923 /**
5924 * Instanciation de la classe 'edition'.
5925 * (surcharge de la fonction pour ajouter la prise en compte
5926 * de la surcharge locale de la classe om_edition).
5927 *
5928 * @param array $args Arguments à passer au constructeur.
5929 * @return edition
5930 */
5931 function get_inst__om_edition($args = array()) {
5932 if (file_exists("../obj/om_edition.class.php")) {
5933 require_once "../obj/om_edition.class.php";
5934 $class_name = "om_edition";
5935 } else {
5936 require_once PATH_OPENMAIRIE."om_edition.class.php";
5937 $class_name = "edition";
5938 }
5939 return new $class_name();
5940 }
5941
5942 /**
5943 * Instanciation de la classe 'reqmo'.
5944 * (surcharge de la fonction pour ajouter la prise en compte
5945 * de la surcharge locale de la classe om_edition).
5946 *
5947 * @param array $args Arguments à passer au constructeur.
5948 * @return edition
5949 */
5950 function get_inst__om_reqmo($args = array()) {
5951 if (file_exists("../obj/om_reqmo.class.php")) {
5952 require_once "../obj/om_reqmo.class.php";
5953 $class_name = "om_reqmo";
5954 } else {
5955 require_once PATH_OPENMAIRIE."om_reqmo.class.php";
5956 $class_name = "reqmo";
5957 }
5958 return new $class_name();
5959 }
5960
5961 /**
5962 * Permet d'enregistrer un fichier dans la table 'storage'.
5963 *
5964 * @return mixed Identifiant du fichier dans la table storage ou false.
5965 */
5966 function store_file($filecontent, $filemetadata, $type, $info = null, $collectivite = null, $dossierFinal = false) {
5967 if ($collectivite === null) {
5968 $get_collectivite = $this->getCollectivite();
5969 $collectivite = $get_collectivite['om_collectivite_idx'];
5970 }
5971 $uid = $this->storage->create($filecontent, $filemetadata, "from_content", "storage.uid");
5972 if ($uid == 'OP_FAILURE') {
5973 return false;
5974 }
5975 $inst_storage = $this->get_inst__om_dbform(array(
5976 "obj" => "storage",
5977 "idx" => "]",
5978 ));
5979 $val = array(
5980 "storage" => '',
5981 "file" => "NEW",
5982 "creation_date" => date("Y-m-d"),
5983 "creation_time" => date("G:i:s"),
5984 "uid" => $uid,
5985 "filename" => $filemetadata["filename"],
5986 "size" => $filemetadata["size"],
5987 "mimetype" => $filemetadata["mimetype"],
5988 "type" => $type,
5989 "info" => $info,
5990 "om_collectivite" => $collectivite,
5991 "uid_dossier_final" => $dossierFinal
5992 );
5993 $ret = $inst_storage->ajouter($val);
5994 if ($ret !== true) {
5995 return false;
5996 }
5997 // Récupère l'identifiant dans le storage
5998 $id = $inst_storage->get_storage_id_by_uid($uid);
5999 //
6000 return $id;
6001 }
6002
6003 /**
6004 * Surcharge de la fonction d'affichage pour ajouter
6005 * un détecteur de bloqueur de pub (cassant l'application).
6006 *
6007 * @return void
6008 */
6009 function displayHTMLFooter() {
6010 parent::displayHTMLFooter();
6011 if (in_array($this->flag, array("login_and_nohtml", "nohtml", "login", "logout", "anonym")) !== true) {
6012 $this->ad_blocker_detector();
6013 }
6014 }
6015
6016 /**
6017 * "Fausse" surcharge de la méthode du même nom dans om_layout.
6018 * Ajoute la possibilité d'ajouter une class CSS à la balise legend.
6019 *
6020 * Cette methode permet d'ouvrir un fieldset
6021 */
6022 public function display_formulaire_debutFieldset($params) {
6023 // Ouverture du fieldset
6024 echo " <fieldset";
6025 echo (isset($params["identifier"]) ? " id=\"".$params["identifier"]."\"" : "");
6026 echo " class=\"cadre ui-corner-all ui-widget-content ".$params["action2"]."\">\n";
6027 echo " <legend class=\"ui-corner-all ui-widget-content ui-state-active ".$params["legend_class"]."\">";
6028 echo $params["action1"];
6029 echo " </legend>\n";
6030 // Ouverture du conteneur interne du fieldset
6031 echo " <div class=\"fieldsetContent\">\n";
6032 }
6033
6034 /**
6035 * Affiche un bloc de code Javascript
6036 * responsable de détecter les bloqueurs de pub
6037 * et d'afficher un message le cas échéant.
6038 */
6039 protected function ad_blocker_detector() {
6040
6041 printf(
6042 '<script type="text/javascript">
6043 var blocked = [];
6044 // jquery has not loaded
6045 if(typeof($) == "undefined" && typeof(jQuery) == "undefined") {
6046 blocked.push("jquery");
6047 }
6048 // tinyMCE has not loaded
6049 if(typeof(tinyMCE) == "undefined") {
6050 blocked.push("tinyMCE");
6051 }
6052 // locale has not loaded
6053 if(typeof(locale) == "undefined") {
6054 blocked.push("locale");
6055 }
6056 // om_layout has not loaded
6057 if(typeof(om_initialize_content) == "undefined") {
6058 blocked.push("om_layout");
6059 }
6060 // app script has not loaded
6061 if(typeof(app_script_t4Fv4a59uSU7MwpJ59Qp) == "undefined") {
6062 blocked.push("app_script");
6063 }
6064
6065 // something was blocked
6066 if(blocked.length > 0) {
6067
6068 // removing every node in the body
6069 while(document.body.firstChild) { document.body.removeChild(document.body.firstChild); }
6070
6071 // creating the message (node) and its style
6072 var msgNode = document.createElement("p");
6073 msgNode.id = "adblocker-detected";
6074 msgNode.style.position = "relative";
6075 msgNode.style.width = "calc(100%% - 60px)";
6076 msgNode.style.margin = "20px auto";
6077 msgNode.style.padding = "20px";
6078 msgNode.style.background = "#FEF8F6";
6079 msgNode.style.color = "#cd0a0a";
6080 msgNode.style.border = "1px solid #cd0a0a";
6081 msgNode.style.borderRadius = "4px";
6082 msgNode.style.gridColumns = "1 / -1";
6083 msgNode.innerHTML = "%s";
6084
6085 // appending the message (node) to the body
6086 document.body.insertBefore(msgNode, document.body.firstChild);
6087 }
6088 </script>',
6089 sprintf(
6090 '<span>%s</span><br/><br/><span>%s</span><br/><br/><span>%s</span>',
6091 __("Un bloqueur de publicité a été détecté, et ceci empêche l'application de fonctionner normalement."),
6092 __("Afin de rétablir le bon fonctionnement, il vous est nécessaire d'ajouter l'application à la liste blanche des applications autorisées (<small>pour cela, référez-vous à la documentation de votre extension bloqueuse de publicité</small>)."),
6093 __("<em>Pour information, ceci se produit parce que l'application se nomme openADS, or les bloqueurs de publicité ont tendance à bloquer tout ce qui contient la chaîne de caractères 'ads' (<small>publicité</small> en anglais) comme c'est le cas dans le nom open<strong>ADS</strong>.</em>")
6094 )
6095 );
6096 }
6097
6098 /**
6099 * Récupère l'identifiant de l'enregistrement par rapport aux arguments.
6100 *
6101 * @param string $idx_name Nom du champ de l'identifiant
6102 * @param string $table Nom de la table
6103 * @param string $condition_field Nom du champ pour la condition
6104 * @param string $condition_value Valeur du champ de condition
6105 *
6106 * @return mixed Résultat de la requête ou null
6107 */
6108 public function get_idx_by_args(array $args) {
6109 $where2 = '';
6110 if (isset($args['condition2_field']) === true
6111 && isset($args['condition2_value']) === true
6112 && $args['condition2_field'] !== ''
6113 && $args['condition2_field'] !== null
6114 && $args['condition2_value'] !== ''
6115 && $args['condition2_value'] !== null) {
6116 //
6117 $where2 = sprintf(" AND %s = '%s'", $args['condition2_field'], $args['condition2_value']);
6118 }
6119 $where3 = '';
6120 if (isset($args['condition3_field']) === true
6121 && isset($args['condition3_value']) === true
6122 && $args['condition3_field'] !== ''
6123 && $args['condition3_field'] !== null
6124 && $args['condition3_value'] !== ''
6125 && $args['condition3_value'] !== null) {
6126 //
6127 $where3 = sprintf(" AND %s = '%s'", $args['condition3_field'], $args['condition3_value']);
6128 }
6129 $order = '';
6130 if (isset($args['order_field']) === true
6131 && isset($args['order_asc_desc']) === true
6132 && $args['order_field'] !== ''
6133 && $args['order_field'] !== null
6134 && $args['order_asc_desc'] !== ''
6135 && $args['order_asc_desc'] !== null) {
6136 //
6137 $order = sprintf(" ORDER BY %s %s ", $args['order_field'], $args['order_asc_desc']);
6138 }
6139 $qres = $this->get_one_result_from_db_query(
6140 sprintf(
6141 "SELECT
6142 %s
6143 FROM
6144 %s%s
6145 WHERE
6146 %s = '%s'
6147 %s
6148 %s
6149 %s",
6150 $args['idx_name'],
6151 DB_PREFIXE,
6152 $args['table'],
6153 $args['condition_field'],
6154 $args['condition_value'],
6155 $where2,
6156 $where3,
6157 $order
6158 ),
6159 array(
6160 "origin" => __METHOD__,
6161 )
6162 );
6163 return $qres["result"];
6164 }
6165
6166 public function get_inst__by_other_idx(array $args) {
6167 // En cas de plusieurs résultat, instancie seulement le premier retourné
6168 $idx = $this->get_idx_by_args(array(
6169 'idx_name' => $args['obj'],
6170 'table' => $args['obj'],
6171 'condition_field' => $args['fk_field'],
6172 'condition_value' => $args['fk_idx'],
6173 'condition2_field' => isset($args['fk_field_2']) === true ? $args['fk_field_2'] : null,
6174 'condition2_value' => isset($args['fk_idx_2']) === true ? $args['fk_idx_2'] : null,
6175 'condition3_field' => isset($args['fk_field_3']) === true ? $args['fk_field_3'] : null,
6176 'condition3_value' => isset($args['fk_idx_3']) === true ? $args['fk_idx_3'] : null,
6177 'order_field' => isset($args['order_field']) === true ? $args['order_field'] : null,
6178 'order_asc_desc' => isset($args['order_asc_desc']) === true ? $args['order_asc_desc'] : null,
6179 ));
6180 $inst = $this->get_inst__om_dbform(array(
6181 'obj' => $args['obj'],
6182 'idx' => $idx,
6183 ));
6184 return $inst;
6185 }
6186
6187 /**
6188 * Retourne l'objet demandé avec ses propriétés remplis à partir des données en base
6189 * ou 'null' si l'objet n'est pas trouvé en base de données.
6190 *
6191 * @param string $class La classe de l'objet demandé
6192 * @param string $idx L'identifiant de l'objet en base de donnée
6193 * @param bool $onlyone Si vaut 'true', déclenche une exception s'il y a plus d'un résultat
6194 *
6195 * @return $mixed L'objet ou null
6196 *
6197 * (à partir de PHP 7.1 on pourra utiliser le ReturnType ?object)
6198 */
6199 public function findObjectById(string $class, string $idx, bool $onlyone = true) {
6200 $obj = null;
6201 if (!empty($class) && !empty($idx)) {
6202 $qres = $this->get_one_result_from_db_query(
6203 sprintf(
6204 'SELECT
6205 COUNT(%2$s)
6206 FROM
6207 %1$s%2$s
6208 WHERE
6209 %2$s::CHARACTER VARYING = \'%3$s\'',
6210 DB_PREFIXE,
6211 $class,
6212 $idx
6213
6214 ),
6215 array(
6216 "origin" => __METHOD__
6217 )
6218 );
6219 if ($qres["code"] !== "OK") {
6220 throw new RuntimeException("Failed database query (".$qres['message'].")");
6221 }
6222 $count = intval(strval($qres['result']));
6223 if ($count === 1) {
6224 $obj = $this->get_inst__om_dbform(array('obj' => $class, 'idx' => $idx));
6225 }
6226 elseif($count > 1 && $onlyone) {
6227 throw new RuntimeException("More than one result ($count) for '$class' ID '$idx'");
6228 }
6229 }
6230 $obj = $this->get_inst__om_dbform(array('obj' => $class, 'idx' => $idx));
6231 if ($obj->exists() !== true) {
6232 return null;
6233 }
6234 return $obj;
6235 }
6236
6237 /**
6238 * Retourne l'objet demandé avec ses propriétés remplis à partir des données en base
6239 * ou 'null' si l'objet n'est pas trouvé en base de données.
6240 *
6241 * @param string class La classe de l'objet demandé
6242 * @param string condition La clause WHERE de la requête SQL qui va être effectuée
6243 * @param string order (optionel) La clause ORDER BY de la requête SQL qui va être effectuée
6244 * @param string from (optionel) La clause FROM de la requête SQL qui va être effectuée
6245 * @param string onlyone (optionel) Si 'true': génère une exception si plus d'un résultat
6246 *
6247 * @return $mixed L'objet ou null
6248 *
6249 * @throw RuntimeException
6250 *
6251 * (à partir de PHP 7.1 on pourra utiliser le ReturnType ?object)
6252 */
6253 public function findObjectByCondition(string $class, string $condition, string $order,
6254 string $from = null, bool $onlyone = true) {
6255 $obj = null;
6256 if (!empty($class)) {
6257 $class = $this->db->escapeSimple($class);
6258 $from = ! empty($from) ?
6259 $from :
6260 sprintf(' FROM %s%s', DB_PREFIXE, $class);
6261 $condition = ! empty($condition) ?
6262 " WHERE $condition" :
6263 '';
6264 $order = ! empty($order) ?
6265 " ORDER BY $order" :
6266 '';
6267
6268 $sqlExist = sprintf(
6269 'SELECT
6270 COUNT(%1$s)
6271 %2$s
6272 %3$s',
6273 $class,
6274 $from,
6275 $condition
6276 );
6277 $qres = $this->get_one_result_from_db_query(
6278 $sqlExist,
6279 array(
6280 "origin" => __METHOD__,
6281 "force_return" => true,
6282 )
6283 );
6284
6285 if ($qres["code"] !== "OK") {
6286 throw new RuntimeException("Failed database query (".$qres['message'].")");
6287 }
6288 $count = intval(strval($qres['result']));
6289 if(empty($count)) {
6290 return null;
6291 }
6292 if($count > 1 && $onlyone) {
6293 $this->addToLog(__METHOD__."(): get_one_result_from_db_query(\"".$sqlExist."\");", DEBUG_MODE);
6294 throw new RuntimeException("More than one result ($count) for '$class'");
6295 }
6296 $sqlID = sprintf(
6297 'SELECT
6298 %1$s
6299 %2$s
6300 %3$s
6301 LIMIT 1',
6302 $class,
6303 $from,
6304 $condition,
6305 $order
6306 );
6307 $qres = $this->get_one_result_from_db_query(
6308 $sqlID,
6309 array(
6310 "origin" => __METHOD__,
6311 "force_return" => true,
6312 )
6313 );
6314 if ($qres["code"] !== "OK") {
6315 throw new RuntimeException("Failed database query (".$qres['message'].")");
6316 }
6317 $idx = intval(strval($qres['result']));
6318 $obj = $this->get_inst__om_dbform(array('obj' => $class, 'idx' => $idx));
6319 }
6320 return $obj;
6321 }
6322
6323 /**
6324 * Récupère la totalité des objets d'un type donné.
6325 * Si l'argument $sqlFilter est non-vide alors il sera utilisé pour filtrer les objets.
6326 * Si l'argument $sqlOrder est non-vide alors il sera utilisé pour ordonner les objets.
6327 *
6328 * Note: le code de cette méthode est largement inspiré de dbform::init_record_data().
6329 *
6330 * @return array|false
6331 */
6332 public function getAllObjects(string $type, string $sqlfilter = '', string $sqlOrder = '') {
6333
6334 // objet "modèle" utilisé pour accéder aux variables nécessaires à la construction
6335 // de la requête SQL et aussi pour y stocker les infos communes à tous les objets de
6336 // ce type (ex: tailles des champs, etc.).
6337 $objectTemplate = $this->get_inst__om_dbform(array('obj' => $type));
6338
6339 // construction de la requpete SQL (éventuellement avec un filtre)
6340 $sqlSelectedColumns = $objectTemplate->get_var_sql_forminc__champs();
6341 if (! empty($objectTemplate->_var_from_sql_forminc__champs)) {
6342 $sqlSelectedColumns = $objectTemplate->_var_from_sql_forminc__champs;
6343 }
6344 $sqlSelectColumns = implode(', ', $sqlSelectedColumns);
6345 $sqlSelectFrom = $objectTemplate->get_var_sql_forminc__tableSelect();
6346 if (! empty($objectTemplate->_var_from_sql_forminc__tableSelect)) {
6347 $sqlSelectFrom = $objectTemplate->_var_from_sql_forminc__tableSelect;
6348 }
6349 $sqlSelectWhere = '';
6350 if (! empty($sqlfilter)) {
6351 $sqlSelectWhere = "WHERE $sqlfilter";
6352 }
6353 $sqlSelectOrder = $objectTemplate->table." ASC";
6354 if (! empty($sqlOrder)) {
6355 $sqlSelectOrder = $sqlOrder;
6356 }
6357 $sql = sprintf('SELECT %s FROM %s %s ORDER BY %s',
6358 $sqlSelectColumns,
6359 $sqlSelectFrom,
6360 $sqlSelectWhere,
6361 $sqlSelectOrder);
6362
6363 // exécution de la requête
6364 $this->addToLog(__METHOD__."() : sql query: $sql", VERBOSE_MODE);
6365 $res = $this->db->execute($this->db->prepare($sql));
6366 if ($this->isDatabaseError($res, true)) {
6367 $this->addToLog(
6368 __METHOD__."(): erreur SQL sur la table '".$objectTemplate->table."': ".
6369 $res->getMessage(), DEBUG_MODE);
6370 return false;
6371 }
6372
6373 // recuperation des informations sur la structure de la table
6374 // ??? compatibilite POSTGRESQL (len = -1, type vide, flags vide)
6375 $info = $res->tableInfo();
6376
6377 // Recuperation des infos
6378 foreach ($info as $index => $item) {
6379 $objectTemplate->champs[$index] = $item['name'];
6380 $objectTemplate->longueurMax[$index] = $item['len'];
6381 $objectTemplate->type[$index] = $item['type'];
6382 $objectTemplate->flags[$index] = $item['flags'];
6383 }
6384
6385 // création et remplissage des objets
6386 $allObjects = array();
6387 while ($row = $res->fetchRow()) {
6388 $object = new $type(null);
6389 foreach(array('champs', 'longueurMax', 'type', 'flags') as $key) {
6390 $object->$key = $objectTemplate->$key;
6391 }
6392 foreach ($row as $index => $item) {
6393 $object->val[$index] = $item;
6394 }
6395 $allObjects[] = $object;
6396 }
6397
6398 return $allObjects;
6399 }
6400
6401 /**
6402 * Cette méthode permet de transformer une chaine de caractère standard
6403 * en une chaine sans caractères spéciaux ni accents.
6404 *
6405 * NOTE: la convertion est de 1 caractère vers 1 caractères afin de permettre
6406 * à la fonction 'sqlNormalizeSearchValue()' d'effectuer la même conversion.
6407 *
6408 * @param string $string La chaine de caractère à normaliser
6409 *
6410 * @return string La chaine de caractère normalisée
6411 */
6412 public function normalize_string($string = "") {
6413 //
6414 $invalid = array('Š'=>'S', 'š'=>'s', 'Đ'=>'D', 'đ'=>'d', 'Ž'=>'Z',
6415 'ž'=>'z', 'Č'=>'C', 'č'=>'c', 'Ć'=>'C', 'ć'=>'c', 'À'=>'A', 'Á'=>'A',
6416 'Â'=>'A', 'Ã'=>'A', 'Ä'=>'A', 'Å'=>'A', 'Æ'=>'A', 'Ç'=>'C', 'È'=>'E',
6417 'É'=>'E', 'Ê'=>'E', 'Ë'=>'E', 'Ì'=>'I', 'Í'=>'I', 'Î'=>'I', 'Ï'=>'I',
6418 'Ñ'=>'N', 'Ò'=>'O', 'Ó'=>'O', 'Ô'=>'O', 'Õ'=>'O', 'Ö'=>'O', 'Ø'=>'O',
6419 'Ù'=>'U', 'Ú'=>'U', 'Û'=>'U', 'Ü'=>'U', 'Ý'=>'Y', 'Þ'=>'B', 'ß'=>'S',
6420 'à'=>'a', 'á'=>'a', 'â'=>'a', 'ã'=>'a', 'ä'=>'a', 'å'=>'a', 'æ'=>'a',
6421 'ç'=>'c', 'è'=>'e', 'é'=>'e', 'ê'=>'e', 'ë'=>'e', 'ì'=>'i', 'í'=>'i',
6422 'î'=>'i', 'ï'=>'i', 'ð'=>'o', 'ñ'=>'n', 'ò'=>'o', 'ó'=>'o', 'ô'=>'o',
6423 'õ'=>'o', 'ö'=>'o', 'ø'=>'o', 'ù'=>'u', 'ú'=>'u', 'û'=>'u', 'ý'=>'y',
6424 'ý'=>'y', 'þ'=>'b', 'ÿ'=>'y', 'Ŕ'=>'R', 'ŕ'=>'r', "`" => "_",
6425 "„" => "_", "`" => "_", "´" => "_", "“" => "_", "”" => "_",
6426 "{" => "_", "}" => "_", "~" => "_", "–" => "-",
6427 "’" => "_", "(" => "_", ")" => "_", "/"=>"-", "'"=>"_",
6428 );
6429 $string = str_replace(array_keys($invalid), array_values($invalid), $string);
6430 $string = strtolower($string);
6431 return $string;
6432 }
6433
6434 /**
6435 * Transforme une chaine en une suite d'instruction pSQL pour la normaliser.
6436 * En l'occurence cela supprimer les accents et la passe en casse minuscule.
6437 *
6438 * NOTE: la convertion est de 1 caractère vers 1 caractères afin de permettre
6439 * à la fonction 'normalize_string()' d'effectuer la même conversion.
6440 *
6441 * @param string $value Chaîne recherchée à normaliser.
6442 *
6443 * @return string
6444 */
6445 public function sqlNormalizeSearchValue($value){
6446 $value = html_entity_decode($value, ENT_QUOTES);
6447 // échappement des caractères spéciaux
6448 $value = pg_escape_string($value);
6449 // encodage
6450 if (DBCHARSET != 'UTF8' and HTTPCHARSET == 'UTF-8') {
6451 $value = utf8_decode($value);
6452 }
6453 // normalisation des caractères
6454 $value = " TRANSLATE(LOWER(".
6455 $value."::varchar), ".
6456 "'ŠšĐđŽžČčĆćÀÁÂÃÄÅÆÇÈÉÊËÌÍÎÏÑÒÓÔÕÖØÙÚÛÜÝÞßàáâãäåæçèéêëìíîïðñòóôõöøùúûýþÿŔŕ`„´“”{}~–’()/''', ".
6457 "'SsDdZzCcCcAAAAAAACEEEEIIIINOOOOOOUUUUYBSaaaaaaaceeeeiiiionoooooouuuybyRr________-___-_') ";
6458 return $value;
6459 }
6460
6461 /**
6462 * Retourne une valeur unique récupérée à partir d'une requête SQL "basique".
6463 *
6464 * Il faut fournir une (ou deux) valeur filtre qui va sélectionner la ligne à partir
6465 * de laquelle récupérer la valeur souhaitée.
6466 *
6467 * @param string $table La table sur laquelle faire la requête
6468 * @param string $columnSelect La colonne permettant de récupérer la valeur recherchée
6469 * @param string $columnWhere La colonne à laquelle la valeur '$value' va être comparée
6470 * @param string $value La valeur filtre qui permet de sélectionner une ligne
6471 * @param string $extraTable Une table supplémentaire pour tester une seconde valeur
6472 * @param string $extraColumn Une colonne supplémentaire pour tester une seconde valeur
6473 * @param string $extraValue La seconde valeur 'filtre' pour mieux sélectionner une ligne
6474 * @param bool $normalizeColumn Si vaut 'true' alors on normalise la colonne '$columnWhere'
6475 * @param bool $normalizeValue Si vaut 'true' alors on normalise la valeur '$value'
6476 */
6477 public function getSingleSqlValue(
6478 string $table, string $columnSelect, string $columnWhere, string $value,
6479 string $extraTable = null, string $extraColumn = null, string $extraValue = null,
6480 bool $normalizeColumn = true, bool $normalizeValue = true) {
6481
6482 // colonnes utilisées pour la clause WHERE
6483 $columnNormalized = $columnWhere;
6484 if ($normalizeColumn) {
6485 $columnNormalized = $this->sqlNormalizeSearchValue($columnWhere);
6486 }
6487 $valueNormalized = $this->db->escapeSimple($value);
6488 if ($normalizeValue) {
6489 $valueNormalized = $this->db->escapeSimple(strtolower(
6490 $this->normalize_string($value)));
6491 }
6492 // valeur utilisée pour la clause WHERE
6493 if (ctype_digit($value)) {
6494 $columnNormalized = "$table.$table";
6495 $valueNormalized = intval($value);
6496 }
6497
6498 // SQL de base
6499 $sql = sprintf("SELECT $columnSelect FROM ".DB_PREFIXE."$table WHERE %s = '%s'",
6500 $columnNormalized,
6501 $valueNormalized);
6502
6503 // s'il y a une colonne supplémentaire à ajouter à la clause WHERE
6504 if (! empty($extraColumn)) {
6505
6506 // si cette colonne provient d'une autre table, on ajoute cette autre table
6507 $tables = array($table);
6508 if (! empty($extraTable) && $extraTable != $table) {
6509 $tables[] = $extraTable;
6510 }
6511
6512 // construit le SQL avec les deux colonnes dans la clause WHERE
6513 $columnsNormalized = array($columnNormalized, $extraColumn);
6514 $valuesNormalized = array($valueNormalized, $extraValue);
6515 $sql = sprintf("SELECT $columnSelect FROM %s WHERE %s",
6516 DB_PREFIXE.implode(', '.DB_PREFIXE, $tables),
6517 implode(' AND ', array_map(
6518 function ($col, $val) {
6519 return "$col = '$val'";
6520 },
6521 $columnsNormalized, $valuesNormalized)));
6522 }
6523
6524 // exécute la requête en demandant en résultat une unique valeur
6525 $qres = $this->get_one_result_from_db_query(
6526 $sql,
6527 array(
6528 "origin" => __METHOD__,
6529 "force_return" => true,
6530 )
6531 );
6532
6533 // vérifie les erreurs
6534 if ($qres["code"] !== "OK") {
6535 throw new RuntimeException(__("Erreur de base de données.").' '.
6536 sprintf(__("Détails: %s"), $qres["message"]));
6537 }
6538 // si la ligne n'a pas été trouvée
6539 if ($qres["result"] === null) {
6540 throw new InvalidArgumentException(__(
6541 "L'objet $table '$valueNormalized' n'existe pas."));
6542 }
6543
6544 // renvoie la valeur trouvée
6545 return $qres["result"];
6546 }
6547
6548 /**
6549 * Vérifie si la saisie du numéro complet respecte la numérotation
6550 * réglementaire d'un dossier d'urbanisme (code de l'urbanisme A423-1 à A423-4)
6551 * et renvoie les différents éléments constituant du numéro de dossier.
6552 *
6553 * Attention: cette fonction pourrait confondre un code entité avec un suffixe,
6554 * c'est pourquoi il est nécessaire de supprimer tout code entité
6555 * d'un numéro de dossier avant de le passer à cette fonction.
6556 *
6557 * @param string $numero identifiant du dossier
6558 * @param bool $espaces si 'true' accepte les espaces, sinon non
6559 * @return array ['di' => [...], 'da' => [...]] contenant les éléments
6560 */
6561 public function numerotation_urbanisme(string $numero, bool $espaces = false) {
6562 // Masques
6563 $blank = $espaces ? '\s' : '';
6564 $base = '(?P<type>[A-Z]{2,3})'.$blank.
6565 '(?P<departement>[0-9]{3}|02[AB])(?P<commune>[0-9]{3})'.$blank.
6566 '(?P<annee>[0-9]{2})'.$blank.
6567 '(?P<division>[A-Z0-9])(?P<numero>[0-9]{4})';
6568 $pattern_di = "/^$base(?P<suffixe>[A-Z]{1,5})?(?P<num_suffixe>[0-9]{1,2})?$/i";
6569 $pattern_da = "/^$base$/i";
6570
6571 $result = array(
6572 "di" => array(),
6573 "da" => array(),
6574 );
6575
6576 if (preg_match($pattern_di, $numero, $matches_di) === 1) {
6577 $result["di"] = $matches_di;
6578 $numero = $matches_di['type'].$matches_di['departement'].$matches_di['commune'].
6579 $matches_di['annee'].$matches_di['division'].$matches_di['numero'];
6580 }
6581 if (preg_match($pattern_da, $numero, $matches_da) === 1) {
6582 $result["da"] = $matches_da;
6583 }
6584
6585 return $result;
6586 }
6587
6588 /**
6589 * Vérifie si un formulaire est ouvert dans le contexte d'un
6590 * dossier d'instruction. Pour cela vérifiesi le paramètre retourformulaire
6591 * prend une de ces valeurs :
6592 * - dossier_instruction
6593 * - dossier_instruction_mes_encours
6594 * - dossier_instruction_tous_encours
6595 * - dossier_instruction_mes_clotures
6596 * - dossier_instruction_tous_clotures
6597 * - dossier_contentieux_mes_infractions
6598 * - dossier_contentieux_toutes_infractions
6599 * - dossier_contentieux_mes_recours
6600 * - dossier_contentieux_tous_recours
6601 * - sous_dossier
6602 *
6603 * /!\ Pour l'affichage des références cadastrales dans le formulaire de modification
6604 * d'un dossier d'instruction cette condition est aussi utilisée mais en javascript.
6605 * Si cette méthode est modifiée il faut également aller modifier les conditions
6606 * dans app/js/script.js (~l1580)
6607 *
6608 * @return boolean
6609 */
6610 public function contexte_dossier_instruction() {
6611 $retourformulaire = $this->get_submitted_get_value("retourformulaire");
6612
6613 if ($retourformulaire == 'dossier_instruction' ||
6614 $retourformulaire == 'dossier_instruction_mes_encours' ||
6615 $retourformulaire == 'dossier_instruction_tous_encours' ||
6616 $retourformulaire == 'dossier_instruction_mes_clotures' ||
6617 $retourformulaire == 'dossier_instruction_tous_clotures' ||
6618 $retourformulaire == 'dossier_contentieux_mes_infractions' ||
6619 $retourformulaire == 'dossier_contentieux_toutes_infractions' ||
6620 $retourformulaire == "dossier_contentieux_mes_recours" ||
6621 $retourformulaire == "dossier_contentieux_tous_recours" ||
6622 $retourformulaire == "sous_dossier") {
6623 return true;
6624 }
6625 return false;
6626 }
6627
6628 /**
6629 * Calcule l'id d'un sous-formulaire d'un objet donné. Pour cela
6630 * récupère le fichier de paramétrage de l'objet (.inc) pour accéder
6631 * à la variable de paramétrage des sous-formulaires.
6632 * Vérifie pour chacun des formulaires paramétrés si l'utilisateur à
6633 * les permissions nécessaires pour y accéder. A partir de ces
6634 * informations calcule l'identifiant du sous-onglet.
6635 *
6636 * @param string nom du formulaire auquel appartiens le sous-formulaire
6637 * @return integer identifiant du sus-formulaire
6638 */
6639 public function get_ui_tabs($obj, $direct_field, $direct_form, $direct_action, $direct_idx) {
6640 $tabs_id = 1;
6641 // Rétrocompatibilité : il est possible que dans les scripts inclus
6642 // par cette méthode, la variable $f soit attendue et utilisée.
6643 // @deprecated Cette variable ne doit plus être utilisée.
6644 $f = $this;
6645
6646 // Initialisation des paramètres
6647 $params = array(
6648 // action sur l'objet parent
6649 "action" => array(
6650 "default_value" => "",
6651 ),
6652 // (optionnel) soit idx soit direct_field : identifiant de
6653 // l'objet contexte
6654 "idx" => array(
6655 "default_value" => "",
6656 )
6657 );
6658 foreach ($this->get_initialized_parameters($params) as $key => $value) {
6659 ${$key} = $value;
6660 }
6661 // Vérification des paramètres obligatoires
6662 if (empty($obj)
6663 || empty($action)
6664 || (empty($idx) && empty($direct_field))
6665 || empty($direct_form)
6666 || empty($direct_action)
6667 || empty($direct_idx)) {
6668
6669 return $tabs_id;
6670 }
6671 // Inclusion du script [sql/<OM_DB_PHPTYPE>/<OBJ>.inc.php]
6672 // L'objectif est de récupéré la liste des onglets pour extraire
6673 // l'identifiant de l'onglet sélectionné
6674 // - Variable utilisée $sousformulaire
6675 $standard_script_path = "../sql/".OM_DB_PHPTYPE."/".$obj.".inc.php";
6676 $core_script_path = PATH_OPENMAIRIE."sql/".OM_DB_PHPTYPE."/".$obj.".inc.php";
6677 $gen_script_path = "../gen/sql/".OM_DB_PHPTYPE."/".$obj.".inc.php";
6678 $custom_script_path = $this->get_custom("tab", $obj);
6679
6680 if ($custom_script_path !== null) {
6681 require_once $custom_script_path;
6682 } elseif (file_exists($standard_script_path) === false
6683 && file_exists($core_script_path) === true) {
6684 require_once $core_script_path;
6685 } elseif (file_exists($standard_script_path) === false
6686 && file_exists($gen_script_path) === true) {
6687 require_once $gen_script_path;
6688 } elseif (file_exists($standard_script_path) === true) {
6689 require $standard_script_path;
6690 }
6691
6692 if (empty($sousformulaire)) {
6693 return $tabs_id;
6694 }
6695
6696 foreach ($sousformulaire as $sousform) {
6697 $droit = array($sousform, $sousform."_tab");
6698
6699 if ($this->isAccredited($droit, "OR")) {
6700 if ($sousform == $direct_form) {
6701 break;
6702 }
6703 $tabs_id++;
6704 }
6705 }
6706 return $tabs_id;
6707 }
6708
6709
6710 /**
6711 * Récupère une requête sql et renvoie les éléments nécessaires
6712 * pour ajouter le filtrage de des groupes à cette requête.
6713 * Renvoie ces éléments sous la forme d'un tableau associatif
6714 * ex : array(
6715 * ['FROM'] => 'LEFT JOIN ...',
6716 * ['WHERE'] => '...'
6717 * );
6718 *
6719 * @param string requête sql à faire évoluer
6720 * @return array
6721 */
6722 public function get_sql_filtre_groupe($sql = '') {
6723 $sqlCplmt = array(
6724 'FROM' => '',
6725 'WHERE' => ''
6726 );
6727
6728 // Tableau temporaire contenant les clauses pour chaque groupe
6729 $group_clause = array();
6730 foreach ($_SESSION["groupe"] as $key => $value) {
6731 $group_clause[$key] = "(groupe.code = '".$key."'";
6732 if($value["confidentiel"] !== true) {
6733 $group_clause[$key] .= " AND dossier_autorisation_type.confidentiel IS NOT TRUE";
6734 }
6735 $group_clause[$key] .= ")";
6736 }
6737 // Ajout du cas ou le code du groupe est null
6738 $group_clause['EMPTY'] = '(groupe.code IS NULL AND dossier_autorisation_type.confidentiel IS NOT TRUE)';
6739 // Mise en chaîne des clauses
6740 $conditions = implode(" OR ", $group_clause);
6741 if ($conditions !== "") {
6742 // On ajout le WHERE si il n'est pas présent
6743 if (stripos($sql, "WHERE") === false) {
6744 $sqlCplmt['WHERE'] .= "WHERE ";
6745 } else {
6746 $sqlCplmt['WHERE'] .= " AND ";
6747 }
6748
6749 $sqlCplmt['WHERE'] .= "(".$conditions.")";
6750 }
6751
6752
6753 // Jointures manquantes dans la requête d'origine qui devront être ajouté
6754 // dans la requête complémentaire
6755 if (preg_match("/".DB_PREFIXE."dossier_autorisation(?!_)/i", $sql) === 0) {
6756 $sqlCplmt['FROM'] .= "
6757 LEFT JOIN ".DB_PREFIXE."dossier_autorisation
6758 ON dossier_autorisation.dossier_autorisation = dossier.dossier_autorisation";
6759 }
6760 if (preg_match("/".DB_PREFIXE."dossier_autorisation_type_detaille(?!_)/i", $sql) === 0) {
6761 $sqlCplmt['FROM'] .= "
6762 LEFT JOIN ".DB_PREFIXE."dossier_autorisation_type_detaille
6763 ON dossier_autorisation.dossier_autorisation_type_detaille = dossier_autorisation_type_detaille.dossier_autorisation_type_detaille";
6764 }
6765 if (preg_match("/".DB_PREFIXE."dossier_autorisation_type(?!_)/i", $sql) === 0) {
6766 $sqlCplmt['FROM'] .= "
6767 LEFT JOIN ".DB_PREFIXE."dossier_autorisation_type
6768 ON dossier_autorisation_type.dossier_autorisation_type = dossier_autorisation_type_detaille.dossier_autorisation_type";
6769 }
6770 if (preg_match("/".DB_PREFIXE."groupe(?!_)/i", $sql) === 0) {
6771 $sqlCplmt['FROM'] .= "
6772 LEFT JOIN ".DB_PREFIXE."groupe
6773 ON dossier_autorisation_type.groupe = groupe.groupe";
6774 }
6775
6776 return $sqlCplmt;
6777 }
6778
6779 /**
6780 * Récupère une requête sql et renvoie les éléments nécessaires
6781 * pour ajouter le filtrage de des groupes à cette requête.
6782 * Renvoie ces éléments sous la forme d'un tableau associatif
6783 * ex : array(
6784 * ['FROM'] => 'LEFT JOIN ...',
6785 * ['WHERE'] => '...'
6786 * );
6787 *
6788 * @param string requête sql à faire évoluer
6789 * @return array
6790 */
6791 public function get_sql_filtre_sous_dossier($sql = '') {
6792 $sqlCplmt = array(
6793 'FROM' => '',
6794 'WHERE' => ''
6795 );
6796 // On ajout le WHERE si il n'est pas présent
6797 $sqlCplmt['WHERE'] = ' AND dossier_instruction_type.sous_dossier IS NOT TRUE';
6798 if (stripos($sql, "WHERE") === false) {
6799 $sqlCplmt['WHERE'] = 'WHERE dossier_instruction_type.sous_dossier IS NOT TRUE';
6800 }
6801 // Jointures manquantes dans la requête d'origine qui devront être ajouté
6802 // dans la requête complémentaire
6803 if (preg_match("/".DB_PREFIXE."dossier_instruction_type(?!_)/i", $sql) === 0 ||
6804 preg_match("/".DB_PREFIXE."dossier_instruction_type(?!_)\s*(as|AS)/i", $sql) !== 0) {
6805 $sqlCplmt['FROM'] .= "
6806 LEFT JOIN ".DB_PREFIXE."dossier_instruction_type
6807 ON dossier.dossier_instruction_type = dossier_instruction_type.dossier_instruction_type";
6808 }
6809
6810 return $sqlCplmt;
6811 }
6812
6813 /**
6814 * Récupère le code entité de la collectivité passé en paramètre ou de la
6815 * collectivité de l'utilisateur connecté.
6816 *
6817 * @param string $om_collectivite Identifiant de la collectivité
6818 *
6819 * @return string Code entité ou null
6820 */
6821 public function get_collectivite_code_entite($om_collectivite = null) {
6822 // Récupération des paramètres de la collectivité voulu
6823 $parameters = $this->getCollectivite($om_collectivite);
6824 //
6825 return isset($parameters['code_entite']) === true && empty($parameters['code_entite']) === false ? strval(trim($parameters['code_entite'])) : null;
6826 }
6827
6828 /**
6829 * Surcharge du "core" pour pouvoir utiliser une surcharge de l'abstracteur
6830 * du connecteur de stockage.
6831 */
6832 function setFilestorage() {
6833 $this->storage = false;
6834 if ($this->setFilestorageConfig()) {
6835 // surchage du "core"
6836 require_once __DIR__.'/om_filestorage.class.php';
6837 $this->storage = new om_filestorage($this->filestorage_config);
6838 }
6839 }
6840
6841 /**
6842 * Permet de remplacer les espaces insécables par des espaces sécables
6843 * pour la valeur d'un champ texte.
6844 *
6845 * @param string $value Valeur à traiter
6846 * @return string la valeur avec des espaces sécables
6847 */
6848 function replace_non_breaking_space($value) {
6849 return preg_replace("/ |&nbsp;/", ' ', $value);
6850 }
6851
6852 /**
6853 * Retourne la valeur du champ de l'element de la table passée en paramètre.
6854 *
6855 * @param string $table Table de l'element.
6856 * @param mixed $id Identifiant de l'element.
6857 * @param string $field Nom du champ dont la valeur est à récupérer.
6858 *
6859 * @return string Valeur du champ de l'element ou false si l'element n'existe pas.
6860 */
6861 public function get_value_of_element($table, $id, $field) {
6862 $instance = $this->get_inst__om_dbform(array(
6863 "obj" => $table,
6864 "idx" => $id,
6865 ));
6866 // Si l'élément existe et que le champ existe
6867 if ($instance->exists() === true
6868 && in_array($field, $instance->champs)) {
6869 //
6870 return $instance->getVal($field);
6871 }
6872 return false;
6873 }
6874 }

Properties

Name Value
svn:keywords "Id"

[email protected]
ViewVC Help
Powered by ViewVC 1.1.26