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

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

Parent Directory Parent Directory | Revision Log Revision Log


Revision 2771 - (hide annotations)
Tue Feb 25 14:56:56 2014 UTC (10 years, 11 months ago) by softime
File size: 38787 byte(s)
Optimisation de la fonction moisDate pour le calcul de date : est devenu mois_date et permet aussi de faire des soustractions désormais + modification des tests pour vérifier les dates avec cette même fonction.

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

[email protected]
ViewVC Help
Powered by ViewVC 1.1.26