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

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

Parent Directory Parent Directory | Revision Log Revision Log


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

Properties

Name Value
svn:keywords "Id"

[email protected]
ViewVC Help
Powered by ViewVC 1.1.26