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

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

Parent Directory Parent Directory | Revision Log Revision Log


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

Properties

Name Value
svn:keywords "Id"

[email protected]
ViewVC Help
Powered by ViewVC 1.1.26