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

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

Parent Directory Parent Directory | Revision Log Revision Log


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

Properties

Name Value
svn:keywords "Id"

[email protected]
ViewVC Help
Powered by ViewVC 1.1.26