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

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

Parent Directory Parent Directory | Revision Log Revision Log


Revision 3238 - (hide annotations)
Fri Jan 9 18:45:09 2015 UTC (10 years ago) by nhaye
File size: 41085 byte(s)
Correction de la méthode de netoyage des valeurs postées
(suppression du intval pour systemes 32b)

1 fraynaud 3 <?php
2     /**
3 fraynaud 96 * 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 fraynaud 3 *
6     * @package openmairie_exemple
7 fraynaud 96 * @version SVN : $Id: utils.class.php 547 2011-08-25 12:03:42Z fmichon $
8 fraynaud 3 */
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 fraynaud 96
40 nhaye 3225 // Valeurs postées
41     var $submitted_post_value;
42    
43     // Valeurs passées à l'url
44     var $submitted_get_value;
45    
46 nhaye 3223 /**
47     * Cette méthode permet de renvoyer la valeur soumise par post.
48     *
49     * Si on ne trouve pas de paramètre correspondant alors on retourne chaîne vide
50     *
51     * @return null ou la valeur
52     */
53 nhaye 3224 function get_submitted_post_value($param = null) {
54 nhaye 3223 //
55     if ($param == null) {
56 nhaye 3224 return $this->submitted_post_value;
57 nhaye 3223 }
58     //
59 nhaye 3224 if (isset($this->submitted_post_value[$param])) {
60 nhaye 3223 //
61 nhaye 3224 return $this->submitted_post_value[$param];
62 nhaye 3223 }
63     //
64     return null;
65     }
66    
67     /**
68     * Cette méthode permet de renvoyer la valeur soumise par get.
69     *
70     * Si on ne trouve pas de paramètre correspondant alors on retourne chaîne vide
71     *
72     * @return null ou la valeur
73     */
74 nhaye 3224 function get_submitted_get_value($param = null) {
75 nhaye 3223 //
76     if ($param == null) {
77 nhaye 3224 return $this->submitted_get_value;
78 nhaye 3223 }
79     //
80 nhaye 3224 if (isset($this->submitted_get_value[$param])) {
81 nhaye 3223 //
82 nhaye 3224 return $this->submitted_get_value[$param];
83 nhaye 3223 }
84     //
85     return null;
86     }
87    
88    
89     /**
90     * Cette methode permet d'affecter des parametres dans un attribut de
91     * l'objet.
92     *
93     * @return void
94     */
95     function setMoreParams() {
96     parent::setMoreParams();
97 nhaye 3224 $this->set_submitted_value();
98 nhaye 3223 }
99    
100 nhaye 3224 function set_submitted_value() {
101 nhaye 3223 if(isset($_GET) and !empty($_GET)) {
102     foreach ($_GET as $key => $value) {
103 nhaye 3224 $this->submitted_get_value[$key]=$this->clean_break($value);
104 nhaye 3223 }
105     }
106     if(isset($_POST) and !empty($_POST)) {
107     foreach ($_POST as $key => $value) {
108 nhaye 3224 $this->submitted_post_value[$key]=$this->clean_break($value);
109 nhaye 3223 }
110     }
111     }
112    
113 fmichon 686 // {{{
114 fmichon 818
115     /**
116     *
117     */
118     function isAccredited($obj = NULL, $operator = "AND") {
119     // Lorsque l'utilisateur a le login 'admin' alors il est authorisé à
120     // accéder à toutes les fonctions du logiciel
121     // XXX à modifier pour changer ça vers un profil et non un login utilisateur
122     if ($_SESSION["login"] == "admin") {
123     return true;
124     }
125     // Fonctionnement standard
126     return parent::isAccredited($obj, $operator);
127     }
128    
129     // }}}
130 fmichon 686
131 fmichon 818 // {{{
132    
133 fmichon 817 var $om_utilisateur = array();
134     var $user_is_instr = NULL;
135 softime 2120 var $user_is_service = NULL;
136     var $user_is_admin = NULL;
137 fmichon 817 var $user_is_service_ext = NULL;
138 softime 2120 var $user_is_qualificateur = NULL;
139     var $user_is_chef = NULL;
140     var $user_is_divisionnaire = NULL;
141     var $user_is_service_int = NULL;
142 fmichon 817
143     /**
144     * Méthode de récupération des informations de l'utilisateur connecté.
145     */
146     function getUserInfos() {
147    
148     // Si l'utilisateur est loggé $_SESSION existe
149     if(isset($_SESSION['login']) AND !empty($_SESSION['login'])) {
150    
151     // Récupération des infos utilisateur
152     $sqlUser = "SELECT om_utilisateur, nom, email, login, om_collectivite, om_profil ".
153 vpihour 3229 "FROM ".DB_PREFIXE."om_utilisateur WHERE login = '".$_SESSION['login']."'";
154 fmichon 817 $resUser=$this->db->query($sqlUser);
155     $this->addToLog("getUserInfos(): db->query(\"".$sqlUser."\");", VERBOSE_MODE);
156 vpihour 1777 if ( database::isError($resUser)){
157     die();
158     }
159 fmichon 817 $this->om_utilisateur=&$resUser->fetchRow(DB_FETCHMODE_ASSOC);
160 softime 2034
161     // Récupère le profil et test si c'est un
162     $sqlProfil = "SELECT libelle FROM ".DB_PREFIXE."om_profil WHERE om_profil = ".$this->om_utilisateur['om_profil'];
163     $resProfil=$this->db->getOne($sqlProfil);
164     $this->addToLog("getUserInfos(): db->getOne(\"".$sqlProfil."\");", VERBOSE_MODE);
165     if (database::isError($resProfil)){
166     die();
167     }
168 softime 2120 // Sauvegarde le libelle du profil
169     $this->om_utilisateur["libelle_profil"] = $resProfil;
170    
171 softime 2034 // si c'est un administrateur technique
172 softime 2605 // XXX Mauvaise méthode, il faut utiliser isAccredited
173     if ($resProfil == "ADMINISTRATEUR TECHNIQUE"
174     || $resProfil == "ADMINISTRATEUR FONCTIONNEL") {
175 softime 2034 $this->user_is_admin = true;
176     } else {
177     $this->user_is_admin = false;
178     }
179 softime 2120
180     //si c'est un service externe
181     if ($resProfil == "SERVICE CONSULTÉ") {
182     $this->user_is_service_ext = true;
183     } else {
184     $this->user_is_service_ext = false;
185     }
186    
187     //si c'est un service interne
188     if ($resProfil == "SERVICE CONSULTÉ INTERNE") {
189     $this->user_is_service_int = true;
190     } else {
191     $this->user_is_service_int = false;
192     }
193    
194     // si c'est un qualificateur
195     if ($resProfil == "QUALIFICATEUR") {
196     $this->user_is_qualificateur = true;
197     } else {
198     $this->user_is_qualificateur = false;
199     }
200    
201     // si c'est un chef de service
202     if ($resProfil == "CHEF DE SERVICE") {
203     $this->user_is_chef = true;
204     } else {
205     $this->user_is_chef = false;
206     }
207    
208     // si c'est un divisionnaire
209     if ($resProfil == "DIVISIONNAIRE") {
210     $this->user_is_divisionnaire = true;
211     } else {
212     $this->user_is_divisionnaire = false;
213     }
214 fmichon 817
215     // Récupération des infos instructeur
216 fmichon 943 $sqlInstr = "SELECT instructeur.instructeur, instructeur.nom, instructeur.telephone,
217     division.division, division.code, division.libelle ".
218 fmichon 924 "FROM ".DB_PREFIXE."instructeur INNER JOIN ".DB_PREFIXE."division ON division.division=instructeur.division ".
219 fmichon 817 "WHERE instructeur.om_utilisateur = ".$this->om_utilisateur['om_utilisateur'];
220     $resInstr=$this->db->query($sqlInstr);
221     $this->addToLog("getUserInfos(): db->query(\"".$sqlInstr."\");", VERBOSE_MODE);
222 vpihour 1777 if ( database::isError($resInstr)){
223     die();
224     }
225 fmichon 817 $tempInstr=&$resInstr->fetchRow(DB_FETCHMODE_ASSOC);
226     // Si il y a un resultat c'est un instructeur
227     if(count($tempInstr)>0) {
228     $this->user_is_instr=true;
229     $this->om_utilisateur = array_merge($this->om_utilisateur,$tempInstr);
230     } else {
231     $this->user_is_instr=false;
232     }
233    
234 softime 2120 // Récupération des infos de services consultés
235     $sqlServ = "SELECT service.service, service.abrege, service.libelle ".
236 fmichon 924 "FROM ".DB_PREFIXE."service ".
237     "INNER JOIN ".DB_PREFIXE."lien_service_om_utilisateur ON lien_service_om_utilisateur.service=service.service ".
238 fmichon 817 "WHERE lien_service_om_utilisateur.om_utilisateur = ".$this->om_utilisateur['om_utilisateur'];
239 softime 2120 $resServ=$this->db->query($sqlServ);
240     $this->addToLog("getUserInfos(): db->query(\"".$sqlServ."\");", VERBOSE_MODE);
241     if ( database::isError($resServ)){
242 vpihour 1777 die();
243     }
244 fmichon 817
245 softime 2120 while ($tempServ=&$resServ->fetchRow(DB_FETCHMODE_ASSOC)) {
246     $this->om_utilisateur['service'][]=$tempServ;
247 fmichon 817 }
248     // Si il y a un resultat c'est un utilisateur de service
249     if(isset($this->om_utilisateur['service'])) {
250 softime 2120 $this->user_is_service=true;
251 fmichon 817 } else {
252 softime 2120 $this->user_is_service=false;
253 fmichon 817 }
254     }
255     }
256    
257     /**
258 softime 2120 * getter user_is_service
259 fmichon 817 */
260 softime 2120 function isUserService() {
261 fmichon 817 //
262 softime 2120 if (is_null($this->user_is_service)) {
263 fmichon 817 //
264     $this->getUserInfos();
265     }
266     //
267 softime 2120 return $this->user_is_service;
268 fmichon 817 }
269    
270     /**
271     * getter user_is_instr
272     */
273     function isUserInstructeur() {
274     //
275     if (is_null($this->user_is_instr)) {
276     //
277     $this->getUserInfos();
278     }
279     //
280     return $this->user_is_instr;
281     }
282    
283 softime 2034 function isUserAdministrateur() {
284     //
285     if (is_null($this->user_is_admin)) {
286     //
287     $this->getUserInfos();
288     }
289     //
290     return $this->user_is_admin;
291     }
292    
293 softime 2120 /**
294     * getter user_is_service_ext
295     */
296     function isUserServiceExt() {
297     //
298     if (is_null($this->user_is_service_ext)) {
299     //
300     $this->getUserInfos();
301     }
302     //
303     return $this->user_is_service_ext;
304     }
305    
306     /**
307     * getter user_is_service_int
308     */
309     function isUserServiceInt() {
310     //
311     if (is_null($this->user_is_service_int)) {
312     //
313     $this->getUserInfos();
314     }
315     //
316     return $this->user_is_service_int;
317     }
318    
319     /**
320     * getter user_is_qualificateur
321     */
322     function isUserQualificateur() {
323     //
324     if (is_null($this->user_is_qualificateur)) {
325     //
326     $this->getUserInfos();
327     }
328     //
329     return $this->user_is_qualificateur;
330     }
331    
332     /**
333     * getter user_is_chef
334     */
335     function isUserChef() {
336     //
337     if (is_null($this->user_is_chef)) {
338     //
339     $this->getUserInfos();
340     }
341     //
342     return $this->user_is_chef;
343     }
344    
345     /**
346     * getter user_is_divisionnaire
347     */
348     function isUserDivisionnaire() {
349     //
350     if (is_null($this->user_is_divisionnaire)) {
351     //
352     $this->getUserInfos();
353     }
354     //
355     return $this->user_is_divisionnaire;
356     }
357    
358 fmichon 686 // Ajout de variables de session contenant la division pour permettre une
359     // utilisation plus efficace dans les requetes
360     function triggerAfterLogin($utilisateur = NULL) {
361     //
362     $sql = "SELECT instructeur.division, division.code
363     FROM ".DB_PREFIXE."instructeur
364     LEFT JOIN ".DB_PREFIXE."division
365     ON instructeur.division = division.division
366     WHERE instructeur.om_utilisateur='".$utilisateur["om_utilisateur"]."'";
367     $res = $this->db->query($sql);
368     $this->addToLog("triggerAfterLogin(): db->query(\"".$sql."\");", VERBOSE_MODE);
369 vpihour 1777 if ( database::isError($res)){
370     die();
371     }
372 fmichon 686 $row = $res->fetchrow(DB_FETCHMODE_ASSOC);
373     //
374     if (isset($row["division"]) && $row["division"] != NULL) {
375     $_SESSION["division"] = $row["division"];
376     $_SESSION["division_code"] = $row["code"];
377     } else {
378     $_SESSION["division"] = "0";
379     $_SESSION["division_code"] = "";
380     }
381    
382     }
383    
384     // Affichage des actions supplémentaires
385     function displayActionExtras() {
386     // Affichage de la division si l'utilisateur en possède une
387     if ($_SESSION["division"] != 0) {
388     echo "\t\t\t<li class=\"action-division\">";
389     echo "(".$_SESSION['division_code'].")";
390     echo "</li>\n";
391     }
392     }
393 fmichon 817
394 fmichon 686 // }}}
395    
396 fmichon 949
397     function getDivisionFromDossier($dossier) {
398     //
399     $sql = "select division from ".DB_PREFIXE."dossier ";
400     $sql .= " where dossier='".$dossier."'";
401     //
402     $division = $this->db->getOne($sql);
403     $this->addToLog("getDivisionFromDossier(): db->getone(\"".$sql."\")", VERBOSE_MODE);
404     database::isError($division);
405     //
406     return $division;
407     }
408    
409 fmichon 818 // {{{ GESTION DES FICHIERS
410 nhaye 580
411 nhaye 677 /**
412     *
413     */
414     function notExistsError ($explanation = NULL) {
415     // message
416     $message_class = "error";
417     $message = _("Cette page n'existe pas.");
418     $this->addToMessage ($message_class, $message);
419     //
420     $this->setFlag(NULL);
421     $this->display();
422    
423     //
424     die();
425     }
426 vpihour 1978
427 fmichon 818 // }}}
428 vpihour 1978 /**
429     * Retourne le statut du dossier d'instruction
430     * @param string $idx Identifiant du dossier d'instruction
431     * @return string Le statut du dossier d'instruction
432     */
433     function getStatutDossier($idx){
434    
435     $statut = '';
436    
437     //Si l'identifiant du dossier d'instruction fourni est correct
438     if ( $idx != '' ){
439    
440     //On récupère le statut de l'état du dossier à partir de l'identifiant du
441     //dossier d'instruction
442     $sql = "SELECT etat.statut
443     FROM ".DB_PREFIXE."dossier
444     LEFT JOIN
445     ".DB_PREFIXE."etat
446     ON
447     dossier.etat = etat.etat
448     WHERE dossier ='".$idx."'";
449     $statut = $this->db->getOne($sql);
450     $this->addToLog("getStatutDossier() : db->getOne(\"".$sql."\")", VERBOSE_MODE);
451     if ( database::isError($statut)){
452     die();
453     }
454     }
455     return $statut;
456     }
457 softime 2170
458     /**
459     * Formate le champ pour le type Timestamp
460     * @param date $date_str Date
461     * @param boolean $show Format pour l'affichage
462     * @return mixed False si le traitement échoue ou la date formatée
463     */
464     function formatTimestamp ($date_str, $show = true) {
465    
466     // Sépare la date et l'heure
467     $date = explode(" ", $date_str);
468     if (count($date) != 2) {
469     return false;
470     }
471    
472     // Date en BDD
473     $date_db = explode ('-', $date[0]);
474     // Date en affichage
475     $date_show = explode ('/', $date[0]);
476    
477     // Contrôle la composition de la date
478     if (count ($date_db) != 3 and count ($date_show) != 3) {
479     return false;
480     }
481    
482     if (count ($date_db) == 3) {
483     // Vérifie que c'est une date valide
484     if (!checkdate($date_db[1], $date_db[2], $date_db[0])) {
485     return false;
486     }
487     // Si c'est pour l'affichage de la date
488     if ($show == true) {
489     return $date_db [2]."/".$date_db [1]."/".$date_db [0]." ".$date[1];
490     } else {
491     return $date[0];
492     }
493     }
494    
495     //
496     if (count ($date_show) == 3) {
497     // Vérifie que c'est une date valide
498     if (!checkdate($date_show[1], $date_show[0], $date_show[2])) {
499     return false;
500     }
501     // Si c'est pour l'affichage de la date
502     if ($show == true) {
503     return $date[0];
504     } else {
505     return $date_show [2]."-".$date_show [1]."-".$date_show [0]." ".$date[1];
506     }
507    
508     }
509     return false;
510    
511     }
512 softime 2172
513     /**
514     * Permet de calculer la liste des parcelles à partir de la chaîne passée en paramètre
515     * et la retourner sous forme d'un tableau associatif
516     *
517     * @param string $strParcelles chaîne de la parcelles
518     * @return array (array(quartier, section, parcelle), ...)
519     */
520     function parseParcelles($strParcelles) {
521    
522     // Séparation des lignes
523     $references = explode(";", $strParcelles);
524     $liste_parcelles = array();
525    
526     // On boucle sur chaque ligne pour ajouter la liste des parcelles de chaque ligne
527     foreach ($references as $parcelles) {
528    
529     // On transforme la chaîne de la ligne de parcelles en tableau
530     $ref = str_split($parcelles);
531     // Les 1er caractères sont numériques
532     $num = true;
533    
534     // Tableau des champs de la ligne de références cadastrales
535     $reference_tab = array();
536     $temp = "";
537     foreach ($ref as $carac) {
538    
539     // Permet de tester si le caractère courant est de même type que le précédent
540     if(is_numeric($carac) === $num) {
541     $temp .= $carac;
542     } else {
543     // Bascule
544     $num = !$num;
545     // On stock le champ
546     $reference_tab[] = $temp;
547     // re-init de la valeur temporaire pour le champ suivant
548     $temp = $carac;
549     }
550     }
551     // Stockage du dernier champ sur lequel il n'y a pas eu de bascule
552     $reference_tab[] = $temp;
553     // Calcul des parcelles
554     $quartier = $reference_tab[0];
555     $sect = $reference_tab[1];
556    
557     $ancien_ref_parc = "";
558     for ($i=2; $i < count($reference_tab); $i+=2) {
559     $parc["quartier"] = $quartier;
560 softime 2267 // Met en majuscule si besoin
561     $parc["section"] = strtoupper($sect);
562 softime 2172 if( $ancien_ref_parc == "" OR $reference_tab[$i-1] == "/") {
563     // 1ere parcelle ou parcelle individuelle
564 softime 2267 // Compléte par des "0" le début de la chaîne si besoin
565     $parc["parcelle"] = str_pad($reference_tab[$i], 4, "0", STR_PAD_LEFT);
566 softime 2172 // Ajout d'une parcelle à la liste
567     $liste_parcelles[] = $parc;
568     } elseif ($reference_tab[$i-1] == "A") {
569     // Interval de parcelles
570     for ($j=$ancien_ref_parc+1; $j <= $reference_tab[$i]; $j++) {
571     // Compléte par des "0" le début de la chaîne si besoin
572     $parc["parcelle"] = str_pad($j, 4, "0", STR_PAD_LEFT);
573     // Ajout d'une parcelle à la liste
574     $liste_parcelles[] = $parc;
575     }
576     }
577     //Gestion des erreurs
578     else{
579    
580     echo _("Une erreur de formattage a ete detecte dans la reference cadastrale du dossier ").$this->row['dossier'];
581     }
582     // Sauvegarde de la référence courante de parcelle
583     $ancien_ref_parc = $reference_tab[$i];
584     }
585     }
586    
587     return $liste_parcelles;
588     }
589    
590     /**
591     * Formate les parcelles en ajoutant le code impôt
592     * @param array $liste_parcelles Tableau des parcelles
593     * @return string Liste des parcelles formatées
594     */
595     function formatParcelleToSend($liste_parcelles) {
596    
597     //
598 nhaye 2180 $wParcelle = array();
599 softime 2172
600     //Formatage des références cadastrales pour l'envoi
601     foreach ($liste_parcelles as $value) {
602    
603     // On ajoute les données dans le tableau que si quartier + section + parcelle
604     // a été fourni
605 nhaye 2180 if ($value["quartier"] !== ""
606     && $value["section"] !== ""
607     && $value["parcelle"] !== ""){
608 softime 2172
609     //On récupère le code impôt de l'arrondissement
610     $arrondissement = $this->getCodeImpotByQuartier($value["quartier"]);
611    
612     //On ajoute la parcelle, si un arrondissement a été trouvé
613     if ($arrondissement!=="") {
614     //
615 vpihour 3189 $wParcelle[] = $arrondissement.$value["quartier"].
616     str_pad($value["section"], 2, " ", STR_PAD_LEFT).
617     $value["parcelle"];
618 softime 2172 }
619     }
620     }
621    
622     //
623     return $wParcelle;
624     }
625    
626     /**
627     * Récupère le code impôt par rapport au quartier
628     * @param string $quartier Numéro de quartier
629     * @return string Code impôt
630     */
631     function getCodeImpotByQuartier($quartier) {
632    
633     $arrondissement = "";
634    
635     // Si le quartier fournis est correct
636     if ($quartier != "") {
637    
638     // Requête SQL
639     $sql = "SELECT
640     arrondissement.code_impots
641     FROM
642     ".DB_PREFIXE."arrondissement
643     LEFT JOIN
644     ".DB_PREFIXE."quartier
645     ON
646     quartier.arrondissement = arrondissement.arrondissement
647     WHERE
648     quartier.code_impots = '".$quartier."'";
649     $this->addToLog("getCodeImpotByQuartier() : db->getOne(\"".$sql."\")", VERBOSE_MODE);
650     $arrondissement = $this->db->getOne($sql);
651     $this->isDatabaseError($arrondissement);
652     }
653    
654     // Retour
655     return $arrondissement;
656     }
657    
658 softime 2175 /**
659     * Vérification des paramètres
660     */
661     function checkParams() {
662     parent::checkParams();
663    
664     (isset($this->config['path_scan']) ? "" : $this->config['path_scan'] = '../trs/numerisation/');
665 softime 2178
666     $default_sig_elyx = array(
667     'wsdl' => '../tests/wsurbanisme.wsdl',
668     'login' => 'sig',
669     'password' => 'sig',
670     );
671     (isset($this->config['sig_elyx']) ? "" : $this->config['sig_elyx'] = $default_sig_elyx);
672 softime 2175 }
673    
674 nhaye 2180 /**
675     * Retourne true si tous les paramètres du SIG externe ont bien été définis
676     * @return bool true/false
677     */
678     public function issetSIGParameter() {
679     if($this->getParameter("sig_web_server") != NULL AND
680     $this->getParameter("sig_web_server") != "" AND
681     $this->getParameter("sig_couche_emprise_dossier") != NULL AND
682     $this->getParameter("sig_couche_emprise_dossier") != "" AND
683     $this->getParameter("sig_couche_affichage_dossier") != NULL AND
684     $this->getParameter("sig_couche_affichage_dossier") != "" AND
685     $this->getParameter("sig_couche_affichage_parcelle") != NULL AND
686     $this->getParameter("sig_couche_affichage_parcelle") != "") {
687     return true;
688     } else {
689     return false;
690     }
691     }
692    
693 softime 2305 /**
694     * Permet de vérifier que des champs existe dans une table
695     * @param array $list_fields Liste des champs à tester
696     * @param string $table Table où les champs doivent exister
697     * @return mixed Retourne les champs qui n'existent pas
698     * ou true
699     */
700     public function check_field_exist($list_fields, $table) {
701    
702 softime 2787 // Instance de la classe en paramètre
703     require_once "../obj/".$table.".class.php";
704     $object = new $table("]", $this->db, DEBUG);
705 softime 2305
706 softime 2787 // Récupère les champs de la table
707     foreach ($object->champs as $champ) {
708     $list_column[] = $champ;
709 softime 2305 }
710    
711     // Tableau des champs en erreur
712     $error_fields = array();
713    
714     // Pour chaque champ à tester
715     foreach ($list_fields as $value) {
716    
717     // S'il n'apparaît pas dans la liste des champs possible
718     if (!in_array($value, $list_column)) {
719    
720     // Alors le champ est ajouté au tableau des erreurs
721     $error_fields[] = $value;
722     }
723     }
724    
725     // Si le tableau des erreurs n'est pas vide on le retourne
726     if (count($error_fields) > 0) {
727     return $error_fields;
728     }
729    
730     // Sinon on retourne le booléen true
731     return true;
732    
733     }
734    
735 vpihour 2450 /*
736     *
737     */
738     /**
739     * Récupère la lettre type lié à un événement
740     * @param integer $evenement L'identifiant de l'événement
741     * @return integer Retourne l'idenfiant de la lettre-type ou true
742     */
743     function getLettreType($evenement){
744    
745     $lettretype = NULL;
746    
747     $sql =
748     "SELECT
749     lettretype
750     FROM
751     ".DB_PREFIXE."evenement
752     WHERE
753     evenement = $evenement";
754    
755     $this->addToLog("getLettreType() : db->query(\"".$sql."\")", VERBOSE_MODE);
756     $res = $this->db->query($sql);
757     if ( database::isError($res)){
758     die();
759     }
760    
761     if ( $res->numrows() > 0 ){
762    
763     $row=& $res->fetchRow(DB_FETCHMODE_ASSOC);
764     $lettretype = $row['lettretype'];
765     }
766    
767     return $lettretype;
768     }
769    
770     /**
771     * Retourne le type de dossier d'autorisation du dossier courant :
772     * @param $idxDossier Le numéro du dossier d'instruction
773     * @return le code du type détaillée de dossier d'autorisation
774     **/
775     function getDATDCode($idxDossier) {
776     $sql = "SELECT dossier_autorisation_type_detaille.code
777     FROM ".DB_PREFIXE."dossier_autorisation_type_detaille
778     INNER JOIN ".DB_PREFIXE."dossier_autorisation
779     ON dossier_autorisation_type_detaille.dossier_autorisation_type_detaille =
780     dossier_autorisation.dossier_autorisation_type_detaille
781     INNER JOIN ".DB_PREFIXE."dossier ON dossier.dossier_autorisation = dossier_autorisation.dossier_autorisation
782     WHERE dossier.dossier = '".$idxDossier."'";
783     $res = $this->db->getOne($sql);
784     $this->addToLog("getDATDCode() : db->getOne(\"".$sql."\")", VERBOSE_MODE);
785     if ( database::isError($res)){
786     die();
787     }
788     return $res;
789     }
790 softime 2690
791     /**
792     * Permet de copier un enregistrement
793     * @param mixed $idx Identifiant de l'enregistrment
794     * @param string $obj Objet de l'enregistrment
795     * @param string $objsf Objets associés
796     * @return array Tableau des nouveaux id et du message
797     */
798     function copier($idx, $obj, $objsf) {
799    
800     // Tableau de résultat
801     $resArray = array();
802     // Message retourné à l'utilisateur
803     $message = "";
804     // Type du message (valid ou error)
805     $message_type = "valid";
806    
807     // Requête SQL permettant de récupérer les informations sur l'objet métier
808     $sql = "SELECT *
809     FROM ".DB_PREFIXE.$obj."
810     WHERE ".$obj." = ".$idx;
811     $res = $this->db->query($sql);
812     $this->isDatabaseError($res);
813    
814     // Valeurs clonées
815     $valF = array();
816     while ($row=& $res->fetchRow(DB_FETCHMODE_ASSOC)) {
817     // Recupère la valeur
818     $valF = $row;
819     }
820    
821     // Valeurs non clonées
822     // Identifiant modifié pour que ça soit un ajout
823     $valF[$obj] = "]";
824    
825     // Inclus la classe de l'objet métier
826     require_once "../obj/".$obj.".class.php";
827    
828     // Instance de l'objet métier
829     $clone_obj = new $obj("]", $this->db, DEBUG);
830     // Si dans l'objet métier la fonction "copier" existe
831     if (method_exists($clone_obj, "copier")) {
832     // Traitement sur les valeurs du duplicata
833     $valF = $clone_obj->copier($valF, $objsf, DEBUG);
834     // Recupère les messages retourné par la fonction
835     $message .= $valF['message'];
836     // Supprime les messages de la liste des valeurs
837     unset($valF['message']);
838     }
839     // Ajoute le duplicata
840     $clone_obj->ajouter($valF, $this->db, DEBUG);
841     // Si aucune erreur se produit dans la classe instanciée
842     if ($clone_obj->correct === true) {
843     // Récupère l'identifiant de l'objet créé
844     $clone_obj_id = $clone_obj->valF[$obj];
845    
846     // Message
847     $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 />";
848    
849     // Ajout de l'identifant au tableau des résultat
850     $resArray[$obj.'_'.$idx] = $clone_obj_id;
851    
852     // S'il y a au moins un objet metier associé
853     if ($objsf != "") {
854     // Liste des objet métier associés
855     $list_objsf = explode(",", $objsf);
856     // Pour chaque objet associé
857     foreach ($list_objsf as $key => $objsf) {
858     // Inclus la classe de l'objet métier associé
859     require_once "../obj/".$objsf.".class.php";
860    
861     // Requête SQL permettant de récupérer les informations sur
862     // l'objet métier associé
863     $sql = "SELECT *
864     FROM ".DB_PREFIXE.$objsf."
865     WHERE ".$obj." = ".$idx;
866     $res = $this->db->query($sql);
867     $this->isDatabaseError($res);
868    
869     // Pour chaque élément associé
870     while ($row=& $res->fetchRow(DB_FETCHMODE_ASSOC)) {
871     // Identifiant de l'objet associé à copier
872     $idxsf = $row[$objsf];
873    
874     // Valeurs clonées
875     $valF = $row;
876     // Valeurs non clonées
877     $valF[$obj] = $clone_obj_id;
878     // Identifiant modifié pour que ça soit un ajout
879     $valF[$objsf] = "]";
880     // Instance de l'objet métier associé
881     $clone_objsf = new $objsf("]", $this->db, DEBUG);
882     // Si dans l'objet métier associé
883     // la fonction "copier" existe
884     if (method_exists($clone_objsf, "copier")) {
885     // Traitement sur les valeurs du duplicata
886     $valF = $clone_objsf->copier($valF, $objsf, DEBUG);
887     // Recupère les messages retourné par la fonction
888     $message .= $valF['message'];
889     // Supprime les messages de la liste des valeurs
890     unset($valF['message']);
891     }
892     // Ajoute le duplicata
893     $clone_objsf->ajouter($valF, $this->db, DEBUG);
894     // Si aucune erreur se produit dans la classe instanciée
895     if ($clone_objsf->correct === true) {
896     // Récupère l'identifiant de l'objet créé
897     $clone_objsf_id = $clone_objsf->valF[$objsf];
898    
899     // Message
900     $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 />";
901    
902     // Ajout de l'identifant au tableau des résultat
903     $resArray[$objsf.'_'.$row[$objsf]] = $clone_objsf_id;
904     } else {
905    
906     // Message d'erreur récupéré depuis la classe
907     $message .= $clone_objsf->msg;
908     // Type du message
909     $message_type = "error";
910     }
911     }
912     }
913     }
914     //
915     } else {
916    
917     // Message d'erreur récupéré depuis la classe
918     $message .= $clone_obj->msg;
919     // Type du message
920     $message_type = "error";
921     }
922    
923     // Ajout du message au tableau des résultats
924     $resArray['message'] = $message;
925     // Ajout du type de message au tableau des résultats
926     $resArray['message_type'] = $message_type;
927    
928     // Retourne le tableau des résultats
929     return $resArray;
930     }
931 softime 2715
932     /**
933     * Permet de détailler les conditions pour l'affichage des contraintes dans
934     * une édition.
935 softime 2757 * @param string $contraintes_param Chaine des conditions
936     *
937 softime 2715 * @return array Conditions
938     */
939     function explodeConditionContrainte($contraintes_param) {
940    
941     // Initialisation des variables
942     $return = array();
943     $listGroupes = "";
944     $listSousgroupes = "";
945 softime 2757 $service_consulte = "";
946 softime 2715
947     // Coupe la condition au ";"
948     // Doit séparer groupe et sous-groupe
949     $contraintes_params = explode(";", $contraintes_param);
950 softime 2757
951     // Pour chaque paramètres
952     foreach ($contraintes_params as $value) {
953     // Si le mot-clés "liste_groupe="
954     if (strstr($value, "liste_groupe=")) {
955     // On enlève le mots-clés "liste_groupe="
956     $listGroupes = str_replace("liste_groupe=", "", $value);
957     }
958     // Si le mot-clés "liste_ssgroupe="
959     if (strstr($value, "liste_ssgroupe=")) {
960     // On enlève le mots-clés "liste_ssgroupe="
961     $listSousgroupes = str_replace("liste_ssgroupe=", "", $value);
962     }
963     // Si le mot-clés "service_consulte="
964     if (strstr($value, "service_consulte=")) {
965     // On enlève le mots-clés "service_consulte="
966     $service_consulte = str_replace("service_consulte=", "", $value);
967     }
968 softime 2715 }
969    
970     // Récupère la liste des groupes et sous-groupes qui doivent
971     // être utilisés pour la condition
972 softime 2757 if ($listGroupes != "") {
973     $listGroupes = explode(",", $listGroupes);
974     }
975     if ($listSousgroupes != "") {
976     $listSousgroupes = explode(",", $listSousgroupes);
977     }
978 softime 2715
979     // Tableau à retourner
980 softime 2757 $return['groupes'] = $listGroupes;
981     $return['sousgroupes'] = $listSousgroupes;
982     $return['service_consulte'] = $service_consulte;
983 softime 2715
984     //
985     return $return;
986     }
987 softime 2757
988     /**
989     * Traitement pour créer la condition sur les contraintes dans les éditions.
990     * @param string $part SQL et parti du pdf (sql, titre ou corps)
991     *
992     * @return string Condition pour la requête sur les contraintes
993     */
994     function traitement_condition_contrainte($part) {
995    
996     // Initialisationd de la condition
997     $whereContraintes = "";
998    
999     // Détaille la condtion
1000     $explodeConditionContrainte = $this->explodeConditionContrainte($part);
1001    
1002     // Récupère les groupes, sous-groupes et service_consulte pour la condition
1003     $groupes = $explodeConditionContrainte['groupes'];
1004     $sousgroupes = $explodeConditionContrainte['sousgroupes'];
1005     $service_consulte = $explodeConditionContrainte['service_consulte'];
1006    
1007     // Pour chaque groupe
1008     if ($groupes != "") {
1009     foreach ($groupes as $key => $groupe) {
1010     // Si le groupe n'est pas vide
1011     if (!empty($groupe)) {
1012     // Choisit l'opérateur logique
1013     $op_logique = $key > 0 ? 'OR' : 'AND (';
1014 vpihour 3125 // Ajoute la condition
1015     $whereContraintes .= " ".$op_logique." lower(trim(both E'\n\r\t' from contrainte.groupe)) = lower('"
1016 softime 2880 .pg_escape_string($groupe)."')";
1017 softime 2757 }
1018     }
1019     // S'il y a des valeurs dans groupe
1020     if (count($groupe) > 0) {
1021     // Ferme la parenthèse
1022     $whereContraintes .= " ) ";
1023     }
1024     }
1025    
1026     // Pour chaque sous-groupe
1027     if ($sousgroupes != "") {
1028     foreach ($sousgroupes as $key => $sousgroupe) {
1029     // Si le sous-groupe n'est pas vide
1030     if (!empty($sousgroupe)) {
1031     // Choisit l'opérateur logique
1032     $op_logique = $key > 0 ? 'OR' : 'AND (';
1033     // Ajoute la condition
1034 vpihour 3125 $whereContraintes .= " ".$op_logique." lower(trim(both E'\n\r\t' from contrainte.sousgroupe)) = lower('"
1035 softime 2880 .pg_escape_string($sousgroupe)."')";
1036 softime 2757 }
1037     }
1038     // S'il y a des valeurs dans sous-groupe
1039     if (count($sousgroupes) > 0) {
1040     // Ferme la parenthèse
1041     $whereContraintes .= " ) ";
1042     }
1043     }
1044    
1045     // Si l'option service_consulte n'est pas vide
1046     if ($service_consulte != "") {
1047     // Ajoute la condition
1048 vpihour 2932 $whereContraintes .= " AND service_consulte = cast(lower('".$service_consulte."') as boolean) ";
1049 softime 2757 }
1050    
1051     // Condition retournée
1052     return $whereContraintes;
1053     }
1054 softime 2771
1055     /**
1056     * Calcule une date par l'ajout ou la soustraction de mois
1057     * @param date $date Date de base
1058     * @param integer $delay Délais à ajouter (en mois)
1059     * @param string $operator Opérateur pour le calcul ("-" ou "+")
1060     *
1061     * @return date Date calculée
1062     */
1063     function mois_date($date, $delay, $operator = "+") {
1064 vpihour 2973
1065     // Si aucune date n'a été fournie ou si ce n'est pas une date correctement formatée
1066     if ( is_null($date) || $date == "" ||
1067     preg_match('/[0-9]{4}-[0-9]{2}-[0-9]{2}/', $date) == 0 ){
1068     return null;
1069     }
1070 softime 2771
1071     // Découpage de la date
1072 softime 2786 $temp = explode("-", $date);
1073 softime 2771 $day = (int) $temp[2];
1074     $month = (int) $temp[1];
1075     $year = (int) $temp[0];
1076    
1077     // Si c'est une addition
1078     if ($operator == '+') {
1079 softime 2786 // Année à ajouter
1080     $year += floor($delay / 12);
1081     // Mois restant
1082     $nb_month = ($delay % 12);
1083     // S'il y a des mois restant
1084     if ($nb_month != 0) {
1085     // Ajout des mois restant
1086     $month += $nb_month;
1087 softime 2771 // Si ça dépasse le mois 12 (décembre)
1088     if ($month > 12) {
1089     // Soustrait 12 au mois
1090     $month -= 12;
1091     // Ajoute 1 à l'année
1092     $year += 1;
1093     }
1094     }
1095     }
1096    
1097     // Si c'est une soustraction
1098     if ($operator == "-") {
1099 softime 2786 // Année à soustraire
1100     $year -= floor($delay / 12);
1101     // Mois restant
1102     $nb_month = ($delay % 12);
1103     // S'il y a des mois restant
1104     if ($nb_month != 0) {
1105 softime 2771 // Soustrait le délais
1106 softime 2786 $month -= $nb_month;
1107 softime 2771 // Si ça dépasse le mois 1 (janvier)
1108     if ($month < 1) {
1109     // Soustrait 12 au mois
1110     $month += 12;
1111     // Ajoute 1 à l'année
1112     $year -= 1;
1113     }
1114     }
1115     }
1116    
1117     // Calcul du nombre de jours dans le mois sélectionné
1118     switch($month) {
1119     // Mois de février
1120     case "2":
1121     if ($year % 4 == 0 && $year % 100 != 0 || $year % 400 == 0) {
1122     $day_max = 29;
1123     } else {
1124     $day_max = 28;
1125     }
1126     break;
1127     // Mois d'avril, juin, septembre et novembre
1128     case "4":
1129     case "6":
1130     case "9":
1131     case "11":
1132     $day_max = 30;
1133     break;
1134     // Mois de janvier, mars, mai, juillet, août, octobre et décembre
1135     default:
1136     $day_max = 31;
1137     }
1138    
1139     // Si le jour est supérieur au jour maximum du mois
1140     if ($day > $day_max) {
1141     // Le jour devient le jour maximum
1142     $day = $day_max;
1143     }
1144    
1145 softime 2786 // Compléte le mois et le jour par un 0 à gauche si c'est un chiffre
1146     $month = str_pad($month, 2, "0", STR_PAD_LEFT);
1147     $day = str_pad($day, 2, "0", STR_PAD_LEFT);
1148    
1149 softime 2771 // Retourne la date calculée
1150     return $year."-".$month."-".$day ;
1151     }
1152 softime 2787
1153     /**
1154     * Vérifie la valididité d'une date.
1155     * @param string $pDate Date à vérifier
1156     *
1157     * @return boolean
1158     */
1159     function check_date($pDate) {
1160    
1161     // Vérifie si c'est une date valide
1162     if (preg_match("/^([0-9]{4})-([0-9]{2})-([0-9]{2})$/", $pDate, $date)
1163     && checkdate($date[2], $date[3], $date[1])
1164     && $date[1] >= 1900) {
1165     //
1166     return true;
1167     }
1168    
1169     //
1170     return false;
1171     }
1172 vpihour 3205
1173     function clean_break($input) {
1174 nhaye 3230 if(is_array($input)) {
1175     foreach($input as $key => $value) {
1176     $input[$key] = $this->clean_break($value);
1177     }
1178 nhaye 3223 } else {
1179 nhaye 3230 //remove whitespace...
1180     $input = trim($input);
1181     //disable magic quotes...
1182     if(get_magic_quotes_gpc()) {
1183     stripslashes($input);
1184 nhaye 3223 }
1185 nhaye 3230 //prevent sql injection...
1186 nhaye 3238 if(!is_numeric($input)) {
1187 nhaye 3230 if(isset($this->db)) {
1188     $this->db->escapeSimple($input);
1189     }
1190     }
1191     //prevent xss...
1192     $input = htmlentities($input);
1193 nhaye 3223 }
1194 vpihour 3205 return $input;
1195     }
1196 fraynaud 96 }
1197 fraynaud 3
1198 fraynaud 96 ?>

[email protected]
ViewVC Help
Powered by ViewVC 1.1.26