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

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

Parent Directory Parent Directory | Revision Log Revision Log


Revision 15037 - (hide annotations)
Mon Jun 19 13:23:51 2023 UTC (19 months, 1 week ago) by softime
File size: 253372 byte(s)
chore(branch): fusion de la branche d'intégration 5.18.0-develop dans le trunk

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

Properties

Name Value
svn:keywords "Id"

[email protected]
ViewVC Help
Powered by ViewVC 1.1.26