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

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

Parent Directory Parent Directory | Revision Log Revision Log


Revision 4626 - (hide annotations)
Tue Jun 28 08:34:31 2016 UTC (8 years, 7 months ago) by softime
File size: 59718 byte(s)
* Ajout de la vérification de l'option SIG dans le traitement de
  synchronisation des contraintes et son webservice.
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     require_once "../dyn/locales.inc.php";
14    
15     /**
16     *
17     */
18     require_once "../dyn/include.inc.php";
19    
20     /**
21     *
22     */
23     require_once "../dyn/debug.inc.php";
24    
25     /**
26     *
27     */
28     (defined("PATH_OPENMAIRIE") ? "" : define("PATH_OPENMAIRIE", ""));
29    
30     /**
31     *
32     */
33     require_once PATH_OPENMAIRIE."om_application.class.php";
34    
35     /**
36     *
37     */
38     class utils extends application {
39    
40 fmichon 4471 /**
41     * Gestion du favicon de l'application.
42     *
43     * @var mixed Configuration niveau application.
44     */
45     var $html_head_favicon = '../app/img/favicon.ico';
46    
47 mbroquet 3730 // {{{
48    
49     /**
50     *
51     */
52     function isAccredited($obj = NULL, $operator = "AND") {
53     // Lorsque l'utilisateur a le login 'admin' alors il est authorisé à
54     // accéder à toutes les fonctions du logiciel
55     // XXX à modifier pour changer ça vers un profil et non un login utilisateur
56     if ($_SESSION["login"] == "admin") {
57     return true;
58     }
59     // Fonctionnement standard
60     return parent::isAccredited($obj, $operator);
61     }
62    
63     /**
64     * SURCHARGE DE LA CLASSE OM_APPLICATION.
65     *
66     * @see Documentation sur la méthode parent 'om_application:getCollectivite'.
67     */
68     function getCollectivite($om_collectivite_idx = null) {
69     // On vérifie si une valeur a été passée en paramètre ou non.
70     if ($om_collectivite_idx === null) {
71     // Cas d'utilisation n°1 : nous sommes dans le cas où on
72     // veut récupérer les informations de la collectivité de
73     // l'utilisateur et on stocke l'info dans un flag.
74     $is_get_collectivite_from_user = true;
75     // On initialise l'identifiant de la collectivité
76     // à partir de la variable de session de l'utilisateur.
77     $om_collectivite_idx = $_SESSION['collectivite'];
78     } else {
79     // Cas d'utilisation n°2 : nous sommes dans le cas où on
80     // veut récupérer les informations de la collectivité
81     // passée en paramètre et on stocke l'info dans le flag.
82     $is_get_collectivite_from_user = false;
83     }
84     //
85     $collectivite_parameters = parent::getCollectivite($om_collectivite_idx);
86    
87     //// BEGIN - SURCHARGE OPENADS
88    
89     // Ajout du paramétrage du sig pour la collectivité
90     if (file_exists("../dyn/var.inc")) {
91     include "../dyn/var.inc";
92     }
93     if (file_exists("../dyn/sig.inc.php")) {
94     include "../dyn/sig.inc.php";
95     }
96     $idx_multi = $this->get_idx_collectivite_multi();
97    
98     if (isset($conf[$sig_externe][$collectivite_parameters['om_collectivite_idx']]) and
99 nhaye 4099 isset($conf[$sig_externe]["sig_treatment_mod"]) and
100 mbroquet 3730 isset($collectivite_parameters["option_sig"]) and
101     $collectivite_parameters["option_sig"] == "sig_externe"
102     ) {
103    
104     // Cas numéro 1 : conf sig définie sur la collectivité et option sig active
105     $collectivite_parameters["sig"] = $conf[$sig_externe][$collectivite_parameters['om_collectivite_idx']];
106 nhaye 4099 $collectivite_parameters["sig"]["sig_treatment_mod"] = $conf[$sig_externe]["sig_treatment_mod"];
107 mbroquet 3730
108     } elseif($idx_multi != '' and
109     isset($conf[$sig_externe][$idx_multi]) and
110 nhaye 4099 isset($conf[$sig_externe]["sig_treatment_mod"]) and
111 mbroquet 3730 isset($collectivite_parameters["option_sig"]) and
112     $collectivite_parameters["option_sig"] == "sig_externe") {
113     // Cas numéro : conf sig définie sur la collectivité multi et
114     // option_sig activé pour la collectivité mono
115     $collectivite_parameters["sig"] = $conf[$sig_externe][$idx_multi];
116 nhaye 4099 $collectivite_parameters["sig"]["sig_treatment_mod"] = $conf[$sig_externe]["sig_treatment_mod"];
117 mbroquet 3730 }
118    
119     //// END - SURCHARGE OPENADS
120    
121     // Si on se trouve dans le cas d'utilisation n°1
122     if ($is_get_collectivite_from_user === true) {
123     // Alors on stocke dans l'attribut collectivite le tableau de
124     // paramètres pour utilisation depuis la méthode 'getParameter'.
125     $this->collectivite = $collectivite_parameters;
126     }
127     // On retourne le tableau de paramètres.
128     return $collectivite_parameters;
129     }
130    
131     /**
132     * Retourne l'identifiant de la collectivité multi ou l'identifiant de la
133     * seule collectivité dans le cas d'une installation mono.
134     *
135     * @return integer Identifiant de la collectivité multi.
136     */
137     public function get_idx_collectivite_multi() {
138     // Récupère l'identifiant de la collectivité de niveau 2
139     $sql = "SELECT om_collectivite FROM ".DB_PREFIXE."om_collectivite WHERE niveau = '2'";
140     $idx = $this->db->getOne($sql);
141     $this->addToLog(__METHOD__.": db->getOne(\"".$sql."\");", VERBOSE_MODE);
142     $this->isDatabaseError($idx);
143    
144     // S'il n'y a pas de collectivité de niveau 2
145     if ($idx == null || $idx == '') {
146    
147     // Compte le nombre de collectivité
148     $sql = "SELECT count(om_collectivite) FROM ".DB_PREFIXE."om_collectivite";
149     $count = $this->db->getOne($sql);
150     $this->addToLog(__METHOD__.": db->getOne(\"".$sql."\");", VERBOSE_MODE);
151     $this->isDatabaseError($count);
152    
153     // S'il y qu'une collectivité
154     if ($count == 1) {
155    
156     // Récupère l'identifiant de la seule collectivité
157     $sql = "SELECT om_collectivite FROM ".DB_PREFIXE."om_collectivite WHERE niveau = '1'";
158     $idx = $this->db->getOne($sql);
159     $this->addToLog(__METHOD__.": db->getOne(\"".$sql."\");", VERBOSE_MODE);
160     $this->isDatabaseError($idx);
161     }
162    
163     }
164    
165     // Retourne l'identifiant
166     return $idx;
167     }
168    
169    
170     /**
171     * Retourne l'identifiant de la collectivité de l'element de la table passée
172     * en paramètre.
173     *
174     * @param string $table Table de l'element.
175     * @param mixed $id Identifiant de l'element.
176     *
177     * @return string identifiant de la collectivite ou false si l'element n'existe pas.
178     */
179     public function get_collectivite_of_element($table, $id) {
180     require_once '../obj/'.$table.'.class.php';
181     $instance = new $table($id, $this->db, null);
182     if($instance->getVal($instance->clePrimaire) != '') {
183     return $instance->getVal('om_collectivite');
184     }
185     return false;
186     }
187    
188    
189     /**
190     * Retrouve vrai si collectivité passée en paramètre est de niveau mono
191     */
192     function isCollectiviteMono($id) {
193     $sql = "SELECT niveau FROM ".DB_PREFIXE."om_collectivite WHERE om_collectivite = ".$id;
194     $niveau = $this->db->getOne($sql);
195     $this->addToLog(__METHOD__.": db->getOne(\"".$sql."\");", VERBOSE_MODE);
196     $this->isDatabaseError($niveau);
197     if ($niveau == '1') {
198     return true;
199     }
200     return false;
201     }
202    
203     // }}}
204    
205     // {{{
206    
207     var $om_utilisateur = array();
208     var $user_is_instr = NULL;
209     var $user_is_service = NULL;
210     var $user_is_admin = NULL;
211     var $user_is_service_ext = NULL;
212     var $user_is_qualificateur = NULL;
213     var $user_is_chef = NULL;
214     var $user_is_divisionnaire = NULL;
215     var $user_is_service_int = NULL;
216    
217     /**
218     * Méthode de récupération des informations de l'utilisateur connecté.
219     */
220     function getUserInfos() {
221    
222     // Si l'utilisateur est loggé $_SESSION existe
223     if(isset($_SESSION['login']) AND !empty($_SESSION['login'])) {
224    
225     // Récupération des infos utilisateur
226     $sqlUser = "SELECT om_utilisateur, nom, email, login, om_collectivite, om_profil ".
227     "FROM ".DB_PREFIXE."om_utilisateur WHERE login = '".$_SESSION['login']."'";
228     $resUser=$this->db->query($sqlUser);
229     $this->addToLog("getUserInfos(): db->query(\"".$sqlUser."\");", VERBOSE_MODE);
230     if ( database::isError($resUser)){
231     die();
232     }
233     $this->om_utilisateur=&$resUser->fetchRow(DB_FETCHMODE_ASSOC);
234    
235     // Récupère le profil et test si c'est un
236     $sqlProfil = "SELECT libelle FROM ".DB_PREFIXE."om_profil WHERE om_profil = ".$this->om_utilisateur['om_profil'];
237     $resProfil=$this->db->getOne($sqlProfil);
238     $this->addToLog("getUserInfos(): db->getOne(\"".$sqlProfil."\");", VERBOSE_MODE);
239     if (database::isError($resProfil)){
240     die();
241     }
242     // Sauvegarde le libelle du profil
243     $this->om_utilisateur["libelle_profil"] = $resProfil;
244    
245     // si c'est un administrateur technique
246     // XXX Mauvaise méthode, il faut utiliser isAccredited
247     if ($resProfil == "ADMINISTRATEUR TECHNIQUE"
248     || $resProfil == "ADMINISTRATEUR FONCTIONNEL") {
249     $this->user_is_admin = true;
250     } else {
251     $this->user_is_admin = false;
252     }
253    
254     //si c'est un service externe
255     if ($resProfil == "SERVICE CONSULTÉ") {
256     $this->user_is_service_ext = true;
257     } else {
258     $this->user_is_service_ext = false;
259     }
260    
261     //si c'est un service interne
262     if ($resProfil == "SERVICE CONSULTÉ INTERNE") {
263     $this->user_is_service_int = true;
264     } else {
265     $this->user_is_service_int = false;
266     }
267    
268     // si c'est un qualificateur
269     if ($resProfil == "QUALIFICATEUR") {
270     $this->user_is_qualificateur = true;
271     } else {
272     $this->user_is_qualificateur = false;
273     }
274    
275     // si c'est un chef de service
276     if ($resProfil == "CHEF DE SERVICE") {
277     $this->user_is_chef = true;
278     } else {
279     $this->user_is_chef = false;
280     }
281    
282     // si c'est un divisionnaire
283     if ($resProfil == "DIVISIONNAIRE") {
284     $this->user_is_divisionnaire = true;
285     } else {
286     $this->user_is_divisionnaire = false;
287     }
288    
289     // Récupération des infos instructeur
290     $sqlInstr = "SELECT instructeur.instructeur, instructeur.nom, instructeur.telephone,
291     division.division, division.code, division.libelle ".
292     "FROM ".DB_PREFIXE."instructeur INNER JOIN ".DB_PREFIXE."division ON division.division=instructeur.division ".
293     "WHERE instructeur.om_utilisateur = ".$this->om_utilisateur['om_utilisateur'];
294     $resInstr=$this->db->query($sqlInstr);
295     $this->addToLog("getUserInfos(): db->query(\"".$sqlInstr."\");", VERBOSE_MODE);
296     if ( database::isError($resInstr)){
297     die();
298     }
299     $tempInstr=&$resInstr->fetchRow(DB_FETCHMODE_ASSOC);
300     // Si il y a un resultat c'est un instructeur
301     if(count($tempInstr)>0) {
302     $this->user_is_instr=true;
303     $this->om_utilisateur = array_merge($this->om_utilisateur,$tempInstr);
304     } else {
305     $this->user_is_instr=false;
306     }
307    
308     // Récupération des infos de services consultés
309     $sqlServ = "SELECT service.service, service.abrege, service.libelle ".
310     "FROM ".DB_PREFIXE."service ".
311     "INNER JOIN ".DB_PREFIXE."lien_service_om_utilisateur ON lien_service_om_utilisateur.service=service.service ".
312     "WHERE lien_service_om_utilisateur.om_utilisateur = ".$this->om_utilisateur['om_utilisateur'];
313     $resServ=$this->db->query($sqlServ);
314     $this->addToLog("getUserInfos(): db->query(\"".$sqlServ."\");", VERBOSE_MODE);
315     if ( database::isError($resServ)){
316     die();
317     }
318    
319     while ($tempServ=&$resServ->fetchRow(DB_FETCHMODE_ASSOC)) {
320     $this->om_utilisateur['service'][]=$tempServ;
321     }
322     // Si il y a un resultat c'est un utilisateur de service
323     if(isset($this->om_utilisateur['service'])) {
324     $this->user_is_service=true;
325     } else {
326     $this->user_is_service=false;
327     }
328     }
329     }
330    
331     /**
332     * getter user_is_service
333     */
334     function isUserService() {
335     //
336     if (is_null($this->user_is_service)) {
337     //
338     $this->getUserInfos();
339     }
340     //
341     return $this->user_is_service;
342     }
343    
344     /**
345     * getter user_is_instr
346     */
347     function isUserInstructeur() {
348     //
349     if (is_null($this->user_is_instr)) {
350     //
351     $this->getUserInfos();
352     }
353     //
354     return $this->user_is_instr;
355     }
356    
357     function isUserAdministrateur() {
358     //
359     if (is_null($this->user_is_admin)) {
360     //
361     $this->getUserInfos();
362     }
363     //
364     return $this->user_is_admin;
365     }
366    
367     /**
368     * getter user_is_service_ext
369     */
370     function isUserServiceExt() {
371     //
372     if (is_null($this->user_is_service_ext)) {
373     //
374     $this->getUserInfos();
375     }
376     //
377     return $this->user_is_service_ext;
378     }
379    
380     /**
381     * getter user_is_service_int
382     */
383     function isUserServiceInt() {
384     //
385     if (is_null($this->user_is_service_int)) {
386     //
387     $this->getUserInfos();
388     }
389     //
390     return $this->user_is_service_int;
391     }
392    
393     /**
394     * getter user_is_qualificateur
395     */
396     function isUserQualificateur() {
397     //
398     if (is_null($this->user_is_qualificateur)) {
399     //
400     $this->getUserInfos();
401     }
402     //
403     return $this->user_is_qualificateur;
404     }
405    
406     /**
407     * getter user_is_chef
408     */
409     function isUserChef() {
410     //
411     if (is_null($this->user_is_chef)) {
412     //
413     $this->getUserInfos();
414     }
415     //
416     return $this->user_is_chef;
417     }
418    
419     /**
420     * getter user_is_divisionnaire
421     */
422     function isUserDivisionnaire() {
423     //
424     if (is_null($this->user_is_divisionnaire)) {
425     //
426     $this->getUserInfos();
427     }
428     //
429     return $this->user_is_divisionnaire;
430     }
431    
432     /**
433     * Méthode permettant de définir si l'utilisateur connecté peut ajouter un
434     * événement d'instruction
435     *
436     * @param integer $idx identifiant du dossier
437     * @param string $obj objet
438     *
439     * @return boolean true si il peut false sinon
440     */
441     function isUserCanAddObj($idx, $obj) {
442    
443     // Si il à le droit "bypass" il peut ajouter
444     if($this->isAccredited($obj."_ajouter_bypass") === true) {
445     return true;
446     }
447    
448     if($this->isAccredited(array($obj."_ajouter", $obj), "OR") === false) {
449     return false;
450     }
451    
452     $return = true;
453    
454     // Si il n'est pas dans la même division on défini le retour comme faux
455     // à moins qu'il ai un droit de changement de decision
456     if($this->isUserInstructeur() &&
457     $this->getDivisionFromDossier($idx) != $_SESSION["division"]) {
458    
459     $return = false;
460    
461     if ($obj == "instruction" && $this->isInstrCanChangeDecision($idx) === true) {
462    
463     $return = true;
464     }
465     }
466    
467     return $return;
468     }
469    
470     /**
471     * Permet de définir si un instructeur commune peut editer une instruction
472     *
473     * @param string $idx identifiant du dossier d'instruction
474     *
475     * @return boolean true si il peut
476     */
477     function isInstrCanChangeDecision($idx) {
478     if($this->isAccredited("instruction_changer_decision") === false) {
479     return false;
480     }
481    
482     // Sinon on vérifie l'éligibilité du dossier au changement de décision
483     $sql =
484     "SELECT
485     dossier.dossier
486     FROM
487     ".DB_PREFIXE."dossier
488     JOIN ".DB_PREFIXE."instruction ON instruction.instruction = (
489     SELECT instruction
490     FROM ".DB_PREFIXE."instruction
491     JOIN ".DB_PREFIXE."evenement on instruction.evenement=evenement.evenement
492     WHERE instruction.dossier = dossier.dossier
493     AND evenement.retour IS FALSE
494     ORDER BY date_evenement DESC, instruction DESC
495     LIMIT 1
496     )
497     JOIN ".DB_PREFIXE."evenement ON instruction.evenement=evenement.evenement
498     JOIN ".DB_PREFIXE."instructeur ON dossier.instructeur=instructeur.instructeur
499     JOIN ".DB_PREFIXE."om_utilisateur ON instructeur.om_utilisateur=om_utilisateur.om_utilisateur
500     JOIN ".DB_PREFIXE."om_collectivite ON om_collectivite.om_collectivite=om_utilisateur.om_collectivite
501     JOIN ".DB_PREFIXE."etat ON dossier.etat = etat.etat
502     WHERE
503    
504     (
505     evenement.type = 'arrete' AND
506     (
507     instruction.om_final_instruction IS TRUE
508     OR instruction.created_by_commune IS TRUE
509     ) OR
510     evenement.type = 'changement_decision'
511     )
512     AND evenement.retour IS FALSE
513     AND instruction.date_retour_signature IS NULL
514     AND instruction.date_envoi_rar IS NULL
515     AND instruction.date_retour_rar IS NULL
516     AND instruction.date_envoi_controle_legalite IS NULL
517     AND instruction.date_retour_controle_legalite IS NULL
518     AND etat.statut = 'encours'
519     AND dossier.dossier = '".$idx."'
520     AND om_collectivite.niveau = '2'
521     ";
522    
523    
524     // Si collectivité de l'utilisateur niveau mono alors filtre sur celle-ci
525     if ($this->isCollectiviteMono($_SESSION['collectivite']) === true) {
526     $sql .= " AND dossier.om_collectivite=".$_SESSION['collectivite'];
527     }
528     $res = $this->db->getone($sql);
529     if (database::isError($res)) {
530     die();
531     }
532     // Si le dossier n'est pas sujet au changement de decision
533     if($res == null) {
534     return false;
535     }
536     return true;
537     }
538    
539     // Ajout de variables de session contenant la division pour permettre une
540     // utilisation plus efficace dans les requetes
541     function triggerAfterLogin($utilisateur = NULL) {
542     //
543     $sql = "SELECT instructeur.division, division.code
544     FROM ".DB_PREFIXE."instructeur
545     LEFT JOIN ".DB_PREFIXE."division
546     ON instructeur.division = division.division
547     WHERE instructeur.om_utilisateur='".$utilisateur["om_utilisateur"]."'";
548     $res = $this->db->query($sql);
549     $this->addToLog("triggerAfterLogin(): db->query(\"".$sql."\");", VERBOSE_MODE);
550     if ( database::isError($res)){
551     die();
552     }
553     $row = $res->fetchrow(DB_FETCHMODE_ASSOC);
554     //
555     if (isset($row["division"]) && $row["division"] != NULL) {
556     $_SESSION["division"] = $row["division"];
557     $_SESSION["division_code"] = $row["code"];
558     } else {
559     $_SESSION["division"] = "0";
560     $_SESSION["division_code"] = "";
561     }
562    
563     }
564    
565     // Affichage des actions supplémentaires
566     function displayActionExtras() {
567     // Affichage de la division si l'utilisateur en possède une
568     if ($_SESSION["division"] != 0) {
569     echo "\t\t\t<li class=\"action-division\">";
570     echo "(".$_SESSION['division_code'].")";
571     echo "</li>\n";
572     }
573     }
574    
575     // }}}
576    
577    
578     function getDivisionFromDossier($dossier) {
579     //
580     $sql = "select division from ".DB_PREFIXE."dossier ";
581     $sql .= " where dossier='".$dossier."'";
582     //
583     $division = $this->db->getOne($sql);
584     $this->addToLog("getDivisionFromDossier(): db->getone(\"".$sql."\")", VERBOSE_MODE);
585     database::isError($division);
586     //
587     return $division;
588     }
589    
590     // {{{ GESTION DES FICHIERS
591    
592     /**
593     *
594     */
595     function notExistsError ($explanation = NULL) {
596     // message
597     $message_class = "error";
598     $message = _("Cette page n'existe pas.");
599     $this->addToMessage ($message_class, $message);
600     //
601     $this->setFlag(NULL);
602     $this->display();
603    
604     //
605     die();
606     }
607    
608     // }}}
609     /**
610     * Retourne le statut du dossier d'instruction
611     * @param string $idx Identifiant du dossier d'instruction
612     * @return string Le statut du dossier d'instruction
613     */
614     function getStatutDossier($idx){
615    
616     $statut = '';
617    
618     //Si l'identifiant du dossier d'instruction fourni est correct
619     if ( $idx != '' ){
620    
621     //On récupère le statut de l'état du dossier à partir de l'identifiant du
622     //dossier d'instruction
623     $sql = "SELECT etat.statut
624     FROM ".DB_PREFIXE."dossier
625     LEFT JOIN
626     ".DB_PREFIXE."etat
627     ON
628     dossier.etat = etat.etat
629     WHERE dossier ='".$idx."'";
630     $statut = $this->db->getOne($sql);
631     $this->addToLog("getStatutDossier() : db->getOne(\"".$sql."\")", VERBOSE_MODE);
632     if ( database::isError($statut)){
633     die();
634     }
635     }
636     return $statut;
637     }
638    
639     /**
640     * Formate le champ pour le type Timestamp
641     * @param date $date_str Date
642     * @param boolean $show Format pour l'affichage
643     * @return mixed False si le traitement échoue ou la date formatée
644     */
645     function formatTimestamp ($date_str, $show = true) {
646    
647     // Sépare la date et l'heure
648     $date = explode(" ", $date_str);
649     if (count($date) != 2) {
650     return false;
651     }
652    
653     // Date en BDD
654     $date_db = explode ('-', $date[0]);
655     // Date en affichage
656     $date_show = explode ('/', $date[0]);
657    
658     // Contrôle la composition de la date
659     if (count ($date_db) != 3 and count ($date_show) != 3) {
660     return false;
661     }
662    
663     if (count ($date_db) == 3) {
664     // Vérifie que c'est une date valide
665     if (!checkdate($date_db[1], $date_db[2], $date_db[0])) {
666     return false;
667     }
668     // Si c'est pour l'affichage de la date
669     if ($show == true) {
670     return $date_db [2]."/".$date_db [1]."/".$date_db [0]." ".$date[1];
671     } else {
672     return $date[0];
673     }
674     }
675    
676     //
677     if (count ($date_show) == 3) {
678     // Vérifie que c'est une date valide
679     if (!checkdate($date_show[1], $date_show[0], $date_show[2])) {
680     return false;
681     }
682     // Si c'est pour l'affichage de la date
683     if ($show == true) {
684     return $date[0];
685     } else {
686     return $date_show [2]."-".$date_show [1]."-".$date_show [0]." ".$date[1];
687     }
688    
689     }
690     return false;
691    
692     }
693    
694     /**
695     * Permet de calculer la liste des parcelles à partir de la chaîne passée en paramètre
696     * et la retourner sous forme d'un tableau associatif
697     *
698     * @param string $strParcelles Chaîne de la parcelles.
699     * @param string $collectivite_idx Collectivite de la parcelle.
700     *
701     * @return array (array(prefixe, quartier, section, parcelle), ...)
702     */
703     function parseParcelles($strParcelles, $collectivite_idx = null) {
704    
705     // Séparation des lignes
706     $references = explode(";", $strParcelles);
707     $liste_parcelles = array();
708    
709     // On boucle sur chaque ligne pour ajouter la liste des parcelles de chaque ligne
710     foreach ($references as $parcelles) {
711    
712     // On transforme la chaîne de la ligne de parcelles en tableau
713     $ref = str_split($parcelles);
714     // Les 1er caractères sont numériques
715     $num = true;
716    
717     // Tableau des champs de la ligne de références cadastrales
718     $reference_tab = array();
719     $temp = "";
720     foreach ($ref as $carac) {
721    
722     // Permet de tester si le caractère courant est de même type que le précédent
723     if(is_numeric($carac) === $num) {
724     $temp .= $carac;
725     } else {
726     // Bascule
727     $num = !$num;
728     // On stock le champ
729     $reference_tab[] = $temp;
730     // re-init de la valeur temporaire pour le champ suivant
731     $temp = $carac;
732     }
733     }
734     // Stockage du dernier champ sur lequel il n'y a pas eu de bascule
735     $reference_tab[] = $temp;
736     // Calcul des parcelles
737     $quartier = $reference_tab[0];
738     $sect = $reference_tab[1];
739    
740     $ancien_ref_parc = "";
741     for ($i=2; $i < count($reference_tab); $i+=2) {
742     if($collectivite_idx != null) {
743     // Récupération du code impot de l'arrondissement
744     $collectivite = $this->getCollectivite($collectivite_idx);
745     $parc["prefixe"] = $this->get_arrondissement_code_impot($quartier);
746     }
747     $parc["quartier"] = $quartier;
748     // Met en majuscule si besoin
749     $parc["section"] = strtoupper($sect);
750     if( $ancien_ref_parc == "" OR $reference_tab[$i-1] == "/") {
751     // 1ere parcelle ou parcelle individuelle
752     // Compléte par des "0" le début de la chaîne si besoin
753     $parc["parcelle"] = str_pad($reference_tab[$i], 4, "0", STR_PAD_LEFT);
754     // Ajout d'une parcelle à la liste
755     $liste_parcelles[] = $parc;
756     } elseif ($reference_tab[$i-1] == "A") {
757     // Interval de parcelles
758     for ($j=$ancien_ref_parc+1; $j <= $reference_tab[$i]; $j++) {
759     // Compléte par des "0" le début de la chaîne si besoin
760     $parc["parcelle"] = str_pad($j, 4, "0", STR_PAD_LEFT);
761     // Ajout d'une parcelle à la liste
762     $liste_parcelles[] = $parc;
763     }
764     }
765     //Gestion des erreurs
766     else{
767    
768     echo _("Une erreur de formattage a ete detecte dans la reference cadastrale du dossier ").$this->row['dossier'];
769     }
770     // Sauvegarde de la référence courante de parcelle
771     $ancien_ref_parc = $reference_tab[$i];
772     }
773     }
774    
775     return $liste_parcelles;
776     }
777    
778    
779     /**
780     * Récupère le code impôt par rapport au quartier.
781     *
782     * @param string $quartier Numéro de quartier.
783     * @return string Code impôts.
784     */
785     protected function get_arrondissement_code_impot($quartier) {
786     // Initialisation
787     $code_impots = "";
788     // Si le quartier fournis est correct
789     if ($quartier != "") {
790     // Requête SQL
791     $sql = "SELECT
792     arrondissement.code_impots
793     FROM
794     ".DB_PREFIXE."arrondissement
795     LEFT JOIN
796     ".DB_PREFIXE."quartier
797     ON
798     quartier.arrondissement = arrondissement.arrondissement
799     WHERE
800     quartier.code_impots = '".$quartier."'";
801    
802     }
803     $code_impots = $this->db->getOne($sql);
804     if ($code_impots === null) {
805     $code_impots = "";
806     }
807     $this->isDatabaseError($code_impots);
808     // Retour
809     return $code_impots;
810     }
811    
812    
813     /**
814     * Formate les parcelles en ajoutant le code impôt
815     * @param array $liste_parcelles Tableau des parcelles
816     * @return string Liste des parcelles formatées
817     */
818     function formatParcelleToSend($liste_parcelles) {
819    
820     //
821     $wParcelle = array();
822    
823     //Formatage des références cadastrales pour l'envoi
824     foreach ($liste_parcelles as $value) {
825    
826     // On ajoute les données dans le tableau que si quartier + section + parcelle
827     // a été fourni
828     if ($value["quartier"] !== ""
829     && $value["section"] !== ""
830     && $value["parcelle"] !== ""){
831    
832     //On récupère le code impôt de l'arrondissement
833     $arrondissement = $this->getCodeImpotByQuartier($value["quartier"]);
834    
835     //On ajoute la parcelle, si un arrondissement a été trouvé
836     if ($arrondissement!=="") {
837     //
838     $wParcelle[] = $arrondissement.$value["quartier"].
839     str_pad($value["section"], 2, " ", STR_PAD_LEFT).
840     $value["parcelle"];
841     }
842     }
843     }
844    
845     //
846     return $wParcelle;
847     }
848    
849     /**
850     * Récupère le code impôt par rapport au quartier
851     * @param string $quartier Numéro de quartier
852     * @return string Code impôt
853     */
854     function getCodeImpotByQuartier($quartier) {
855    
856     $arrondissement = "";
857    
858     // Si le quartier fournis est correct
859     if ($quartier != "") {
860    
861     // Requête SQL
862     $sql = "SELECT
863     arrondissement.code_impots
864     FROM
865     ".DB_PREFIXE."arrondissement
866     LEFT JOIN
867     ".DB_PREFIXE."quartier
868     ON
869     quartier.arrondissement = arrondissement.arrondissement
870     WHERE
871     quartier.code_impots = '".$quartier."'";
872     $this->addToLog("getCodeImpotByQuartier() : db->getOne(\"".$sql."\")", VERBOSE_MODE);
873     $arrondissement = $this->db->getOne($sql);
874     $this->isDatabaseError($arrondissement);
875     }
876    
877     // Retour
878     return $arrondissement;
879     }
880    
881    
882     /**
883     * Retourne true si tous les paramètres du SIG externe ont bien été définis
884     * @return bool true/false
885     */
886     public function issetSIGParameter($idx) {
887     $collectivite_idx = $this->get_collectivite_of_element("dossier", $idx);
888     $collectivite = $this->getCollectivite($collectivite_idx);
889     if(isset($collectivite["sig"])) {
890     return true;
891     } else {
892     return false;
893     }
894     }
895    
896     /**
897     * Permet de vérifier que des champs existe dans une table
898     * @param array $list_fields Liste des champs à tester
899     * @param string $table Table où les champs doivent exister
900     * @return mixed Retourne les champs qui n'existent pas
901     * ou true
902     */
903     public function check_field_exist($list_fields, $table) {
904    
905     // Instance de la classe en paramètre
906     require_once "../obj/".$table.".class.php";
907     $object = new $table("]", $this->db, DEBUG);
908    
909     // Récupère les champs de la table
910     foreach ($object->champs as $champ) {
911     $list_column[] = $champ;
912     }
913    
914     // Tableau des champs en erreur
915     $error_fields = array();
916    
917     // Pour chaque champ à tester
918     foreach ($list_fields as $value) {
919    
920     // S'il n'apparaît pas dans la liste des champs possible
921     if (!in_array($value, $list_column)) {
922    
923     // Alors le champ est ajouté au tableau des erreurs
924     $error_fields[] = $value;
925     }
926     }
927    
928     // Si le tableau des erreurs n'est pas vide on le retourne
929     if (count($error_fields) > 0) {
930     return $error_fields;
931     }
932    
933     // Sinon on retourne le booléen true
934     return true;
935    
936     }
937    
938     /*
939     *
940     */
941     /**
942     * Récupère la lettre type lié à un événement
943     * @param integer $evenement L'identifiant de l'événement
944     * @return integer Retourne l'idenfiant de la lettre-type ou true
945     */
946     function getLettreType($evenement){
947    
948     $lettretype = NULL;
949    
950     $sql =
951     "SELECT
952     lettretype
953     FROM
954     ".DB_PREFIXE."evenement
955     WHERE
956     evenement = $evenement";
957    
958     $this->addToLog("getLettreType() : db->query(\"".$sql."\")", VERBOSE_MODE);
959     $res = $this->db->query($sql);
960     if ( database::isError($res)){
961     die();
962     }
963    
964     if ( $res->numrows() > 0 ){
965    
966     $row=& $res->fetchRow(DB_FETCHMODE_ASSOC);
967     $lettretype = $row['lettretype'];
968     }
969    
970     return $lettretype;
971     }
972    
973     /**
974     * Retourne le type de dossier d'autorisation du dossier courant :
975     * @param $idxDossier Le numéro du dossier d'instruction
976     * @return le code du type détaillée de dossier d'autorisation
977     **/
978     function getDATDCode($idxDossier) {
979     $sql = "SELECT dossier_autorisation_type_detaille.code
980     FROM ".DB_PREFIXE."dossier_autorisation_type_detaille
981     INNER JOIN ".DB_PREFIXE."dossier_autorisation
982     ON dossier_autorisation_type_detaille.dossier_autorisation_type_detaille =
983     dossier_autorisation.dossier_autorisation_type_detaille
984     INNER JOIN ".DB_PREFIXE."dossier ON dossier.dossier_autorisation = dossier_autorisation.dossier_autorisation
985     WHERE dossier.dossier = '".$idxDossier."'";
986     $res = $this->db->getOne($sql);
987     $this->addToLog("getDATDCode() : db->getOne(\"".$sql."\")", VERBOSE_MODE);
988     if ( database::isError($res)){
989     die();
990     }
991     return $res;
992     }
993    
994     /**
995     * Permet de copier un enregistrement
996     * @param mixed $idx Identifiant de l'enregistrment
997     * @param string $obj Objet de l'enregistrment
998     * @param string $objsf Objets associés
999     * @return array Tableau des nouveaux id et du message
1000     */
1001     function copier($idx, $obj, $objsf) {
1002    
1003     // Tableau de résultat
1004     $resArray = array();
1005     // Message retourné à l'utilisateur
1006     $message = "";
1007     // Type du message (valid ou error)
1008     $message_type = "valid";
1009    
1010     // Requête SQL permettant de récupérer les informations sur l'objet métier
1011     $sql = "SELECT *
1012     FROM ".DB_PREFIXE.$obj."
1013     WHERE ".$obj." = ".$idx;
1014     $res = $this->db->query($sql);
1015     $this->isDatabaseError($res);
1016    
1017     // Valeurs clonées
1018     $valF = array();
1019     while ($row=& $res->fetchRow(DB_FETCHMODE_ASSOC)) {
1020     // Recupère la valeur
1021     $valF = $row;
1022     }
1023    
1024     // Valeurs non clonées
1025     // Identifiant modifié pour que ça soit un ajout
1026     $valF[$obj] = "]";
1027    
1028     // Inclus la classe de l'objet métier
1029     require_once "../obj/".$obj.".class.php";
1030    
1031     // Instance de l'objet métier
1032     $clone_obj = new $obj("]", $this->db, DEBUG);
1033     // Si dans l'objet métier la fonction "copier" existe
1034     if (method_exists($clone_obj, "update_for_copy")) {
1035     // Traitement sur les valeurs du duplicata
1036     $valF = $clone_obj->update_for_copy($valF, $objsf, DEBUG);
1037     // Recupère les messages retourné par la fonction
1038     $message .= $valF['message'];
1039     // Supprime les messages de la liste des valeurs
1040     unset($valF['message']);
1041     }
1042     // Ajoute le duplicata
1043     $clone_obj->ajouter($valF, $this->db, DEBUG);
1044     // Si aucune erreur se produit dans la classe instanciée
1045     if ($clone_obj->correct === true) {
1046     // Récupère l'identifiant de l'objet créé
1047     $clone_obj_id = $clone_obj->valF[$obj];
1048    
1049     // Message
1050     $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 />";
1051    
1052     // Ajout de l'identifant au tableau des résultat
1053     $resArray[$obj.'_'.$idx] = $clone_obj_id;
1054    
1055     // S'il y a au moins un objet metier associé
1056     if ($objsf != "") {
1057     // Liste des objet métier associés
1058     $list_objsf = explode(",", $objsf);
1059     // Pour chaque objet associé
1060     foreach ($list_objsf as $key => $objsf) {
1061     // Inclus la classe de l'objet métier associé
1062     require_once "../obj/".$objsf.".class.php";
1063    
1064     // Requête SQL permettant de récupérer les informations sur
1065     // l'objet métier associé
1066     $sql = "SELECT *
1067     FROM ".DB_PREFIXE.$objsf."
1068     WHERE ".$obj." = ".$idx;
1069     $res = $this->db->query($sql);
1070     $this->isDatabaseError($res);
1071    
1072     // Pour chaque élément associé
1073     while ($row=& $res->fetchRow(DB_FETCHMODE_ASSOC)){
1074     // Identifiant de l'objet associé à copier
1075     $idxsf = $row[$objsf];
1076    
1077     // Valeurs clonées
1078     $valF = $row;
1079     // Valeurs non clonées
1080     $valF[$obj] = $clone_obj_id;
1081     // Identifiant modifié pour que ça soit un ajout
1082     $valF[$objsf] = "]";
1083     // Instance de l'objet métier associé
1084     $clone_objsf = new $objsf("]", $this->db, DEBUG);
1085     // Si dans l'objet métier associé
1086     // la fonction "copier" existe
1087     if (method_exists($clone_objsf, "update_for_copy")) {
1088     // Traitement sur les valeurs du duplicata
1089     $valF = $clone_objsf->update_for_copy($valF, $objsf, DEBUG);
1090     // Recupère les messages retourné par la fonction
1091     $message .= $valF['message'];
1092     // Supprime les messages de la liste des valeurs
1093     unset($valF['message']);
1094     }
1095     // Ajoute le duplicata
1096     $clone_objsf->ajouter($valF, $this->db, DEBUG);
1097     // Si aucune erreur se produit dans la classe instanciée
1098     if ($clone_objsf->correct === true) {
1099     // Récupère l'identifiant de l'objet créé
1100     $clone_objsf_id = $clone_objsf->valF[$objsf];
1101    
1102     // Message
1103     $message .= sprintf(_("La copie de l'enregistrement %s avec l'identifiant %s s'est effectuee avec succes"), "<span class='bold'>"._($objsf)."</span>", "<span class='bold'>".$idxsf."</span>")."<br />";
1104    
1105     // Ajout de l'identifant au tableau des résultat
1106     $resArray[$objsf.'_'.$row[$objsf]] = $clone_objsf_id;
1107     } else {
1108    
1109     // Message d'erreur récupéré depuis la classe
1110     $message .= $clone_objsf->msg;
1111     // Type du message
1112     $message_type = "error";
1113     }
1114     }
1115     }
1116     }
1117     //
1118     } else {
1119    
1120     // Message d'erreur récupéré depuis la classe
1121     $message .= $clone_obj->msg;
1122     // Type du message
1123     $message_type = "error";
1124     }
1125    
1126     // Ajout du message au tableau des résultats
1127     $resArray['message'] = $message;
1128     // Ajout du type de message au tableau des résultats
1129     $resArray['message_type'] = $message_type;
1130    
1131     // Retourne le tableau des résultats
1132     return $resArray;
1133     }
1134    
1135     /**
1136     * Cette fonction prend en entrée le ou les paramètres du &contrainte qui sont entre
1137     * parenthèses (un ensemble de paramètres séparés par des points-virgules). Elle
1138     * sépare les paramètres et leurs valeurs puis construit et retourne un tableau
1139     * associatif qui contient pour les groupes et sous-groupes :
1140     * - un tableau de valeurs, avec un nom de groupe ou sous-groupe par ligne
1141     * pour les autres options :
1142     * - la valeur de l'option
1143     *
1144     * @param string $contraintes_param Chaîne contenant tous les paramètres
1145     *
1146     * @return array Tableau associatif avec paramètres et valeurs séparés
1147     */
1148     function explodeConditionContrainte($contraintes_param) {
1149    
1150     // Initialisation des variables
1151     $return = array();
1152     $listGroupes = "";
1153     $listSousgroupes = "";
1154     $service_consulte = "";
1155     $affichage_sans_arborescence = "";
1156    
1157     // Sépare toutes les conditions avec leurs valeurs et les met dans un tableau
1158     $contraintes_params = explode(";", $contraintes_param);
1159    
1160     // Pour chaque paramètre de &contraintes
1161     foreach ($contraintes_params as $value) {
1162     // Récupère le mot-clé "liste_groupe" et les valeurs du paramètre
1163     if (strstr($value, "liste_groupe=")) {
1164     // On enlève le mots-clé "liste_groupe=", on garde les valeurs
1165     $listGroupes = str_replace("liste_groupe=", "", $value);
1166     }
1167     // Récupère le mot-clé "liste_ssgroupe" et les valeurs du paramètre
1168     if (strstr($value, "liste_ssgroupe=")) {
1169     // On enlève le mots-clé "liste_ssgroupe=", on garde les valeurs
1170     $listSousgroupes = str_replace("liste_ssgroupe=", "", $value);
1171     }
1172     // Récupère le mot-clé "service_consulte" et la valeur du paramètre
1173     if (strstr($value, "service_consulte=")) {
1174     // On enlève le mots-clé "service_consulte=", on garde sa valeur
1175     $service_consulte = str_replace("service_consulte=", "", $value);
1176     }
1177     // Récupère le mot-clé "affichage_sans_arborescence" et la valeur du
1178     // paramètre
1179     if (strstr($value, "affichage_sans_arborescence=")) {
1180     // On enlève le mots-clé "affichage_sans_arborescence=", on garde la valeur
1181     $affichage_sans_arborescence = str_replace("affichage_sans_arborescence=", "", $value);
1182     }
1183     }
1184    
1185     // Récupère dans des tableaux la liste des groupes et sous-groupes qui
1186     // doivent être utilisés lors du traitement de la condition
1187     if ($listGroupes != "") {
1188     $listGroupes = array_map('trim', explode(",", $listGroupes));
1189     }
1190     if ($listSousgroupes != "") {
1191     $listSousgroupes = array_map('trim', explode(",", $listSousgroupes));
1192     }
1193    
1194     // Tableau à retourner
1195     $return['groupes'] = $listGroupes;
1196     $return['sousgroupes'] = $listSousgroupes;
1197     $return['service_consulte'] = $service_consulte;
1198     $return['affichage_sans_arborescence'] = $affichage_sans_arborescence;
1199     return $return;
1200     }
1201    
1202     /**
1203     * Méthode qui complète la clause WHERE de la requête SQL de récupération des
1204     * contraintes, selon les paramètres fournis. Elle permet d'ajouter une condition sur
1205     * les groupes, sous-groupes et les services consultés.
1206     *
1207     * @param $string $part Contient tous les paramètres fournis à &contraintes séparés
1208     * par des points-virgules, tel que définis dans l'état.
1209     * array[] $conditions Paramètre optionnel, contient les conditions déjà explosées
1210     * par la fonction explodeConditionContrainte()
1211     *
1212     * @return string Contient les clauses WHERE à ajouter à la requête SQL principale.
1213     */
1214     function traitement_condition_contrainte($part, $conditions = NULL) {
1215    
1216     // Initialisation de la condition
1217     $whereContraintes = "";
1218     // Lorsqu'on a déjà les conditions explosées dans le paramètre $conditions, on
1219     // utilise ces données. Sinon, on appelle la méthode qui explose la chaîne de
1220     // caractères contenant l'ensemble des paramètres.
1221     if (is_array($conditions)){
1222     $explodeConditionContrainte = $conditions;
1223     }
1224     else {
1225     $explodeConditionContrainte = $this->explodeConditionContrainte($part);
1226     }
1227     // Récupère les groupes, sous-groupes et service_consulte pour la condition
1228     $groupes = $explodeConditionContrainte['groupes'];
1229     $sousgroupes = $explodeConditionContrainte['sousgroupes'];
1230     $service_consulte = $explodeConditionContrainte['service_consulte'];
1231    
1232     // Pour chaque groupe
1233     if ($groupes != "") {
1234     foreach ($groupes as $key => $groupe) {
1235     // Si le groupe n'est pas vide
1236     if (!empty($groupe)) {
1237     // Choisit l'opérateur logique
1238     $op_logique = $key > 0 ? 'OR' : 'AND (';
1239     // Ajoute la condition
1240     $whereContraintes .= " ".$op_logique." lower(trim(both E'\n\r\t' from contrainte.groupe)) = lower('"
1241     .pg_escape_string($groupe)."')";
1242     }
1243     }
1244     // S'il y a des valeurs dans groupe
1245     if (count($groupe) > 0) {
1246     // Ferme la parenthèse
1247     $whereContraintes .= " ) ";
1248     }
1249     }
1250    
1251     // Pour chaque sous-groupe
1252     if ($sousgroupes != "") {
1253     foreach ($sousgroupes as $key => $sousgroupe) {
1254     // Si le sous-groupe n'est pas vide
1255     if (!empty($sousgroupe)) {
1256     // Choisit l'opérateur logique
1257     $op_logique = $key > 0 ? 'OR' : 'AND (';
1258     // Ajoute la condition
1259     $whereContraintes .= " ".$op_logique." lower(trim(both E'\n\r\t' from contrainte.sousgroupe)) = lower('"
1260     .pg_escape_string($sousgroupe)."')";
1261     }
1262     }
1263     // S'il y a des valeurs dans sous-groupe
1264     if (count($sousgroupes) > 0) {
1265     // Ferme la parenthèse
1266     $whereContraintes .= " ) ";
1267     }
1268     }
1269    
1270     // Si l'option service_consulte n'est pas vide
1271     if ($service_consulte != "") {
1272     // Ajoute la condition
1273     $whereContraintes .= " AND service_consulte = cast(lower('".$service_consulte."') as boolean) ";
1274     }
1275    
1276     // Condition retournée
1277     return $whereContraintes;
1278     }
1279    
1280     /**
1281     * Calcule une date par l'ajout ou la soustraction de mois ou de jours.
1282     *
1283     * @param date $date Date de base (format dd-mm-yyyy)
1284     * @param integer $delay Délais à ajouter
1285     * @param string $operator Opérateur pour le calcul ("-" ou "+")
1286     * @param string $type Type de calcul (mois ou jour)
1287     *
1288     * @return date Date calculée
1289     */
1290     function mois_date($date, $delay, $operator = "+", $type = "mois") {
1291    
1292     // Si un type n'est pas définit
1293     if ($type != "mois" && $type != "jour") {
1294     //
1295     return null;
1296     }
1297    
1298     // Si aucune date n'a été fournie ou si ce n'est pas une date correctement
1299     // formatée
1300     if ( is_null($date) || $date == "" ||
1301     preg_match('/[0-9]{4}-[0-9]{2}-[0-9]{2}/', $date) == 0 ){
1302     return null;
1303     }
1304    
1305     // Si l'opérateur n'est pas définit
1306     if ($operator != "+" && $operator != "-") {
1307     //
1308     return null;
1309     }
1310    
1311     // Découpage de la date
1312     $temp = explode("-", $date);
1313     $day = (int) $temp[2];
1314     $month = (int) $temp[1];
1315     $year = (int) $temp[0];
1316    
1317     // Si c'est un calcul sur des mois
1318     // Le calcul par mois ne se fait pas comme le calcul par jour car
1319     // les fonctions PHP ne réalisent pas les calculs réglementaires
1320     if ($type == "mois") {
1321    
1322     // Si c'est une addition
1323     if ($operator == '+') {
1324     // Année à ajouter
1325     $year += floor($delay / 12);
1326     // Mois restant
1327     $nb_month = ($delay % 12);
1328     // S'il y a des mois restant
1329     if ($nb_month != 0) {
1330     // Ajout des mois restant
1331     $month += $nb_month;
1332     // Si ça dépasse le mois 12 (décembre)
1333     if ($month > 12) {
1334     // Soustrait 12 au mois
1335     $month -= 12;
1336     // Ajoute 1 à l'année
1337     $year += 1;
1338     }
1339     }
1340     }
1341    
1342     // Si c'est une soustraction
1343     if ($operator == "-") {
1344     // Année à soustraire
1345     $year -= floor($delay / 12);
1346     // Mois restant
1347     $nb_month = ($delay % 12);
1348     // S'il y a des mois restant
1349     if ($nb_month != 0) {
1350     // Soustrait le délais
1351     $month -= $nb_month;
1352     // Si ça dépasse le mois 1 (janvier)
1353     if ($month < 1) {
1354     // Soustrait 12 au mois
1355     $month += 12;
1356     // Ajoute 1 à l'année
1357     $year -= 1;
1358     }
1359     }
1360     }
1361    
1362     // Calcul du nombre de jours dans le mois sélectionné
1363     switch($month) {
1364     // Mois de février
1365     case "2":
1366     if ($year % 4 == 0 && $year % 100 != 0 || $year % 400 == 0) {
1367     $day_max = 29;
1368     } else {
1369     $day_max = 28;
1370     }
1371     break;
1372     // Mois d'avril, juin, septembre et novembre
1373     case "4":
1374     case "6":
1375     case "9":
1376     case "11":
1377     $day_max = 30;
1378     break;
1379     // Mois de janvier, mars, mai, juillet, août, octobre et décembre
1380     default:
1381     $day_max = 31;
1382     }
1383    
1384     // Si le jour est supérieur au jour maximum du mois
1385     if ($day > $day_max) {
1386     // Le jour devient le jour maximum
1387     $day = $day_max;
1388     }
1389    
1390     // Compléte le mois et le jour par un 0 à gauche si c'est un chiffre
1391     $month = str_pad($month, 2, "0", STR_PAD_LEFT);
1392     $day = str_pad($day, 2, "0", STR_PAD_LEFT);
1393    
1394     // Résultat du calcul
1395     $date_result = $year."-".$month."-".$day;
1396     }
1397    
1398     // Si c'est un calcul sur des jours
1399     if ($type == "jour") {
1400     //
1401     $datetime = new DateTime($date);
1402     // Si le délai est un numérique
1403     if (is_numeric($delay)) {
1404     // Modifie la date
1405     $datetime->modify($operator.$delay.' days');
1406     }
1407     // Résultat du calcul
1408     $date_result = $datetime->format('Y-m-d');
1409     }
1410    
1411     // Retourne la date calculée
1412     return $date_result;
1413     }
1414    
1415     /**
1416     * Vérifie la valididité d'une date.
1417     *
1418     * @param string $pDate Date à vérifier
1419     *
1420     * @return boolean
1421     */
1422     function check_date($pDate) {
1423    
1424     // Vérifie si c'est une date valide
1425     if (preg_match("/^([0-9]{4})-([0-9]{2})-([0-9]{2})$/", $pDate, $date)
1426     && checkdate($date[2], $date[3], $date[1])
1427     && $date[1] >= 1900) {
1428     //
1429     return true;
1430     }
1431    
1432     //
1433     return false;
1434     }
1435    
1436     /**
1437     * Permet de tester le bypass
1438     *
1439     * @param string $obj le nom de l'objet
1440     * @param string $permission_suffix
1441     * @return boolean
1442     */
1443     function can_bypass($obj="", $permission_suffix=""){
1444     //On teste le droit bypass
1445     if ($permission_suffix!=""&&$obj!=""&&
1446     $this->isAccredited($obj."_".$permission_suffix."_bypass")){
1447     return true;
1448     }
1449     return false;
1450     }
1451    
1452    
1453     /**
1454     * Vérifie l'option de numérisation.
1455     *
1456     * @return boolean
1457     */
1458     public function is_option_digitalization_folder_enabled() {
1459     //
1460     if ($this->getParameter("option_digitalization_folder") !== true) {
1461     //
1462     return false;
1463     }
1464     //
1465     return true;
1466     }
1467    
1468    
1469     /**
1470     * Vérifie que l'option d'accès au portail citoyen est activée.
1471     *
1472     * @return boolean
1473     */
1474     public function is_option_citizen_access_portal_enabled() {
1475     //
1476     $option = $this->getParameter("option_portail_acces_citoyen");
1477     //
1478     if ($option !== 'true') {
1479     //
1480     return false;
1481     }
1482    
1483     //
1484     return true;
1485     }
1486    
1487 nmeucci 4108 /**
1488 softime 4626 * Vérifie que l'option du SIG est activée.
1489     *
1490     * @return boolean
1491     */
1492     public function is_option_sig_enabled() {
1493     //
1494     $option = $this->getParameter("option_sig");
1495     //
1496     if ($option !== 'sig_externe' || $option !== 'sig_interne') {
1497     //
1498     return false;
1499     }
1500    
1501     //
1502     return true;
1503     }
1504    
1505     /**
1506 nmeucci 4108 * Vérifie le niveau de la collectivité de l'utilisateur connecté
1507     *
1508     * @return boolean
1509     */
1510     function has_collectivite_multi() {
1511     $idx_multi = $this->get_idx_collectivite_multi();
1512     if (intval($_SESSION['collectivite']) === intval($idx_multi)) {
1513     return true;
1514     }
1515     return false;
1516     }
1517 mbroquet 3730
1518 nmeucci 4108
1519 softime 3976 /**
1520     * Pour un path absolu donné, retourne le relatif à la racine de
1521     * l'application.
1522     *
1523     * @param string $absolute Chemin absolu.
1524     *
1525     * @return mixed Faux si échec sinon chemin relatif.
1526     */
1527     public function get_relative_path($absolute) {
1528     if ($this->get_path_app() === false) {
1529     return false;
1530     }
1531     $path_app = $this->get_path_app();
1532     return str_replace($path_app, '', $absolute);
1533     }
1534    
1535    
1536     /**
1537     * Retourne le path absolu de la racine de l'application
1538     *
1539     * @return mixed Faux si échec sinon chemin absolu
1540     */
1541     public function get_path_app() {
1542     $match = array();
1543     preg_match( '/(.*)\/[a-zA-Z0-9]+\/\.\.\/core\/$/', PATH_OPENMAIRIE, $match);
1544     // On vérifie qu'il n'y a pas d'erreur
1545     if (isset($match[1]) === false) {
1546     return false;
1547     }
1548     return $match[1];
1549     }
1550    
1551 nmeucci 3981 /**
1552     * Compose un tableau et retourne son code HTML
1553     *
1554     * @param string $id ID CSS du conteneur
1555     * @param array $headers entêtes de colonnes
1556     * @param array $rows lignes
1557     * @return string code HTML
1558     */
1559 nmeucci 3980 public function compose_generate_table($id, $headers, $rows) {
1560 nmeucci 3981 //
1561     $html = '';
1562 nmeucci 3980 // Début conteneur
1563 nmeucci 3981 $html .= '<div id="'.$id.'">';
1564 nmeucci 3980 // Début tableau
1565 nmeucci 3981 $html .= '<table class="tab-tab">';
1566 nmeucci 3980 // Début entête
1567 nmeucci 3981 $html .= '<thead>';
1568     $html .= '<tr class="ui-tabs-nav ui-accordion ui-state-default tab-title">';
1569 nmeucci 3980 // Colonnes
1570     $nb_colonnes = count($headers);
1571     $index_last_col = $nb_colonnes - 1;
1572     foreach ($headers as $i => $header) {
1573     if ($i === 0) {
1574     $col = ' firstcol';
1575     }
1576     if ($i === $index_last_col) {
1577     $col = ' lastcol';
1578     }
1579 nmeucci 3981 $html .= '<th class="title col-'.$i.$col.'">';
1580     $html .= '<span class="name">';
1581     $html .= $header;
1582     $html .= '</span>';
1583     $html .= '</th>';
1584 nmeucci 3980 }
1585     // Fin entête
1586 nmeucci 3981 $html .= '</tr>';
1587     $html .= '</thead>';
1588 nmeucci 3980 // Début corps
1589 nmeucci 3981 $html .= '<tbody>';
1590 nmeucci 3980 // Lignes
1591     foreach ($rows as $cells) {
1592     // Début ligne
1593 nmeucci 3981 $html .= '<tr class="tab-data">';
1594 nmeucci 3980 // Cellules
1595     foreach ($cells as $j => $cell) {
1596     if ($j === 0) {
1597     $col = ' firstcol';
1598     }
1599     if ($j === $index_last_col) {
1600     $col = ' lastcol';
1601     }
1602 nmeucci 3981 $html .= '<td class="title col-'.$j.$col.'">';
1603     $html .= '<span class="name">';
1604     $html .= $cell;
1605     $html .= '</span>';
1606     $html .= '</td>';
1607 nmeucci 3980 }
1608     // Fin ligne
1609 nmeucci 3981 $html .= "</tr>";
1610 nmeucci 3980 }
1611     // Fin corps
1612 nmeucci 3981 $html .= '</tbody>';
1613 nmeucci 3980 // Fin tableau
1614 nmeucci 3981 $html .= '</table>';
1615 nmeucci 3980 // Fin conteneur
1616 nmeucci 3981 $html .= '</div>';
1617     //
1618     return $html;
1619 nmeucci 3980 }
1620 nmeucci 4156
1621     /**
1622     * Retourne le login de l'utilisateur connecté + entre parenthèses son nom
1623     * s'il en a un.
1624     *
1625     * @return string myLogin OU myLogin (myName)
1626     */
1627     public function get_connected_user_login_name() {
1628     // Requête et stockage des informations de l'user connecté
1629     $this->getUserInfos();
1630     // Si le nom existe et est défini on le récupère
1631     $nom = "";
1632     if (isset($this->om_utilisateur["nom"])
1633     && !empty($this->om_utilisateur["nom"])) {
1634     $nom = trim($this->om_utilisateur["nom"]);
1635     }
1636     // Définition de l'émetteur : obligatoirement son login
1637     $emetteur = $_SESSION['login'];
1638     // Définition de l'émetteur : + éventuellement son nom
1639     if ($nom != "") {
1640     $emetteur .= " (".$nom.")";
1641     }
1642     // Retour
1643     return $emetteur;
1644     }
1645 nhaye 4218
1646     /**
1647     * Récupère la liste des identifiants des collectivités
1648     *
1649     * @param string $return_type 'string' ou 'array' selon que l'on retourne
1650     * respectivement une chaîne ou un tableau
1651     * @param string $separator caractère(s) séparateur(s) employé(s) lorsque
1652     * l'on retourne une chaîne, inutilisé si tableau
1653     * @return mixed possibilité de boolean/string/array :
1654     * false si erreur BDD sinon résultat
1655     */
1656     public function get_list_id_collectivites($return_type = 'string', $separator = ',') {
1657     $sql = "
1658     SELECT
1659     array_to_string(
1660     array_agg(om_collectivite),
1661     '".$separator."'
1662     ) as list_id_collectivites
1663     FROM ".DB_PREFIXE."om_collectivite";
1664     $list = $this->db->getone($sql);
1665     $this->addTolog(
1666     __FILE__." - ".__METHOD__." : db->getone(\"".$sql."\");",
1667     VERBOSE_MODE
1668     );
1669     if ($this->isDatabaseError($list, true)) {
1670     return false;
1671     }
1672     if ($return_type === 'array') {
1673     return explode($separator, $list);
1674     }
1675     return $list;
1676     }
1677 mbroquet 3730 }
1678    
1679     ?>

[email protected]
ViewVC Help
Powered by ViewVC 1.1.26