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

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

Parent Directory Parent Directory | Revision Log Revision Log


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

Properties

Name Value
svn:keywords "Id"

[email protected]
ViewVC Help
Powered by ViewVC 1.1.26