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

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

Parent Directory Parent Directory | Revision Log Revision Log


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

Properties

Name Value
svn:keywords "Id"

[email protected]
ViewVC Help
Powered by ViewVC 1.1.26