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

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

Parent Directory Parent Directory | Revision Log Revision Log


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

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

Properties

Name Value
svn:keywords "Id"

[email protected]
ViewVC Help
Powered by ViewVC 1.1.26