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

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

Parent Directory Parent Directory | Revision Log Revision Log


Revision 5254 - (hide annotations)
Fri Nov 25 10:59:14 2016 UTC (8 years, 2 months ago) by nhaye
File size: 61625 byte(s)
Merge de la branche d'application des nouvelles actions (passage des lots en nouvelles actions)

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

[email protected]
ViewVC Help
Powered by ViewVC 1.1.26