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

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

Parent Directory Parent Directory | Revision Log Revision Log


Revision 16749 - (hide annotations)
Thu Feb 1 12:13:31 2024 UTC (11 months, 3 weeks ago) by softime
File size: 265151 byte(s)
chore(branch): fusion de la branche d'intégration 6.3.0-develop dans le trunk

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

Properties

Name Value
svn:keywords "Id"

[email protected]
ViewVC Help
Powered by ViewVC 1.1.26