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

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

Parent Directory Parent Directory | Revision Log Revision Log


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

Properties

Name Value
svn:keywords "Id"

[email protected]
ViewVC Help
Powered by ViewVC 1.1.26