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

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

Parent Directory Parent Directory | Revision Log Revision Log


Revision 17542 - (show annotations)
Thu Apr 25 13:27:12 2024 UTC (9 months, 1 week ago) by softime
File size: 271342 byte(s)
chore(branch): fusion de la branche d'intégration 6.5.0-develop dans le trunk

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

Properties

Name Value
svn:keywords "Id"

[email protected]
ViewVC Help
Powered by ViewVC 1.1.26