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

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

Parent Directory Parent Directory | Revision Log Revision Log


Revision 2305 - (hide annotations)
Tue Sep 17 14:53:07 2013 UTC (11 years, 4 months ago) by softime
File size: 22001 byte(s)
- Correction du traitement de la restriction lors de l'ajout d'événement d'instruction.
- Ajout d'un controle de saisie lors de l'ajout d'une restriction pour un événement.
- Traductions.
- MàJ HISTORY.txt

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 fmichon 686 // {{{
41 fmichon 818
42     /**
43     *
44     */
45     function isAccredited($obj = NULL, $operator = "AND") {
46     // Lorsque l'utilisateur a le login 'admin' alors il est authorisé à
47     // accéder à toutes les fonctions du logiciel
48     // XXX à modifier pour changer ça vers un profil et non un login utilisateur
49     if ($_SESSION["login"] == "admin") {
50     return true;
51     }
52     // Fonctionnement standard
53     return parent::isAccredited($obj, $operator);
54     }
55    
56     // }}}
57 fmichon 686
58 fmichon 818 // {{{
59    
60 fmichon 817 var $om_utilisateur = array();
61     var $user_is_instr = NULL;
62 softime 2120 var $user_is_service = NULL;
63     var $user_is_admin = NULL;
64 fmichon 817 var $user_is_service_ext = NULL;
65 softime 2120 var $user_is_qualificateur = NULL;
66     var $user_is_chef = NULL;
67     var $user_is_divisionnaire = NULL;
68     var $user_is_service_int = NULL;
69 fmichon 817
70     /**
71     * Méthode de récupération des informations de l'utilisateur connecté.
72     */
73     function getUserInfos() {
74    
75     // Si l'utilisateur est loggé $_SESSION existe
76     if(isset($_SESSION['login']) AND !empty($_SESSION['login'])) {
77    
78     // Récupération des infos utilisateur
79     $sqlUser = "SELECT om_utilisateur, nom, email, login, om_collectivite, om_profil ".
80 fmichon 924 "FROM ".DB_PREFIXE."om_utilisateur WHERE login = '".$_SESSION['login']."'";
81 fmichon 817 $resUser=$this->db->query($sqlUser);
82     $this->addToLog("getUserInfos(): db->query(\"".$sqlUser."\");", VERBOSE_MODE);
83 vpihour 1777 if ( database::isError($resUser)){
84     die();
85     }
86 fmichon 817 $this->om_utilisateur=&$resUser->fetchRow(DB_FETCHMODE_ASSOC);
87 softime 2034
88     // Récupère le profil et test si c'est un
89     $sqlProfil = "SELECT libelle FROM ".DB_PREFIXE."om_profil WHERE om_profil = ".$this->om_utilisateur['om_profil'];
90     $resProfil=$this->db->getOne($sqlProfil);
91     $this->addToLog("getUserInfos(): db->getOne(\"".$sqlProfil."\");", VERBOSE_MODE);
92     if (database::isError($resProfil)){
93     die();
94     }
95 softime 2120 // Sauvegarde le libelle du profil
96     $this->om_utilisateur["libelle_profil"] = $resProfil;
97    
98 softime 2034 // si c'est un administrateur technique
99     if ($resProfil == "ADMINISTRATEUR TECHNIQUE") {
100     $this->user_is_admin = true;
101     } else {
102     $this->user_is_admin = false;
103     }
104 softime 2120
105     //si c'est un service externe
106     if ($resProfil == "SERVICE CONSULTÉ") {
107     $this->user_is_service_ext = true;
108     } else {
109     $this->user_is_service_ext = false;
110     }
111    
112     //si c'est un service interne
113     if ($resProfil == "SERVICE CONSULTÉ INTERNE") {
114     $this->user_is_service_int = true;
115     } else {
116     $this->user_is_service_int = false;
117     }
118    
119     // si c'est un qualificateur
120     if ($resProfil == "QUALIFICATEUR") {
121     $this->user_is_qualificateur = true;
122     } else {
123     $this->user_is_qualificateur = false;
124     }
125    
126     // si c'est un chef de service
127     if ($resProfil == "CHEF DE SERVICE") {
128     $this->user_is_chef = true;
129     } else {
130     $this->user_is_chef = false;
131     }
132    
133     // si c'est un divisionnaire
134     if ($resProfil == "DIVISIONNAIRE") {
135     $this->user_is_divisionnaire = true;
136     } else {
137     $this->user_is_divisionnaire = false;
138     }
139 fmichon 817
140     // Récupération des infos instructeur
141 fmichon 943 $sqlInstr = "SELECT instructeur.instructeur, instructeur.nom, instructeur.telephone,
142     division.division, division.code, division.libelle ".
143 fmichon 924 "FROM ".DB_PREFIXE."instructeur INNER JOIN ".DB_PREFIXE."division ON division.division=instructeur.division ".
144 fmichon 817 "WHERE instructeur.om_utilisateur = ".$this->om_utilisateur['om_utilisateur'];
145     $resInstr=$this->db->query($sqlInstr);
146     $this->addToLog("getUserInfos(): db->query(\"".$sqlInstr."\");", VERBOSE_MODE);
147 vpihour 1777 if ( database::isError($resInstr)){
148     die();
149     }
150 fmichon 817 $tempInstr=&$resInstr->fetchRow(DB_FETCHMODE_ASSOC);
151     // Si il y a un resultat c'est un instructeur
152     if(count($tempInstr)>0) {
153     $this->user_is_instr=true;
154     $this->om_utilisateur = array_merge($this->om_utilisateur,$tempInstr);
155     } else {
156     $this->user_is_instr=false;
157     }
158    
159 softime 2120 // Récupération des infos de services consultés
160     $sqlServ = "SELECT service.service, service.abrege, service.libelle ".
161 fmichon 924 "FROM ".DB_PREFIXE."service ".
162     "INNER JOIN ".DB_PREFIXE."lien_service_om_utilisateur ON lien_service_om_utilisateur.service=service.service ".
163 fmichon 817 "WHERE lien_service_om_utilisateur.om_utilisateur = ".$this->om_utilisateur['om_utilisateur'];
164 softime 2120 $resServ=$this->db->query($sqlServ);
165     $this->addToLog("getUserInfos(): db->query(\"".$sqlServ."\");", VERBOSE_MODE);
166     if ( database::isError($resServ)){
167 vpihour 1777 die();
168     }
169 fmichon 817
170 softime 2120 while ($tempServ=&$resServ->fetchRow(DB_FETCHMODE_ASSOC)) {
171     $this->om_utilisateur['service'][]=$tempServ;
172 fmichon 817 }
173     // Si il y a un resultat c'est un utilisateur de service
174     if(isset($this->om_utilisateur['service'])) {
175 softime 2120 $this->user_is_service=true;
176 fmichon 817 } else {
177 softime 2120 $this->user_is_service=false;
178 fmichon 817 }
179     }
180     }
181    
182     /**
183 softime 2120 * getter user_is_service
184 fmichon 817 */
185 softime 2120 function isUserService() {
186 fmichon 817 //
187 softime 2120 if (is_null($this->user_is_service)) {
188 fmichon 817 //
189     $this->getUserInfos();
190     }
191     //
192 softime 2120 return $this->user_is_service;
193 fmichon 817 }
194    
195     /**
196     * getter user_is_instr
197     */
198     function isUserInstructeur() {
199     //
200     if (is_null($this->user_is_instr)) {
201     //
202     $this->getUserInfos();
203     }
204     //
205     return $this->user_is_instr;
206     }
207    
208 softime 2034 function isUserAdministrateur() {
209     //
210     if (is_null($this->user_is_admin)) {
211     //
212     $this->getUserInfos();
213     }
214     //
215     return $this->user_is_admin;
216     }
217    
218 softime 2120 /**
219     * getter user_is_service_ext
220     */
221     function isUserServiceExt() {
222     //
223     if (is_null($this->user_is_service_ext)) {
224     //
225     $this->getUserInfos();
226     }
227     //
228     return $this->user_is_service_ext;
229     }
230    
231     /**
232     * getter user_is_service_int
233     */
234     function isUserServiceInt() {
235     //
236     if (is_null($this->user_is_service_int)) {
237     //
238     $this->getUserInfos();
239     }
240     //
241     return $this->user_is_service_int;
242     }
243    
244     /**
245     * getter user_is_qualificateur
246     */
247     function isUserQualificateur() {
248     //
249     if (is_null($this->user_is_qualificateur)) {
250     //
251     $this->getUserInfos();
252     }
253     //
254     return $this->user_is_qualificateur;
255     }
256    
257     /**
258     * getter user_is_chef
259     */
260     function isUserChef() {
261     //
262     if (is_null($this->user_is_chef)) {
263     //
264     $this->getUserInfos();
265     }
266     //
267     return $this->user_is_chef;
268     }
269    
270     /**
271     * getter user_is_divisionnaire
272     */
273     function isUserDivisionnaire() {
274     //
275     if (is_null($this->user_is_divisionnaire)) {
276     //
277     $this->getUserInfos();
278     }
279     //
280     return $this->user_is_divisionnaire;
281     }
282    
283 fmichon 686 // Ajout de variables de session contenant la division pour permettre une
284     // utilisation plus efficace dans les requetes
285     function triggerAfterLogin($utilisateur = NULL) {
286     //
287     $sql = "SELECT instructeur.division, division.code
288     FROM ".DB_PREFIXE."instructeur
289     LEFT JOIN ".DB_PREFIXE."division
290     ON instructeur.division = division.division
291     WHERE instructeur.om_utilisateur='".$utilisateur["om_utilisateur"]."'";
292     $res = $this->db->query($sql);
293     $this->addToLog("triggerAfterLogin(): db->query(\"".$sql."\");", VERBOSE_MODE);
294 vpihour 1777 if ( database::isError($res)){
295     die();
296     }
297 fmichon 686 $row = $res->fetchrow(DB_FETCHMODE_ASSOC);
298     //
299     if (isset($row["division"]) && $row["division"] != NULL) {
300     $_SESSION["division"] = $row["division"];
301     $_SESSION["division_code"] = $row["code"];
302     } else {
303     $_SESSION["division"] = "0";
304     $_SESSION["division_code"] = "";
305     }
306    
307     }
308    
309     // Affichage des actions supplémentaires
310     function displayActionExtras() {
311     // Affichage de la division si l'utilisateur en possède une
312     if ($_SESSION["division"] != 0) {
313     echo "\t\t\t<li class=\"action-division\">";
314     echo "(".$_SESSION['division_code'].")";
315     echo "</li>\n";
316     }
317     }
318 fmichon 817
319 fmichon 686 // }}}
320    
321 fmichon 949
322     function getDivisionFromDossier($dossier) {
323     //
324     $sql = "select division from ".DB_PREFIXE."dossier ";
325     $sql .= " where dossier='".$dossier."'";
326     //
327     $division = $this->db->getOne($sql);
328     $this->addToLog("getDivisionFromDossier(): db->getone(\"".$sql."\")", VERBOSE_MODE);
329     database::isError($division);
330     //
331     return $division;
332     }
333    
334 fmichon 818 // {{{ GESTION DES FICHIERS
335 nhaye 580
336 nhaye 677 /**
337     *
338     */
339     function notExistsError ($explanation = NULL) {
340     // message
341     $message_class = "error";
342     $message = _("Cette page n'existe pas.");
343     $this->addToMessage ($message_class, $message);
344     //
345     $this->setFlag(NULL);
346     $this->display();
347    
348     //
349     die();
350     }
351 vpihour 1978
352 fmichon 818 // }}}
353 vpihour 1978 /**
354     * Retourne le statut du dossier d'instruction
355     * @param string $idx Identifiant du dossier d'instruction
356     * @return string Le statut du dossier d'instruction
357     */
358     function getStatutDossier($idx){
359    
360     $statut = '';
361    
362     //Si l'identifiant du dossier d'instruction fourni est correct
363     if ( $idx != '' ){
364    
365     //On récupère le statut de l'état du dossier à partir de l'identifiant du
366     //dossier d'instruction
367     $sql = "SELECT etat.statut
368     FROM ".DB_PREFIXE."dossier
369     LEFT JOIN
370     ".DB_PREFIXE."etat
371     ON
372     dossier.etat = etat.etat
373     WHERE dossier ='".$idx."'";
374     $statut = $this->db->getOne($sql);
375     $this->addToLog("getStatutDossier() : db->getOne(\"".$sql."\")", VERBOSE_MODE);
376     if ( database::isError($statut)){
377     die();
378     }
379     }
380     return $statut;
381     }
382 softime 2170
383     /**
384     * Formate le champ pour le type Timestamp
385     * @param date $date_str Date
386     * @param boolean $show Format pour l'affichage
387     * @return mixed False si le traitement échoue ou la date formatée
388     */
389     function formatTimestamp ($date_str, $show = true) {
390    
391     // Sépare la date et l'heure
392     $date = explode(" ", $date_str);
393     if (count($date) != 2) {
394     return false;
395     }
396    
397     // Date en BDD
398     $date_db = explode ('-', $date[0]);
399     // Date en affichage
400     $date_show = explode ('/', $date[0]);
401    
402     // Contrôle la composition de la date
403     if (count ($date_db) != 3 and count ($date_show) != 3) {
404     return false;
405     }
406    
407     if (count ($date_db) == 3) {
408     // Vérifie que c'est une date valide
409     if (!checkdate($date_db[1], $date_db[2], $date_db[0])) {
410     return false;
411     }
412     // Si c'est pour l'affichage de la date
413     if ($show == true) {
414     return $date_db [2]."/".$date_db [1]."/".$date_db [0]." ".$date[1];
415     } else {
416     return $date[0];
417     }
418     }
419    
420     //
421     if (count ($date_show) == 3) {
422     // Vérifie que c'est une date valide
423     if (!checkdate($date_show[1], $date_show[0], $date_show[2])) {
424     return false;
425     }
426     // Si c'est pour l'affichage de la date
427     if ($show == true) {
428     return $date[0];
429     } else {
430     return $date_show [2]."-".$date_show [1]."-".$date_show [0]." ".$date[1];
431     }
432    
433     }
434     return false;
435    
436     }
437 softime 2172
438     /**
439     * Permet de calculer la liste des parcelles à partir de la chaîne passée en paramètre
440     * et la retourner sous forme d'un tableau associatif
441     *
442     * @param string $strParcelles chaîne de la parcelles
443     * @return array (array(quartier, section, parcelle), ...)
444     */
445     function parseParcelles($strParcelles) {
446    
447     // Séparation des lignes
448     $references = explode(";", $strParcelles);
449     $liste_parcelles = array();
450    
451     // On boucle sur chaque ligne pour ajouter la liste des parcelles de chaque ligne
452     foreach ($references as $parcelles) {
453    
454     // On transforme la chaîne de la ligne de parcelles en tableau
455     $ref = str_split($parcelles);
456     // Les 1er caractères sont numériques
457     $num = true;
458    
459     // Tableau des champs de la ligne de références cadastrales
460     $reference_tab = array();
461     $temp = "";
462     foreach ($ref as $carac) {
463    
464     // Permet de tester si le caractère courant est de même type que le précédent
465     if(is_numeric($carac) === $num) {
466     $temp .= $carac;
467     } else {
468     // Bascule
469     $num = !$num;
470     // On stock le champ
471     $reference_tab[] = $temp;
472     // re-init de la valeur temporaire pour le champ suivant
473     $temp = $carac;
474     }
475     }
476     // Stockage du dernier champ sur lequel il n'y a pas eu de bascule
477     $reference_tab[] = $temp;
478     // Calcul des parcelles
479     $quartier = $reference_tab[0];
480     $sect = $reference_tab[1];
481    
482     $ancien_ref_parc = "";
483     for ($i=2; $i < count($reference_tab); $i+=2) {
484     $parc["quartier"] = $quartier;
485 softime 2267 // Met en majuscule si besoin
486     $parc["section"] = strtoupper($sect);
487 softime 2172 if( $ancien_ref_parc == "" OR $reference_tab[$i-1] == "/") {
488     // 1ere parcelle ou parcelle individuelle
489 softime 2267 // Compléte par des "0" le début de la chaîne si besoin
490     $parc["parcelle"] = str_pad($reference_tab[$i], 4, "0", STR_PAD_LEFT);
491 softime 2172 // Ajout d'une parcelle à la liste
492     $liste_parcelles[] = $parc;
493     } elseif ($reference_tab[$i-1] == "A") {
494     // Interval de parcelles
495     for ($j=$ancien_ref_parc+1; $j <= $reference_tab[$i]; $j++) {
496     // Compléte par des "0" le début de la chaîne si besoin
497     $parc["parcelle"] = str_pad($j, 4, "0", STR_PAD_LEFT);
498     // Ajout d'une parcelle à la liste
499     $liste_parcelles[] = $parc;
500     }
501     }
502     //Gestion des erreurs
503     else{
504    
505     echo _("Une erreur de formattage a ete detecte dans la reference cadastrale du dossier ").$this->row['dossier'];
506     }
507     // Sauvegarde de la référence courante de parcelle
508     $ancien_ref_parc = $reference_tab[$i];
509     }
510     }
511    
512     return $liste_parcelles;
513     }
514    
515     /**
516     * Formate les parcelles en ajoutant le code impôt
517     * @param array $liste_parcelles Tableau des parcelles
518     * @return string Liste des parcelles formatées
519     */
520     function formatParcelleToSend($liste_parcelles) {
521    
522     //
523 nhaye 2180 $wParcelle = array();
524 softime 2172
525     //Formatage des références cadastrales pour l'envoi
526     foreach ($liste_parcelles as $value) {
527    
528     // On ajoute les données dans le tableau que si quartier + section + parcelle
529     // a été fourni
530 nhaye 2180 if ($value["quartier"] !== ""
531     && $value["section"] !== ""
532     && $value["parcelle"] !== ""){
533 softime 2172
534     //On récupère le code impôt de l'arrondissement
535     $arrondissement = $this->getCodeImpotByQuartier($value["quartier"]);
536    
537     //On ajoute la parcelle, si un arrondissement a été trouvé
538     if ($arrondissement!=="") {
539     //
540 nhaye 2180 $wParcelle[] = $arrondissement.$value["quartier"]." ".
541     $value["section"].$value["parcelle"];
542 softime 2172
543     }
544     }
545     }
546    
547     //
548     return $wParcelle;
549     }
550    
551     /**
552     * Récupère le code impôt par rapport au quartier
553     * @param string $quartier Numéro de quartier
554     * @return string Code impôt
555     */
556     function getCodeImpotByQuartier($quartier) {
557    
558     $arrondissement = "";
559    
560     // Si le quartier fournis est correct
561     if ($quartier != "") {
562    
563     // Requête SQL
564     $sql = "SELECT
565     arrondissement.code_impots
566     FROM
567     ".DB_PREFIXE."arrondissement
568     LEFT JOIN
569     ".DB_PREFIXE."quartier
570     ON
571     quartier.arrondissement = arrondissement.arrondissement
572     WHERE
573     quartier.code_impots = '".$quartier."'";
574     $this->addToLog("getCodeImpotByQuartier() : db->getOne(\"".$sql."\")", VERBOSE_MODE);
575     $arrondissement = $this->db->getOne($sql);
576     $this->isDatabaseError($arrondissement);
577     }
578    
579     // Retour
580     return $arrondissement;
581     }
582    
583 softime 2175 /**
584     * Vérification des paramètres
585     */
586     function checkParams() {
587     parent::checkParams();
588    
589     (isset($this->config['path_scan']) ? "" : $this->config['path_scan'] = '../trs/numerisation/');
590 softime 2178
591     $default_sig_elyx = array(
592     'wsdl' => '../tests/wsurbanisme.wsdl',
593     'login' => 'sig',
594     'password' => 'sig',
595     );
596     (isset($this->config['sig_elyx']) ? "" : $this->config['sig_elyx'] = $default_sig_elyx);
597 softime 2175 }
598    
599 nhaye 2180 /**
600     * Retourne true si tous les paramètres du SIG externe ont bien été définis
601     * @return bool true/false
602     */
603     public function issetSIGParameter() {
604     if($this->getParameter("sig_web_server") != NULL AND
605     $this->getParameter("sig_web_server") != "" AND
606     $this->getParameter("sig_couche_emprise_dossier") != NULL AND
607     $this->getParameter("sig_couche_emprise_dossier") != "" AND
608     $this->getParameter("sig_couche_affichage_dossier") != NULL AND
609     $this->getParameter("sig_couche_affichage_dossier") != "" AND
610     $this->getParameter("sig_couche_affichage_parcelle") != NULL AND
611     $this->getParameter("sig_couche_affichage_parcelle") != "") {
612     return true;
613     } else {
614     return false;
615     }
616     }
617    
618 softime 2305 /**
619     * Permet de vérifier que des champs existe dans une table
620     * @param array $list_fields Liste des champs à tester
621     * @param string $table Table où les champs doivent exister
622     * @return mixed Retourne les champs qui n'existent pas
623     * ou true
624     */
625     public function check_field_exist($list_fields, $table) {
626    
627     // Requête SQL pour récupérer le nom des colonnes
628     $sql = "SELECT column_name
629     FROM information_schema.columns
630     WHERE table_schema = '".substr(DB_PREFIXE, 0, -1)."'
631     AND table_name = '".$table."'
632     ORDER BY ordinal_position";
633     $this->addToLog("check_field_exist() : db->query(\"".$sql."\")", VERBOSE_MODE);
634     $res = $this->db->query($sql);
635     $this->isDatabaseError($res);
636    
637     // Tant qu'il y a un résultat
638     while ($row = &$res->fetchRow(DB_FETCHMODE_ASSOC)) {
639    
640     // Le nom de la colonne est mise dans un tableau
641     $list_column[] = $row['column_name'];
642     }
643    
644     // Tableau des champs en erreur
645     $error_fields = array();
646    
647     // Pour chaque champ à tester
648     foreach ($list_fields as $value) {
649    
650     // S'il n'apparaît pas dans la liste des champs possible
651     if (!in_array($value, $list_column)) {
652    
653     // Alors le champ est ajouté au tableau des erreurs
654     $error_fields[] = $value;
655     }
656     }
657    
658     // Si le tableau des erreurs n'est pas vide on le retourne
659     if (count($error_fields) > 0) {
660     return $error_fields;
661     }
662    
663     // Sinon on retourne le booléen true
664     return true;
665    
666     }
667    
668 fraynaud 96 }
669 fraynaud 3
670 fraynaud 96 ?>

[email protected]
ViewVC Help
Powered by ViewVC 1.1.26