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

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

Parent Directory Parent Directory | Revision Log Revision Log


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

[email protected]
ViewVC Help
Powered by ViewVC 1.1.26