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

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

Parent Directory Parent Directory | Revision Log Revision Log


Revision 6565 - (hide annotations)
Fri Apr 21 16:14:15 2017 UTC (7 years, 9 months ago) by softime
File size: 64580 byte(s)
Merge de la version 4.0.0

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     // Si il à le droit "bypass" il peut ajouter
433     if($this->isAccredited($obj."_ajouter_bypass") === true) {
434     return true;
435     }
436     if($this->isAccredited(array($obj."_ajouter", $obj), "OR") === false) {
437     return false;
438     }
439 softime 6565
440    
441     // On inclut le script qui déclare la classe à instancier
442     require_once "../obj/".$obj.".class.php";
443     $return = false;
444    
445     $object_instance = new $obj(
446     ']',
447     $this->db,
448     0
449     );
450 mbroquet 3730 // Si il n'est pas dans la même division on défini le retour comme faux
451     // à moins qu'il ai un droit de changement de decision
452 softime 6565 if($this->isUserInstructeur() === true &&
453     ($object_instance->getDivisionFromDossier($idx) == $_SESSION["division"] or
454     ($obj == "instruction" &&
455     $object_instance->isInstrCanChangeDecision($idx) === true))) {
456 mbroquet 3730
457 softime 6565 $return = true;
458 mbroquet 3730 }
459    
460     return $return;
461     }
462    
463 softime 6565
464 mbroquet 3730 /**
465 softime 6565 * Ajout de variables de session contenant la division pour permettre une
466     * utilisation plus efficace dans les requetes.
467 mbroquet 3730 *
468 softime 6565 * @param array $utilisateur Tableau d'informations de l'utilisateur.
469 mbroquet 3730 */
470 softime 6565 function triggerAfterLogin(array $utilisateur = NULL) {
471     // Récupération de la division de l'utilisateur.
472 mbroquet 3730 $sql = "SELECT instructeur.division, division.code
473 softime 6565 FROM ".DB_PREFIXE."instructeur
474     LEFT JOIN ".DB_PREFIXE."division
475     ON instructeur.division = division.division
476     WHERE instructeur.om_utilisateur='".$utilisateur["om_utilisateur"]."'";
477 mbroquet 3730 $res = $this->db->query($sql);
478 softime 6565 $this->addToLog(
479     "triggerAfterLogin(): db->query(\"".$sql."\");",
480     VERBOSE_MODE
481     );
482     if (database::isError($res)) {
483 mbroquet 3730 die();
484     }
485     $row = $res->fetchrow(DB_FETCHMODE_ASSOC);
486 softime 6565 // Enregistrement de la division en session
487 mbroquet 3730 if (isset($row["division"]) && $row["division"] != NULL) {
488     $_SESSION["division"] = $row["division"];
489     $_SESSION["division_code"] = $row["code"];
490     } else {
491     $_SESSION["division"] = "0";
492     $_SESSION["division_code"] = "";
493     }
494 softime 6565 // Récupération du paramétrage des groupes de l'utilisateur.
495     $sqlGroupes = "SELECT groupe.code, lien_om_utilisateur_groupe.confidentiel, lien_om_utilisateur_groupe.enregistrement_demande, groupe.libelle
496     FROM ".DB_PREFIXE."groupe
497     RIGHT JOIN ".DB_PREFIXE."lien_om_utilisateur_groupe ON
498     lien_om_utilisateur_groupe.groupe = groupe.groupe
499     AND lien_om_utilisateur_groupe.login = '".$utilisateur["login"] ."'
500     ORDER BY libelle";
501     $resGroupes = $this->db->query($sqlGroupes);
502     $this->addToLog(
503     "triggerAfterLogin(): db->query(\"".$sqlGroupes."\");",
504     VERBOSE_MODE
505     );
506     if (database::isError($resGroupes)) {
507     die();
508     }
509     // Si aucun résultat alors récupération du paramétrage des groupes du profil
510     if ($resGroupes->numRows() === 0) {
511     $sqlGroupes = "SELECT groupe.code, lien_om_profil_groupe.confidentiel, lien_om_profil_groupe.enregistrement_demande, groupe.libelle
512     FROM ".DB_PREFIXE."groupe
513     RIGHT JOIN ".DB_PREFIXE."lien_om_profil_groupe ON
514     lien_om_profil_groupe.groupe = groupe.groupe
515     AND om_profil = ".$utilisateur["om_profil"] ."
516     ORDER BY libelle";
517     $resGroupes = $this->db->query($sqlGroupes);
518     $this->addToLog(
519     "triggerAfterLogin(): db->query(\"".$sqlGroupes."\");",
520     VERBOSE_MODE
521     );
522     if (database::isError($resGroupes)) {
523     die();
524     }
525     }
526     $_SESSION["groupe"] = array();
527     // Enregistrement des groupe en session
528     while ($row = $resGroupes->fetchrow(DB_FETCHMODE_ASSOC)) {
529     if ($row["confidentiel"] === 't') {
530     $row["confidentiel"] = true;
531     } else {
532     $row["confidentiel"] = false;
533     }
534     if ($row["enregistrement_demande"] === 't') {
535     $row["enregistrement_demande"] = true;
536     } else {
537     $row["enregistrement_demande"] = false;
538     }
539     $_SESSION["groupe"][$row["code"]] = array(
540     "confidentiel" => $row["confidentiel"],
541     "enregistrement_demande" => $row["enregistrement_demande"],
542     "libelle" => $row["libelle"],
543     );
544     }
545     }
546 mbroquet 3730
547     // Affichage des actions supplémentaires
548     function displayActionExtras() {
549     // Affichage de la division si l'utilisateur en possède une
550     if ($_SESSION["division"] != 0) {
551     echo "\t\t\t<li class=\"action-division\">";
552     echo "(".$_SESSION['division_code'].")";
553     echo "</li>\n";
554     }
555     }
556    
557     // }}}
558    
559    
560     // {{{ GESTION DES FICHIERS
561    
562     /**
563     *
564     */
565     function notExistsError ($explanation = NULL) {
566     // message
567     $message_class = "error";
568     $message = _("Cette page n'existe pas.");
569     $this->addToMessage ($message_class, $message);
570     //
571     $this->setFlag(NULL);
572     $this->display();
573    
574     //
575     die();
576     }
577    
578     // }}}
579     /**
580     * Retourne le statut du dossier d'instruction
581     * @param string $idx Identifiant du dossier d'instruction
582     * @return string Le statut du dossier d'instruction
583     */
584     function getStatutDossier($idx){
585    
586     $statut = '';
587    
588     //Si l'identifiant du dossier d'instruction fourni est correct
589     if ( $idx != '' ){
590    
591     //On récupère le statut de l'état du dossier à partir de l'identifiant du
592     //dossier d'instruction
593     $sql = "SELECT etat.statut
594     FROM ".DB_PREFIXE."dossier
595     LEFT JOIN
596     ".DB_PREFIXE."etat
597     ON
598     dossier.etat = etat.etat
599     WHERE dossier ='".$idx."'";
600     $statut = $this->db->getOne($sql);
601     $this->addToLog("getStatutDossier() : db->getOne(\"".$sql."\")", VERBOSE_MODE);
602     if ( database::isError($statut)){
603     die();
604     }
605     }
606     return $statut;
607     }
608    
609     /**
610     * Formate le champ pour le type Timestamp
611     * @param date $date_str Date
612     * @param boolean $show Format pour l'affichage
613     * @return mixed False si le traitement échoue ou la date formatée
614     */
615     function formatTimestamp ($date_str, $show = true) {
616    
617     // Sépare la date et l'heure
618     $date = explode(" ", $date_str);
619     if (count($date) != 2) {
620     return false;
621     }
622    
623     // Date en BDD
624     $date_db = explode ('-', $date[0]);
625     // Date en affichage
626     $date_show = explode ('/', $date[0]);
627    
628     // Contrôle la composition de la date
629     if (count ($date_db) != 3 and count ($date_show) != 3) {
630     return false;
631     }
632    
633     if (count ($date_db) == 3) {
634     // Vérifie que c'est une date valide
635     if (!checkdate($date_db[1], $date_db[2], $date_db[0])) {
636     return false;
637     }
638     // Si c'est pour l'affichage de la date
639     if ($show == true) {
640     return $date_db [2]."/".$date_db [1]."/".$date_db [0]." ".$date[1];
641     } else {
642     return $date[0];
643     }
644     }
645    
646     //
647     if (count ($date_show) == 3) {
648     // Vérifie que c'est une date valide
649     if (!checkdate($date_show[1], $date_show[0], $date_show[2])) {
650     return false;
651     }
652     // Si c'est pour l'affichage de la date
653     if ($show == true) {
654     return $date[0];
655     } else {
656     return $date_show [2]."-".$date_show [1]."-".$date_show [0]." ".$date[1];
657     }
658    
659     }
660     return false;
661    
662     }
663    
664     /**
665     * Permet de calculer la liste des parcelles à partir de la chaîne passée en paramètre
666     * et la retourner sous forme d'un tableau associatif
667     *
668     * @param string $strParcelles Chaîne de la parcelles.
669     * @param string $collectivite_idx Collectivite de la parcelle.
670     *
671     * @return array (array(prefixe, quartier, section, parcelle), ...)
672     */
673     function parseParcelles($strParcelles, $collectivite_idx = null) {
674    
675     // Séparation des lignes
676     $references = explode(";", $strParcelles);
677     $liste_parcelles = array();
678    
679     // On boucle sur chaque ligne pour ajouter la liste des parcelles de chaque ligne
680     foreach ($references as $parcelles) {
681    
682     // On transforme la chaîne de la ligne de parcelles en tableau
683     $ref = str_split($parcelles);
684     // Les 1er caractères sont numériques
685     $num = true;
686    
687     // Tableau des champs de la ligne de références cadastrales
688     $reference_tab = array();
689     $temp = "";
690     foreach ($ref as $carac) {
691    
692     // Permet de tester si le caractère courant est de même type que le précédent
693     if(is_numeric($carac) === $num) {
694     $temp .= $carac;
695     } else {
696     // Bascule
697     $num = !$num;
698     // On stock le champ
699     $reference_tab[] = $temp;
700     // re-init de la valeur temporaire pour le champ suivant
701     $temp = $carac;
702     }
703     }
704     // Stockage du dernier champ sur lequel il n'y a pas eu de bascule
705     $reference_tab[] = $temp;
706     // Calcul des parcelles
707     $quartier = $reference_tab[0];
708     $sect = $reference_tab[1];
709    
710     $ancien_ref_parc = "";
711     for ($i=2; $i < count($reference_tab); $i+=2) {
712     if($collectivite_idx != null) {
713     // Récupération du code impot de l'arrondissement
714     $collectivite = $this->getCollectivite($collectivite_idx);
715     $parc["prefixe"] = $this->get_arrondissement_code_impot($quartier);
716     }
717     $parc["quartier"] = $quartier;
718     // Met en majuscule si besoin
719     $parc["section"] = strtoupper($sect);
720     if( $ancien_ref_parc == "" OR $reference_tab[$i-1] == "/") {
721     // 1ere parcelle ou parcelle individuelle
722     // Compléte par des "0" le début de la chaîne si besoin
723     $parc["parcelle"] = str_pad($reference_tab[$i], 4, "0", STR_PAD_LEFT);
724     // Ajout d'une parcelle à la liste
725     $liste_parcelles[] = $parc;
726     } elseif ($reference_tab[$i-1] == "A") {
727     // Interval de parcelles
728     for ($j=$ancien_ref_parc+1; $j <= $reference_tab[$i]; $j++) {
729     // Compléte par des "0" le début de la chaîne si besoin
730     $parc["parcelle"] = str_pad($j, 4, "0", STR_PAD_LEFT);
731     // Ajout d'une parcelle à la liste
732     $liste_parcelles[] = $parc;
733     }
734     }
735     //Gestion des erreurs
736     else{
737    
738     echo _("Une erreur de formattage a ete detecte dans la reference cadastrale du dossier ").$this->row['dossier'];
739     }
740     // Sauvegarde de la référence courante de parcelle
741     $ancien_ref_parc = $reference_tab[$i];
742     }
743     }
744    
745     return $liste_parcelles;
746     }
747    
748    
749     /**
750     * Récupère le code impôt par rapport au quartier.
751     *
752     * @param string $quartier Numéro de quartier.
753     * @return string Code impôts.
754     */
755     protected function get_arrondissement_code_impot($quartier) {
756     // Initialisation
757     $code_impots = "";
758     // Si le quartier fournis est correct
759     if ($quartier != "") {
760     // Requête SQL
761     $sql = "SELECT
762     arrondissement.code_impots
763     FROM
764     ".DB_PREFIXE."arrondissement
765     LEFT JOIN
766     ".DB_PREFIXE."quartier
767     ON
768     quartier.arrondissement = arrondissement.arrondissement
769     WHERE
770     quartier.code_impots = '".$quartier."'";
771    
772     }
773     $code_impots = $this->db->getOne($sql);
774     if ($code_impots === null) {
775     $code_impots = "";
776     }
777     $this->isDatabaseError($code_impots);
778     // Retour
779     return $code_impots;
780     }
781    
782    
783     /**
784     * Formate les parcelles en ajoutant le code impôt
785     * @param array $liste_parcelles Tableau des parcelles
786     * @return string Liste des parcelles formatées
787     */
788     function formatParcelleToSend($liste_parcelles) {
789    
790     //
791     $wParcelle = array();
792    
793     //Formatage des références cadastrales pour l'envoi
794     foreach ($liste_parcelles as $value) {
795    
796     // On ajoute les données dans le tableau que si quartier + section + parcelle
797     // a été fourni
798     if ($value["quartier"] !== ""
799     && $value["section"] !== ""
800     && $value["parcelle"] !== ""){
801    
802     //On récupère le code impôt de l'arrondissement
803     $arrondissement = $this->getCodeImpotByQuartier($value["quartier"]);
804    
805     //On ajoute la parcelle, si un arrondissement a été trouvé
806     if ($arrondissement!=="") {
807     //
808     $wParcelle[] = $arrondissement.$value["quartier"].
809     str_pad($value["section"], 2, " ", STR_PAD_LEFT).
810     $value["parcelle"];
811     }
812     }
813     }
814    
815     //
816     return $wParcelle;
817     }
818    
819     /**
820     * Récupère le code impôt par rapport au quartier
821     * @param string $quartier Numéro de quartier
822     * @return string Code impôt
823     */
824     function getCodeImpotByQuartier($quartier) {
825    
826     $arrondissement = "";
827    
828     // Si le quartier fournis est correct
829     if ($quartier != "") {
830    
831     // Requête SQL
832     $sql = "SELECT
833     arrondissement.code_impots
834     FROM
835     ".DB_PREFIXE."arrondissement
836     LEFT JOIN
837     ".DB_PREFIXE."quartier
838     ON
839     quartier.arrondissement = arrondissement.arrondissement
840     WHERE
841     quartier.code_impots = '".$quartier."'";
842     $this->addToLog("getCodeImpotByQuartier() : db->getOne(\"".$sql."\")", VERBOSE_MODE);
843     $arrondissement = $this->db->getOne($sql);
844     $this->isDatabaseError($arrondissement);
845     }
846    
847     // Retour
848     return $arrondissement;
849     }
850    
851    
852     /**
853     * Retourne true si tous les paramètres du SIG externe ont bien été définis
854     * @return bool true/false
855     */
856     public function issetSIGParameter($idx) {
857     $collectivite_idx = $this->get_collectivite_of_element("dossier", $idx);
858     $collectivite = $this->getCollectivite($collectivite_idx);
859     if(isset($collectivite["sig"])) {
860     return true;
861     } else {
862     return false;
863     }
864     }
865    
866     /**
867     * Permet de vérifier que des champs existe dans une table
868     * @param array $list_fields Liste des champs à tester
869     * @param string $table Table où les champs doivent exister
870     * @return mixed Retourne les champs qui n'existent pas
871     * ou true
872     */
873     public function check_field_exist($list_fields, $table) {
874    
875     // Instance de la classe en paramètre
876     require_once "../obj/".$table.".class.php";
877     $object = new $table("]", $this->db, DEBUG);
878    
879     // Récupère les champs de la table
880     foreach ($object->champs as $champ) {
881     $list_column[] = $champ;
882     }
883    
884     // Tableau des champs en erreur
885     $error_fields = array();
886    
887     // Pour chaque champ à tester
888     foreach ($list_fields as $value) {
889    
890     // S'il n'apparaît pas dans la liste des champs possible
891     if (!in_array($value, $list_column)) {
892    
893     // Alors le champ est ajouté au tableau des erreurs
894     $error_fields[] = $value;
895     }
896     }
897    
898     // Si le tableau des erreurs n'est pas vide on le retourne
899     if (count($error_fields) > 0) {
900     return $error_fields;
901     }
902    
903     // Sinon on retourne le booléen true
904     return true;
905    
906     }
907    
908     /*
909     *
910     */
911     /**
912     * Récupère la lettre type lié à un événement
913     * @param integer $evenement L'identifiant de l'événement
914     * @return integer Retourne l'idenfiant de la lettre-type ou true
915     */
916     function getLettreType($evenement){
917    
918     $lettretype = NULL;
919    
920     $sql =
921     "SELECT
922     lettretype
923     FROM
924     ".DB_PREFIXE."evenement
925     WHERE
926     evenement = $evenement";
927    
928     $this->addToLog("getLettreType() : db->query(\"".$sql."\")", VERBOSE_MODE);
929     $res = $this->db->query($sql);
930     if ( database::isError($res)){
931     die();
932     }
933    
934     if ( $res->numrows() > 0 ){
935    
936     $row=& $res->fetchRow(DB_FETCHMODE_ASSOC);
937     $lettretype = $row['lettretype'];
938     }
939    
940     return $lettretype;
941     }
942    
943     /**
944     * Retourne le type de dossier d'autorisation du dossier courant :
945     * @param $idxDossier Le numéro du dossier d'instruction
946     * @return le code du type détaillée de dossier d'autorisation
947     **/
948     function getDATDCode($idxDossier) {
949     $sql = "SELECT dossier_autorisation_type_detaille.code
950     FROM ".DB_PREFIXE."dossier_autorisation_type_detaille
951     INNER JOIN ".DB_PREFIXE."dossier_autorisation
952     ON dossier_autorisation_type_detaille.dossier_autorisation_type_detaille =
953     dossier_autorisation.dossier_autorisation_type_detaille
954     INNER JOIN ".DB_PREFIXE."dossier ON dossier.dossier_autorisation = dossier_autorisation.dossier_autorisation
955     WHERE dossier.dossier = '".$idxDossier."'";
956     $res = $this->db->getOne($sql);
957     $this->addToLog("getDATDCode() : db->getOne(\"".$sql."\")", VERBOSE_MODE);
958     if ( database::isError($res)){
959     die();
960     }
961     return $res;
962     }
963    
964     /**
965 fmichon 4708 * Retourne le type de dossier d'autorisation du dossier courant :
966     * @param $idxDossier Le numéro du dossier d'instruction
967     * @return le code du type de dossier d'autorisation
968     **/
969     function getDATCode($idxDossier) {
970     $sql = "
971     SELECT
972     dossier_autorisation_type.code
973     FROM
974     ".DB_PREFIXE."dossier_autorisation_type
975     INNER JOIN ".DB_PREFIXE."dossier_autorisation_type_detaille
976     ON dossier_autorisation_type.dossier_autorisation_type=dossier_autorisation_type_detaille.dossier_autorisation_type
977     INNER JOIN ".DB_PREFIXE."dossier_autorisation
978     ON dossier_autorisation_type_detaille.dossier_autorisation_type_detaille=dossier_autorisation.dossier_autorisation_type_detaille
979     INNER JOIN ".DB_PREFIXE."dossier
980     ON dossier.dossier_autorisation=dossier_autorisation.dossier_autorisation
981     WHERE
982     dossier.dossier = '".$idxDossier."'
983     ";
984     $res = $this->db->getOne($sql);
985     $this->addToLog(__METHOD__."(): db->getOne(\"".$sql."\")", VERBOSE_MODE);
986     if ( database::isError($res)){
987     die();
988     }
989     return $res;
990     }
991    
992     /**
993 mbroquet 3730 * Permet de copier un enregistrement
994     * @param mixed $idx Identifiant de l'enregistrment
995     * @param string $obj Objet de l'enregistrment
996     * @param string $objsf Objets associés
997     * @return array Tableau des nouveaux id et du message
998     */
999     function copier($idx, $obj, $objsf) {
1000    
1001     // Tableau de résultat
1002     $resArray = array();
1003     // Message retourné à l'utilisateur
1004     $message = "";
1005     // Type du message (valid ou error)
1006     $message_type = "valid";
1007    
1008     // Requête SQL permettant de récupérer les informations sur l'objet métier
1009     $sql = "SELECT *
1010     FROM ".DB_PREFIXE.$obj."
1011     WHERE ".$obj." = ".$idx;
1012     $res = $this->db->query($sql);
1013     $this->isDatabaseError($res);
1014    
1015     // Valeurs clonées
1016     $valF = array();
1017     while ($row=& $res->fetchRow(DB_FETCHMODE_ASSOC)) {
1018     // Recupère la valeur
1019     $valF = $row;
1020     }
1021    
1022     // Valeurs non clonées
1023     // Identifiant modifié pour que ça soit un ajout
1024     $valF[$obj] = "]";
1025    
1026     // Inclus la classe de l'objet métier
1027     require_once "../obj/".$obj.".class.php";
1028    
1029     // Instance de l'objet métier
1030     $clone_obj = new $obj("]", $this->db, DEBUG);
1031     // Si dans l'objet métier la fonction "copier" existe
1032     if (method_exists($clone_obj, "update_for_copy")) {
1033     // Traitement sur les valeurs du duplicata
1034     $valF = $clone_obj->update_for_copy($valF, $objsf, DEBUG);
1035     // Recupère les messages retourné par la fonction
1036     $message .= $valF['message'];
1037     // Supprime les messages de la liste des valeurs
1038     unset($valF['message']);
1039     }
1040     // Ajoute le duplicata
1041     $clone_obj->ajouter($valF, $this->db, DEBUG);
1042     // Si aucune erreur se produit dans la classe instanciée
1043     if ($clone_obj->correct === true) {
1044     // Récupère l'identifiant de l'objet créé
1045     $clone_obj_id = $clone_obj->valF[$obj];
1046    
1047     // Message
1048     $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 />";
1049    
1050     // Ajout de l'identifant au tableau des résultat
1051     $resArray[$obj.'_'.$idx] = $clone_obj_id;
1052    
1053     // S'il y a au moins un objet metier associé
1054     if ($objsf != "") {
1055     // Liste des objet métier associés
1056     $list_objsf = explode(",", $objsf);
1057     // Pour chaque objet associé
1058     foreach ($list_objsf as $key => $objsf) {
1059     // Inclus la classe de l'objet métier associé
1060     require_once "../obj/".$objsf.".class.php";
1061    
1062     // Requête SQL permettant de récupérer les informations sur
1063     // l'objet métier associé
1064     $sql = "SELECT *
1065     FROM ".DB_PREFIXE.$objsf."
1066     WHERE ".$obj." = ".$idx;
1067     $res = $this->db->query($sql);
1068     $this->isDatabaseError($res);
1069    
1070     // Pour chaque élément associé
1071     while ($row=& $res->fetchRow(DB_FETCHMODE_ASSOC)){
1072     // Identifiant de l'objet associé à copier
1073     $idxsf = $row[$objsf];
1074    
1075     // Valeurs clonées
1076     $valF = $row;
1077     // Valeurs non clonées
1078     $valF[$obj] = $clone_obj_id;
1079     // Identifiant modifié pour que ça soit un ajout
1080     $valF[$objsf] = "]";
1081     // Instance de l'objet métier associé
1082     $clone_objsf = new $objsf("]", $this->db, DEBUG);
1083     // Si dans l'objet métier associé
1084     // la fonction "copier" existe
1085     if (method_exists($clone_objsf, "update_for_copy")) {
1086     // Traitement sur les valeurs du duplicata
1087     $valF = $clone_objsf->update_for_copy($valF, $objsf, DEBUG);
1088     // Recupère les messages retourné par la fonction
1089     $message .= $valF['message'];
1090     // Supprime les messages de la liste des valeurs
1091     unset($valF['message']);
1092     }
1093     // Ajoute le duplicata
1094     $clone_objsf->ajouter($valF, $this->db, DEBUG);
1095     // Si aucune erreur se produit dans la classe instanciée
1096     if ($clone_objsf->correct === true) {
1097     // Récupère l'identifiant de l'objet créé
1098     $clone_objsf_id = $clone_objsf->valF[$objsf];
1099    
1100     // Message
1101     $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 />";
1102    
1103     // Ajout de l'identifant au tableau des résultat
1104     $resArray[$objsf.'_'.$row[$objsf]] = $clone_objsf_id;
1105     } else {
1106    
1107     // Message d'erreur récupéré depuis la classe
1108     $message .= $clone_objsf->msg;
1109     // Type du message
1110     $message_type = "error";
1111     }
1112     }
1113     }
1114     }
1115     //
1116     } else {
1117    
1118     // Message d'erreur récupéré depuis la classe
1119     $message .= $clone_obj->msg;
1120     // Type du message
1121     $message_type = "error";
1122     }
1123    
1124     // Ajout du message au tableau des résultats
1125     $resArray['message'] = $message;
1126     // Ajout du type de message au tableau des résultats
1127     $resArray['message_type'] = $message_type;
1128    
1129     // Retourne le tableau des résultats
1130     return $resArray;
1131     }
1132    
1133     /**
1134     * Cette fonction prend en entrée le ou les paramètres du &contrainte qui sont entre
1135     * parenthèses (un ensemble de paramètres séparés par des points-virgules). Elle
1136     * sépare les paramètres et leurs valeurs puis construit et retourne un tableau
1137     * associatif qui contient pour les groupes et sous-groupes :
1138     * - un tableau de valeurs, avec un nom de groupe ou sous-groupe par ligne
1139     * pour les autres options :
1140     * - la valeur de l'option
1141     *
1142     * @param string $contraintes_param Chaîne contenant tous les paramètres
1143     *
1144     * @return array Tableau associatif avec paramètres et valeurs séparés
1145     */
1146     function explodeConditionContrainte($contraintes_param) {
1147    
1148     // Initialisation des variables
1149     $return = array();
1150     $listGroupes = "";
1151     $listSousgroupes = "";
1152     $service_consulte = "";
1153     $affichage_sans_arborescence = "";
1154    
1155     // Sépare toutes les conditions avec leurs valeurs et les met dans un tableau
1156     $contraintes_params = explode(";", $contraintes_param);
1157    
1158     // Pour chaque paramètre de &contraintes
1159     foreach ($contraintes_params as $value) {
1160     // Récupère le mot-clé "liste_groupe" et les valeurs du paramètre
1161     if (strstr($value, "liste_groupe=")) {
1162     // On enlève le mots-clé "liste_groupe=", on garde les valeurs
1163     $listGroupes = str_replace("liste_groupe=", "", $value);
1164     }
1165     // Récupère le mot-clé "liste_ssgroupe" et les valeurs du paramètre
1166     if (strstr($value, "liste_ssgroupe=")) {
1167     // On enlève le mots-clé "liste_ssgroupe=", on garde les valeurs
1168     $listSousgroupes = str_replace("liste_ssgroupe=", "", $value);
1169     }
1170     // Récupère le mot-clé "service_consulte" et la valeur du paramètre
1171     if (strstr($value, "service_consulte=")) {
1172     // On enlève le mots-clé "service_consulte=", on garde sa valeur
1173     $service_consulte = str_replace("service_consulte=", "", $value);
1174     }
1175     // Récupère le mot-clé "affichage_sans_arborescence" et la valeur du
1176     // paramètre
1177     if (strstr($value, "affichage_sans_arborescence=")) {
1178     // On enlève le mots-clé "affichage_sans_arborescence=", on garde la valeur
1179     $affichage_sans_arborescence = str_replace("affichage_sans_arborescence=", "", $value);
1180     }
1181     }
1182    
1183     // Récupère dans des tableaux la liste des groupes et sous-groupes qui
1184     // doivent être utilisés lors du traitement de la condition
1185     if ($listGroupes != "") {
1186     $listGroupes = array_map('trim', explode(",", $listGroupes));
1187     }
1188     if ($listSousgroupes != "") {
1189     $listSousgroupes = array_map('trim', explode(",", $listSousgroupes));
1190     }
1191    
1192     // Tableau à retourner
1193     $return['groupes'] = $listGroupes;
1194     $return['sousgroupes'] = $listSousgroupes;
1195     $return['service_consulte'] = $service_consulte;
1196     $return['affichage_sans_arborescence'] = $affichage_sans_arborescence;
1197     return $return;
1198     }
1199    
1200     /**
1201     * Méthode qui complète la clause WHERE de la requête SQL de récupération des
1202     * contraintes, selon les paramètres fournis. Elle permet d'ajouter une condition sur
1203     * les groupes, sous-groupes et les services consultés.
1204     *
1205     * @param $string $part Contient tous les paramètres fournis à &contraintes séparés
1206     * par des points-virgules, tel que définis dans l'état.
1207     * array[] $conditions Paramètre optionnel, contient les conditions déjà explosées
1208     * par la fonction explodeConditionContrainte()
1209     *
1210     * @return string Contient les clauses WHERE à ajouter à la requête SQL principale.
1211     */
1212     function traitement_condition_contrainte($part, $conditions = NULL) {
1213    
1214     // Initialisation de la condition
1215     $whereContraintes = "";
1216     // Lorsqu'on a déjà les conditions explosées dans le paramètre $conditions, on
1217     // utilise ces données. Sinon, on appelle la méthode qui explose la chaîne de
1218     // caractères contenant l'ensemble des paramètres.
1219     if (is_array($conditions)){
1220     $explodeConditionContrainte = $conditions;
1221     }
1222     else {
1223     $explodeConditionContrainte = $this->explodeConditionContrainte($part);
1224     }
1225     // Récupère les groupes, sous-groupes et service_consulte pour la condition
1226     $groupes = $explodeConditionContrainte['groupes'];
1227     $sousgroupes = $explodeConditionContrainte['sousgroupes'];
1228     $service_consulte = $explodeConditionContrainte['service_consulte'];
1229    
1230     // Pour chaque groupe
1231     if ($groupes != "") {
1232     foreach ($groupes as $key => $groupe) {
1233     // Si le groupe n'est pas vide
1234     if (!empty($groupe)) {
1235     // Choisit l'opérateur logique
1236     $op_logique = $key > 0 ? 'OR' : 'AND (';
1237     // Ajoute la condition
1238     $whereContraintes .= " ".$op_logique." lower(trim(both E'\n\r\t' from contrainte.groupe)) = lower('"
1239     .pg_escape_string($groupe)."')";
1240     }
1241     }
1242     // S'il y a des valeurs dans groupe
1243     if (count($groupe) > 0) {
1244     // Ferme la parenthèse
1245     $whereContraintes .= " ) ";
1246     }
1247     }
1248    
1249     // Pour chaque sous-groupe
1250     if ($sousgroupes != "") {
1251     foreach ($sousgroupes as $key => $sousgroupe) {
1252     // Si le sous-groupe n'est pas vide
1253     if (!empty($sousgroupe)) {
1254     // Choisit l'opérateur logique
1255     $op_logique = $key > 0 ? 'OR' : 'AND (';
1256     // Ajoute la condition
1257     $whereContraintes .= " ".$op_logique." lower(trim(both E'\n\r\t' from contrainte.sousgroupe)) = lower('"
1258     .pg_escape_string($sousgroupe)."')";
1259     }
1260     }
1261     // S'il y a des valeurs dans sous-groupe
1262     if (count($sousgroupes) > 0) {
1263     // Ferme la parenthèse
1264     $whereContraintes .= " ) ";
1265     }
1266     }
1267    
1268     // Si l'option service_consulte n'est pas vide
1269     if ($service_consulte != "") {
1270     // Ajoute la condition
1271     $whereContraintes .= " AND service_consulte = cast(lower('".$service_consulte."') as boolean) ";
1272     }
1273    
1274     // Condition retournée
1275     return $whereContraintes;
1276     }
1277    
1278     /**
1279     * Calcule une date par l'ajout ou la soustraction de mois ou de jours.
1280     *
1281     * @param date $date Date de base (format dd-mm-yyyy)
1282     * @param integer $delay Délais à ajouter
1283     * @param string $operator Opérateur pour le calcul ("-" ou "+")
1284     * @param string $type Type de calcul (mois ou jour)
1285     *
1286     * @return date Date calculée
1287     */
1288     function mois_date($date, $delay, $operator = "+", $type = "mois") {
1289    
1290     // Si un type n'est pas définit
1291     if ($type != "mois" && $type != "jour") {
1292     //
1293     return null;
1294     }
1295    
1296     // Si aucune date n'a été fournie ou si ce n'est pas une date correctement
1297     // formatée
1298     if ( is_null($date) || $date == "" ||
1299     preg_match('/[0-9]{4}-[0-9]{2}-[0-9]{2}/', $date) == 0 ){
1300     return null;
1301     }
1302    
1303     // Si l'opérateur n'est pas définit
1304     if ($operator != "+" && $operator != "-") {
1305     //
1306     return null;
1307     }
1308    
1309     // Découpage de la date
1310     $temp = explode("-", $date);
1311     $day = (int) $temp[2];
1312     $month = (int) $temp[1];
1313     $year = (int) $temp[0];
1314    
1315     // Si c'est un calcul sur des mois
1316     // Le calcul par mois ne se fait pas comme le calcul par jour car
1317     // les fonctions PHP ne réalisent pas les calculs réglementaires
1318     if ($type == "mois") {
1319    
1320     // Si c'est une addition
1321     if ($operator == '+') {
1322     // Année à ajouter
1323     $year += floor($delay / 12);
1324     // Mois restant
1325     $nb_month = ($delay % 12);
1326     // S'il y a des mois restant
1327     if ($nb_month != 0) {
1328     // Ajout des mois restant
1329     $month += $nb_month;
1330     // Si ça dépasse le mois 12 (décembre)
1331     if ($month > 12) {
1332     // Soustrait 12 au mois
1333     $month -= 12;
1334     // Ajoute 1 à l'année
1335     $year += 1;
1336     }
1337     }
1338     }
1339    
1340     // Si c'est une soustraction
1341     if ($operator == "-") {
1342     // Année à soustraire
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     // Soustrait le délais
1349     $month -= $nb_month;
1350     // Si ça dépasse le mois 1 (janvier)
1351     if ($month < 1) {
1352     // Soustrait 12 au mois
1353     $month += 12;
1354     // Ajoute 1 à l'année
1355     $year -= 1;
1356     }
1357     }
1358     }
1359    
1360     // Calcul du nombre de jours dans le mois sélectionné
1361     switch($month) {
1362     // Mois de février
1363     case "2":
1364     if ($year % 4 == 0 && $year % 100 != 0 || $year % 400 == 0) {
1365     $day_max = 29;
1366     } else {
1367     $day_max = 28;
1368     }
1369     break;
1370     // Mois d'avril, juin, septembre et novembre
1371     case "4":
1372     case "6":
1373     case "9":
1374     case "11":
1375     $day_max = 30;
1376     break;
1377     // Mois de janvier, mars, mai, juillet, août, octobre et décembre
1378     default:
1379     $day_max = 31;
1380     }
1381    
1382     // Si le jour est supérieur au jour maximum du mois
1383     if ($day > $day_max) {
1384     // Le jour devient le jour maximum
1385     $day = $day_max;
1386     }
1387    
1388     // Compléte le mois et le jour par un 0 à gauche si c'est un chiffre
1389     $month = str_pad($month, 2, "0", STR_PAD_LEFT);
1390     $day = str_pad($day, 2, "0", STR_PAD_LEFT);
1391    
1392     // Résultat du calcul
1393     $date_result = $year."-".$month."-".$day;
1394     }
1395    
1396     // Si c'est un calcul sur des jours
1397     if ($type == "jour") {
1398     //
1399     $datetime = new DateTime($date);
1400     // Si le délai est un numérique
1401     if (is_numeric($delay)) {
1402     // Modifie la date
1403     $datetime->modify($operator.$delay.' days');
1404     }
1405     // Résultat du calcul
1406     $date_result = $datetime->format('Y-m-d');
1407     }
1408    
1409     // Retourne la date calculée
1410     return $date_result;
1411     }
1412    
1413     /**
1414     * Vérifie la valididité d'une date.
1415     *
1416     * @param string $pDate Date à vérifier
1417     *
1418     * @return boolean
1419     */
1420     function check_date($pDate) {
1421    
1422     // Vérifie si c'est une date valide
1423     if (preg_match("/^([0-9]{4})-([0-9]{2})-([0-9]{2})$/", $pDate, $date)
1424     && checkdate($date[2], $date[3], $date[1])
1425     && $date[1] >= 1900) {
1426     //
1427     return true;
1428     }
1429    
1430     //
1431     return false;
1432     }
1433    
1434     /**
1435     * Permet de tester le bypass
1436     *
1437     * @param string $obj le nom de l'objet
1438     * @param string $permission_suffix
1439     * @return boolean
1440     */
1441     function can_bypass($obj="", $permission_suffix=""){
1442     //On teste le droit bypass
1443     if ($permission_suffix!=""&&$obj!=""&&
1444     $this->isAccredited($obj."_".$permission_suffix."_bypass")){
1445     return true;
1446     }
1447     return false;
1448     }
1449    
1450    
1451     /**
1452     * Vérifie l'option de numérisation.
1453     *
1454     * @return boolean
1455     */
1456     public function is_option_digitalization_folder_enabled() {
1457     //
1458     if ($this->getParameter("option_digitalization_folder") !== true) {
1459     //
1460     return false;
1461     }
1462     //
1463     return true;
1464     }
1465    
1466    
1467     /**
1468     * Vérifie que l'option d'accès au portail citoyen est activée.
1469     *
1470     * @return boolean
1471     */
1472     public function is_option_citizen_access_portal_enabled() {
1473     //
1474     $option = $this->getParameter("option_portail_acces_citoyen");
1475     //
1476     if ($option !== 'true') {
1477     //
1478     return false;
1479     }
1480    
1481     //
1482     return true;
1483     }
1484    
1485 nmeucci 4108 /**
1486 softime 4626 * Vérifie que l'option du SIG est activée.
1487     *
1488     * @return boolean
1489     */
1490     public function is_option_sig_enabled() {
1491     //
1492     $option = $this->getParameter("option_sig");
1493     //
1494 softime 4662 if ($option !== 'sig_externe' && $option !== 'sig_interne') {
1495 softime 4626 //
1496     return false;
1497     }
1498    
1499     //
1500     return true;
1501     }
1502    
1503     /**
1504 nmeucci 4108 * Vérifie le niveau de la collectivité de l'utilisateur connecté
1505     *
1506     * @return boolean
1507     */
1508     function has_collectivite_multi() {
1509     $idx_multi = $this->get_idx_collectivite_multi();
1510     if (intval($_SESSION['collectivite']) === intval($idx_multi)) {
1511     return true;
1512     }
1513     return false;
1514     }
1515 mbroquet 3730
1516 nmeucci 4108
1517 softime 3976 /**
1518     * Pour un path absolu donné, retourne le relatif à la racine de
1519     * l'application.
1520     *
1521     * @param string $absolute Chemin absolu.
1522     *
1523     * @return mixed Faux si échec sinon chemin relatif.
1524     */
1525     public function get_relative_path($absolute) {
1526     if ($this->get_path_app() === false) {
1527     return false;
1528     }
1529     $path_app = $this->get_path_app();
1530     return str_replace($path_app, '', $absolute);
1531     }
1532    
1533    
1534     /**
1535     * Retourne le path absolu de la racine de l'application
1536     *
1537     * @return mixed Faux si échec sinon chemin absolu
1538     */
1539     public function get_path_app() {
1540     $match = array();
1541     preg_match( '/(.*)\/[a-zA-Z0-9]+\/\.\.\/core\/$/', PATH_OPENMAIRIE, $match);
1542     // On vérifie qu'il n'y a pas d'erreur
1543     if (isset($match[1]) === false) {
1544     return false;
1545     }
1546     return $match[1];
1547     }
1548    
1549 nmeucci 3981 /**
1550     * Compose un tableau et retourne son code HTML
1551     *
1552     * @param string $id ID CSS du conteneur
1553     * @param array $headers entêtes de colonnes
1554     * @param array $rows lignes
1555     * @return string code HTML
1556     */
1557 nmeucci 3980 public function compose_generate_table($id, $headers, $rows) {
1558 nmeucci 3981 //
1559     $html = '';
1560 nmeucci 3980 // Début conteneur
1561 nmeucci 3981 $html .= '<div id="'.$id.'">';
1562 nmeucci 3980 // Début tableau
1563 nmeucci 3981 $html .= '<table class="tab-tab">';
1564 nmeucci 3980 // Début entête
1565 nmeucci 3981 $html .= '<thead>';
1566     $html .= '<tr class="ui-tabs-nav ui-accordion ui-state-default tab-title">';
1567 nmeucci 3980 // Colonnes
1568     $nb_colonnes = count($headers);
1569     $index_last_col = $nb_colonnes - 1;
1570     foreach ($headers as $i => $header) {
1571     if ($i === 0) {
1572     $col = ' firstcol';
1573     }
1574     if ($i === $index_last_col) {
1575     $col = ' lastcol';
1576     }
1577 nmeucci 3981 $html .= '<th class="title col-'.$i.$col.'">';
1578     $html .= '<span class="name">';
1579     $html .= $header;
1580     $html .= '</span>';
1581     $html .= '</th>';
1582 nmeucci 3980 }
1583     // Fin entête
1584 nmeucci 3981 $html .= '</tr>';
1585     $html .= '</thead>';
1586 nmeucci 3980 // Début corps
1587 nmeucci 3981 $html .= '<tbody>';
1588 nmeucci 3980 // Lignes
1589     foreach ($rows as $cells) {
1590     // Début ligne
1591 nmeucci 3981 $html .= '<tr class="tab-data">';
1592 nmeucci 3980 // Cellules
1593     foreach ($cells as $j => $cell) {
1594     if ($j === 0) {
1595     $col = ' firstcol';
1596     }
1597     if ($j === $index_last_col) {
1598     $col = ' lastcol';
1599     }
1600 nmeucci 3981 $html .= '<td class="title col-'.$j.$col.'">';
1601     $html .= '<span class="name">';
1602     $html .= $cell;
1603     $html .= '</span>';
1604     $html .= '</td>';
1605 nmeucci 3980 }
1606     // Fin ligne
1607 nmeucci 3981 $html .= "</tr>";
1608 nmeucci 3980 }
1609     // Fin corps
1610 nmeucci 3981 $html .= '</tbody>';
1611 nmeucci 3980 // Fin tableau
1612 nmeucci 3981 $html .= '</table>';
1613 nmeucci 3980 // Fin conteneur
1614 nmeucci 3981 $html .= '</div>';
1615     //
1616     return $html;
1617 nmeucci 3980 }
1618 nmeucci 4156
1619     /**
1620     * Retourne le login de l'utilisateur connecté + entre parenthèses son nom
1621     * s'il en a un.
1622     *
1623     * @return string myLogin OU myLogin (myName)
1624     */
1625     public function get_connected_user_login_name() {
1626     // Requête et stockage des informations de l'user connecté
1627     $this->getUserInfos();
1628     // Si le nom existe et est défini on le récupère
1629     $nom = "";
1630     if (isset($this->om_utilisateur["nom"])
1631     && !empty($this->om_utilisateur["nom"])) {
1632     $nom = trim($this->om_utilisateur["nom"]);
1633     }
1634     // Définition de l'émetteur : obligatoirement son login
1635     $emetteur = $_SESSION['login'];
1636     // Définition de l'émetteur : + éventuellement son nom
1637     if ($nom != "") {
1638     $emetteur .= " (".$nom.")";
1639     }
1640     // Retour
1641     return $emetteur;
1642     }
1643 nhaye 4218
1644     /**
1645 fmichon 4708 * Cette méthode permet d'interfacer le module 'Settings'.
1646     */
1647     function view_module_settings() {
1648     //
1649     require_once "../obj/settings.class.php";
1650     $settings = new settings();
1651     $settings->view_main();
1652     }
1653    
1654     /**
1655     * Interface avec le référentiel ERP.
1656     *
1657     * Est-ce que l'option est activée ?
1658     *
1659     * @return boolean
1660     */
1661     function is_option_referentiel_erp_enabled() {
1662     //
1663     if ($this->getParameter('option_referentiel_erp') !== 'true') {
1664     return false;
1665     }
1666     //
1667     return true;
1668     }
1669    
1670     /**
1671     * Interface avec le référentiel ERP.
1672     */
1673     function send_message_to_referentiel_erp($code, $infos) {
1674     //
1675     require_once "../obj/interface_referentiel_erp.class.php";
1676     $interface_referentiel_erp = new interface_referentiel_erp();
1677     $ret = $interface_referentiel_erp->send_message_to_referentiel_erp($code, $infos);
1678     return $ret;
1679     }
1680    
1681     /**
1682 nhaye 4218 * Récupère la liste des identifiants des collectivités
1683     *
1684     * @param string $return_type 'string' ou 'array' selon que l'on retourne
1685     * respectivement une chaîne ou un tableau
1686     * @param string $separator caractère(s) séparateur(s) employé(s) lorsque
1687     * l'on retourne une chaîne, inutilisé si tableau
1688     * @return mixed possibilité de boolean/string/array :
1689     * false si erreur BDD sinon résultat
1690     */
1691     public function get_list_id_collectivites($return_type = 'string', $separator = ',') {
1692     $sql = "
1693     SELECT
1694     array_to_string(
1695     array_agg(om_collectivite),
1696     '".$separator."'
1697     ) as list_id_collectivites
1698     FROM ".DB_PREFIXE."om_collectivite";
1699     $list = $this->db->getone($sql);
1700     $this->addTolog(
1701     __FILE__." - ".__METHOD__." : db->getone(\"".$sql."\");",
1702     VERBOSE_MODE
1703     );
1704     if ($this->isDatabaseError($list, true)) {
1705     return false;
1706     }
1707     if ($return_type === 'array') {
1708     return explode($separator, $list);
1709     }
1710     return $list;
1711     }
1712 nhaye 5254
1713 softime 6565 /**
1714     * Teste si l'utilisateur connecté appartient au groupe indiqué en paramètre
1715     * ou s'il a le goupe bypass.
1716     *
1717     * @param string $groupe Code du groupe : ADS / CTX / CU / RU / ERP.
1718     * @return boolean vrai si utilisateur appartient au groupe fourni
1719     */
1720     public function is_user_in_group($groupe) {
1721     if (isset($_SESSION['groupe']) === true
1722     && (array_key_exists($groupe, $_SESSION['groupe']) === true
1723     || array_key_exists("bypass", $_SESSION['groupe']) === true)) {
1724     return true;
1725     }
1726     return false;
1727     }
1728    
1729     /**
1730     * CONDITION - can_user_access_dossiers_confidentiels_from_groupe
1731     *
1732     * Permet de savoir si le type de dossier d'autorisation du dossier courant est
1733     * considéré comme confidentiel ou si l'utilisateur a le groupe bypass.
1734     *
1735     * @param string $groupe Code du groupe : ADS / CTX / CU / RU / ERP.
1736     * @return boolean true si l'utilisateur à accès aux dossiers confidentiels du groupe
1737     * passé en paramètre, sinon false.
1738     *
1739     */
1740     public function can_user_access_dossiers_confidentiels_from_groupe($groupe) {
1741     if ((isset($_SESSION['groupe'][$groupe]['confidentiel']) === true
1742     AND $_SESSION['groupe'][$groupe]['confidentiel'] === true)
1743     || array_key_exists("bypass", $_SESSION['groupe']) === true) {
1744     return true;
1745     }
1746     return false;
1747     }
1748    
1749     public function starts_with($haystack, $needle) {
1750     $length = strlen($needle);
1751     return (substr($haystack, 0, $length) === $needle);
1752     }
1753    
1754     public function ends_with($haystack, $needle) {
1755     $length = strlen($needle);
1756     if ($length == 0) {
1757     return true;
1758     }
1759     return (substr($haystack, -$length) === $needle);
1760     }
1761    
1762     /**
1763     * Récupère le type définit dans la base de données des champs d'une table
1764     * entière ou d'un champs si celui-ci est précisé.
1765     *
1766     * Liste des types BDD :
1767     * - int4
1768     * - varchar
1769     * - bool
1770     * - numeric
1771     * - text
1772     *
1773     * @param string $table Nom de la table.
1774     * @param string $column Nom de la colonne (facultatif).
1775     *
1776     * @return array
1777     */
1778     public function get_type_from_db($table, $column = null) {
1779     // Composition de la requête
1780     $sql_select = ' SELECT column_name, udt_name ';
1781     $sql_from = ' FROM information_schema.columns ';
1782     $sql_where = ' WHERE table_schema = \''.str_replace('.', '', DB_PREFIXE).'\' AND table_name = \''.$table.'\' ';
1783     $sql_order = ' ORDER BY ordinal_position ';
1784    
1785     // Si une colonne est précisé
1786     if ($column !== null || $column !== '') {
1787     //
1788     $sql_where .= ' AND column_name = \''.$column.'\' ';
1789     }
1790    
1791     // Requête SQL
1792     $sql = $sql_select.$sql_from.$sql_where.$sql_order;
1793     // Exécution de la requête
1794     $res = $this->db->query($sql);
1795     // Log
1796     $this->addToLog(__METHOD__."() : db->query(\"".$sql."\");", VERBOSE_MODE);
1797     // Erreur BDD
1798     $this->isDatabaseError($res);
1799     //
1800     $list_type = array();
1801     while ($row =& $res->fetchRow(DB_FETCHMODE_ASSOC)) {
1802     $list_type[$row['column_name']] = $row['udt_name'];
1803     }
1804    
1805     // Retourne la liste des codes
1806     return $list_type;
1807     }
1808    
1809 mbroquet 3730 }
1810    
1811     ?>

[email protected]
ViewVC Help
Powered by ViewVC 1.1.26