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

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

Parent Directory Parent Directory | Revision Log Revision Log


Revision 15650 - (show annotations)
Thu Aug 31 17:29:39 2023 UTC (17 months ago) by softime
File size: 253165 byte(s)
chore(branch): fusion de la branche d'intégration 6.0.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 (count($qres['result']) > 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ètrage de l'option
2331 * option_notification
2332 *
2333 * @return boolean
2334 */
2335 public function get_parametre_notification_url_acces($om_collectivite=null) {
2336 //
2337 $parameters = $this->getCollectivite($om_collectivite);
2338 //
2339 if (isset($parameters['parametre_notification_url_acces']) === true) {
2340 return $parameters['parametre_notification_url_acces'];
2341 }
2342 //
2343 return null;
2344 }
2345
2346 /**
2347 * Permet de récupérer le paramètre 'param_base_path_metadata_url_di'
2348 *
2349 * @param integer $om_collectivite Identifiant de la collectivité.
2350 * @return mixed Chaine de caractères ou null
2351 */
2352 public function get_param_base_path_metadata_url_di($om_collectivite=null) {
2353 //
2354 $parameters = $this->getCollectivite($om_collectivite);
2355 //
2356 if (isset($parameters['param_base_path_metadata_url_di']) === true) {
2357 return $parameters['param_base_path_metadata_url_di'];
2358 }
2359 //
2360 return null;
2361 }
2362
2363 /**
2364 * Permet de récupérer le paramètre 'portal_code_suivi_base_url'.
2365 *
2366 * @param integer $om_collectivite Identifiant de la collectivité.
2367 * @return mixed Chaine de caractères ou null.
2368 */
2369 public function get_portal_code_suivi_base_url($om_collectivite=null) {
2370 //
2371 $parameters = $this->getCollectivite($om_collectivite);
2372 //
2373 if (isset($parameters['portal_code_suivi_base_url']) === true
2374 && $parameters['portal_code_suivi_base_url'] !== null
2375 && $parameters['portal_code_suivi_base_url'] !== '') {
2376 //
2377 return $parameters['portal_code_suivi_base_url'];
2378 }
2379 //
2380 return null;
2381 }
2382
2383 /**
2384 * Méthode permettant de récupérer le corps et le titre du mail de notification
2385 * selon le type de notification voulu.
2386 *
2387 * @return boolean
2388 */
2389 public function get_notification_parametre_courriel_type($om_collectivite=null, $typeNotification = 'notification_demandeur') {
2390 $paramDefaut = array(
2391 'parametre_courriel_type_titre' => __("[openADS] Notification concernant votre dossier [DOSSIER]"),
2392 'parametre_courriel_type_message' => __("Bonjour, veuillez prendre connaissance du(des) document(s) suivant(s) :<br>[LIEN_TELECHARGEMENT_DOCUMENT]<br>[LIEN_TELECHARGEMENT_ANNEXE]"),
2393 );
2394 // Il existe 3 type de notification des demandeurs. Si la notification voulu appartiens a un de ces 3 types
2395 // alors ce sont les paramétre de la notification des demandeurs qui doivent être récupéré
2396 if (in_array($typeNotification, array('notification_instruction', 'notification_recepisse', 'notification_decision'))) {
2397 $typeNotification = 'notification_demandeur';
2398 }
2399 // Construit le nom de la méthode selon le type de notification
2400 // si la méthode existe elle est appellé sinon on renvoie le message défini par défaut
2401 $method = sprintf('get_%1$s_parametre_courriel_type', $typeNotification);
2402 if (method_exists($this, $method)) {
2403 $param = $this->$method($om_collectivite);
2404 // Si le titre du message n'a pas été récupéré c'est le titre par défaut qui est utilisé
2405 $param['parametre_courriel_type_titre'] =
2406 ! array_key_exists('parametre_courriel_type_titre', $param) ?
2407 $paramDefaut['parametre_courriel_type_titre'] :
2408 $param['parametre_courriel_type_titre'];
2409 // Si le corps du message n'a pas été récupéré c'est le titre par défaut qui est utilisé
2410 $param['parametre_courriel_type_message'] =
2411 ! array_key_exists('parametre_courriel_type_message', $param) ?
2412 $paramDefaut['parametre_courriel_type_message'] :
2413 $param['parametre_courriel_type_message'];
2414 return $param;
2415 }
2416 return $paramDefaut;
2417 }
2418
2419 /**
2420 * Permet de récupérer les phrases types composant la notification aux pétitionnaires.
2421 *
2422 * @param integer $om_collectivite Identifiant de la collectivité.
2423 *
2424 * @return array Tableau contenant les phrases types.
2425 */
2426 private function get_notification_demandeur_parametre_courriel_type($om_collectivite = null) {
2427 // Phrases types par défaut
2428 $result = array();
2429 // Récupération des paramètres
2430 $parameters = $this->getCollectivite($om_collectivite);
2431 // Vérification de l'existance des paramètres titre et message
2432 if (isset($parameters['parametre_courriel_type_message']) === true
2433 && $parameters['parametre_courriel_type_message'] !== null
2434 && $parameters['parametre_courriel_type_message'] !== '') {
2435 //
2436 $result['parametre_courriel_type_message'] = $parameters['parametre_courriel_type_message'];
2437 }
2438 if (isset($parameters['parametre_courriel_type_titre']) === true
2439 && $parameters['parametre_courriel_type_titre'] !== null
2440 && $parameters['parametre_courriel_type_titre'] !== '') {
2441 //
2442 $result['parametre_courriel_type_titre'] = $parameters['parametre_courriel_type_titre'];
2443 }
2444 //
2445 return $result;
2446 }
2447
2448 /**
2449 * Permet de récupérer les phrases types composant la notification aux services
2450 * consultés.
2451 *
2452 * @param integer $om_collectivite Identifiant de la collectivité.
2453 *
2454 * @return array Tableau contenant les phrases types.
2455 */
2456 private function get_notification_service_consulte_parametre_courriel_type($om_collectivite = null) {
2457 // Phrases types par défaut
2458 $result = array();
2459 // Récupération des paramètres
2460 $parameters = $this->getCollectivite($om_collectivite);
2461 // Vérification de l'existance des paramètres titre et message
2462 if (isset($parameters['parametre_courriel_service_type_message']) === true
2463 && $parameters['parametre_courriel_service_type_message'] !== null
2464 && $parameters['parametre_courriel_service_type_message'] !== '') {
2465 //
2466 $result['parametre_courriel_type_message'] = $parameters['parametre_courriel_service_type_message'];
2467 }
2468 if (isset($parameters['parametre_courriel_service_type_titre']) === true
2469 && $parameters['parametre_courriel_service_type_titre'] !== null
2470 && $parameters['parametre_courriel_service_type_titre'] !== '') {
2471 //
2472 $result['parametre_courriel_type_titre'] = $parameters['parametre_courriel_service_type_titre'];
2473 }
2474 //
2475 return $result;
2476 }
2477
2478 /**
2479 * Permet de récupérer les phrases types composant la notification aux tiers consultés.
2480 *
2481 * @param integer $om_collectivite Identifiant de la collectivité.
2482 *
2483 * @return array Tableau contenant les phrases types.
2484 */
2485 private function get_notification_tiers_consulte_parametre_courriel_type($om_collectivite = null) {
2486 // Phrases types par défaut
2487 $result = array();
2488 // Récupération des paramètres
2489 $parameters = $this->getCollectivite($om_collectivite);
2490 // Vérification de l'existance des paramètres titre et message
2491 if (isset($parameters['parametre_courriel_tiers_type_message']) === true
2492 && $parameters['parametre_courriel_tiers_type_message'] !== null
2493 && $parameters['parametre_courriel_type_message'] !== '') {
2494 //
2495 $result['parametre_courriel_type_message'] = $parameters['parametre_courriel_tiers_type_message'];
2496 }
2497 if (isset($parameters['parametre_courriel_tiers_type_titre']) === true
2498 && $parameters['parametre_courriel_tiers_type_titre'] !== null
2499 && $parameters['parametre_courriel_tiers_type_titre'] !== '') {
2500 //
2501 $result['parametre_courriel_type_titre'] = $parameters['parametre_courriel_tiers_type_titre'];
2502 }
2503 //
2504 return $result;
2505 }
2506
2507 /**
2508 * Permet de récupérer les phrases types composant la notification automatique du
2509 * dépôt de dossiers dématérialisés.
2510 *
2511 * @param integer $om_collectivite Identifiant de la collectivité.
2512 *
2513 * @return array Tableau contenant les phrases types.
2514 */
2515 private function get_notification_depot_demat_parametre_courriel_type($om_collectivite = null) {
2516 // Phrases types par défaut
2517 $result = array();
2518 // Récupération des paramètres
2519 $parameters = $this->getCollectivite($om_collectivite);
2520 // Vérification de l'existance des paramètres titre et message
2521 if (isset($parameters['param_courriel_de_notification_depot_demat_message']) === true
2522 && $parameters['param_courriel_de_notification_depot_demat_message'] !== null
2523 && $parameters['param_courriel_de_notification_depot_demat_message'] !== '') {
2524
2525 $result['parametre_courriel_type_message'] =
2526 $parameters['param_courriel_de_notification_depot_demat_message'];
2527 }
2528 if (isset($parameters['param_courriel_de_notification_depot_demat_titre']) === true
2529 && $parameters['param_courriel_de_notification_depot_demat_titre'] !== null
2530 && $parameters['param_courriel_de_notification_depot_demat_titre'] !== '') {
2531
2532 $result['parametre_courriel_type_titre'] =
2533 $parameters['param_courriel_de_notification_depot_demat_titre'];
2534 }
2535 return $result;
2536 }
2537
2538 /**
2539 * Permet de récupérer les phrases types composant la notification aux services
2540 * consultés.
2541 *
2542 * @param integer $om_collectivite Identifiant de la collectivité.
2543 *
2544 * @return array Tableau contenant les phrases types.
2545 */
2546 public function get_notification_commune_parametre_courriel_type($om_collectivite = null) {
2547 // Phrases types par défaut
2548 $result = array();
2549 // Récupération des paramètres
2550 $parameters = $this->getCollectivite($om_collectivite);
2551 // Vérification de l'existance des paramètres titre et message
2552 if (isset($parameters['param_courriel_de_notification_commune_modele_depuis_instruction']) === true
2553 && $parameters['param_courriel_de_notification_commune_modele_depuis_instruction'] !== null
2554 && $parameters['param_courriel_de_notification_commune_modele_depuis_instruction'] !== '') {
2555 //
2556 $result['parametre_courriel_type_message'] = $parameters['param_courriel_de_notification_commune_modele_depuis_instruction'];
2557 }
2558 if (isset($parameters['param_courriel_de_notification_commune_objet_depuis_instruction']) === true
2559 && $parameters['param_courriel_de_notification_commune_objet_depuis_instruction'] !== null
2560 && $parameters['param_courriel_de_notification_commune_objet_depuis_instruction'] !== '') {
2561 //
2562 $result['parametre_courriel_type_titre'] = $parameters['param_courriel_de_notification_commune_objet_depuis_instruction'];
2563 }
2564 //
2565 return $result;
2566 }
2567
2568 /**
2569 * Méthode permettant de récupérer le corps et le titre du mail de notification au signataire
2570 *
2571 * @param integer identifiant de la collectivité
2572 *
2573 * @return array tableau à deux entrées :
2574 * - parametre_courriel_type_titre : titre parametré pour les courriels
2575 * - parametre_courriel_type_message : contenu parametré pour les courriels
2576 */
2577 public function get_notification_signataire_parametre_courriel_type($om_collectivite = null) {
2578 // Phrases types par défaut
2579 $result = array(
2580 'parametre_courriel_type_titre' => __("[openADS] Nouveau document à signer pour le dossier [DOSSIER]"),
2581 '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]"),
2582 );
2583 // Récupération des paramètres
2584 $parameters = $this->getCollectivite($om_collectivite);
2585 if (isset($parameters['param_courriel_notification_signataire_type_message']) === true
2586 && $parameters['param_courriel_notification_signataire_type_message'] !== null
2587 && $parameters['param_courriel_notification_signataire_type_message'] !== '') {
2588 //
2589 $result['parametre_courriel_type_message'] = $parameters['param_courriel_notification_signataire_type_message'];
2590 }
2591 if (isset($parameters['param_courriel_notification_signataire_type_titre']) === true
2592 && $parameters['param_courriel_notification_signataire_type_titre'] !== null
2593 && $parameters['param_courriel_notification_signataire_type_titre'] !== '') {
2594 //
2595 $result['parametre_courriel_type_titre'] = $parameters['param_courriel_notification_signataire_type_titre'];
2596 }
2597 //
2598 return $result;
2599 }
2600
2601 /**
2602 * Récupère la liste des mails paramétrés pour l'envoi de notification email aux
2603 * communes
2604 *
2605 * @param integer $om_collectivite Identifiant de la collectivité.
2606 *
2607 * @return array Liste des adresses emails.
2608 */
2609 public function get_param_courriel_de_notification_commune($om_collectivite = null) {
2610 $listeEmail = array();
2611 // Récupération des paramètres
2612 $parameters = $this->getCollectivite($om_collectivite);
2613 // Récupération du contenu du paramèrtre
2614 if (! empty($parameters['param_courriel_de_notification_commune'])) {
2615 $listeEmail = explode("\n", $parameters['param_courriel_de_notification_commune']);
2616 }
2617 return $listeEmail;
2618 }
2619
2620 /**
2621 * Permet de récupérer la limite maximum du nombre d'annexe que l'on peux envoyer
2622 * lors de la notification des pétitionnaires via le paramètre "parametre_notification_max_annexes"
2623 *
2624 * @param integer $om_collectivite Identifiant de la collectivité.
2625 *
2626 * @return int Valeur maximale du nombre d'annexe notifiable
2627 */
2628 public function get_nb_max_annexe($om_collectivite = null) {
2629 $nb_annexe_max = 5;
2630 // Récupération des paramètres
2631 $parameters = $this->getCollectivite($om_collectivite);
2632 // Récupération de la valeur du paramètre 'parametre_notification_max_annexes'
2633 if (!empty($parameters['parametre_notification_max_annexes'])
2634 && is_numeric($parameters['parametre_notification_max_annexes'])) {
2635 // Si l'utilisateur à ajouté et correctement saisi le paramètre "parametre_notification_max_annexes"
2636 // cette valeur devient la nouvelle limite du nombre max d'annexe notifiable
2637 $nb_annexe_max = intVal($parameters['parametre_notification_max_annexes']);
2638 }
2639 return $nb_annexe_max;
2640 }
2641
2642 function is_type_dossier_platau($dossier_autorisation) {
2643 $inst_da = $this->get_inst__om_dbform(array(
2644 "obj" => "dossier_autorisation",
2645 "idx" => $dossier_autorisation,
2646 ));
2647
2648 $inst_datd = $inst_da->get_inst_dossier_autorisation_type_detaille();
2649
2650 if ($inst_datd->getVal('dossier_platau') === true || $inst_datd->getVal('dossier_platau') === 't'){
2651 return true;
2652 }
2653
2654 return false;
2655 }
2656
2657 /**
2658 * Définit si le type de dossier d'instruction est transmissible à Plat'AU.
2659 *
2660 * @param integer $dossier_instruction_type Identifiant du type de dossier d'instruction
2661 *
2662 * @return boolean
2663 */
2664 public function is_dit_transmitted_platau($dossier_instruction_type, $om_collectivite = null) {
2665 $parameters = $this->getCollectivite($om_collectivite);
2666 $inst_dit = $this->get_inst__om_dbform(array(
2667 "obj" => "dossier_instruction_type",
2668 "idx" => $dossier_instruction_type,
2669 ));
2670 // Si le code du type de dossier d'instruction est dans la liste des codes
2671 // identifiés comme transmissibles à Plat'AU grâce au paramètre dit_code__to_transmit__platau
2672 if (isset($parameters['dit_code__to_transmit__platau']) === true) {
2673 $dit_code__to_transmit__platau = explode(";", $parameters['dit_code__to_transmit__platau']);
2674 if (is_array($dit_code__to_transmit__platau) === true) {
2675 $dit_code__to_transmit__platau = array_map('mb_strtolower', $dit_code__to_transmit__platau);
2676 if (in_array(mb_strtolower($inst_dit->getVal('code')), $dit_code__to_transmit__platau, true)) {
2677 // Le type de DI est considéré comme transmissible
2678 return true;
2679 }
2680 }
2681 // Si le code n'est pas renseigné, alors le type de DI n'est pas transmissible
2682 return false;
2683 }
2684 // Si le paramètre n'est pas définit alors tous les types de DI sont considéré comme transmissible
2685 return true;
2686 }
2687
2688 /**
2689 * Vérifie que l'option du lien Google Street View est activée.
2690 *
2691 * @param integer $om_collectivite Identifiant de la collectivité.
2692 *
2693 * @return boolean
2694 */
2695 public function is_option_streetview_enabled($om_collectivite=null) {
2696 //
2697 $parameters = $this->getCollectivite($om_collectivite);
2698 //
2699 if (isset($parameters['option_streetview']) === true
2700 && $parameters['option_streetview'] === 'true') {
2701 //
2702 return true;
2703 }
2704
2705 //
2706 return false;
2707 }
2708
2709 /**
2710 * Vérifie que l'option d'affichage en lecture seule de la date
2711 * de l'événement d'instruction est activée.
2712 *
2713 * @param integer $om_collectivite Identifiant de la collectivité.
2714 *
2715 * @return boolean
2716 */
2717 public function is_option_date_evenement_instruction_lecture_seule($om_collectivite=null) {
2718 //
2719 $parameters = $this->getCollectivite($om_collectivite);
2720 //
2721 if (isset($parameters['option_date_evenement_instruction_lecture_seule']) === true
2722 && $parameters['option_date_evenement_instruction_lecture_seule'] === 'true') {
2723 //
2724 return true;
2725 }
2726
2727 //
2728 return false;
2729 }
2730
2731 /**
2732 * Vérifie que l'option référentiel ERP est activée.
2733 *
2734 * @param integer $om_collectivite Identifiant de la collectivité.
2735 *
2736 * @return boolean
2737 */
2738 public function is_option_geolocalisation_auto_contrainte_enabled($om_collectivite=null) {
2739 //
2740 $parameters = $this->getCollectivite($om_collectivite);
2741 //
2742 if (isset($parameters['option_geolocalisation_auto_contrainte']) === true
2743 && $parameters['option_geolocalisation_auto_contrainte'] === 'true') {
2744 //
2745 return true;
2746 }
2747
2748 //
2749 return false;
2750 }
2751
2752 /**
2753 * Vérifie que l'option de renommage des documents numérisés ajoutés par
2754 * une tâches "add_piece" est activée.
2755 *
2756 * Cette option doit être globale, c'est-à-dire soit sur la collectivité de
2757 * niveau 2, soit désactivée.
2758 *
2759 * @param integer $om_collectivite Identifiant de la collectivité.
2760 *
2761 * @return boolean
2762 */
2763 public function is_option_renommage_document_numerise_tache_enabled($om_collectivite=null) {
2764 //
2765 $parameters = $this->getCollectivite($om_collectivite);
2766 //
2767 if (isset($parameters['option_renommage_document_numerise_tache']) === true
2768 && $parameters['option_renommage_document_numerise_tache'] === 'true') {
2769 //
2770 return true;
2771 }
2772
2773 //
2774 return false;
2775 }
2776
2777 /**
2778 * Vérifie le niveau de la collectivité de l'utilisateur connecté
2779 *
2780 * @return boolean
2781 */
2782 function has_collectivite_multi() {
2783 $idx_multi = $this->get_idx_collectivite_multi();
2784 if (intval($_SESSION['collectivite']) === intval($idx_multi)) {
2785 return true;
2786 }
2787 return false;
2788 }
2789
2790
2791 /**
2792 * Pour un path absolu donné, retourne le relatif à la racine de
2793 * l'application.
2794 *
2795 * @param string $absolute Chemin absolu.
2796 *
2797 * @return mixed Faux si échec sinon chemin relatif.
2798 */
2799 public function get_relative_path($absolute) {
2800 if ($this->get_path_app() === false) {
2801 return false;
2802 }
2803 $path_app = $this->get_path_app();
2804 return str_replace($path_app, '', $absolute);
2805 }
2806
2807
2808 /**
2809 * Retourne le path absolu de la racine de l'application
2810 *
2811 * @return mixed Faux si échec sinon chemin absolu
2812 */
2813 public function get_path_app() {
2814 $match = array();
2815 preg_match( '/(.*)\/[a-zA-Z0-9]+\/\.\.\/core\/$/', PATH_OPENMAIRIE, $match);
2816 // On vérifie qu'il n'y a pas d'erreur
2817 if (isset($match[1]) === false) {
2818 return false;
2819 }
2820 return $match[1];
2821 }
2822
2823 /**
2824 * Compose un tableau et retourne son code HTML
2825 *
2826 * @param string $id ID CSS du conteneur
2827 * @param array $headers entêtes de colonnes
2828 * @param array $rows lignes
2829 * @return string code HTML
2830 */
2831 public function compose_generate_table($id, $headers, $rows) {
2832 //
2833 $html = '';
2834 // Début conteneur
2835 $html .= '<div id="'.$id.'">';
2836 // Début tableau
2837 $html .= '<table class="tab-tab">';
2838 // Début entête
2839 $html .= '<thead>';
2840 $html .= '<tr class="ui-tabs-nav ui-accordion ui-state-default tab-title">';
2841 // Colonnes
2842 $nb_colonnes = count($headers);
2843 $index_last_col = $nb_colonnes - 1;
2844 foreach ($headers as $i => $header) {
2845 if ($i === 0) {
2846 $col = ' firstcol';
2847 }
2848 if ($i === $index_last_col) {
2849 $col = ' lastcol';
2850 }
2851 $html .= '<th class="title col-'.$i.$col.'">';
2852 $html .= '<span class="name">';
2853 $html .= $header;
2854 $html .= '</span>';
2855 $html .= '</th>';
2856 }
2857 // Fin entête
2858 $html .= '</tr>';
2859 $html .= '</thead>';
2860 // Début corps
2861 $html .= '<tbody>';
2862 // Lignes
2863 foreach ($rows as $cells) {
2864 // Début ligne
2865 $html .= '<tr class="tab-data">';
2866 // Cellules
2867 foreach ($cells as $j => $cell) {
2868 if ($j === 0) {
2869 $col = ' firstcol';
2870 }
2871 if ($j === $index_last_col) {
2872 $col = ' lastcol';
2873 }
2874 $html .= '<td class="title col-'.$j.$col.'">';
2875 $html .= '<span class="name">';
2876 $html .= $cell;
2877 $html .= '</span>';
2878 $html .= '</td>';
2879 }
2880 // Fin ligne
2881 $html .= "</tr>";
2882 }
2883 // Fin corps
2884 $html .= '</tbody>';
2885 // Fin tableau
2886 $html .= '</table>';
2887 // Fin conteneur
2888 $html .= '</div>';
2889 //
2890 return $html;
2891 }
2892
2893 /**
2894 * Retourne le login de l'utilisateur connecté + entre parenthèses son nom
2895 * s'il en a un.
2896 *
2897 * @return string myLogin OU myLogin (myName)
2898 */
2899 public function get_connected_user_login_name() {
2900 // Requête et stockage des informations de l'user connecté
2901 $this->getUserInfos();
2902 // Si le nom existe et est défini on le récupère
2903 $nom = "";
2904 if (isset($this->om_utilisateur["nom"])
2905 && !empty($this->om_utilisateur["nom"])) {
2906 $nom = trim($this->om_utilisateur["nom"]);
2907 }
2908 // Définition de l'émetteur : obligatoirement son login
2909 $emetteur = $_SESSION['login'];
2910 // Définition de l'émetteur : + éventuellement son nom
2911 if ($nom != "") {
2912 $emetteur .= " (".$nom.")";
2913 }
2914 // Retour
2915 return $emetteur;
2916 }
2917
2918 /**
2919 * Cette méthode permet d'interfacer le module 'Settings'.
2920 */
2921 function view_module_settings() {
2922 //
2923 require_once "../obj/settings.class.php";
2924 $settings = new settings();
2925 $settings->view_main();
2926 }
2927
2928
2929 /**
2930 * Vérifie que l'option référentiel ERP est activée.
2931 *
2932 * @param integer $om_collectivite Identifiant de la collectivité.
2933 *
2934 * @return boolean
2935 */
2936 public function is_option_referentiel_erp_enabled($om_collectivite=null) {
2937 //
2938 $parameters = $this->getCollectivite($om_collectivite);
2939 //
2940 if (isset($parameters['option_referentiel_erp']) === true
2941 && $parameters['option_referentiel_erp'] === 'true') {
2942 //
2943 return true;
2944 }
2945
2946 //
2947 return false;
2948 }
2949
2950 /**
2951 * Vérifie que l'option d'affichage de la miniature des fichiers est activée.
2952 *
2953 * @param integer $om_collectivite Identifiant de la collectivité.
2954 *
2955 * @return boolean
2956 */
2957 public function is_option_miniature_fichier_enabled($om_collectivite=null) {
2958 //
2959 $parameters = $this->getCollectivite($om_collectivite);
2960 //
2961 if (isset($parameters['option_miniature_fichier']) === true
2962 && $parameters['option_miniature_fichier'] === 'true') {
2963 //
2964 return true;
2965 }
2966
2967 //
2968 return false;
2969 }
2970
2971 /**
2972 * Méthode générique permettant de savoir si une option donnée est active.
2973 *
2974 * @param string $opionName : nom de l'option dans la table om_parametre
2975 * @param string $om_collectivite : identifiant de la collectivite pour laquelle on souhaite vérifier
2976 * l'activation de l'option.
2977 *
2978 * @return boolean
2979 */
2980 public function is_option_enabled(string $optionName, $om_collectivite = null) {
2981 // Récupération des paramètres de la collectivité voulu
2982 $parameters = $this->getCollectivite($om_collectivite);
2983 // Vérification que l'option est active cad qu'elle existe et qu'elle a pour valeur 'true'
2984 return isset($parameters[$optionName]) === true && $parameters[$optionName] === 'true';
2985 }
2986
2987 /**
2988 * Interface avec le référentiel ERP.
2989 */
2990 function send_message_to_referentiel_erp($code, $infos) {
2991 //
2992 require_once "../obj/interface_referentiel_erp.class.php";
2993 $interface_referentiel_erp = new interface_referentiel_erp();
2994 $ret = $interface_referentiel_erp->send_message_to_referentiel_erp($code, $infos);
2995 return $ret;
2996 }
2997
2998 /**
2999 * Récupère la liste des identifiants des collectivités
3000 *
3001 * @param string $return_type 'string' ou 'array' selon que l'on retourne
3002 * respectivement une chaîne ou un tableau
3003 * @param string $separator caractère(s) séparateur(s) employé(s) lorsque
3004 * l'on retourne une chaîne, inutilisé si tableau
3005 * @return mixed possibilité de boolean/string/array :
3006 * false si erreur BDD sinon résultat
3007 */
3008 public function get_list_id_collectivites($return_type = 'string', $separator = ',') {
3009 $qres = $this->get_one_result_from_db_query(
3010 sprintf(
3011 'SELECT
3012 array_to_string(
3013 array_agg(om_collectivite),
3014 \'%2$s\'
3015 ) AS list_id_collectivites
3016 FROM
3017 %1$som_collectivite',
3018 DB_PREFIXE,
3019 $this->db->escapeSimple($separator)
3020 ),
3021 array(
3022 "origin" => __METHOD__,
3023 "force_return" => true,
3024 )
3025 );
3026
3027 if ($qres["code"] !== "OK") {
3028 return false;
3029 }
3030 if ($return_type === 'array') {
3031 return explode($separator, $qres["result"]);
3032 }
3033 return $qres["result"];
3034 }
3035
3036 /**
3037 * Teste si l'utilisateur connecté appartient au groupe indiqué en paramètre
3038 * ou s'il a le goupe bypass.
3039 *
3040 * @param string $groupe Code du groupe : ADS / CTX / CU / RU / ERP.
3041 * @return boolean vrai si utilisateur appartient au groupe fourni
3042 */
3043 public function is_user_in_group($groupe) {
3044 if (isset($_SESSION['groupe']) === true
3045 && (array_key_exists($groupe, $_SESSION['groupe']) === true
3046 || array_key_exists("bypass", $_SESSION['groupe']) === true)) {
3047 return true;
3048 }
3049 return false;
3050 }
3051
3052 /**
3053 * CONDITION - can_user_access_dossiers_confidentiels_from_groupe
3054 *
3055 * Permet de savoir si le type de dossier d'autorisation du dossier courant est
3056 * considéré comme confidentiel ou si l'utilisateur a le groupe bypass.
3057 *
3058 * @param string $groupe Code du groupe : ADS / CTX / CU / RU / ERP.
3059 * @return boolean true si l'utilisateur à accès aux dossiers confidentiels du groupe
3060 * passé en paramètre, sinon false.
3061 *
3062 */
3063 public function can_user_access_dossiers_confidentiels_from_groupe($groupe) {
3064 if ((isset($_SESSION['groupe'][$groupe]['confidentiel']) === true
3065 AND $_SESSION['groupe'][$groupe]['confidentiel'] === true)
3066 || array_key_exists("bypass", $_SESSION['groupe']) === true) {
3067 return true;
3068 }
3069 return false;
3070 }
3071
3072 public function starts_with($haystack, $needle) {
3073 $length = strlen($needle);
3074 return (substr($haystack, 0, $length) === $needle);
3075 }
3076
3077 public function ends_with($haystack, $needle) {
3078 $length = strlen($needle);
3079 if ($length == 0) {
3080 return true;
3081 }
3082 return (substr($haystack, -$length) === $needle);
3083 }
3084
3085 /**
3086 * Récupère le type définit dans la base de données des champs d'une table
3087 * entière ou d'un champs si celui-ci est précisé.
3088 *
3089 * Liste des types BDD :
3090 * - int4
3091 * - varchar
3092 * - bool
3093 * - numeric
3094 * - text
3095 *
3096 * @param string $table Nom de la table.
3097 * @param string $column Nom de la colonne (facultatif).
3098 *
3099 * @return array
3100 */
3101 public function get_type_from_db($table, $column = null) {
3102
3103 $qres = $this->get_all_results_from_db_query(
3104 sprintf('
3105 SELECT
3106 column_name,
3107 udt_name
3108 FROM
3109 information_schema.columns
3110 WHERE
3111 table_schema = \'%1$s\'
3112 AND
3113 table_name = \'%2$s\'
3114 %3$s
3115 ORDER BY
3116 ordinal_position',
3117 str_replace('.', '', DB_PREFIXE),
3118 $table,
3119 // Si une colonne est précisé
3120 ($column !== null || $column !== '') ?
3121 sprintf(" AND column_name = '%s' ", $column) :
3122 ''
3123 ),
3124 array(
3125 "origin" => __METHOD__,
3126 )
3127 );
3128
3129 $list_type = array();
3130 foreach ($qres['result'] as $result) {
3131 $list_type[$result['column_name']] = $result['udt_name'];
3132 }
3133
3134 // Retourne la liste des codes
3135 return $list_type;
3136 }
3137
3138
3139 /**
3140 * Cette méthode permet de récupérer le code de division correspondant
3141 * au dossier sur lequel on se trouve.
3142 *
3143 * Méthode identique à la méthode getDivisionFromDossier() de la classe
3144 * om_dbform à l'exception d'un cas de récupération du numéro de dossier par
3145 * la méthode getVal(). Cette exception permet d'utiliser cette méthode dans
3146 * les scripts instanciant seulement la classe utils tel que les *.inc.php.
3147 *
3148 * @param string $dossier Identifiant du dossier d'instruction.
3149 *
3150 * @return string Code de la division du dossier en cours
3151 */
3152 public function get_division_from_dossier_without_inst($dossier = null) {
3153
3154 // Cette méthode peut être appelée plusieurs fois lors d'une requête.
3155 // Pour éviter de refaire le traitement de recherche de la division
3156 // alors on vérifie si nous ne l'avons pas déjà calculé.
3157 if (isset($this->_division_from_dossier) === true
3158 && $this->_division_from_dossier !== null) {
3159 // Log
3160 $this->addToLog(__METHOD__."() : retour de la valeur déjà calculée - '".$this->_division_from_dossier."'", EXTRA_VERBOSE_MODE);
3161 // On retourne la valeur déjà calculée
3162 return $this->_division_from_dossier;
3163 }
3164
3165 // Récupère le paramétre retourformulaire présent dans l'URL
3166 $retourformulaire = $this->getParameter("retourformulaire");
3167 // Récupère le paramétre idxformulaire présent dans l'URL
3168 $idxformulaire = $this->getParameter("idxformulaire");
3169
3170 // Si le dossier n'est pas passé en paramètre de la méthode
3171 if ($dossier === null) {
3172
3173 // La méthode de récupération du dossier diffère selon le contexte
3174 // du formulaire
3175 if ($retourformulaire === "dossier"
3176 || $this->contexte_dossier_instruction()) {
3177
3178 // Récupère le numéro du dossier depuis le paramètre
3179 // idxformulaire présent dans l'URL
3180 $dossier = $idxformulaire;
3181 }
3182 //
3183 if ($retourformulaire === "lot") {
3184 $inst_lot = $this->get_inst__om_dbform(array(
3185 "obj" => "lot",
3186 "idx" => $idxformulaire,
3187 ));
3188 $dossier = $inst_lot->getVal("dossier");
3189 }
3190 }
3191
3192 // À cette étape si le dossier n'est toujours pas récupéré alors la
3193 // division ne pourra pas être récupérée
3194 if ($dossier === null) {
3195 //
3196 return null;
3197 }
3198
3199 $inst_dossier = $this->get_inst__om_dbform(array(
3200 "obj" => "dossier",
3201 "idx" => $dossier,
3202 ));
3203 $this->_division_from_dossier = $inst_dossier->getVal("division");
3204
3205 //
3206 return $this->_division_from_dossier;
3207
3208 }
3209
3210 /**
3211 *
3212 */
3213 function setDefaultValues() {
3214 $this->addHTMLHeadCss(
3215 array(
3216 "../app/lib/chosen/chosen.min.css",
3217 ),
3218 21
3219 );
3220 $this->addHTMLHeadJs(
3221 array(
3222 "../app/lib/chosen/chosen.jquery.min.js",
3223 ),
3224 21
3225 );
3226
3227 $this->addHTMLHeadCss(
3228 array(
3229 "../app/lib/gridjs/mermaid.min.css",
3230 ),
3231 22
3232 );
3233 $this->addHTMLHeadJs(
3234 array(
3235 "../app/lib/gridjs/gridjs.min.js",
3236 ),
3237 22
3238 );
3239 }
3240
3241
3242 /**
3243 * Permet de définir la configuration des liens du footer.
3244 *
3245 * @return void
3246 */
3247 protected function set_config__footer() {
3248 $footer = array();
3249 // Documentation du site
3250 $footer[] = array(
3251 "title" => __("Documentation"),
3252 "description" => __("Acceder a l'espace documentation de l'application"),
3253 "href" => "http://docs.openmairie.org/?project=openads&version=6.0&format=html&path=manuel_utilisateur",
3254 "target" => "_blank",
3255 "class" => "footer-documentation",
3256 );
3257
3258 // Portail openMairie
3259 $footer[] = array(
3260 "title" => __("openMairie.org"),
3261 "description" => __("Site officiel du projet openMairie"),
3262 "href" => "http://www.openmairie.org/catalogue/openads",
3263 "target" => "_blank",
3264 "class" => "footer-openmairie",
3265 );
3266 //
3267 $this->config__footer = $footer;
3268 }
3269
3270 /**
3271 * Surcharge - set_config__menu().
3272 *
3273 * @return void
3274 */
3275 protected function set_config__menu() {
3276 //
3277 $menu = array();
3278
3279 // {{{ Rubrique AUTORISATION
3280 //
3281 $rubrik = array(
3282 "title" => __("Autorisation"),
3283 "class" => "autorisation",
3284 "right" => "menu_autorisation"
3285 );
3286 //
3287 $links = array();
3288
3289 $links[] = array(
3290 "href" => "".OM_ROUTE_TAB."&obj=dossier_autorisation",
3291 "class" => "dossier_autorisation",
3292 "title" => _("Dossiers d'autorisation"),
3293 "right" => array("dossier_autorisation", "dossier_autorisation_tab", ),
3294 "open" => array("index.php|dossier_autorisation[module=tab]", "index.php|dossier_autorisation[module=form]", ),
3295 );
3296
3297 // Lien vers les dossiers d'autorisations qui ont une demande d'avis
3298 $links[] = array(
3299 "href" => "".OM_ROUTE_TAB."&obj=dossier_autorisation_avis",
3300 "class" => "dossier_autorisation",
3301 "title" => _("Dossiers d'autorisation"),
3302 "right" => array(
3303 "dossier_autorisation_avis",
3304 "dossier_autorisation_avis_tab",
3305 ),
3306 "open" => array("index.php|dossier_autorisation_avis[module=tab]", "index.php|dossier_autorisation[module=form]", ),
3307 );
3308
3309 //
3310 $rubrik['links'] = $links;
3311 //
3312 $menu[] = $rubrik;
3313 // }}}
3314
3315 // {{{ Rubrique GUICHET UNIQUE
3316 //
3317 $rubrik = array(
3318 "title" => _("Guichet Unique"),
3319 "class" => "guichet_unique",
3320 "right" => "menu_guichet_unique",
3321 );
3322 //
3323 $links = array();
3324 //
3325 $links[] = array(
3326 "href" => OM_ROUTE_DASHBOARD,
3327 "class" => "tableau-de-bord",
3328 "title" => _("tableau de bord"),
3329 "right" => "menu_guichet_unique_dashboard",
3330 "open" => array("index.php|[module=dashboard]",),
3331 );
3332 //
3333 $links[] = array(
3334 "class" => "category",
3335 "title" => _("nouvelle demande"),
3336 "right" => array(
3337 "demande",
3338 "demande_nouveau_dossier_ajouter",
3339 "demande_dossier_encours_ajouter", "demande_dossier_encours_tab",
3340 "demande_autre_dossier_ajouter", "demande_autre_dossier_tab",
3341 "demande_consulter","demande_tab",
3342 ),
3343 );
3344 $links[] = array(
3345 "title" => "<hr/>",
3346 "right" => array(
3347 "demande",
3348 "demande_dossier_encours_ajouter",
3349 "demande_dossier_encours_ajouter", "demande_dossier_encours_tab",
3350 ),
3351 );
3352 $links[] = array(
3353 "href" => "".OM_ROUTE_FORM."&obj=demande_nouveau_dossier&amp;action=0&amp;advs_id=&amp;tricol=&amp;valide=&amp;retour=tab&amp;new=",
3354 "class" => "nouveau-dossier",
3355 "title" => _("nouveau dossier"),
3356 "right" => array(
3357 "demande",
3358 "demande_nouveau_dossier_ajouter",
3359 ),
3360 "open" => array("index.php|demande_nouveau_dossier[module=form]",),
3361 );
3362 $links[] = array(
3363 "href" => "".OM_ROUTE_TAB."&obj=demande_dossier_encours",
3364 "class" => "dossier-existant",
3365 "title" => _("dossier en cours"),
3366 "right" => array(
3367 "demande",
3368 "demande_dossier_encours_ajouter",
3369 "demande_dossier_encours_tab",
3370 ),
3371 "open" => array("index.php|demande_dossier_encours[module=tab]", "index.php|demande_dossier_encours[module=form]"),
3372 );
3373 $links[] = array(
3374 "href" => "".OM_ROUTE_TAB."&obj=demande_autre_dossier",
3375 "class" => "autre-dossier",
3376 "title" => _("autre dossier"),
3377 "right" => array(
3378 "demande",
3379 "demande_autre_dossier_ajouter",
3380 "demande_autre_dossier_tab",
3381 ),
3382 "open" => array("index.php|demande_autre_dossier[module=tab]", "index.php|demande_autre_dossier[module=form]"),
3383 );
3384 $links[] = array(
3385 "title" => "<hr/>",
3386 "right" => array(
3387 "demande",
3388 "demande_consulter",
3389 "demande_tab"
3390 ),
3391 );
3392 $links[] = array(
3393 "href" => "".OM_ROUTE_TAB."&obj=demande",
3394 "class" => "pdf",
3395 "title" => _("recepisse"),
3396 "right" => array(
3397 "demande",
3398 "demande_consulter",
3399 "demande_tab"
3400 ),
3401 "open" => array("index.php|demande[module=tab]","index.php|demande[module=form]"),
3402 );
3403 $links[] = array(
3404 "title" => "<hr/>",
3405 "right" => array(
3406 "petitionnaire_frequent",
3407 "petitionnaire_frequent_consulter",
3408 "petitionnaire_frequent_tab"
3409 ),
3410 );
3411 $links[] = array(
3412 "href" => "".OM_ROUTE_TAB."&obj=petitionnaire_frequent",
3413 "class" => "petitionnaire_frequent",
3414 "title" => _("petitionnaire_frequent"),
3415 "right" => array(
3416 "petitionnaire_frequent",
3417 "petitionnaire_frequent_consulter",
3418 "petitionnaire_frequent_tab"
3419 ),
3420 "open" => array("index.php|petitionnaire_frequent[module=tab]","index.php|petitionnaire_frequent[module=form]"),
3421 );
3422 //
3423 $links[] = array(
3424 "class" => "category",
3425 "title" => _("affichage reglementaire"),
3426 "right" => array(
3427 "affichage_reglementaire_registre",
3428 "affichage_reglementaire_attestation",
3429 ),
3430 );
3431 $links[] = array(
3432 "title" => "<hr/>",
3433 "right" => array(
3434 "affichage_reglementaire_registre",
3435 "affichage_reglementaire_attestation",
3436 ),
3437 );
3438 $links[] = array(
3439 "href" => "".OM_ROUTE_FORM."&obj=demande_affichage_reglementaire_registre&action=110&idx=0",
3440 "class" => "affichage_reglementaire_registre",
3441 "title" => _("registre"),
3442 "right" => array(
3443 "affichage_reglementaire_registre",
3444 ),
3445 "open" => array("index.php|demande_affichage_reglementaire_registre[module=tab]", "index.php|demande_affichage_reglementaire_registre[module=form]"),
3446 );
3447 $links[] = array(
3448 "href" => "".OM_ROUTE_FORM."&obj=demande_affichage_reglementaire_attestation&action=120&idx=0",
3449 "class" => "affichage_reglementaire_attestation",
3450 "title" => _("attestation"),
3451 "right" => array(
3452 "affichage_reglementaire_attestation",
3453 ),
3454 "open" => array("index.php|demande_affichage_reglementaire_attestation[module=tab]", "index.php|demande_affichage_reglementaire_attestation[module=form]"),
3455 );
3456 //
3457 $rubrik['links'] = $links;
3458 //
3459 $menu[] = $rubrik;
3460 // }}}
3461
3462 // {{{ Rubrique QUALIFICATION
3463 //
3464 $rubrik = array(
3465 "title" => _("Qualification"),
3466 "class" => "qualification",
3467 "right" => "qualification_menu",
3468 );
3469 //
3470 $links = array();
3471 //
3472 $links[] = array(
3473 "href" => OM_ROUTE_DASHBOARD,
3474 "class" => "tableau-de-bord",
3475 "title" => _("tableau de bord"),
3476 "right" => "menu_qualification_dashboard",
3477 "open" => array("index.php|[module=dashboard]",),
3478 );
3479
3480 //
3481 $links[] = array(
3482 "href" => "".OM_ROUTE_TAB."&obj=dossier_qualifier_qualificateur",
3483 "class" => "dossier_qualifier_qualificateur",
3484 "title" => _("dossiers a qualifier"),
3485 "right" => array(
3486 "dossier_qualifier_qualificateur",
3487 "dossier_qualifier_qualificateur_tab",
3488 ),
3489 "open" => array("index.php|dossier_qualifier_qualificateur[module=tab]", "index.php|dossier_instruction[module=form]", ),
3490 );
3491
3492 //
3493 $rubrik['links'] = $links;
3494 //
3495 $menu[] = $rubrik;
3496 // }}}
3497
3498 // {{{ Rubrique INSTRUCTION
3499 //
3500 $rubrik = array(
3501 "title" => _("instruction"),
3502 "class" => "instruction",
3503 "right" => "menu_instruction",
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_instruction_dashboard",
3513 "open" => array("index.php|[module=dashboard]",),
3514 );
3515 // Catégorie DOSSIERS D'INSTRUCTION
3516 $links[] = array(
3517 "class" => "category",
3518 "title" => _("dossiers d'instruction"),
3519 "right" => array(
3520 "dossier_instruction_mes_encours", "dossier_instruction_mes_encours_tab",
3521 "dossier_instruction_tous_encours", "dossier_instruction_tous_encours_tab",
3522 "dossier_instruction_mes_clotures", "dossier_instruction_mes_clotures_tab",
3523 "dossier_instruction_tous_clotures", "dossier_instruction_tous_clotures_tab",
3524 "dossier_instruction", "dossier_instruction_tab",
3525 "PC_modificatif", "PC_modificatif_tab",
3526 ),
3527 );
3528 $links[] = array(
3529 "title" => "<hr/>",
3530 "right" => array(
3531 "dossier_instruction_mes_encours", "dossier_instruction_mes_encours_tab",
3532 "dossier_instruction_tous_encours", "dossier_instruction_tous_encours_tab",
3533 ),
3534 );
3535 //
3536 $links[] = array(
3537 "href" => "".OM_ROUTE_TAB."&obj=dossier_instruction_mes_encours",
3538 "class" => "dossier_instruction_mes_encours",
3539 "title" => _("mes encours"),
3540 "right" => array("dossier_instruction_mes_encours", "dossier_instruction_mes_encours_tab", ),
3541 "open" => array("index.php|dossier_instruction_mes_encours[module=tab]", "index.php|dossier_instruction_mes_encours[module=form]", ),
3542 );
3543 //
3544 $links[] = array(
3545 "href" => "".OM_ROUTE_TAB."&obj=dossier_instruction_tous_encours",
3546 "class" => "dossier_instruction_tous_encours",
3547 "title" => _("tous les encours"),
3548 "right" => array("dossier_instruction_tous_encours", "dossier_instruction_tous_encours_tab", ),
3549 "open" => array("index.php|dossier_instruction_tous_encours[module=tab]", "index.php|dossier_instruction_tous_encours[module=form]", ),
3550 );
3551 //
3552 $links[] = array(
3553 "title" => "<hr/>",
3554 "right" => array(
3555 "dossier_instruction_mes_clotures", "dossier_instruction_mes_clotures_tab",
3556 "dossier_instruction_tous_clotures", "dossier_instruction_tous_clotures_tab",
3557 ),
3558 );
3559 //
3560 $links[] = array(
3561 "href" => "".OM_ROUTE_TAB."&obj=dossier_instruction_mes_clotures",
3562 "class" => "dossier_instruction_mes_clotures",
3563 "title" => _("mes clotures"),
3564 "right" => array("dossier_instruction_mes_clotures", "dossier_instruction_mes_clotures_tab", ),
3565 "open" => array("index.php|dossier_instruction_mes_clotures[module=tab]", "index.php|dossier_instruction_mes_clotures[module=form]", ),
3566 );
3567 //
3568 $links[] = array(
3569 "href" => "".OM_ROUTE_TAB."&obj=dossier_instruction_tous_clotures",
3570 "class" => "dossier_instruction_tous_clotures",
3571 "title" => _("tous les clotures"),
3572 "right" => array("dossier_instruction_tous_clotures", "dossier_instruction_tous_clotures_tab", ),
3573 "open" => array("index.php|dossier_instruction_tous_clotures[module=tab]", "index.php|dossier_instruction_tous_clotures[module=form]", ),
3574 );
3575 //
3576 $links[] = array(
3577 "title" => "<hr/>",
3578 "right" => array(
3579 "dossier_instruction", "dossier_instruction_tab",
3580 ),
3581 );
3582 //
3583 $links[] = array(
3584 "href" => "".OM_ROUTE_TAB."&obj=dossier_instruction",
3585 "class" => "dossier_instruction_recherche",
3586 "title" => _("recherche"),
3587 "right" => array("dossier_instruction", "dossier_instruction_tab", ),
3588 "open" => array("index.php|dossier_instruction[module=tab]", "index.php|dossier_instruction[module=form]", ),
3589 );
3590
3591 // Catégorier Qualification
3592 $links[] = array(
3593 "class" => "category",
3594 "title" => _("qualification"),
3595 "right" => array("dossier_qualifier", "architecte_frequent",),
3596 );
3597 //
3598 $links[] = array(
3599 "title" => "<hr/>",
3600 "right" => array("dossier_qualifier", "architecte_frequent", ),
3601 );
3602 //
3603 $links[] = array(
3604 "href" => "".OM_ROUTE_TAB."&obj=dossier_qualifier",
3605 "class" => "dossier_qualifier",
3606 "title" => _("dossiers a qualifier"),
3607 "right" => array("dossier_qualifier", "dossier_qualifier_tab", ),
3608 "open" => array("index.php|dossier_qualifier[module=tab]", "index.php|dossier_qualifier[module=form]", ),
3609 );
3610 //
3611 $links[] = array(
3612 "href" => "".OM_ROUTE_TAB."&obj=architecte_frequent",
3613 "class" => "architecte_frequent",
3614 "title" => _("architecte_frequent"),
3615 "right" => array("architecte_frequent", "architecte_frequent_tab", ),
3616 "open" => array("index.php|architecte_frequent[module=tab]", "index.php|architecte_frequent[module=form]", ),
3617 );
3618 // Catégorie CONSULTATIONS
3619 $links[] = array(
3620 "class" => "category",
3621 "title" => _("consultations"),
3622 "right" => array(
3623 "consultation",
3624 "consultation_mes_retours",
3625 "consultation_retours_ma_division",
3626 "consultation_tous_retours",
3627 ),
3628 );
3629 $links[] = array(
3630 "title" => "<hr/>",
3631 "right" => array(
3632 "consultation",
3633 "consultation_mes_retours",
3634 "consultation_retours_ma_division",
3635 "consultation_tous_retours",
3636 ),
3637 );
3638 $links[] = array(
3639 "href" => "".OM_ROUTE_TAB."&obj=consultation_mes_retours",
3640 "class" => "consultation_mes_retours",
3641 "title" => _("Mes retours"),
3642 "right" => array(
3643 "consultation",
3644 "consultation_mes_retours",
3645 "consultation_mes_retours_tab",
3646 ),
3647 "open" => array("index.php|consultation_mes_retours[module=tab]", "index.php|consultation_mes_retours[module=form]", ),
3648 );
3649 $links[] = array(
3650 "href" => "".OM_ROUTE_TAB."&obj=consultation_retours_ma_division",
3651 "class" => "consultation_retours_ma_division",
3652 "title" => _("Retours de ma division"),
3653 "right" => array(
3654 "consultation",
3655 "consultation_retours_ma_division",
3656 "consultation_retours_ma_division_tab",
3657 ),
3658 "open" => array("index.php|consultation_retours_ma_division[module=tab]", "index.php|consultation_retours_ma_division[module=form]", ),
3659 );
3660 $links[] = array(
3661 "href" => "".OM_ROUTE_TAB."&obj=consultation_tous_retours",
3662 "class" => "consultation_tous_retours",
3663 "title" => _("Tous les retours"),
3664 "right" => array(
3665 "consultation_tous_retours",
3666 "consultation_tous_retours_tab",
3667 ),
3668 "open" => array("index.php|consultation_tous_retours[module=tab]", "index.php|consultation_tous_retours[module=form]", ),
3669 );
3670 // Catégorie MESSAGES
3671 $links[] = array(
3672 "class" => "category",
3673 "title" => _("Messages"),
3674 "right" => array(
3675 "messages",
3676 "messages_mes_retours",
3677 "messages_retours_ma_division",
3678 "messages_tous_retours",
3679 ),
3680 );
3681 //
3682 $links[] = array(
3683 "title" => "<hr/>",
3684 "right" => array(
3685 "messages",
3686 "messages_mes_retours",
3687 "messages_retours_ma_division",
3688 "messages_tous_retours",
3689 ),
3690 );
3691 //
3692 $links[] = array(
3693 "href" => "".OM_ROUTE_TAB."&obj=messages_mes_retours",
3694 "class" => "messages_mes_retours",
3695 "title" => _("Mes messages"),
3696 "right" => array(
3697 "messages",
3698 "messages_mes_retours",
3699 "messages_mes_retours_tab",
3700 ),
3701 "open" => array("index.php|messages_mes_retours[module=tab]", "index.php|messages_mes_retours[module=form]", ),
3702 );
3703 //
3704 $links[] = array(
3705 "href" => "".OM_ROUTE_TAB."&obj=messages_retours_ma_division",
3706 "class" => "messages_retours_ma_division",
3707 "title" => _("Messages de ma division"),
3708 "right" => array(
3709 "messages",
3710 "messages_retours_ma_division",
3711 "messages_retours_ma_division_tab",
3712 ),
3713 "open" => array("index.php|messages_retours_ma_division[module=tab]", "index.php|messages_retours_ma_division[module=form]", ),
3714 );
3715 //
3716 $links[] = array(
3717 "href" => "".OM_ROUTE_TAB."&obj=messages_tous_retours",
3718 "class" => "messages_tous_retours",
3719 "title" => _("Tous les messages"),
3720 "right" => array(
3721 "messages",
3722 "messages_tous_retours",
3723 "messages_tous_retours_tab",
3724 ),
3725 "open" => array("index.php|messages_tous_retours[module=tab]", "index.php|messages_tous_retours[module=form]", ),
3726 );
3727 // Catégorie COMMISSIONS
3728 $links[] = array(
3729 "class" => "category",
3730 "title" => _("commissions"),
3731 "right" => array(
3732 "commission_mes_retours",
3733 "commission_mes_retours_tab",
3734 "commission_retours_ma_division",
3735 "commission_retours_ma_division_tab",
3736 "commission_tous_retours",
3737 "commission_tous_retours_tab",
3738 ),
3739 );
3740 $links[] = array(
3741 "title" => "<hr/>",
3742 "right" => array(
3743 "commission_mes_retours",
3744 "commission_mes_retours_tab",
3745 "commission_retours_ma_division",
3746 "commission_retours_ma_division_tab",
3747 "commission_tous_retours",
3748 "commission_tous_retours_tab",
3749 ),
3750 );
3751 $links[] = array(
3752 "href" => "".OM_ROUTE_TAB."&obj=commission_mes_retours",
3753 "class" => "commission_mes_retours",
3754 "title" => _("Mes retours"),
3755 "right" => array(
3756 "commission_mes_retours",
3757 "commission_mes_retours_tab",
3758 ),
3759 "open" => array("index.php|commission_mes_retours[module=tab]", "index.php|commission_mes_retours[module=form]", ),
3760 );
3761 $links[] = array(
3762 "href" => "".OM_ROUTE_TAB."&obj=commission_retours_ma_division",
3763 "class" => "commission_retours_ma_division",
3764 "title" => _("Retours de ma division"),
3765 "right" => array(
3766 "commission_retours_ma_division",
3767 "commission_retours_ma_division_tab",
3768 ),
3769 "open" => array("index.php|commission_retours_ma_division[module=tab]", "index.php|commission_retours_ma_division[module=form]", ),
3770 );
3771 $links[] = array(
3772 "href" => "".OM_ROUTE_TAB."&obj=commission_tous_retours",
3773 "class" => "commission_tous_retours",
3774 "title" => _("Tous les retours"),
3775 "right" => array(
3776 "commission_tous_retours",
3777 "commission_tous_retours_tab",
3778 ),
3779 "open" => array("index.php|commission_tous_retours[module=tab]", "index.php|commission_tous_retours[module=form]", ),
3780 );
3781
3782 //
3783 $rubrik['links'] = $links;
3784 //
3785 $menu[] = $rubrik;
3786 // }}}
3787
3788 // {{{ Rubrique Contentieux
3789 //
3790 $rubrik = array(
3791 "title" => _("Contentieux"),
3792 "class" => "contentieux",
3793 "right" => "menu_contentieux",
3794 );
3795 //
3796 $links = array();
3797 //
3798 $links[] = array(
3799 "href" => OM_ROUTE_DASHBOARD,
3800 "class" => "tableau-de-bord",
3801 "title" => _("tableau de bord"),
3802 "right" => "menu_contentieux_dashboard",
3803 "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]", ),
3804 );
3805 // Catégorie Nouvelle demande
3806 $links[] = array(
3807 "class" => "category",
3808 "title" => _("Nouvelle demande"),
3809 "right" => array(
3810 "demande_nouveau_dossier_contentieux_ajouter",
3811 ),
3812 );
3813 $links[] = array(
3814 "href" => "".OM_ROUTE_FORM."&obj=demande_nouveau_dossier_contentieux&amp;action=0&amp;advs_id=&amp;tricol=&amp;valide=&amp;retour=tab&amp;new=",
3815 "class" => "nouveau-dossier",
3816 "title" => _("nouveau dossier"),
3817 "right" => array(
3818 "demande_nouveau_dossier_contentieux_ajouter",
3819 ),
3820 "open" => array("index.php|demande_nouveau_dossier_contentieux[module=form]",),
3821 );
3822 // Catégorie Recours
3823 $links[] = array(
3824 "class" => "category",
3825 "title" => _("Recours"),
3826 "right" => array(
3827 "dossier_contentieux_mes_recours", "dossier_contentieux_mes_recours_tab",
3828 "dossier_contentieux_tous_recours", "dossier_contentieux_tous_recours_tab",
3829 ),
3830 );
3831 //
3832 $links[] = array(
3833 "href" => "".OM_ROUTE_TAB."&obj=dossier_contentieux_mes_recours",
3834 "class" => "dossier_contentieux_mes_recours",
3835 "title" => _("Mes recours"),
3836 "right" => array("dossier_contentieux_mes_recours", "dossier_contentieux_mes_recours_tab", ),
3837 "open" => array("index.php|dossier_contentieux_mes_recours[module=tab]", "index.php|dossier_contentieux_mes_recours[module=form]", ),
3838 );
3839 $links[] = array(
3840 "href" => "".OM_ROUTE_TAB."&obj=dossier_contentieux_tous_recours",
3841 "class" => "dossier_contentieux_tous_recours",
3842 "title" => _("Tous les recours"),
3843 "right" => array("dossier_contentieux_tous_recours", "dossier_contentieux_tous_recours_tab", ),
3844 "open" => array("index.php|dossier_contentieux_tous_recours[module=tab]", "index.php|dossier_contentieux_tous_recours[module=form]", ),
3845 );
3846 // Catégorie Infractions
3847 $links[] = array(
3848 "class" => "category",
3849 "title" => _("Infractions"),
3850 "right" => array(
3851 "dossier_contentieux_mes_infractions", "dossier_contentieux_mes_infractions_tab",
3852 "dossier_contentieux_toutes_infractions", "dossier_contentieux_toutes_infractions_tab",
3853 ),
3854 );
3855 //
3856 $links[] = array(
3857 "href" => "".OM_ROUTE_TAB."&obj=dossier_contentieux_mes_infractions",
3858 "class" => "dossier_contentieux_mes_infractions",
3859 "title" => _("Mes infractions"),
3860 "right" => array("dossier_contentieux_mes_infractions", "dossier_contentieux_mes_infractions_tab", ),
3861 "open" => array("index.php|dossier_contentieux_mes_infractions[module=tab]", "index.php|dossier_contentieux_mes_infractions[module=form]", ),
3862 );
3863 //
3864 $links[] = array(
3865 "href" => "".OM_ROUTE_TAB."&obj=dossier_contentieux_toutes_infractions",
3866 "class" => "dossier_contentieux_toutes_infractions",
3867 "title" => _("Toutes les infractions"),
3868 "right" => array("dossier_contentieux_toutes_infractions", "dossier_contentieux_toutes_infractions_tab", ),
3869 "open" => array("index.php|dossier_contentieux_toutes_infractions[module=tab]", "index.php|dossier_contentieux_toutes_infractions[module=form]", ),
3870 );
3871 // Catégorie MESSAGES
3872 $links[] = array(
3873 "class" => "category",
3874 "title" => _("Messages"),
3875 "right" => array(
3876 "messages_contentieux",
3877 "messages_contentieux_mes_retours",
3878 "messages_contentieux_retours_ma_division",
3879 "messages_contentieux_tous_retours",
3880 ),
3881 );
3882 //
3883 $links[] = array(
3884 "title" => "<hr/>",
3885 "right" => array(
3886 "messages_contentieux",
3887 "messages_contentieux_mes_retours",
3888 "messages_contentieux_retours_ma_division",
3889 "messages_contentieux_tous_retours",
3890 ),
3891 );
3892 //
3893 $links[] = array(
3894 "href" => "".OM_ROUTE_TAB."&obj=messages_contentieux_mes_retours",
3895 "class" => "messages_contentieux_mes_retours",
3896 "title" => _("Mes messages"),
3897 "right" => array(
3898 "messages_contentieux",
3899 "messages_contentieux_mes_retours",
3900 "messages_contentieux_mes_retours_tab",
3901 ),
3902 "open" => array("index.php|messages_contentieux_mes_retours[module=tab]", "index.php|messages_contentieux_mes_retours[module=form]", ),
3903 );
3904 //
3905 $links[] = array(
3906 "href" => "".OM_ROUTE_TAB."&obj=messages_contentieux_retours_ma_division",
3907 "class" => "messages_contentieux_retours_ma_division",
3908 "title" => _("Messages de ma division"),
3909 "right" => array(
3910 "messages_contentieux",
3911 "messages_contentieux_retours_ma_division",
3912 "messages_contentieux_retours_ma_division_tab",
3913 ),
3914 "open" => array("index.php|messages_contentieux_retours_ma_division[module=tab]", "index.php|messages_contentieux_retours_ma_division[module=form]", ),
3915 );
3916 //
3917 $links[] = array(
3918 "href" => "".OM_ROUTE_TAB."&obj=messages_contentieux_tous_retours",
3919 "class" => "messages_contentieux_tous_retours",
3920 "title" => _("Tous les messages"),
3921 "right" => array(
3922 "messages_contentieux",
3923 "messages_contentieux_tous_retours",
3924 "messages_contentieux_tous_retours_tab",
3925 ),
3926 "open" => array("index.php|messages_contentieux_tous_retours[module=tab]", "index.php|messages_contentieux_tous_retours[module=form]", ),
3927 );
3928
3929
3930 //
3931 $rubrik['links'] = $links;
3932 //
3933 $menu[] = $rubrik;
3934 // }}}
3935
3936 // {{{ Rubrique SUIVI
3937 //
3938 $rubrik = array(
3939 "title" => _("Suivi"),
3940 "class" => "suivi",
3941 "right" => "menu_suivi",
3942 );
3943 //
3944 $links = array();
3945 //
3946 $links[] = array(
3947 "href" => OM_ROUTE_DASHBOARD,
3948 "class" => "tableau-de-bord",
3949 "title" => _("tableau de bord"),
3950 "right" => "menu_suivi_dashboard",
3951 "open" => array("index.php|[module=dashboard]",),
3952 );
3953 $links[] = array(
3954 "class" => "category",
3955 "title" => _("suivi des pieces"),
3956 "right" => array(
3957 "instruction_suivi_retours_de_consultation", "instruction_suivi_mise_a_jour_des_dates",
3958 "instruction_suivi_envoi_lettre_rar", "instruction_suivi_bordereaux",
3959 "instruction_suivi_retours_de_consultation_consulter", "instruction_suivi_mise_a_jour_des_dates_consulter",
3960 "instruction_suivi_envoi_lettre_rar_consulter", "instruction_suivi_bordereaux_consulter",
3961 ),
3962 );
3963 //
3964 $links[] = array(
3965 "title" => "<hr/>",
3966 "right" => array(
3967 "instruction_suivi_retours_de_consultation", "instruction_suivi_mise_a_jour_des_dates",
3968 "instruction_suivi_envoi_lettre_rar", "instruction_suivi_bordereaux",
3969 "instruction_suivi_retours_de_consultation_consulter", "instruction_suivi_mise_a_jour_des_dates_consulter",
3970 "instruction_suivi_envoi_lettre_rar_consulter", "instruction_suivi_bordereaux_consulter",
3971 ),
3972 );
3973 //
3974 $links[] = array(
3975 "title" => "<hr/>",
3976 "right" => array(
3977 "instruction_suivi_mise_a_jour_des_dates", "instruction_suivi_mise_a_jour_des_dates_consulter",
3978 ),
3979 );
3980 //
3981 $links[] = array(
3982 "href" => "".OM_ROUTE_FORM."&obj=instruction_suivi_mise_a_jour_des_dates&action=170&idx=0",
3983 "class" => "suivi_mise_a_jour_des_dates",
3984 "title" => _("Mise a jour des dates"),
3985 "right" => array("instruction_suivi_mise_a_jour_des_dates", "instruction_suivi_mise_a_jour_des_dates_consulter", ),
3986 "open" => array("index.php|instruction_suivi_mise_a_jour_des_dates[module=tab]", "index.php|instruction_suivi_mise_a_jour_des_dates[module=form]"),
3987 );
3988 //
3989 $links[] = array(
3990 "title" => "<hr/>",
3991 "right" => array(
3992 "instruction_suivi_envoi_lettre_rar", "instruction_suivi_envoi_lettre_rar_consulter",
3993 ),
3994 );
3995 //
3996 $links[] = array(
3997 "href" => "".OM_ROUTE_FORM."&obj=instruction_suivi_envoi_lettre_rar&action=160&idx=0",
3998 "class" => "envoi_lettre_rar",
3999 "title" => _("envoi lettre AR"),
4000 "right" => array("instruction_suivi_envoi_lettre_rar", "instruction_suivi_envoi_lettre_rar_consulter", ),
4001 "open" => array("index.php|instruction_suivi_envoi_lettre_rar[module=tab]", "index.php|instruction_suivi_envoi_lettre_rar[module=form]"),
4002 );
4003 //
4004 $links[] = array(
4005 "title" => "<hr/>",
4006 "right" => array(
4007 "instruction_suivi_bordereaux", "instruction_suivi_bordereaux_consulter",
4008 ),
4009 );
4010 //
4011 $links[] = array(
4012 "href" => "".OM_ROUTE_FORM."&obj=instruction_suivi_bordereaux&action=150&idx=0",
4013 "class" => "bordereaux",
4014 "title" => _("Bordereaux"),
4015 "right" => array("instruction_suivi_bordereaux", "instruction_suivi_bordereaux_consulter", ),
4016 "open" => array("index.php|instruction_suivi_bordereaux[module=tab]", "index.php|instruction_suivi_bordereaux[module=form]"),
4017 );
4018 //
4019 $links[] = array(
4020 "href" => "".OM_ROUTE_FORM."&obj=bordereau_envoi_maire&action=190&idx=0",
4021 "class" => "bordereau_envoi_maire",
4022 "title" => _("Bordereau d'envoi au maire"),
4023 "right" => array("instruction_bordereau_envoi_maire","bordereau_envoi_maire"),
4024 "open" => array("index.php|bordereau_envoi_maire[module=form]",),
4025 );
4026 //
4027 $links[] = array(
4028 "class" => "category",
4029 "title" => _("Demandes d'avis"),
4030 "right" => array(
4031 "consultation_suivi_mise_a_jour_des_dates",
4032 "consultation_suivi_retours_de_consultation",
4033 ),
4034 );
4035 //
4036 $links[] = array(
4037 "href" => "".OM_ROUTE_FORM."&obj=consultation&idx=0&action=110",
4038 "class" => "demandes_avis_mise_a_jour_des_dates",
4039 "title" => _("Mise a jour des dates"),
4040 "right" => array("consultation_suivi_mise_a_jour_des_dates", ),
4041 "open" => array("index.php|consultation[module=form][action=110]"),
4042 );
4043 //
4044 $links[] = array(
4045 "href" => "".OM_ROUTE_FORM."&obj=consultation&idx=0&action=120",
4046 "class" => "consultation-retour",
4047 "title" => _("retours de consultation"),
4048 "right" => array("consultation_suivi_retours_de_consultation", ),
4049 "open" => array("index.php|consultation[module=form][action=120]", "index.php|consultation[module=form][action=100]", ),
4050 );
4051 // Catégorie COMMISSIONS
4052 $links[] = array(
4053 "class" => "category",
4054 "title" => _("commissions"),
4055 "right" => array(
4056 "commission",
4057 "commission_tab",
4058 "commission_demandes_passage",
4059 "commission_demandes_passage_tab",
4060 ),
4061 );
4062 //
4063 $links[] = array(
4064 "title" => "<hr/>",
4065 "right" => array(
4066 "commission",
4067 "commission_tab",
4068 "commission_demandes_passage",
4069 "commission_demandes_passage_tab",
4070 ),
4071 );
4072 //
4073 $links[] = array(
4074 "href" => "".OM_ROUTE_TAB."&obj=commission",
4075 "class" => "commissions",
4076 "title" => _("gestion"),
4077 "right" => array(
4078 "commission",
4079 ),
4080 "open" => array("index.php|commission[module=tab]", "index.php|commission[module=form]", ),
4081 );
4082 //
4083 $links[] = array(
4084 "href" => "".OM_ROUTE_TAB."&obj=commission_demandes_passage",
4085 "class" => "commissions-demande-passage",
4086 "title" => _("demandes"),
4087 "right" => array(
4088 "commission",
4089 "commission_demandes_passage",
4090 ),
4091 "open" => array("index.php|commission_demandes_passage[module=tab]", "index.php|commission_demandes_passage[module=form]", ),
4092 );
4093 //
4094 $rubrik['links'] = $links;
4095 //
4096 $menu[] = $rubrik;
4097 // }}}
4098
4099 // {{{ Rubrique DEMANDES D'AVIS
4100 //
4101 $rubrik = array(
4102 "title" => _("Demandes d'avis"),
4103 "class" => "demande_avis",
4104 "right" => "menu_demande_avis",
4105 );
4106 //
4107 $links = array();
4108 //
4109 $links[] = array(
4110 "href" => OM_ROUTE_DASHBOARD,
4111 "class" => "tableau-de-bord",
4112 "title" => _("tableau de bord"),
4113 "right" => "menu_demande_avis_dashboard",
4114 "open" => array("index.php|[module=dashboard]",),
4115 );
4116 //
4117 $links[] = array(
4118 "title" => "<hr/>",
4119 "right" => array(
4120 "demande_avis_encours", "demande_avis_encours_tab",
4121 "demande_avis_passee", "demande_avis_passee_tab",
4122 "demande_avis", "demande_avis_tab",
4123 ),
4124 );
4125 //
4126 $links[] = array(
4127 "href" => "".OM_ROUTE_TAB."&obj=demande_avis_encours",
4128 "class" => "demande_avis_encours",
4129 "title" => _("Demandes en cours"),
4130 "right" => array("demande_avis_encours", "demande_avis_encours_tab", ),
4131 "open" => array("index.php|demande_avis_encours[module=tab]", "index.php|demande_avis_encours[module=form]", ),
4132 );
4133
4134 $links[] = array(
4135 "href" => "".OM_ROUTE_TAB."&obj=demande_avis_passee",
4136 "class" => "demande_avis_passee",
4137 "title" => _("Demandes passees"),
4138 "right" => array("demande_avis_passee", "demande_avis_passee_tab", ),
4139 "open" => array("index.php|demande_avis_passee[module=tab]", "index.php|demande_avis_passee[module=form]", ),
4140 );
4141
4142 $links[] = array(
4143 "href" => "".OM_ROUTE_TAB."&obj=demande_avis",
4144 "class" => "demande_avis",
4145 "title" => _("Exports"),
4146 "right" => array("demande_avis", "demande_avis_tab", ),
4147 "open" => array("index.php|demande_avis[module=tab]", "index.php|demande_avis[module=form]", ),
4148 );
4149
4150 //
4151 $rubrik['links'] = $links;
4152 //
4153 $menu[] = $rubrik;
4154 // }}}
4155
4156
4157 // {{{ Rubrique NUMERISATION
4158 // Condition d'affichage de la rubrique
4159 if (isset($_SESSION['collectivite']) === true
4160 && $this->is_option_suivi_numerisation_enabled() === true) {
4161 //
4162 $rubrik = array(
4163 "title" => __("numerisation"),
4164 "class" => "numerisation",
4165 );
4166 //
4167 $links = array();
4168 //
4169 // --->
4170 $links[] = array(
4171 "class" => "category",
4172 "title" => __("traitement d'un lot"),
4173 "right" => array("num_dossier", "num_dossier_recuperation",
4174 "num_bordereau", "num_bordereau_tab", ) ,
4175 );
4176 //
4177 $links[] = array(
4178 "title" => "<hr/>",
4179 "right" => array("num_dossier_recuperation",
4180 "num_bordereau", "num_bordereau_tab", ) ,
4181 );
4182 //
4183 $links[] = array(
4184 "href" => OM_ROUTE_FORM."&obj=num_dossier_recuperation&idx=0&action=4",
4185 "class" => "num_dossier_recuperation",
4186 "title" => __("récupération du suivi des dossiers"),
4187 "right" => array( "num_dossier_recuperation", ) ,
4188 "open" => array( "index.php|num_dossier_recuperation[module=form]", ),
4189 );
4190 //
4191 $links[] = array(
4192 "title" => "<hr/>",
4193 "right" => array( "num_bordereau", "num_bordereau_tab", ) ,
4194 );
4195 //
4196 $links[] = array(
4197 "href" => OM_ROUTE_TAB."&obj=num_bordereau",
4198 "class" => "num_bordereau",
4199 "title" => __("tous les bordereaux"),
4200 "right" => array( "num_bordereau", "num_bordereau_tab", ),
4201 "open" => array("index.php|num_bordereau[module=tab]", "index.php|num_bordereau[module=form]", ),
4202 );
4203
4204 //
4205 // --->
4206 $links[] = array(
4207 "class" => "category",
4208 "title" => __("suivi dossier"),
4209 "right" => array("num_dossier_recuperation",
4210 "num_dossier", "num_dossier_tab",
4211 "num_dossier_a_attribuer", "num_dossier_a_attribuer_tab",
4212 "num_dossier_a_numeriser", "num_dossier_a_numeriser_tab",
4213 "num_dossier_traite", "num_dossier_traite_tab",
4214 ) ,
4215 );
4216 //
4217 $links[] = array(
4218 "title" => "<hr/>",
4219 "right" => array("num_dossier_recuperation",
4220 "num_dossier", "num_dossier_tab",
4221 "num_dossier_a_attribuer", "num_dossier_a_attribuer_tab",
4222 "num_dossier_a_numeriser", "num_dossier_a_numeriser_tab",
4223 "num_dossier_traite", "num_dossier_traite_tab",
4224 ) ,
4225 );
4226 //
4227 $links[] = array(
4228 "href" => OM_ROUTE_TAB."&obj=num_dossier_a_attribuer",
4229 "class" => "num_dossier_a_attribuer",
4230 "title" => __("num_dossier_a_attribuer"),
4231 "right" => array("num_dossier", "num_dossier_a_attribuer", "num_dossier_a_attribuer_tab",),
4232 "open" => array("index.php|num_dossier_a_attribuer[module=tab]","index.php|num_dossier_a_attribuer[module=form]", ),
4233 );
4234 //
4235 $links[] = array(
4236 "href" => OM_ROUTE_TAB."&obj=num_dossier_a_numeriser",
4237 "class" => "num_dossier_a_numeriser",
4238 "title" => __("num_dossier_a_numeriser"),
4239 "right" => array("num_dossier", "num_dossier_a_numeriser", "num_dossier_a_numeriser_tab",),
4240 "open" => array("index.php|num_dossier_a_numeriser[module=tab]","index.php|num_dossier_a_numeriser[module=form]", ),
4241 );
4242 //
4243 $links[] = array(
4244 "href" => OM_ROUTE_TAB."&obj=num_dossier_traite",
4245 "class" => "num_dossier_traite",
4246 "title" => __("num_dossier_traite"),
4247 "right" => array("num_dossier", "num_dossier_traite", "num_dossier_traite_tab",),
4248 "open" => array("index.php|num_dossier_traite[module=tab]","index.php|num_dossier_traite[module=form]", ),
4249 );
4250 //
4251 $links[] = array(
4252 "title" => "<hr/>",
4253 "right" => array( "num_dossier", "num_dossier_tab",) ,
4254 );
4255 //
4256 $links[] = array(
4257 "href" => OM_ROUTE_TAB."&obj=num_dossier",
4258 "class" => "num_dossier",
4259 "title" => __("tous les dossiers"),
4260 "right" => array("num_dossier", "num_dossier_tab",),
4261 "open" => array("index.php|num_dossier[module=tab]", "index.php|num_dossier[module=form]", ),
4262 );
4263
4264 //
4265 $rubrik['links'] = $links;
4266 //
4267 $menu["menu-rubrik-numerisation"] = $rubrik;
4268 // }}}
4269 }
4270
4271
4272 // Commentaire de la rubrique EXPORT qui n'est pas prévue d'être opérationnelle
4273 // dans cette version
4274 // {{{ Rubrique EXPORT
4275 //
4276 $rubrik = array(
4277 "title" => _("export / import"),
4278 "class" => "edition",
4279 "right" => "menu_export",
4280 );
4281 //
4282 $links = array();
4283
4284 //
4285 $links[] = array(
4286 "href" => "".OM_ROUTE_FORM."&obj=sitadel&action=6&idx=0",
4287 "class" => "sitadel",
4288 "title" => _("export sitadel"),
4289 "right" => "export_sitadel",
4290 "open" => "index.php|sitadel[module=form]",
4291 );
4292 //
4293 $links[] = array(
4294 "href" => "../app/versement_archives.php",
4295 "class" => "versement_archives",
4296 "title" => _("versement aux archives"),
4297 "right" => "versement_archives",
4298 "open" => "versement_archives.php|",
4299 );
4300 //
4301 $links[] = array(
4302 "href" => "../app/reqmo_pilot.php",
4303 "class" => "reqmo",
4304 "title" => _("statistiques a la demande"),
4305 "right" => "reqmo_pilot",
4306 "open" => "reqmo_pilot.php|",
4307 );
4308 //
4309 $links[] = array(
4310 "href" => OM_ROUTE_MODULE_REQMO,
4311 "class" => "reqmo",
4312 "title" => __("requetes memorisees"),
4313 "right" => "reqmo",
4314 "open" => array(
4315 "reqmo.php|",
4316 "index.php|[module=reqmo]",
4317 ),
4318 );
4319 //
4320 $rubrik['links'] = $links;
4321 //
4322 $menu[] = $rubrik;
4323 // }}}
4324
4325
4326 // {{{ Rubrique PARAMETRAGE
4327 //
4328 $rubrik = array(
4329 "title" => _("parametrage dossiers"),
4330 "class" => "parametrage-dossier",
4331 "right" => "menu_parametrage",
4332 );
4333 //
4334 $links = array();
4335 //
4336 $links[] = array(
4337 "class" => "category",
4338 "title" => _("dossiers"),
4339 "right" => array(
4340 "dossier_autorisation_type", "dossier_autorisation_type_tab",
4341 "dossier_autorisation_type_detaille",
4342 "dossier_autorisation_type_detaille_tab", "dossier_instruction_type",
4343 "dossier_instruction_type_tab", "cerfa", "cerfa_tab",
4344 ),
4345 );
4346 //
4347 $links[] = array(
4348 "title" => "<hr/>",
4349 "right" => array(
4350 "cerfa", "cerfa_tab",
4351 ),
4352 );
4353 //
4354 $links[] = array(
4355 "href" => "".OM_ROUTE_TAB."&obj=cerfa",
4356 "class" => "cerfa",
4357 "title" => _("cerfa"),
4358 "right" => array("cerfa", "cerfa_tab", ),
4359 "open" => array("index.php|cerfa[module=tab]", "index.php|cerfa[module=form]", ),
4360 );
4361 //
4362 $links[] = array(
4363 "title" => "<hr/>",
4364 "right" => array(
4365 "dossier_autorisation_type", "dossier_autorisation_type_tab",
4366 "dossier_autorisation_type_detaille",
4367 "dossier_autorisation_type_detaille_tab", "dossier_instruction_type",
4368 "dossier_instruction_type_tab",
4369 ),
4370 );
4371 //
4372 $links[] = array(
4373 "href" => "".OM_ROUTE_TAB."&obj=dossier_autorisation_type",
4374 "class" => "dossier_autorisation_type",
4375 "title" => _("type DA"),
4376 "right" => array("dossier_autorisation_type", "dossier_autorisation_type_tab", ),
4377 "open" => array("index.php|dossier_autorisation_type[module=tab]", "index.php|dossier_autorisation_type[module=form]", ),
4378 );
4379 //
4380 $links[] = array(
4381 "href" => "".OM_ROUTE_TAB."&obj=dossier_autorisation_type_detaille",
4382 "class" => "dossier_autorisation_type_detaille",
4383 "title" => _("type DA detaille"),
4384 "right" => array("dossier_autorisation_type_detaille", "dossier_autorisation_type_detaille_tab", ),
4385 "open" => array("index.php|dossier_autorisation_type_detaille[module=tab]", "index.php|dossier_autorisation_type_detaille[module=form]", ),
4386 );
4387 //
4388 $links[] = array(
4389 "href" => "".OM_ROUTE_TAB."&obj=dossier_instruction_type",
4390 "class" => "dossier_instruction_type",
4391 "title" => _("type DI"),
4392 "right" => array("dossier_instruction_type", "dossier_instruction_type_tab", ),
4393 "open" => array("index.php|dossier_instruction_type[module=tab]", "index.php|dossier_instruction_type[module=form]", ),
4394 );
4395 // Famille et Nature de travaux
4396 $links[] = array(
4397 "title" => "<hr/>",
4398 "right" => array(
4399 "famille_travaux", "famille_travaux_tab",
4400 "nature_travaux", "nature_travaux_tab",
4401 ),
4402 );
4403 //
4404 $links[] = array(
4405 "href" => "".OM_ROUTE_TAB."&obj=famille_travaux",
4406 "class" => "famille_travaux",
4407 "title" => __("Famille des travaux"),
4408 "right" => array("famille_travaux", "famille_travaux_tab", ),
4409 "open" => array(
4410 "index.php|famille_travaux[module=tab]",
4411 "index.php|famille_travaux[module=form][action=0]",
4412 "index.php|famille_travaux[module=form][action=1]",
4413 "index.php|famille_travaux[module=form][action=2]",
4414 "index.php|famille_travaux[module=form][action=3]",
4415 ),
4416 );
4417 //
4418 $links[] = array(
4419 "href" => "".OM_ROUTE_TAB."&obj=nature_travaux",
4420 "class" => "nature_travaux",
4421 "title" => __("Nature des travaux"),
4422 "right" => array("nature_travaux", "nature_travaux_tab", ),
4423 "open" => array(
4424 "index.php|nature_travaux[module=tab]",
4425 "index.php|nature_travaux[module=form][action=0]",
4426 "index.php|nature_travaux[module=form][action=1]",
4427 "index.php|nature_travaux[module=form][action=2]",
4428 "index.php|nature_travaux[module=form][action=3]",
4429 ),
4430 );
4431 //
4432 $links[] = array(
4433 "title" => "<hr/>",
4434 "right" => array(
4435 "contrainte", "contrainte_tab",
4436 "contrainte_souscategorie", "contrainte_souscategorie_tab",
4437 "contrainte_categorie", "contrainte_categorie_tab"
4438 ),
4439 );
4440 //
4441 $links[] = array(
4442 "href" => "".OM_ROUTE_TAB."&obj=contrainte",
4443 "class" => "contrainte",
4444 "title" => _("contrainte"),
4445 "right" => array("contrainte", "contrainte_tab", ),
4446 "open" => array(
4447 "index.php|contrainte[module=tab]",
4448 "index.php|contrainte[module=form][action=0]",
4449 "index.php|contrainte[module=form][action=1]",
4450 "index.php|contrainte[module=form][action=2]",
4451 "index.php|contrainte[module=form][action=3]",
4452 ),
4453 );
4454 //
4455 $links[] = array(
4456 "class" => "category",
4457 "title" => _("demandes"),
4458 "right" => array(
4459 "demande_type",
4460 "demande_type_tab", "demande_nature", "demande_nature_tab",
4461 ),
4462 );
4463 //
4464 $links[] = array(
4465 "title" => "<hr/>",
4466 "right" => array(
4467 "demande_type",
4468 "demande_type_tab", "demande_nature", "demande_nature_tab",
4469 ),
4470 );
4471 //
4472 $links[] = array(
4473 "href" => "".OM_ROUTE_TAB."&obj=demande_nature",
4474 "class" => "demande_nature",
4475 "title" => _("nature"),
4476 "right" => array("demande_nature", "demande_nature_tab", ),
4477 "open" => array("index.php|demande_nature[module=tab]", "index.php|demande_nature[module=form]", ),
4478 );
4479 //
4480 $links[] = array(
4481 "href" => "".OM_ROUTE_TAB."&obj=demande_type",
4482 "class" => "demande_type",
4483 "title" => _("type"),
4484 "right" => array("demande_type", "demande_type_tab",),
4485 "open" => array("index.php|demande_type[module=tab]", "index.php|demande_type[module=form]", ),
4486 );
4487 //
4488 $links[] = array(
4489 "class" => "category",
4490 "title" => _("workflows"),
4491 "right" => array(
4492 "workflows",
4493 "action", "action_tab", "etat",
4494 "etat_tab", "evenement", "evenement_tab", "bible", "bible_tab", "avis_decision",
4495 "avis_decision_tab", "avis_consultation", "avis_consultation_tab",
4496 "avis_decision_type", "avis_decision_type_tab",
4497 "avis_decision_nature", "avis_decision_nature_tab",
4498 ),
4499 );
4500
4501 //
4502 $links[] = array(
4503 "title" => "<hr/>",
4504 "right" => array(
4505 "workflows",
4506 "action", "action_tab", "etat",
4507 "etat_tab", "evenement", "evenement_tab", "bible", "bible_tab", "avis_decision",
4508 "avis_decision_tab", "avis_consultation", "avis_consultation_tab",
4509 "avis_decision_type", "avis_decision_type_tab",
4510 "avis_decision_nature", "avis_decision_nature_tab",
4511 ),
4512 );
4513 //
4514 $links[] = array(
4515 "href" => "../app/workflows.php",
4516 "class" => "workflows",
4517 "title" => _("workflows"),
4518 "right" => array("workflows", ),
4519 "open" => array("workflows.php|", ),
4520 );
4521 //
4522 $links[] = array(
4523 "title" => "<hr/>",
4524 "right" => array(
4525 "evenement", "evenement_tab",
4526 ),
4527 );
4528 //
4529 $links[] = array(
4530 "href" => "".OM_ROUTE_TAB."&obj=evenement",
4531 "class" => "evenement",
4532 "title" => _("evenement"),
4533 "right" => array("evenement", "evenement_tab", ),
4534 "open" => array("index.php|evenement[module=tab]", "index.php|evenement[module=form]", ),
4535 );
4536 //
4537 $links[] = array(
4538 "title" => "<hr/>",
4539 "right" => array(
4540 "action", "action_tab", "etat",
4541 "etat_tab", "avis_decision",
4542 "avis_decision_tab", "avis_decision_type", "avis_decision_type_tab",
4543 "avis_decision_nature", "avis_decision_nature_tab",
4544 ),
4545 );
4546 //
4547 $links[] = array(
4548 "href" => "".OM_ROUTE_TAB."&obj=etat",
4549 "class" => "workflow-etat",
4550 "title" => _("etat"),
4551 "right" => array("etat", "etat_tab", ),
4552 "open" => array("index.php|etat[module=tab]", "index.php|etat[module=form]", ),
4553 );
4554 //
4555 $links[] = array(
4556 "href" => "".OM_ROUTE_TAB."&obj=avis_decision",
4557 "class" => "avis_decision",
4558 "title" => _("avis decision"),
4559 "right" => array("avis_decision", "avis_decision_tab", ),
4560 "open" => array("index.php|avis_decision[module=tab]", "index.php|avis_decision[module=form]", ),
4561 );
4562 //
4563 $links[] = array(
4564 "href" => "".OM_ROUTE_TAB."&obj=avis_decision_type",
4565 "class" => "avis_decision_type",
4566 "title" => __("avis_decision_type"),
4567 "right" => array("avis_decision_type", "avis_decision_type_tab", ),
4568 "open" => array("index.php|avis_decision_type[module=tab]", "index.php|avis_decision_type[module=form]", ),
4569 );
4570 //
4571 $links[] = array(
4572 "href" => "".OM_ROUTE_TAB."&obj=avis_decision_nature",
4573 "class" => "avis_decision_nature",
4574 "title" => __("avis_decision_nature"),
4575 "right" => array("avis_decision_nature", "avis_decision_nature_tab", ),
4576 "open" => array("index.php|avis_decision_nature[module=tab]", "index.php|avis_decision_nature[module=form]", ),
4577 );
4578 //
4579 $links[] = array(
4580 "href" => "".OM_ROUTE_TAB."&obj=action",
4581 "class" => "action",
4582 "title" => _("action"),
4583 "right" => array("action", "action_tab", ),
4584 "open" => array("index.php|action[module=tab]", "index.php|action[module=form]", ),
4585 );
4586 //
4587 $links[] = array(
4588 "title" => "<hr/>",
4589 "right" => array(
4590 "bible", "bible_tab",
4591 ),
4592 );
4593 //
4594 $links[] = array(
4595 "href" => "".OM_ROUTE_TAB."&obj=bible",
4596 "class" => "bible",
4597 "title" => _("bible"),
4598 "right" => array("bible", "bible_tab", ),
4599 "open" => array("index.php|bible[module=tab]", "index.php|bible[module=form]", ),
4600 );
4601 //
4602 $links[] = array(
4603 "class" => "category",
4604 "title" => _("editions"),
4605 "right" => array(
4606 "om_etat", "om_etat_tab", "om_sousetat", "om_sousetat_tab",
4607 "om_lettretype", "om_lettretype_tab", "om_requete", "om_requete_tab",
4608 "om_logo", "om_logo_tab",
4609 ),
4610 );
4611 //
4612 $links[] = array(
4613 "title" => "<hr/>",
4614 "right" => array(
4615 "om_etat", "om_etat_tab", "om_lettretype", "om_lettretype_tab",
4616 ),
4617 );
4618 //
4619 $links[] = array(
4620 "href" => "".OM_ROUTE_TAB."&obj=om_etat",
4621 "class" => "om_etat",
4622 "title" => _("om_etat"),
4623 "right" => array("om_etat", "om_etat_tab", ),
4624 "open" => array("index.php|om_etat[module=tab]", "index.php|om_etat[module=form]", ),
4625 );
4626 //
4627 $links[] = array(
4628 "href" => "".OM_ROUTE_TAB."&obj=om_lettretype",
4629 "class" => "om_lettretype",
4630 "title" => _("om_lettretype"),
4631 "right" => array("om_lettretype", "om_lettretype_tab"),
4632 "open" => array("index.php|om_lettretype[module=tab]", "index.php|om_lettretype[module=form]", ),
4633 );
4634 //
4635 $links[] = array(
4636 "title" => "<hr/>",
4637 "right" => array(
4638 "om_logo", "om_logo_tab",
4639 ),
4640 );
4641 //
4642 $links[] = array(
4643 "href" => "".OM_ROUTE_TAB."&obj=om_logo",
4644 "class" => "om_logo",
4645 "title" => _("om_logo"),
4646 "right" => array("om_logo", "om_logo_tab", ),
4647 "open" => array("index.php|om_logo[module=tab]", "index.php|om_logo[module=form]", ),
4648 );
4649 //
4650 $rubrik['links'] = $links;
4651 //
4652 $menu[] = $rubrik;
4653 // }}}
4654
4655 // {{{ Rubrique PARAMETRAGE
4656 //
4657 $rubrik = array(
4658 "title" => _("parametrage"),
4659 "class" => "parametrage",
4660 "right" => "menu_parametrage",
4661 );
4662 //
4663 $links = array();
4664 //
4665 $links[] = array(
4666 "href" => "".OM_ROUTE_TAB."&obj=civilite",
4667 "class" => "civilite",
4668 "title" => _("civilite"),
4669 "right" => array("civilite", "civilite_tab", ),
4670 "open" => array("index.php|civilite[module=tab]", "index.php|civilite[module=form]", ),
4671 );
4672 //
4673 $links[] = array(
4674 "href" => "".OM_ROUTE_TAB."&obj=arrondissement",
4675 "class" => "arrondissement",
4676 "title" => _("arrondissement"),
4677 "right" => array("arrondissement", "arrondissement_tab", ),
4678 "open" => array("index.php|arrondissement[module=tab]", "index.php|arrondissement[module=form]", ),
4679 );
4680 //
4681 $links[] = array(
4682 "href" => "".OM_ROUTE_TAB."&obj=quartier",
4683 "class" => "quartier",
4684 "title" => _("quartier"),
4685 "right" => array("quartier", "quartier_tab", ),
4686 "open" => array("index.php|quartier[module=tab]", "index.php|quartier[module=form]", ),
4687 );
4688 //
4689 $links[] = array(
4690 "class" => "category",
4691 "title" => _("Organisation"),
4692 "right" => array(
4693 "direction", "direction_tab", "division", "division_tab", "instructeur_qualite",
4694 "instructeur_qualite_tab", "instructeur", "instructeur_tab", "groupe",
4695 "groupe_tab", "genre", "genre_tab", "signataire_habilitation",
4696 "signataire_habilitation_tab", "signataire_arrete", "signataire_arrete_tab",
4697 "taxe_amenagement_tab", "taxe_amenagement",
4698 ),
4699 );
4700 $links[] = array(
4701 "title" => "<hr/>",
4702 "right" => array(
4703 "direction", "direction_tab", "division", "division_tab", "instructeur_qualite",
4704 "instructeur_qualite_tab", "instructeur", "instructeur_tab", "groupe",
4705 "groupe_tab", "genre", "genre_tab", "signataire_arrete", "signataire_arrete_tab",
4706 "taxe_amenagement_tab", "taxe_amenagement",
4707 ),
4708 );
4709 //
4710 $links[] = array(
4711 "href" => "".OM_ROUTE_TAB."&obj=genre",
4712 "class" => "genre",
4713 "title" => _("genre"),
4714 "right" => array("genre", "genre_tab", ),
4715 "open" => array("index.php|genre[module=tab]", "index.php|genre[module=form]", ),
4716 );
4717 //
4718 $links[] = array(
4719 "href" => "".OM_ROUTE_TAB."&obj=groupe",
4720 "class" => "groupe",
4721 "title" => _("groupe"),
4722 "right" => array("groupe", "groupe_tab", ),
4723 "open" => array("index.php|groupe[module=tab]", "index.php|groupe[module=form]", ),
4724 );
4725 //
4726 $links[] = array(
4727 "href" => "".OM_ROUTE_TAB."&obj=direction",
4728 "class" => "direction",
4729 "title" => _("direction"),
4730 "right" => array("direction", "direction_tab", ),
4731 "open" => array("index.php|direction[module=tab]", "index.php|direction[module=form]", ),
4732 );
4733 //
4734 $links[] = array(
4735 "href" => "".OM_ROUTE_TAB."&obj=division",
4736 "class" => "division",
4737 "title" => _("division"),
4738 "right" => array("division", "division_tab", ),
4739 "open" => array("index.php|division[module=tab]", "index.php|division[module=form]", ),
4740 );
4741 //
4742 $links[] = array(
4743 "href" => "".OM_ROUTE_TAB."&obj=instructeur_qualite",
4744 "class" => "instructeur_qualite",
4745 "title" => _("instructeur_qualite"),
4746 "right" => array("instructeur_qualite", "instructeur_qualite_tab", ),
4747 "open" => array("index.php|instructeur_qualite[module=tab]", "index.php|instructeur_qualite[module=form]", ),
4748 );
4749 //
4750 $links[] = array(
4751 "href" => "".OM_ROUTE_TAB."&obj=instructeur",
4752 "class" => "instructeur",
4753 "title" => _("instructeur"),
4754 "right" => array("instructeur", "instructeur_tab", ),
4755 "open" => array("index.php|instructeur[module=tab]", "index.php|instructeur[module=form]", ),
4756 );
4757 //
4758 $links[] = array(
4759 "href" => "".OM_ROUTE_TAB."&obj=signataire_habilitation",
4760 "class" => "signataire_habilitation",
4761 "title" => _("signataire habilitation"),
4762 "right" => array("signataire_habilitation", "signataire_habilitation", ),
4763 "open" => array("index.php|signataire_habilitation[module=tab]", "index.php|signataire_habilitation[module=form]", ),
4764 );
4765 //
4766 $links[] = array(
4767 "href" => "".OM_ROUTE_TAB."&obj=signataire_arrete",
4768 "class" => "signataire_arrete",
4769 "title" => _("signataire arrete"),
4770 "right" => array("signataire_arrete", "signataire_arrete", ),
4771 "open" => array("index.php|signataire_arrete[module=tab]", "index.php|signataire_arrete[module=form]", ),
4772 );
4773 //
4774 $links[] = array(
4775 "href" => "".OM_ROUTE_TAB."&obj=taxe_amenagement",
4776 "class" => "taxe_amenagement",
4777 "title" => _("taxes"),
4778 "right" => array("taxe_amenagement", "taxe_amenagement_tab", ),
4779 "open" => array("index.php|taxe_amenagement[module=tab]", "index.php|taxe_amenagement[module=form]", ),
4780 );
4781 //
4782 $links[] = array(
4783 "class" => "category",
4784 "title" => _("gestion des commissions"),
4785 "right" => array(
4786 "commission_type", "commission_type_tab",
4787 ),
4788 );
4789 //
4790 $links[] = array(
4791 "title" => "<hr/>",
4792 "right" => array(
4793 "commission_type", "commission_type_tab",
4794 ),
4795 );
4796 //
4797 $links[] = array(
4798 "href" => "".OM_ROUTE_TAB."&obj=commission_type",
4799 "class" => "commission-type",
4800 "title" => _("commission_type"),
4801 "right" => array("commission_type", "commission_type_tab", ),
4802 "open" => array("index.php|commission_type[module=tab]", "index.php|commission_type[module=form]", ),
4803 );
4804 //
4805 $links[] = array(
4806 "class" => "category",
4807 "title" => _("gestion des consultations"),
4808 "right" => array(
4809 "avis_consultation", "avis_consultation_tab", "service", "service_tab",
4810 "service_categorie", "service_categorie_tab",
4811 "lien_service_service_categorie", "lien_service_service_categorie_tab",
4812 ),
4813 );
4814 //
4815 $links[] = array(
4816 "title" => "<hr/>",
4817 "right" => array(
4818 "avis_consultation", "avis_consultation_tab", "service", "service_tab",
4819 "service_categorie", "service_categorie_tab",
4820 "lien_service_service_categorie", "lien_service_service_categorie_tab",
4821 ),
4822 );
4823 //
4824 $links[] = array(
4825 "href" => "".OM_ROUTE_TAB."&obj=avis_consultation",
4826 "class" => "avis_consultation",
4827 "title" => _("avis consultation"),
4828 "right" => array("avis_consultation", "avis_consultation_tab", ),
4829 "open" => array("index.php|avis_consultation[module=tab]", "index.php|avis_consultation[module=form]", ),
4830 );
4831 //
4832 $links[] = array(
4833 "href" => "".OM_ROUTE_TAB."&obj=service",
4834 "class" => "service",
4835 "title" => _("service"),
4836 "right" => array("service", "service_tab", ),
4837 "open" => array("index.php|service[module=tab]", "index.php|service[module=form]", ),
4838 );
4839 $links[] = array(
4840 "href" => "".OM_ROUTE_TAB."&obj=service_categorie",
4841 "class" => "service_categorie",
4842 "title" => _("thematique des services"),
4843 "right" => array("service_categorie", "service_categorie_tab", ),
4844 "open" => array("index.php|service_categorie[module=tab]", "index.php|service_categorie[module=form]", ),
4845 );
4846 $links[] = array(
4847 "href" => "".OM_ROUTE_TAB."&obj=categorie_tiers_consulte",
4848 "class" => "categorie_tiers_consulte",
4849 "title" => __("catégorie des tiers consultés"),
4850 "right" => array("categorie_tiers_consulte", "categorie_tiers_consulte_tab", ),
4851 "open" => array("index.php|categorie_tiers_consulte[module=tab]", "index.php|categorie_tiers_consulte[module=form]", ),
4852 );
4853 $links[] = array(
4854 "href" => "".OM_ROUTE_TAB."&obj=tiers_consulte",
4855 "class" => "tiers_consulte",
4856 "title" => __("tiers"),
4857 "right" => array("tiers_consulte", "tiers_consulte_tab", ),
4858 "open" => array("index.php|tiers_consulte[module=tab]", "index.php|tiers_consulte[module=form]", ),
4859 );
4860 $links[] = array(
4861 "href" => "".OM_ROUTE_TAB."&obj=type_habilitation_tiers_consulte",
4862 "class" => "type_habilitation_tiers_consulte",
4863 "title" => __("type d'habilitation des tiers consultés"),
4864 "right" => array("type_habilitation_tiers_consulte", "type_habilitation_tiers_consulte_tab", ),
4865 "open" => array("index.php|type_habilitation_tiers_consulte[module=tab]", "index.php|type_habilitation_tiers_consulte[module=form]", ),
4866 );
4867 $links[] = array(
4868 "href" => "".OM_ROUTE_TAB."&obj=habilitation_tiers_consulte",
4869 "class" => "habilitation_tiers_consulte",
4870 "title" => __("habilitation des tiers consultés"),
4871 "right" => array("habilitation_tiers_consulte", "habilitation_tiers_consulte_tab", ),
4872 "open" => array("index.php|habilitation_tiers_consulte[module=tab]", "index.php|habilitation_tiers_consulte[module=form]", ),
4873 );
4874 $links[] = array(
4875 "href" => "".OM_ROUTE_TAB."&obj=specialite_tiers_consulte",
4876 "class" => "specialite_tiers_consulte",
4877 "title" => __("spécialité des tiers consultés"),
4878 "right" => array("specialite_tiers_consulte", "specialite_tiers_consulte_tab", ),
4879 "open" => array("index.php|specialite_tiers_consulte[module=tab]", "index.php|specialite_tiers_consulte[module=form]", ),
4880 );
4881 $links[] = array(
4882 "href" => "".OM_ROUTE_TAB."&obj=motif_consultation",
4883 "class" => "motif_consultation",
4884 "title" => __("motif de consultation"),
4885 "right" => array("motif_consultation", "motif_consultation_tab", ),
4886 "open" => array("index.php|motif_consultation[module=tab]", "index.php|motif_consultation[module=form]", ),
4887 );
4888 //
4889 $links[] = array(
4890 "class" => "category",
4891 "title" => _("Gestion des dossiers"),
4892 "right" => array(
4893 "dossier_autorisation_type", "dossier_autorisation_type_tab",
4894 "dossier_autorisation_type_detaille",
4895 "dossier_autorisation_type_detaille_tab", "dossier_instruction_type",
4896 "dossier_instruction_type_tab",
4897 "autorite_competente", "autorite_competente_tab",
4898 "affectation_automatique", "affectation_automatique_tab",
4899 "pec_metier", "pec_metier_tab",
4900 ),
4901 );
4902 //
4903 $links[] = array(
4904 "title" => "<hr/>",
4905 "right" => array(
4906 "dossier_autorisation_type", "dossier_autorisation_type_tab",
4907 "dossier_autorisation_type_detaille",
4908 "dossier_autorisation_type_detaille_tab", "dossier_instruction_type",
4909 "dossier_instruction_type_tab",
4910 "autorite_competente", "autorite_competente_tab",
4911 "affectation_automatique", "affectation_automatique_tab",
4912 "pec_metier", "pec_metier_tab",
4913 ),
4914 );
4915 //
4916 $links[] = array(
4917 "href" => "".OM_ROUTE_TAB."&obj=etat_dossier_autorisation",
4918 "class" => "etat_dossier_autorisation",
4919 "title" => _("etat dossiers autorisations"),
4920 "right" => array("etat_dossier_autorisation", "etat_dossier_autorisation_tab", ),
4921 "open" => array("index.php|etat_dossier_autorisation[module=tab]", "index.php|etat_dossier_autorisation[module=form]", ),
4922 );
4923 //
4924 $links[] = array(
4925 "href" => "".OM_ROUTE_TAB."&obj=affectation_automatique",
4926 "class" => "affectation_automatique",
4927 "title" => _("affectation automatique"),
4928 "right" => array("affectation_automatique", "affectation_automatique_tab", ),
4929 "open" => array("index.php|affectation_automatique[module=tab]", "index.php|affectation_automatique[module=form]", ),
4930 );
4931 //
4932 $links[] = array(
4933 "href" => "".OM_ROUTE_TAB."&obj=autorite_competente",
4934 "class" => "autorite_competente",
4935 "title" => _("autorite")." "._("competente"),
4936 "right" => array("autorite_competente", "autorite_competente_tab", ),
4937 "open" => array("index.php|autorite_competente[module=tab]", "index.php|autorite_competente[module=form]", ),
4938 );
4939 //
4940 $links[] = array(
4941 "href" => "".OM_ROUTE_TAB."&obj=phase",
4942 "class" => "phase",
4943 "title" => _("phase"),
4944 "right" => array("phase", "phase_tab", ),
4945 "open" => array("index.php|phase[module=tab]", "index.php|phase[module=form]", ),
4946 );
4947 //
4948 $links[] = array(
4949 "href" => "".OM_ROUTE_TAB."&obj=pec_metier",
4950 "class" => "pec_metier",
4951 "title" => _("pec_metier"),
4952 "right" => array("pec_metier", "pec_metier_tab", ),
4953 "open" => array("index.php|pec_metier[module=tab]", "index.php|pec_metier[module=form]", ),
4954 );
4955
4956 //Gestion des pièces
4957 $links[] = array(
4958 "class" => "category",
4959 "title" => _("Gestion des pièces"),
4960 "right" => array(
4961 "document_numerise_type_categorie", "document_numerise_type_categorie_tab",
4962 "document_numerise_type",
4963 "document_numerise_type_tab", "document_numerise_traitement_metadonnees",
4964 "document_numerise_traitement_metadonnees_executer",
4965 ),
4966 );
4967 //
4968 $links[] = array(
4969 "title" => "<hr/>",
4970 "right" => array(
4971 "document_numerise_type_categorie", "document_numerise_type_categorie_tab",
4972 "document_numerise_type",
4973 "document_numerise_type_tab", "document_numerise_traitement_metadonnees",
4974 "document_numerise_traitement_metadonnees_executer",
4975 ),
4976 );
4977 //
4978 $links[] = array(
4979 "href" => "".OM_ROUTE_TAB."&obj=document_numerise_type_categorie",
4980 "class" => "document_numerise_type_categorie",
4981 "title" => _("Catégorie des pièces"),
4982 "right" => array(
4983 "document_numerise_type_categorie",
4984 "document_numerise_type_categorie_tab",
4985 ),
4986 "open" => array(
4987 "index.php|document_numerise_type_categorie[module=tab]",
4988 "index.php|document_numerise_type_categorie[module=form]",
4989 ),
4990 );
4991 //
4992 $links[] = array(
4993 "href" => "".OM_ROUTE_TAB."&obj=document_numerise_type",
4994 "class" => "document_numerise_type",
4995 "title" => _("Type des pièces"),
4996 "right" => array(
4997 "document_numerise_type",
4998 "document_numerise_type_tab",
4999 ),
5000 "open" => array(
5001 "index.php|document_numerise_type[module=tab]",
5002 "index.php|document_numerise_type[module=form][action=0]",
5003 "index.php|document_numerise_type[module=form][action=1]",
5004 "index.php|document_numerise_type[module=form][action=2]",
5005 "index.php|document_numerise_type[module=form][action=3]",
5006 ),
5007 );
5008 //
5009 $links[] = array(
5010 "href" => "".OM_ROUTE_TAB."&obj=lien_document_n_type_d_i_t",
5011 "class" => "lien_document_n_type_d_i_t",
5012 "title" => _("Nomenclature des pièces"),
5013 "right" => array(
5014 "lien_document_n_type_d_i_t",
5015 "lien_document_n_type_d_i_t_tab",
5016 ),
5017 "open" => array(
5018 "index.php|lien_document_n_type_d_i_t[module=tab]",
5019 "index.php|lien_document_n_type_d_i_t[module=form][action=0]",
5020 "index.php|lien_document_n_type_d_i_t[module=form][action=1]",
5021 "index.php|lien_document_n_type_d_i_t[module=form][action=2]",
5022 "index.php|lien_document_n_type_d_i_t[module=form][action=3]",
5023 ),
5024 );
5025 //
5026 $links[] = array(
5027 "href" => "".OM_ROUTE_FORM."&obj=document_numerise_traitement_metadonnees&action=100&idx=0",
5028 "class" => "document_numerise_traitement_metadonnees",
5029 "title" => _("Mise à jour des métadonnées"),
5030 "description" => _("Mettre à jour les métadonnées de tous les documents numérisés."),
5031 "right" => array(
5032 "document_numerise_traitement_metadonnees",
5033 "document_numerise_traitement_metadonnees_executer",
5034 ),
5035 "open" => array("index.php|document_numerise_traitement_metadonnees[module=form]", ),
5036 );
5037
5038 // Gestion des contentieux
5039 $links[] = array(
5040 "class" => "category",
5041 "title" => _("Gestion des contentieux"),
5042 "right" => array(
5043 "objet_recours", "objet_recours_tab", "moyen_souleve", "moyen_souleve_tab",
5044 "moyen_retenu_juge", "moyen_retenu_juge_tab",
5045 ),
5046 );
5047 //
5048 $links[] = array(
5049 "title" => "<hr/>",
5050 "right" => array(
5051 "objet_recours", "objet_recours_tab", "moyen_souleve", "moyen_souleve_tab",
5052 "moyen_retenu_juge", "moyen_retenu_juge_tab",
5053 ),
5054 );
5055 //
5056 $links[] = array(
5057 "href" => "".OM_ROUTE_TAB."&obj=objet_recours",
5058 "class" => "objet_recours",
5059 "title" => _("objet_recours"),
5060 "right" => array(
5061 "objet_recours", "objet_recours_tab",
5062 ),
5063 "open" => array(
5064 "index.php|objet_recours[module=tab]", "index.php|objet_recours[module=form]",
5065 ),
5066 );
5067 //
5068 $links[] = array(
5069 "href" => "".OM_ROUTE_TAB."&obj=moyen_souleve",
5070 "class" => "moyen_souleve",
5071 "title" => _("moyen_souleve"),
5072 "right" => array(
5073 "moyen_souleve", "moyen_souleve_tab",
5074 ),
5075 "open" => array(
5076 "index.php|moyen_souleve[module=tab]", "index.php|moyen_souleve[module=form]",
5077 ),
5078 );
5079 //
5080 $links[] = array(
5081 "href" => "".OM_ROUTE_TAB."&obj=moyen_retenu_juge",
5082 "class" => "moyen_retenu_juge",
5083 "title" => _("moyen_retenu_juge"),
5084 "right" => array(
5085 "moyen_retenu_juge", "moyen_retenu_juge_tab",
5086 ),
5087 "open" => array(
5088 "index.php|moyen_retenu_juge[module=tab]", "index.php|moyen_retenu_juge[module=form]",
5089 ),
5090 );
5091
5092 //
5093 $links[] = array(
5094 "class" => "category",
5095 "title" => _("géolocalisation"),
5096 "right" => array(
5097 "sig_groupe",
5098 "sig_sousgroupe",
5099 "sig_contrainte"
5100 ),
5101 );
5102 //
5103 $links[] = array(
5104 "href" => "".OM_ROUTE_TAB."&obj=sig_couche",
5105 "class" => "sig_couche",
5106 "title" => _("Couches"),
5107 "right" => array("sig_contrainte", "sig_contrainte_tab","sig_couche", "sig_couche_tab", ),
5108 "open" => array("index.php|sig_couche[module=tab]", "index.php|sig_couche[module=form]", ),
5109 );
5110 //
5111 $links[] = array(
5112 "href" => "".OM_ROUTE_TAB."&obj=sig_groupe",
5113 "class" => "sig_groupe",
5114 "title" => _("sig_groupe"),
5115 "right" => array(
5116 "sig_groupe", "sig_groupe_tab",
5117 ),
5118 "open" => array(
5119 "index.php|sig_groupe[module=tab]", "index.php|sig_groupe[module=form]",
5120 ),
5121 );
5122 //
5123 $links[] = array(
5124 "href" => "".OM_ROUTE_TAB."&obj=sig_sousgroupe",
5125 "class" => "sig_sousgroupe",
5126 "title" => _("sig_sousgroupe"),
5127 "right" => array(
5128 "sig_sousgroupe", "sig_sousgroupe_tab",
5129 ),
5130 "open" => array(
5131 "index.php|sig_sousgroupe[module=tab]", "index.php|sig_sousgroupe[module=form]",
5132 ),
5133 );
5134 //
5135 $links[] = array(
5136 "href" => "".OM_ROUTE_TAB."&obj=sig_contrainte",
5137 "class" => "sig_contrainte",
5138 "title" => _("sig_contrainte"),
5139 "right" => array(
5140 "sig_contrainte", "sig_contrainte_tab", "sig_attribut", "sig_attribut_tab"
5141 ),
5142 "open" => array(
5143 "index.php|sig_contrainte[module=tab]", "index.php|sig_contrainte[module=form]",
5144 ),
5145 );
5146 //
5147 $rubrik['links'] = $links;
5148 //
5149 $menu[] = $rubrik;
5150 // }}}
5151
5152 // {{{ Rubrique ADMINISTRATION
5153 //
5154 $rubrik = array(
5155 "title" => _("administration"),
5156 "class" => "administration",
5157 "right" => "menu_administration",
5158 );
5159 //
5160 $links = array();
5161 //
5162 // Renomme la collectivité en service
5163 $om_collectivite_title = __("om_collectivite");
5164 if (isset($_SESSION['collectivite']) === true
5165 && $this->is_option_renommer_collectivite_enabled() === true) {
5166 //
5167 $om_collectivite_title = __("service");
5168 }
5169 $links[] = array(
5170 "href" => "".OM_ROUTE_TAB."&obj=om_collectivite",
5171 "class" => "collectivite",
5172 "title" => $om_collectivite_title,
5173 "right" => array("om_collectivite", "om_collectivite_tab", ),
5174 "open" => array("index.php|om_collectivite[module=tab]", "index.php|om_collectivite[module=form]", ),
5175 );
5176 //
5177 $links[] = array(
5178 "href" => "".OM_ROUTE_TAB."&obj=om_parametre",
5179 "class" => "parametre",
5180 "title" => _("om_parametre"),
5181 "right" => array("om_parametre", "om_parametre_tab", ),
5182 "open" => array("index.php|om_parametre[module=tab]", "index.php|om_parametre[module=form]", ),
5183 );
5184 //
5185 $links[] = array(
5186 "title" => "<hr/>",
5187 "right" => array("commune", "commune_tab", )
5188 );
5189 $links[] = array(
5190 "href" => "".OM_ROUTE_TAB."&obj=commune",
5191 "title" => __("communes"),
5192 "right" => array("commune", "commune_tab"),
5193 "open" => array("index.php|commune[module=tab]", "index.php|commune[module=form]", ),
5194 );
5195 $links[] = array(
5196 "href" => "".OM_ROUTE_TAB."&obj=departement",
5197 "title" => __("départements"),
5198 "right" => array("departement", "departement_tab"),
5199 "open" => array("index.php|departement[module=tab]", "index.php|departement[module=form]")
5200 );
5201 $links[] = array(
5202 "href" => "".OM_ROUTE_TAB."&obj=region",
5203 "title" => __("régions"),
5204 "right" => array("region", "region_tab"),
5205 "open" => array("index.php|region[module=tab]", "index.php|region[module=form]")
5206 );
5207 //
5208 $links[] = array(
5209 "class" => "category",
5210 "title" => _("gestion des utilisateurs"),
5211 "right" => array(
5212 "om_utilisateur", "om_utilisateur_tab", "om_profil", "om_profil_tab",
5213 "om_droit", "om_droit_tab", "directory",
5214 ),
5215 );
5216 //
5217 $links[] = array(
5218 "title" => "<hr/>",
5219 "right" => array(
5220 "om_utilisateur", "om_utilisateur_tab", "om_profil", "om_profil_tab",
5221 "om_droit", "om_droit_tab",
5222 ),
5223 );
5224 //
5225 $links[] = array(
5226 "href" => "".OM_ROUTE_TAB."&obj=om_profil",
5227 "class" => "profil",
5228 "title" => _("om_profil"),
5229 "right" => array("om_profil", "om_profil_tab", ),
5230 "open" => array("index.php|om_profil[module=tab]", "index.php|om_profil[module=form]", ),
5231 );
5232 //
5233 $links[] = array(
5234 "href" => "".OM_ROUTE_TAB."&obj=om_droit",
5235 "class" => "droit",
5236 "title" => _("om_droit"),
5237 "right" => array("om_droit", "om_droit_tab", ),
5238 "open" => array("index.php|om_droit[module=tab]", "index.php|om_droit[module=form]", ),
5239 );
5240 //
5241 $links[] = array(
5242 "href" => "".OM_ROUTE_TAB."&obj=om_utilisateur",
5243 "class" => "utilisateur",
5244 "title" => _("om_utilisateur"),
5245 "right" => array("om_utilisateur", "om_utilisateur_tab", ),
5246 "open" => array(
5247 "index.php|om_utilisateur[module=tab]",
5248 "index.php|om_utilisateur[module=form][action=0]",
5249 "index.php|om_utilisateur[module=form][action=1]",
5250 "index.php|om_utilisateur[module=form][action=2]",
5251 "index.php|om_utilisateur[module=form][action=3]",
5252 ),
5253 );
5254 //
5255 $links[] = array(
5256 "title" => "<hr/>",
5257 "right" => array("om_utilisateur", "om_utilisateur_synchroniser", ),
5258 "parameters" => array("isDirectoryOptionEnabled" => true, ),
5259 );
5260 //
5261 $links[] = array(
5262 "href" => "".OM_ROUTE_FORM."&obj=om_utilisateur&idx=0&action=11",
5263 "class" => "annuaire",
5264 "title" => _("annuaire"),
5265 "right" => array("om_utilisateur", "om_utilisateur_synchroniser", ),
5266 "open" => array("index.php|om_utilisateur[module=form][action=11]", ),
5267 "parameters" => array("isDirectoryOptionEnabled" => true, ),
5268 );
5269 //
5270 $links[] = array(
5271 "class" => "category",
5272 "title" => _("tableaux de bord"),
5273 "right" => array(
5274 "om_widget", "om_widget_tab", "om_dashboard",
5275 ),
5276 );
5277 //
5278 $links[] = array(
5279 "title" => "<hr/>",
5280 "right" => array(
5281 "om_widget", "om_widget_tab", "om_dashboard",
5282 ),
5283 );
5284 //
5285 $links[] = array(
5286 "href" => "".OM_ROUTE_TAB."&obj=om_widget",
5287 "class" => "om_widget",
5288 "title" => _("om_widget"),
5289 "right" => array("om_widget", "om_widget_tab", ),
5290 "open" => array("index.php|om_widget[module=tab]", "index.php|om_widget[module=form]", ),
5291 );
5292 $links[] = array(
5293 "href" => "".OM_ROUTE_TAB."&obj=compteur",
5294 "class" => "compteur",
5295 "title" => __("Compteur & quota"),
5296 "right" => array("compteur", "compteur_tab", ),
5297 "open" => array("index.php|compteur[module=tab]", "index.php|compteur[module=form]", ),
5298 );
5299 //
5300 $links[] = array(
5301 "href" => "".OM_ROUTE_FORM."&obj=om_dashboard&amp;idx=0&amp;action=4",
5302 "class" => "om_dashboard",
5303 "title" => _("composition"),
5304 "right" => array("om_dashboard", ),
5305 "open" => array("index.php|om_dashboard[module=form][action=4]", ),
5306 );
5307 //
5308 $links[] = array(
5309 "class" => "category",
5310 "title" => _("sig"),
5311 "right" => array(
5312 "om_sig_map", "om_sig_map_tab", "om_sig_flux", "om_sig_flux_tab", "om_sig_extent", "om_sig_extent_tab",
5313 ),
5314 "parameters" => array("option_localisation" => "sig_interne", ),
5315 );
5316 //
5317 $links[] = array(
5318 "title" => "<hr/>",
5319 "right" => array(
5320 "om_sig_map", "om_sig_map_tab", "om_sig_flux", "om_sig_flux_tab", "om_sig_extent", "om_sig_extent_tab",
5321 ),
5322 "parameters" => array("option_localisation" => "sig_interne", ),
5323 );
5324 //
5325 $links[] = array(
5326 "href" => "".OM_ROUTE_TAB."&obj=om_sig_extent",
5327 "class" => "om_sig_extent",
5328 "title" => _("om_sig_extent"),
5329 "right" => array("om_sig_extent", "om_sig_extent_tab", ),
5330 "open" => array("index.php|om_sig_extent[module=tab]", "index.php|om_sig_extent[module=form]", ),
5331 "parameters" => array("option_localisation" => "sig_interne", ),
5332 );
5333 //
5334 $links[] = array(
5335 "href" => "".OM_ROUTE_TAB."&obj=om_sig_map",
5336 "class" => "om_sig_map",
5337 "title" => _("om_sig_map"),
5338 "right" => array("om_sig_map", "om_sig_map_tab", ),
5339 "open" => array("index.php|om_sig_map[module=tab]", "index.php|om_sig_map[module=form]", ),
5340 "parameters" => array("option_localisation" => "sig_interne", ),
5341 );
5342 //
5343 $links[] = array(
5344 "href" => "".OM_ROUTE_TAB."&obj=om_sig_flux",
5345 "class" => "om_sig_flux",
5346 "title" => _("om_sig_flux"),
5347 "right" => array("om_sig_flux", "om_sig_flux_tab", ),
5348 "open" => array("index.php|om_sig_flux[module=tab]", "index.php|om_sig_flux[module=form]", ),
5349 "parameters" => array("option_localisation" => "sig_interne", ),
5350 );
5351 //
5352 $links[] = array(
5353 "class" => "category",
5354 "title" => _("options avancees"),
5355 "right" => array("import", "gen", "om_requete", "om_requete_tab",
5356 "om_sousetat", "om_sousetat_tab",),
5357 );
5358 //
5359 $links[] = array(
5360 "title" => "<hr/>",
5361 "right" => array(
5362 "interface_referentiel_erp",
5363 ),
5364 );
5365 //
5366 $links[] = array(
5367 "href" => "../app/settings.php?controlpanel=interface_referentiel_erp",
5368 "class" => "interface_referentiel_erp",
5369 "title" => _("interface_referentiel_erp"),
5370 "right" => array("interface_referentiel_erp", ),
5371 "open" => array("settings.php|[controlpanel=interface_referentiel_erp]", ),
5372 );
5373 //
5374 $links[] = array(
5375 "title" => "<hr/>",
5376 "right" => array(
5377 "om_sousetat", "om_sousetat_tab",
5378 ),
5379 );
5380 //
5381 $links[] = array(
5382 "href" => "".OM_ROUTE_TAB."&obj=om_sousetat",
5383 "class" => "om_sousetat",
5384 "title" => _("om_sousetat"),
5385 "right" => array("om_sousetat", "om_sousetat_tab", ),
5386 "open" => array("index.php|om_sousetat[module=tab]", "index.php|om_sousetat[module=form]", ),
5387 );
5388 //
5389 $links[] = array(
5390 "title" => "<hr/>",
5391 "right" => array("om_requete", "om_requete_tab", ),
5392 );
5393 //
5394 $links[] = array(
5395 "href" => "".OM_ROUTE_TAB."&obj=om_requete",
5396 "class" => "om_requete",
5397 "title" => _("om_requete"),
5398 "right" => array("om_requete", "om_requete_tab", ),
5399 "open" => array("index.php|om_requete[module=tab]", "index.php|om_requete[module=form]", ),
5400 );
5401 //
5402 $links[] = array(
5403 "title" => "<hr/>",
5404 "right" => array("task", "task_tab", ),
5405 );
5406 //
5407 $links[] = array(
5408 "href" => "".OM_ROUTE_TAB."&obj=task",
5409 "class" => "task",
5410 "title" => _("Moniteur Plat'AU"),
5411 "right" => array("task", "task_tab", ),
5412 "open" => array("index.php|task[module=tab]", "index.php|task[module=form]", ),
5413 );
5414
5415 //Afficher le menu moniteur IDE'AU si l'option notification portal est activée.
5416 if (isset($_SESSION['collectivite']) === true
5417 && $this->get_param_option_notification() === PORTAL)
5418 {
5419 $links[] = array(
5420 "href" => "".OM_ROUTE_TAB."&obj=task_portal",
5421 "class" => "task_portal",
5422 "title" => __("Moniteur iDE'AU"),
5423 "right" => array("task_portal", "task_portal_tab", ),
5424 "open" => array("index.php|task_portal[module=tab]", "index.php|task_portal[module=form]", ),
5425 );
5426 }
5427
5428 //
5429 $links[] = array(
5430 "title" => "<hr/>",
5431 "right" => array("import", ),
5432 );
5433 //
5434 $links[] = array(
5435 "href" => OM_ROUTE_MODULE_IMPORT,
5436 "class" => "import",
5437 "title" => __("Import"),
5438 "description" => __("Ce module permet l'intégration de données dans l'application depuis des fichiers CSV."),
5439 "right" => array("import", ),
5440 "open" => array(
5441 "import.php|",
5442 "index.php|[module=import]",
5443 ),
5444 );
5445 //
5446 $links[] = array(
5447 "href" => "../app/import_specific.php",
5448 "class" => "import_specific",
5449 "title" => _("Import specifique"),
5450 "right" => array("import", ),
5451 "open" => array("import_specific.php|", ),
5452 );
5453 //
5454 $links[] = array(
5455 "title" => "<hr/>",
5456 "right" => array("gen", ),
5457 );
5458 //
5459 $links[] = array(
5460 "title" => _("Generateur"),
5461 "href" => OM_ROUTE_MODULE_GEN,
5462 "class" => "generator",
5463 "right" => array("gen", ),
5464 "open" => array(
5465 "gen.php|","genauto.php|", "gensup.php|", "genfull.php|",
5466 "genetat.php|", "gensousetat.php|", "genlettretype.php|",
5467 "genimport.php|",
5468 ),
5469 );
5470 //
5471 $links[] = array(
5472 "title" => "<hr/>",
5473 "right" => array("contrainte", "contrainte_synchronisation"),
5474 );
5475 //
5476 $links[] = array(
5477 "href" => "".OM_ROUTE_FORM."&obj=contrainte&action=100&idx=0",
5478 "class" => "contrainte",
5479 "title" => _("synchronisation des contraintes"),
5480 "right" => array("contrainte", "contrainte_synchronisation", ),
5481 "open" => array("index.php|contrainte[module=form][action=100]", ),
5482 "parameters" => array(
5483 "option_sig" => "sig_externe",
5484 ),
5485 );
5486 //
5487 $links[] = array(
5488 "href" => "".OM_ROUTE_FORM."&obj=dossier_instruction&action=126&idx=0",
5489 "class" => "geocoder",
5490 "title" => _("Géolocalisation des dossiers"),
5491 "right" => array("dossier_instruction_geocoder", ),
5492 "open" => array("index.php|dossier_instruction[module=form][action=126]", ),
5493 "parameters" => array(
5494 "option_sig" => "sig_externe",
5495 ),
5496 );
5497 //
5498 $rubrik['links'] = $links;
5499 //
5500 $menu[] = $rubrik;
5501 $this->config__menu = $menu;
5502 }
5503
5504 /**
5505 * Récupère tous les résultats d'une requête SQL.
5506 *
5507 * @param string $query Requête SQL
5508 * @param array $extras Tableau de paramètres :
5509 * - force_return (bool) : Force le retour d'un boolean en cas d'erreur
5510 * - origin (string) : Origine d'appel de la méthode
5511 *
5512 * @return array
5513 */
5514 function get_all_results_from_db_query(string $query, array $extras = array()) {
5515 $res = $this->db->query($query);
5516 $origin = __METHOD__;
5517 if (array_key_exists("origin", $extras) === true
5518 && is_string($extras["origin"]) === true) {
5519 //
5520 $origin = $extras["origin"];
5521 }
5522 $this->addToLog(
5523 $origin."(): #db->query(\"".$query."\");",
5524 VERBOSE_MODE
5525 );
5526 $result = array(
5527 'code' => '',
5528 'message' => '',
5529 'result' => array(),
5530 );
5531 $force_return = false;
5532 if (array_key_exists("force_return", $extras) === true
5533 && is_bool($extras["force_return"]) === true) {
5534 //
5535 $force_return = $extras["force_return"];
5536 }
5537 if ($this->isDatabaseError($res, $force_return) !== false) {
5538 $result['code'] = 'KO';
5539 $result['message'] = __("Erreur de base de donnees. Contactez votre administrateur.");
5540 return $result;
5541 }
5542 $result['code'] = 'OK';
5543 while ($row =& $res->fetchrow(DB_FETCHMODE_ASSOC)) {
5544 array_push($result['result'], $row);
5545 }
5546 $res->free();
5547 return $result;
5548 }
5549
5550 /**
5551 * Récupère un résultat 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 *
5558 * @return array
5559 */
5560 function get_one_result_from_db_query(string $query, array $extras = array()) {
5561 $res = $this->db->getone($query);
5562 $origin = __METHOD__;
5563 if (array_key_exists("origin", $extras) === true
5564 && is_string($extras["origin"]) === true) {
5565 //
5566 $origin = $extras["origin"];
5567 }
5568 $this->addToLog(
5569 $origin."(): #db->getone(\"".$query."\");",
5570 VERBOSE_MODE
5571 );
5572 $result = array(
5573 "code" => "",
5574 "message" => "",
5575 "result" => array(),
5576 );
5577 $force_return = false;
5578 if (array_key_exists("force_return", $extras) === true
5579 && is_bool($extras["force_return"]) === true) {
5580 //
5581 $force_return = $extras["force_return"];
5582 }
5583 if ($this->isDatabaseError($res, $force_return) !== false) {
5584 $result["code"] = "KO";
5585 $result["message"] = __("Erreur de base de donnees. Contactez votre administrateur.");
5586 return $result;
5587 }
5588 $result["code"] = "OK";
5589 $result["result"] = $res;
5590 return $result;
5591 }
5592
5593 /**
5594 * Exécute requête SQL.
5595 *
5596 * @param string $query Requête SQL
5597 * @param array $extras Tableau de paramètres :
5598 * - force_return (bool) : Force le retour d'un boolean en cas d'erreur
5599 * - origin (string) : Origine d'appel de la méthode
5600 *
5601 * @return array
5602 */
5603 function execute_db_query(string $query, array $extras = array()) {
5604 $res = $this->db->query($query);
5605 $origin = __METHOD__;
5606 if (array_key_exists("origin", $extras) === true
5607 && is_string($extras["origin"]) === true) {
5608 //
5609 $origin = $extras["origin"];
5610 }
5611 $this->addToLog(
5612 $origin."(): #db->query(\"".$query."\");",
5613 VERBOSE_MODE
5614 );
5615 $result = array(
5616 'code' => '',
5617 'message' => '',
5618 'result' => array(),
5619 );
5620 $force_return = false;
5621 if (array_key_exists("force_return", $extras) === true
5622 && is_bool($extras["force_return"]) === true) {
5623 //
5624 $force_return = $extras["force_return"];
5625 }
5626
5627 if ($this->isDatabaseError($res, $force_return) !== false) {
5628 $result['code'] = 'KO';
5629 $result['message'] = __("Erreur de base de donnees. Contactez votre administrateur.");
5630 return $result;
5631 }
5632 $result['code'] = 'OK';
5633 return $result;
5634 }
5635
5636 /**
5637 * Instanciation de la classe 'edition'.
5638 * (surcharge de la fonction pour ajouter la prise en compte
5639 * de la surcharge locale de la classe om_edition).
5640 *
5641 * @param array $args Arguments à passer au constructeur.
5642 * @return edition
5643 */
5644 function get_inst__om_edition($args = array()) {
5645 if (file_exists("../obj/om_edition.class.php")) {
5646 require_once "../obj/om_edition.class.php";
5647 $class_name = "om_edition";
5648 } else {
5649 require_once PATH_OPENMAIRIE."om_edition.class.php";
5650 $class_name = "edition";
5651 }
5652 return new $class_name();
5653 }
5654
5655 /**
5656 * Instanciation de la classe 'reqmo'.
5657 * (surcharge de la fonction pour ajouter la prise en compte
5658 * de la surcharge locale de la classe om_edition).
5659 *
5660 * @param array $args Arguments à passer au constructeur.
5661 * @return edition
5662 */
5663 function get_inst__om_reqmo($args = array()) {
5664 if (file_exists("../obj/om_reqmo.class.php")) {
5665 require_once "../obj/om_reqmo.class.php";
5666 $class_name = "om_reqmo";
5667 } else {
5668 require_once PATH_OPENMAIRIE."om_reqmo.class.php";
5669 $class_name = "reqmo";
5670 }
5671 return new $class_name();
5672 }
5673
5674 /**
5675 * Permet d'enregistrer un fichier dans la table 'storage'.
5676 *
5677 * @return mixed Identifiant du fichier dans la table storage ou false.
5678 */
5679 function store_file($filecontent, $filemetadata, $type, $info = null, $collectivite = null, $dossierFinal = false) {
5680 if ($collectivite === null) {
5681 $get_collectivite = $this->getCollectivite();
5682 $collectivite = $get_collectivite['om_collectivite_idx'];
5683 }
5684 $uid = $this->storage->create($filecontent, $filemetadata, "from_content", "storage.uid");
5685 if ($uid == 'OP_FAILURE') {
5686 return false;
5687 }
5688 $inst_storage = $this->get_inst__om_dbform(array(
5689 "obj" => "storage",
5690 "idx" => "]",
5691 ));
5692 $val = array(
5693 "storage" => '',
5694 "file" => "NEW",
5695 "creation_date" => date("Y-m-d"),
5696 "creation_time" => date("G:i:s"),
5697 "uid" => $uid,
5698 "filename" => $filemetadata["filename"],
5699 "size" => $filemetadata["size"],
5700 "mimetype" => $filemetadata["mimetype"],
5701 "type" => $type,
5702 "info" => $info,
5703 "om_collectivite" => $collectivite,
5704 "uid_dossier_final" => $dossierFinal
5705 );
5706 $ret = $inst_storage->ajouter($val);
5707 if ($ret !== true) {
5708 return false;
5709 }
5710 // Récupère l'identifiant dans le storage
5711 $id = $inst_storage->get_storage_id_by_uid($uid);
5712 //
5713 return $id;
5714 }
5715
5716 /**
5717 * Surcharge de la fonction d'affichage pour ajouter
5718 * un détecteur de bloqueur de pub (cassant l'application).
5719 *
5720 * @return void
5721 */
5722 function displayHTMLFooter() {
5723 parent::displayHTMLFooter();
5724 if (in_array($this->flag, array("login_and_nohtml", "nohtml", "login", "logout", "anonym")) !== true) {
5725 $this->ad_blocker_detector();
5726 }
5727 }
5728
5729 /**
5730 * "Fausse" surcharge de la méthode du même nom dans om_layout.
5731 * Ajoute la possibilité d'ajouter une class CSS à la balise legend.
5732 *
5733 * Cette methode permet d'ouvrir un fieldset
5734 */
5735 public function display_formulaire_debutFieldset($params) {
5736 // Ouverture du fieldset
5737 echo " <fieldset";
5738 echo (isset($params["identifier"]) ? " id=\"".$params["identifier"]."\"" : "");
5739 echo " class=\"cadre ui-corner-all ui-widget-content ".$params["action2"]."\">\n";
5740 echo " <legend class=\"ui-corner-all ui-widget-content ui-state-active ".$params["legend_class"]."\">";
5741 echo $params["action1"];
5742 echo " </legend>\n";
5743 // Ouverture du conteneur interne du fieldset
5744 echo " <div class=\"fieldsetContent\">\n";
5745 }
5746
5747 /**
5748 * Affiche un bloc de code Javascript
5749 * responsable de détecter les bloqueurs de pub
5750 * et d'afficher un message le cas échéant.
5751 */
5752 protected function ad_blocker_detector() {
5753
5754 printf(
5755 '<script type="text/javascript">
5756 var blocked = [];
5757 // jquery has not loaded
5758 if(typeof($) == "undefined" && typeof(jQuery) == "undefined") {
5759 blocked.push("jquery");
5760 }
5761 // tinyMCE has not loaded
5762 if(typeof(tinyMCE) == "undefined") {
5763 blocked.push("tinyMCE");
5764 }
5765 // locale has not loaded
5766 if(typeof(locale) == "undefined") {
5767 blocked.push("locale");
5768 }
5769 // om_layout has not loaded
5770 if(typeof(om_initialize_content) == "undefined") {
5771 blocked.push("om_layout");
5772 }
5773 // app script has not loaded
5774 if(typeof(app_script_t4Fv4a59uSU7MwpJ59Qp) == "undefined") {
5775 blocked.push("app_script");
5776 }
5777
5778 // something was blocked
5779 if(blocked.length > 0) {
5780
5781 // removing every node in the body
5782 while(document.body.firstChild) { document.body.removeChild(document.body.firstChild); }
5783
5784 // creating the message (node) and its style
5785 var msgNode = document.createElement("p");
5786 msgNode.id = "adblocker-detected";
5787 msgNode.style.position = "relative";
5788 msgNode.style.width = "calc(100%% - 60px)";
5789 msgNode.style.margin = "20px auto";
5790 msgNode.style.padding = "20px";
5791 msgNode.style.background = "#FEF8F6";
5792 msgNode.style.color = "#cd0a0a";
5793 msgNode.style.border = "1px solid #cd0a0a";
5794 msgNode.style.borderRadius = "4px";
5795 msgNode.style.gridColumns = "1 / -1";
5796 msgNode.innerHTML = "%s";
5797
5798 // appending the message (node) to the body
5799 document.body.insertBefore(msgNode, document.body.firstChild);
5800 }
5801 </script>',
5802 sprintf(
5803 '<span>%s</span><br/><br/><span>%s</span><br/><br/><span>%s</span>',
5804 __("Un bloqueur de publicité a été détecté, et ceci empêche l'application de fonctionner normalement."),
5805 __("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>)."),
5806 __("<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>")
5807 )
5808 );
5809 }
5810
5811 /**
5812 * Récupère l'identifiant de l'enregistrement par rapport aux arguments.
5813 *
5814 * @param string $idx_name Nom du champ de l'identifiant
5815 * @param string $table Nom de la table
5816 * @param string $condition_field Nom du champ pour la condition
5817 * @param string $condition_value Valeur du champ de condition
5818 *
5819 * @return mixed Résultat de la requête ou null
5820 */
5821 public function get_idx_by_args(array $args) {
5822 $where2 = '';
5823 if (isset($args['condition2_field']) === true
5824 && isset($args['condition2_value']) === true
5825 && $args['condition2_field'] !== ''
5826 && $args['condition2_field'] !== null
5827 && $args['condition2_value'] !== ''
5828 && $args['condition2_value'] !== null) {
5829 //
5830 $where2 = sprintf(" AND %s = '%s'", $args['condition2_field'], $args['condition2_value']);
5831 }
5832 $where3 = '';
5833 if (isset($args['condition3_field']) === true
5834 && isset($args['condition3_value']) === true
5835 && $args['condition3_field'] !== ''
5836 && $args['condition3_field'] !== null
5837 && $args['condition3_value'] !== ''
5838 && $args['condition3_value'] !== null) {
5839 //
5840 $where3 = sprintf(" AND %s = '%s'", $args['condition3_field'], $args['condition3_value']);
5841 }
5842 $order = '';
5843 if (isset($args['order_field']) === true
5844 && isset($args['order_asc_desc']) === true
5845 && $args['order_field'] !== ''
5846 && $args['order_field'] !== null
5847 && $args['order_asc_desc'] !== ''
5848 && $args['order_asc_desc'] !== null) {
5849 //
5850 $order = sprintf(" ORDER BY %s %s ", $args['order_field'], $args['order_asc_desc']);
5851 }
5852 $qres = $this->get_one_result_from_db_query(
5853 sprintf(
5854 "SELECT
5855 %s
5856 FROM
5857 %s%s
5858 WHERE
5859 %s = '%s'
5860 %s
5861 %s
5862 %s",
5863 $args['idx_name'],
5864 DB_PREFIXE,
5865 $args['table'],
5866 $args['condition_field'],
5867 $args['condition_value'],
5868 $where2,
5869 $where3,
5870 $order
5871 ),
5872 array(
5873 "origin" => __METHOD__,
5874 )
5875 );
5876 return $qres["result"];
5877 }
5878
5879 public function get_inst__by_other_idx(array $args) {
5880 // En cas de plusieurs résultat, instancie seulement le premier retourné
5881 $idx = $this->get_idx_by_args(array(
5882 'idx_name' => $args['obj'],
5883 'table' => $args['obj'],
5884 'condition_field' => $args['fk_field'],
5885 'condition_value' => $args['fk_idx'],
5886 'condition2_field' => isset($args['fk_field_2']) === true ? $args['fk_field_2'] : null,
5887 'condition2_value' => isset($args['fk_idx_2']) === true ? $args['fk_idx_2'] : null,
5888 'condition3_field' => isset($args['fk_field_3']) === true ? $args['fk_field_3'] : null,
5889 'condition3_value' => isset($args['fk_idx_3']) === true ? $args['fk_idx_3'] : null,
5890 'order_field' => isset($args['order_field']) === true ? $args['order_field'] : null,
5891 'order_asc_desc' => isset($args['order_asc_desc']) === true ? $args['order_asc_desc'] : null,
5892 ));
5893 $inst = $this->get_inst__om_dbform(array(
5894 'obj' => $args['obj'],
5895 'idx' => $idx,
5896 ));
5897 return $inst;
5898 }
5899
5900 /**
5901 * Retourne l'objet demandé avec ses propriétés remplis à partir des données en base
5902 * ou 'null' si l'objet n'est pas trouvé en base de données.
5903 *
5904 * @param string $class La classe de l'objet demandé
5905 * @param string $idx L'identifiant de l'objet en base de donnée
5906 * @param bool $onlyone Si vaut 'true', déclenche une exception s'il y a plus d'un résultat
5907 *
5908 * @return $mixed L'objet ou null
5909 *
5910 * (à partir de PHP 7.1 on pourra utiliser le ReturnType ?object)
5911 */
5912 public function findObjectById(string $class, string $idx, bool $onlyone = true) {
5913 $obj = null;
5914 if (!empty($class) && !empty($idx)) {
5915 $qres = $this->get_one_result_from_db_query(
5916 sprintf(
5917 'SELECT
5918 COUNT(%2$s)
5919 FROM
5920 %1$s%2$s
5921 WHERE
5922 %2$s::CHARACTER VARYING = \'%3$s\'',
5923 DB_PREFIXE,
5924 $class,
5925 $idx
5926
5927 ),
5928 array(
5929 "origin" => __METHOD__
5930 )
5931 );
5932 if ($qres["code"] !== "OK") {
5933 throw new RuntimeException("Failed database query (".$qres['message'].")");
5934 }
5935 $count = intval(strval($qres['result']));
5936 if ($count === 1) {
5937 $obj = $this->get_inst__om_dbform(array('obj' => $class, 'idx' => $idx));
5938 }
5939 elseif($count > 1 && $onlyone) {
5940 throw new RuntimeException("More than one result ($count) for '$class' ID '$idx'");
5941 }
5942 }
5943 $obj = $this->get_inst__om_dbform(array('obj' => $class, 'idx' => $idx));
5944 if ($obj->exists() !== true) {
5945 return null;
5946 }
5947 return $obj;
5948 }
5949
5950 /**
5951 * Retourne l'objet demandé avec ses propriétés remplis à partir des données en base
5952 * ou 'null' si l'objet n'est pas trouvé en base de données.
5953 *
5954 * @param string class La classe de l'objet demandé
5955 * @param string condition La clause WHERE de la requête SQL qui va être effectuée
5956 * @param string order (optionel) La clause ORDER BY de la requête SQL qui va être effectuée
5957 * @param string from (optionel) La clause FROM de la requête SQL qui va être effectuée
5958 * @param string onlyone (optionel) Si 'true': génère une exception si plus d'un résultat
5959 *
5960 * @return $mixed L'objet ou null
5961 *
5962 * @throw RuntimeException
5963 *
5964 * (à partir de PHP 7.1 on pourra utiliser le ReturnType ?object)
5965 */
5966 public function findObjectByCondition(string $class, string $condition, string $order,
5967 string $from = null, bool $onlyone = true) {
5968 $obj = null;
5969 if (!empty($class)) {
5970 $class = $this->db->escapeSimple($class);
5971 $from = ! empty($from) ?
5972 $from :
5973 sprintf(' FROM %s%s', DB_PREFIXE, $class);
5974 $condition = ! empty($condition) ?
5975 " WHERE $condition" :
5976 '';
5977 $order = ! empty($order) ?
5978 " ORDER BY $order" :
5979 '';
5980
5981 $sqlExist = sprintf(
5982 'SELECT
5983 COUNT(%1$s)
5984 %2$s
5985 %3$s',
5986 $class,
5987 $from,
5988 $condition
5989 );
5990 $qres = $this->get_one_result_from_db_query(
5991 $sqlExist,
5992 array(
5993 "origin" => __METHOD__,
5994 "force_return" => true,
5995 )
5996 );
5997
5998 if ($qres["code"] !== "OK") {
5999 throw new RuntimeException("Failed database query (".$qres['message'].")");
6000 }
6001 $count = intval(strval($qres['result']));
6002 if(empty($count)) {
6003 return null;
6004 }
6005 if($count > 1 && $onlyone) {
6006 $this->addToLog(__METHOD__."(): get_one_result_from_db_query(\"".$sqlExist."\");", DEBUG_MODE);
6007 throw new RuntimeException("More than one result ($count) for '$class'");
6008 }
6009 $sqlID = sprintf(
6010 'SELECT
6011 %1$s
6012 %2$s
6013 %3$s
6014 LIMIT 1',
6015 $class,
6016 $from,
6017 $condition,
6018 $order
6019 );
6020 $qres = $this->get_one_result_from_db_query(
6021 $sqlID,
6022 array(
6023 "origin" => __METHOD__,
6024 "force_return" => true,
6025 )
6026 );
6027 if ($qres["code"] !== "OK") {
6028 throw new RuntimeException("Failed database query (".$qres['message'].")");
6029 }
6030 $idx = intval(strval($qres['result']));
6031 $obj = $this->get_inst__om_dbform(array('obj' => $class, 'idx' => $idx));
6032 }
6033 return $obj;
6034 }
6035
6036 /**
6037 * Récupère la totalité des objets d'un type donné.
6038 * Si l'argument $sqlFilter est non-vide alors il sera utilisé pour filtrer les objets.
6039 * Si l'argument $sqlOrder est non-vide alors il sera utilisé pour ordonner les objets.
6040 *
6041 * Note: le code de cette méthode est largement inspiré de dbform::init_record_data().
6042 *
6043 * @return array|false
6044 */
6045 public function getAllObjects(string $type, string $sqlfilter = '', string $sqlOrder = '') {
6046
6047 // objet "modèle" utilisé pour accéder aux variables nécessaires à la construction
6048 // de la requête SQL et aussi pour y stocker les infos communes à tous les objets de
6049 // ce type (ex: tailles des champs, etc.).
6050 $objectTemplate = $this->get_inst__om_dbform(array('obj' => $type));
6051
6052 // construction de la requpete SQL (éventuellement avec un filtre)
6053 $sqlSelectedColumns = $objectTemplate->get_var_sql_forminc__champs();
6054 if (! empty($objectTemplate->_var_from_sql_forminc__champs)) {
6055 $sqlSelectedColumns = $objectTemplate->_var_from_sql_forminc__champs;
6056 }
6057 $sqlSelectColumns = implode(', ', $sqlSelectedColumns);
6058 $sqlSelectFrom = $objectTemplate->get_var_sql_forminc__tableSelect();
6059 if (! empty($objectTemplate->_var_from_sql_forminc__tableSelect)) {
6060 $sqlSelectFrom = $objectTemplate->_var_from_sql_forminc__tableSelect;
6061 }
6062 $sqlSelectWhere = '';
6063 if (! empty($sqlfilter)) {
6064 $sqlSelectWhere = "WHERE $sqlfilter";
6065 }
6066 $sqlSelectOrder = $objectTemplate->table." ASC";
6067 if (! empty($sqlOrder)) {
6068 $sqlSelectOrder = $sqlOrder;
6069 }
6070 $sql = sprintf('SELECT %s FROM %s %s ORDER BY %s',
6071 $sqlSelectColumns,
6072 $sqlSelectFrom,
6073 $sqlSelectWhere,
6074 $sqlSelectOrder);
6075
6076 // exécution de la requête
6077 $this->addToLog(__METHOD__."() : sql query: $sql", VERBOSE_MODE);
6078 $res = $this->db->execute($this->db->prepare($sql));
6079 if ($this->isDatabaseError($res, true)) {
6080 $this->addToLog(
6081 __METHOD__."(): erreur SQL sur la table '".$objectTemplate->table."': ".
6082 $res->getMessage(), DEBUG_MODE);
6083 return false;
6084 }
6085
6086 // recuperation des informations sur la structure de la table
6087 // ??? compatibilite POSTGRESQL (len = -1, type vide, flags vide)
6088 $info = $res->tableInfo();
6089
6090 // Recuperation des infos
6091 foreach ($info as $index => $item) {
6092 $objectTemplate->champs[$index] = $item['name'];
6093 $objectTemplate->longueurMax[$index] = $item['len'];
6094 $objectTemplate->type[$index] = $item['type'];
6095 $objectTemplate->flags[$index] = $item['flags'];
6096 }
6097
6098 // création et remplissage des objets
6099 $allObjects = array();
6100 while ($row = $res->fetchRow()) {
6101 $object = new $type(null);
6102 foreach(array('champs', 'longueurMax', 'type', 'flags') as $key) {
6103 $object->$key = $objectTemplate->$key;
6104 }
6105 foreach ($row as $index => $item) {
6106 $object->val[$index] = $item;
6107 }
6108 $allObjects[] = $object;
6109 }
6110
6111 return $allObjects;
6112 }
6113
6114 /**
6115 * Cette méthode permet de transformer une chaine de caractère standard
6116 * en une chaine sans caractères spéciaux ni accents.
6117 *
6118 * NOTE: la convertion est de 1 caractère vers 1 caractères afin de permettre
6119 * à la fonction 'sqlNormalizeSearchValue()' d'effectuer la même conversion.
6120 *
6121 * @param string $string La chaine de caractère à normaliser
6122 *
6123 * @return string La chaine de caractère normalisée
6124 */
6125 public function normalize_string($string = "") {
6126 //
6127 $invalid = array('Š'=>'S', 'š'=>'s', 'Đ'=>'D', 'đ'=>'d', 'Ž'=>'Z',
6128 'ž'=>'z', 'Č'=>'C', 'č'=>'c', 'Ć'=>'C', 'ć'=>'c', 'À'=>'A', 'Á'=>'A',
6129 'Â'=>'A', 'Ã'=>'A', 'Ä'=>'A', 'Å'=>'A', 'Æ'=>'A', 'Ç'=>'C', 'È'=>'E',
6130 'É'=>'E', 'Ê'=>'E', 'Ë'=>'E', 'Ì'=>'I', 'Í'=>'I', 'Î'=>'I', 'Ï'=>'I',
6131 'Ñ'=>'N', 'Ò'=>'O', 'Ó'=>'O', 'Ô'=>'O', 'Õ'=>'O', 'Ö'=>'O', 'Ø'=>'O',
6132 'Ù'=>'U', 'Ú'=>'U', 'Û'=>'U', 'Ü'=>'U', 'Ý'=>'Y', 'Þ'=>'B', 'ß'=>'S',
6133 'à'=>'a', 'á'=>'a', 'â'=>'a', 'ã'=>'a', 'ä'=>'a', 'å'=>'a', 'æ'=>'a',
6134 'ç'=>'c', 'è'=>'e', 'é'=>'e', 'ê'=>'e', 'ë'=>'e', 'ì'=>'i', 'í'=>'i',
6135 'î'=>'i', 'ï'=>'i', 'ð'=>'o', 'ñ'=>'n', 'ò'=>'o', 'ó'=>'o', 'ô'=>'o',
6136 'õ'=>'o', 'ö'=>'o', 'ø'=>'o', 'ù'=>'u', 'ú'=>'u', 'û'=>'u', 'ý'=>'y',
6137 'ý'=>'y', 'þ'=>'b', 'ÿ'=>'y', 'Ŕ'=>'R', 'ŕ'=>'r', "`" => "_",
6138 "„" => "_", "`" => "_", "´" => "_", "“" => "_", "”" => "_",
6139 "{" => "_", "}" => "_", "~" => "_", "–" => "-",
6140 "’" => "_", "(" => "_", ")" => "_", "/"=>"-", "'"=>"_",
6141 );
6142 $string = str_replace(array_keys($invalid), array_values($invalid), $string);
6143 $string = strtolower($string);
6144 return $string;
6145 }
6146
6147 /**
6148 * Transforme une chaine en une suite d'instruction pSQL pour la normaliser.
6149 * En l'occurence cela supprimer les accents et la passe en casse minuscule.
6150 *
6151 * NOTE: la convertion est de 1 caractère vers 1 caractères afin de permettre
6152 * à la fonction 'normalize_string()' d'effectuer la même conversion.
6153 *
6154 * @param string $value Chaîne recherchée à normaliser.
6155 *
6156 * @return string
6157 */
6158 public function sqlNormalizeSearchValue($value){
6159 $value = html_entity_decode($value, ENT_QUOTES);
6160 // échappement des caractères spéciaux
6161 $value = pg_escape_string($value);
6162 // encodage
6163 if (DBCHARSET != 'UTF8' and HTTPCHARSET == 'UTF-8') {
6164 $value = utf8_decode($value);
6165 }
6166 // normalisation des caractères
6167 $value = " TRANSLATE(LOWER(".
6168 $value."::varchar), ".
6169 "'ŠšĐđŽžČčĆćÀÁÂÃÄÅÆÇÈÉÊËÌÍÎÏÑÒÓÔÕÖØÙÚÛÜÝÞßàáâãäåæçèéêëìíîïðñòóôõöøùúûýþÿŔŕ`„´“”{}~–’()/''', ".
6170 "'SsDdZzCcCcAAAAAAACEEEEIIIINOOOOOOUUUUYBSaaaaaaaceeeeiiiionoooooouuuybyRr________-___-_') ";
6171 return $value;
6172 }
6173
6174 /**
6175 * Retourne une valeur unique récupérée à partir d'une requête SQL "basique".
6176 *
6177 * Il faut fournir une (ou deux) valeur filtre qui va sélectionner la ligne à partir
6178 * de laquelle récupérer la valeur souhaitée.
6179 *
6180 * @param string $table La table sur laquelle faire la requête
6181 * @param string $columnSelect La colonne permettant de récupérer la valeur recherchée
6182 * @param string $columnWhere La colonne à laquelle la valeur '$value' va être comparée
6183 * @param string $value La valeur filtre qui permet de sélectionner une ligne
6184 * @param string $extraTable Une table supplémentaire pour tester une seconde valeur
6185 * @param string $extraColumn Une colonne supplémentaire pour tester une seconde valeur
6186 * @param string $extraValue La seconde valeur 'filtre' pour mieux sélectionner une ligne
6187 * @param bool $normalizeColumn Si vaut 'true' alors on normalise la colonne '$columnWhere'
6188 * @param bool $normalizeValue Si vaut 'true' alors on normalise la valeur '$value'
6189 */
6190 public function getSingleSqlValue(
6191 string $table, string $columnSelect, string $columnWhere, string $value,
6192 string $extraTable = null, string $extraColumn = null, string $extraValue = null,
6193 bool $normalizeColumn = true, bool $normalizeValue = true) {
6194
6195 // colonnes utilisées pour la clause WHERE
6196 $columnNormalized = $columnWhere;
6197 if ($normalizeColumn) {
6198 $columnNormalized = $this->sqlNormalizeSearchValue($columnWhere);
6199 }
6200 $valueNormalized = $this->db->escapeSimple($value);
6201 if ($normalizeValue) {
6202 $valueNormalized = $this->db->escapeSimple(strtolower(
6203 $this->normalize_string($value)));
6204 }
6205 // valeur utilisée pour la clause WHERE
6206 if (ctype_digit($value)) {
6207 $columnNormalized = "$table.$table";
6208 $valueNormalized = intval($value);
6209 }
6210
6211 // SQL de base
6212 $sql = sprintf("SELECT $columnSelect FROM ".DB_PREFIXE."$table WHERE %s = '%s'",
6213 $columnNormalized,
6214 $valueNormalized);
6215
6216 // s'il y a une colonne supplémentaire à ajouter à la clause WHERE
6217 if (! empty($extraColumn)) {
6218
6219 // si cette colonne provient d'une autre table, on ajoute cette autre table
6220 $tables = array($table);
6221 if (! empty($extraTable) && $extraTable != $table) {
6222 $tables[] = $extraTable;
6223 }
6224
6225 // construit le SQL avec les deux colonnes dans la clause WHERE
6226 $columnsNormalized = array($columnNormalized, $extraColumn);
6227 $valuesNormalized = array($valueNormalized, $extraValue);
6228 $sql = sprintf("SELECT $columnSelect FROM %s WHERE %s",
6229 DB_PREFIXE.implode(', '.DB_PREFIXE, $tables),
6230 implode(' AND ', array_map(
6231 function ($col, $val) {
6232 return "$col = '$val'";
6233 },
6234 $columnsNormalized, $valuesNormalized)));
6235 }
6236
6237 // exécute la requête en demandant en résultat une unique valeur
6238 $qres = $this->get_one_result_from_db_query(
6239 $sql,
6240 array(
6241 "origin" => __METHOD__,
6242 "force_return" => true,
6243 )
6244 );
6245
6246 // vérifie les erreurs
6247 if ($qres["code"] !== "OK") {
6248 throw new RuntimeException(__("Erreur de base de données.").' '.
6249 sprintf(__("Détails: %s"), $qres["message"]));
6250 }
6251 // si la ligne n'a pas été trouvée
6252 if ($qres["result"] === null) {
6253 throw new InvalidArgumentException(__(
6254 "L'objet $table '$valueNormalized' n'existe pas."));
6255 }
6256
6257 // renvoie la valeur trouvée
6258 return $qres["result"];
6259 }
6260
6261 /**
6262 * Vérifie si la saisie du numéro complet respecte la numérotation
6263 * réglementaire d'un dossier d'urbanisme (code de l'urbanisme A423-1 à A423-4)
6264 * et renvoie les différents éléments constituant du numéro de dossier.
6265 *
6266 * Attention: cette fonction pourrait confondre un code entité avec un suffixe,
6267 * c'est pourquoi il est nécessaire de supprimer tout code entité
6268 * d'un numéro de dossier avant de le passer à cette fonction.
6269 *
6270 * @param string $numero identifiant du dossier
6271 * @param bool $espaces si 'true' accepte les espaces, sinon non
6272 * @return array ['di' => [...], 'da' => [...]] contenant les éléments
6273 */
6274 public function numerotation_urbanisme(string $numero, bool $espaces = false) {
6275 // Masques
6276 $blank = $espaces ? '\s' : '';
6277 $base = '(?P<type>[A-Z]{2,3})'.$blank.
6278 '(?P<departement>[0-9]{3}|02[AB])(?P<commune>[0-9]{3})'.$blank.
6279 '(?P<annee>[0-9]{2})'.$blank.
6280 '(?P<division>[A-Z0-9])(?P<numero>[0-9]{4})';
6281 $pattern_di = "/^$base(?P<suffixe>[A-Z]{1,5})?(?P<num_suffixe>[0-9]{1,2})?$/i";
6282 $pattern_da = "/^$base$/i";
6283
6284 $result = array(
6285 "di" => array(),
6286 "da" => array(),
6287 );
6288
6289 if (preg_match($pattern_di, $numero, $matches_di) === 1) {
6290 $result["di"] = $matches_di;
6291 $numero = $matches_di['type'].$matches_di['departement'].$matches_di['commune'].
6292 $matches_di['annee'].$matches_di['division'].$matches_di['numero'];
6293 }
6294 if (preg_match($pattern_da, $numero, $matches_da) === 1) {
6295 $result["da"] = $matches_da;
6296 }
6297
6298 return $result;
6299 }
6300
6301 /**
6302 * Vérifie si un formulaire est ouvert dans le contexte d'un
6303 * dossier d'instruction. Pour cela vérifiesi le paramètre retourformulaire
6304 * prend une de ces valeurs :
6305 * - dossier_instruction
6306 * - dossier_instruction_mes_encours
6307 * - dossier_instruction_tous_encours
6308 * - dossier_instruction_mes_clotures
6309 * - dossier_instruction_tous_clotures
6310 * - dossier_contentieux_mes_infractions
6311 * - dossier_contentieux_toutes_infractions
6312 * - dossier_contentieux_mes_recours
6313 * - dossier_contentieux_tous_recours
6314 * - sous_dossier
6315 *
6316 * /!\ Pour l'affichage des références cadastrales dans le formulaire de modification
6317 * d'un dossier d'instruction cette condition est aussi utilisée mais en javascript.
6318 * Si cette méthode est modifiée il faut également aller modifier les conditions
6319 * dans app/js/script.js (~l1580)
6320 *
6321 * @return boolean
6322 */
6323 public function contexte_dossier_instruction() {
6324 $retourformulaire = $this->get_submitted_get_value("retourformulaire");
6325
6326 if ($retourformulaire == 'dossier_instruction' ||
6327 $retourformulaire == 'dossier_instruction_mes_encours' ||
6328 $retourformulaire == 'dossier_instruction_tous_encours' ||
6329 $retourformulaire == 'dossier_instruction_mes_clotures' ||
6330 $retourformulaire == 'dossier_instruction_tous_clotures' ||
6331 $retourformulaire == 'dossier_contentieux_mes_infractions' ||
6332 $retourformulaire == 'dossier_contentieux_toutes_infractions' ||
6333 $retourformulaire == "dossier_contentieux_mes_recours" ||
6334 $retourformulaire == "dossier_contentieux_tous_recours" ||
6335 $retourformulaire == "sous_dossier") {
6336 return true;
6337 }
6338 return false;
6339 }
6340
6341 /**
6342 * Calcule l'id d'un sous-formulaire d'un objet donné. Pour cela
6343 * récupère le fichier de paramétrage de l'objet (.inc) pour accéder
6344 * à la variable de paramétrage des sous-formulaires.
6345 * Vérifie pour chacun des formulaires paramétrés si l'utilisateur à
6346 * les permissions nécessaires pour y accéder. A partir de ces
6347 * informations calcule l'identifiant du sous-onglet.
6348 *
6349 * @param string nom du formulaire auquel appartiens le sous-formulaire
6350 * @return integer identifiant du sus-formulaire
6351 */
6352 public function get_ui_tabs($obj, $direct_field, $direct_form, $direct_action, $direct_idx) {
6353 $tabs_id = 1;
6354 // Rétrocompatibilité : il est possible que dans les scripts inclus
6355 // par cette méthode, la variable $f soit attendue et utilisée.
6356 // @deprecated Cette variable ne doit plus être utilisée.
6357 $f = $this;
6358
6359 // Initialisation des paramètres
6360 $params = array(
6361 // action sur l'objet parent
6362 "action" => array(
6363 "default_value" => "",
6364 ),
6365 // (optionnel) soit idx soit direct_field : identifiant de
6366 // l'objet contexte
6367 "idx" => array(
6368 "default_value" => "",
6369 )
6370 );
6371 foreach ($this->get_initialized_parameters($params) as $key => $value) {
6372 ${$key} = $value;
6373 }
6374 // Vérification des paramètres obligatoires
6375 if (empty($obj)
6376 || empty($action)
6377 || (empty($idx) && empty($direct_field))
6378 || empty($direct_form)
6379 || empty($direct_action)
6380 || empty($direct_idx)) {
6381
6382 return $tabs_id;
6383 }
6384 // Inclusion du script [sql/<OM_DB_PHPTYPE>/<OBJ>.inc.php]
6385 // L'objectif est de récupéré la liste des onglets pour extraire
6386 // l'identifiant de l'onglet sélectionné
6387 // - Variable utilisée $sousformulaire
6388 $standard_script_path = "../sql/".OM_DB_PHPTYPE."/".$obj.".inc.php";
6389 $core_script_path = PATH_OPENMAIRIE."sql/".OM_DB_PHPTYPE."/".$obj.".inc.php";
6390 $gen_script_path = "../gen/sql/".OM_DB_PHPTYPE."/".$obj.".inc.php";
6391 $custom_script_path = $this->get_custom("tab", $obj);
6392
6393 if ($custom_script_path !== null) {
6394 require_once $custom_script_path;
6395 } elseif (file_exists($standard_script_path) === false
6396 && file_exists($core_script_path) === true) {
6397 require_once $core_script_path;
6398 } elseif (file_exists($standard_script_path) === false
6399 && file_exists($gen_script_path) === true) {
6400 require_once $gen_script_path;
6401 } elseif (file_exists($standard_script_path) === true) {
6402 require $standard_script_path;
6403 }
6404
6405 if (empty($sousformulaire)) {
6406 return $tabs_id;
6407 }
6408
6409 foreach ($sousformulaire as $sousform) {
6410 $droit = array($sousform, $sousform."_tab");
6411
6412 if ($this->isAccredited($droit, "OR")) {
6413 if ($sousform == $direct_form) {
6414 break;
6415 }
6416 $tabs_id++;
6417 }
6418 }
6419 return $tabs_id;
6420 }
6421
6422
6423 /**
6424 * Récupère une requête sql et renvoie les éléments nécessaires
6425 * pour ajouter le filtrage de des groupes à cette requête.
6426 * Renvoie ces éléments sous la forme d'un tableau associatif
6427 * ex : array(
6428 * ['FROM'] => 'LEFT JOIN ...',
6429 * ['WHERE'] => '...'
6430 * );
6431 *
6432 * @param string requête sql à faire évoluer
6433 * @return array
6434 */
6435 public function get_sql_filtre_groupe($sql = '') {
6436 $sqlCplmt = array(
6437 'FROM' => '',
6438 'WHERE' => ''
6439 );
6440
6441 // Tableau temporaire contenant les clauses pour chaque groupe
6442 $group_clause = array();
6443 foreach ($_SESSION["groupe"] as $key => $value) {
6444 $group_clause[$key] = "(groupe.code = '".$key."'";
6445 if($value["confidentiel"] !== true) {
6446 $group_clause[$key] .= " AND dossier_autorisation_type.confidentiel IS NOT TRUE";
6447 }
6448 $group_clause[$key] .= ")";
6449 }
6450 // Ajout du cas ou le code du groupe est null
6451 $group_clause['EMPTY'] = '(groupe.code IS NULL AND dossier_autorisation_type.confidentiel IS NOT TRUE)';
6452 // Mise en chaîne des clauses
6453 $conditions = implode(" OR ", $group_clause);
6454 if ($conditions !== "") {
6455 // On ajout le WHERE si il n'est pas présent
6456 if (stripos($sql, "WHERE") === false) {
6457 $sqlCplmt['WHERE'] .= "WHERE ";
6458 } else {
6459 $sqlCplmt['WHERE'] .= " AND ";
6460 }
6461
6462 $sqlCplmt['WHERE'] .= "(".$conditions.")";
6463 }
6464
6465
6466 // Jointures manquantes dans la requête d'origine qui devront être ajouté
6467 // dans la requête complémentaire
6468 if (preg_match("/".DB_PREFIXE."dossier_autorisation(?!_)/i", $sql) === 0) {
6469 $sqlCplmt['FROM'] .= "
6470 LEFT JOIN ".DB_PREFIXE."dossier_autorisation
6471 ON dossier_autorisation.dossier_autorisation = dossier.dossier_autorisation";
6472 }
6473 if (preg_match("/".DB_PREFIXE."dossier_autorisation_type_detaille(?!_)/i", $sql) === 0) {
6474 $sqlCplmt['FROM'] .= "
6475 LEFT JOIN ".DB_PREFIXE."dossier_autorisation_type_detaille
6476 ON dossier_autorisation.dossier_autorisation_type_detaille = dossier_autorisation_type_detaille.dossier_autorisation_type_detaille";
6477 }
6478 if (preg_match("/".DB_PREFIXE."dossier_autorisation_type(?!_)/i", $sql) === 0) {
6479 $sqlCplmt['FROM'] .= "
6480 LEFT JOIN ".DB_PREFIXE."dossier_autorisation_type
6481 ON dossier_autorisation_type.dossier_autorisation_type = dossier_autorisation_type_detaille.dossier_autorisation_type";
6482 }
6483 if (preg_match("/".DB_PREFIXE."groupe(?!_)/i", $sql) === 0) {
6484 $sqlCplmt['FROM'] .= "
6485 LEFT JOIN ".DB_PREFIXE."groupe
6486 ON dossier_autorisation_type.groupe = groupe.groupe";
6487 }
6488
6489 return $sqlCplmt;
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_sous_dossier($sql = '') {
6505 $sqlCplmt = array(
6506 'FROM' => '',
6507 'WHERE' => ''
6508 );
6509 // On ajout le WHERE si il n'est pas présent
6510 $sqlCplmt['WHERE'] = ' AND dossier_instruction_type.sous_dossier IS NOT TRUE';
6511 if (stripos($sql, "WHERE") === false) {
6512 $sqlCplmt['WHERE'] .= 'WHERE dossier_instruction_type.sous_dossier IS NOT TRUE';
6513 }
6514 // Jointures manquantes dans la requête d'origine qui devront être ajouté
6515 // dans la requête complémentaire
6516 if (preg_match("/".DB_PREFIXE."dossier_instruction_type(?!_)/i", $sql) === 0 ||
6517 preg_match("/".DB_PREFIXE."dossier_instruction_type(?!_)\s*(as|AS)/i", $sql) !== 0) {
6518 $sqlCplmt['FROM'] .= "
6519 LEFT JOIN ".DB_PREFIXE."dossier_instruction_type
6520 ON dossier.dossier_instruction_type = dossier_instruction_type.dossier_instruction_type";
6521 }
6522
6523 return $sqlCplmt;
6524 }
6525
6526 /**
6527 * Récupère le code entité de la collectivité passé en paramètre ou de la
6528 * collectivité de l'utilisateur connecté.
6529 *
6530 * @param string $om_collectivite Identifiant de la collectivité
6531 *
6532 * @return string Code entité ou null
6533 */
6534 public function get_collectivite_code_entite($om_collectivite = null) {
6535 // Récupération des paramètres de la collectivité voulu
6536 $parameters = $this->getCollectivite($om_collectivite);
6537 //
6538 return isset($parameters['code_entite']) === true && empty($parameters['code_entite']) === false ? strval(trim($parameters['code_entite'])) : null;
6539 }
6540
6541 /**
6542 * Surcharge du "core" pour pouvoir utiliser une surcharge de l'abstracteur
6543 * du connecteur de stockage.
6544 */
6545 function setFilestorage() {
6546 $this->storage = false;
6547 if ($this->setFilestorageConfig()) {
6548 // surchage du "core"
6549 require_once __DIR__.'/om_filestorage.class.php';
6550 $this->storage = new om_filestorage($this->filestorage_config);
6551 }
6552 }
6553
6554 /**
6555 * Permet de remplacer les espaces insécables par des espaces sécables
6556 * pour la valeur d'un champ texte.
6557 *
6558 * @param string $value Valeur à traiter
6559 * @return string la valeur avec des espaces sécables
6560 */
6561 function replace_non_breaking_space($value) {
6562 return preg_replace("/ |&nbsp;/", ' ', $value);
6563 }
6564 }

Properties

Name Value
svn:keywords "Id"

[email protected]
ViewVC Help
Powered by ViewVC 1.1.26