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

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

Parent Directory Parent Directory | Revision Log Revision Log


Revision 4099 - (hide annotations)
Tue May 10 14:20:09 2016 UTC (8 years, 8 months ago) by nhaye
File size: 56697 byte(s)
Merge du developpement de la branche synchro_contraintes_commune

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

[email protected]
ViewVC Help
Powered by ViewVC 1.1.26