/[openfoncier]/branches/3.14.0-b13/obj/utils.class.php
ViewVC logotype

Contents of /branches/3.14.0-b13/obj/utils.class.php

Parent Directory Parent Directory | Revision Log Revision Log


Revision 3229 - (show annotations)
Fri Dec 19 17:00:24 2014 UTC (10 years, 1 month ago) by vpihour
Original Path: trunk/obj/utils.class.php
File size: 40903 byte(s)
Modification de la récupération des post et get avec les méthodes appropriées.

1 <?php
2 /**
3 * Ce fichier est destine a permettre la surcharge de certaines methodes de
4 * la classe om_application pour des besoins specifiques de l'application
5 *
6 * @package openmairie_exemple
7 * @version SVN : $Id: utils.class.php 547 2011-08-25 12:03:42Z fmichon $
8 */
9
10 /**
11 *
12 */
13 require_once "../dyn/locales.inc.php";
14
15 /**
16 *
17 */
18 require_once "../dyn/include.inc.php";
19
20 /**
21 *
22 */
23 require_once "../dyn/debug.inc.php";
24
25 /**
26 *
27 */
28 (defined("PATH_OPENMAIRIE") ? "" : define("PATH_OPENMAIRIE", ""));
29
30 /**
31 *
32 */
33 require_once PATH_OPENMAIRIE."om_application.class.php";
34
35 /**
36 *
37 */
38 class utils extends application {
39
40 // Valeurs postées
41 var $submitted_post_value;
42
43 // Valeurs passées à l'url
44 var $submitted_get_value;
45
46 /**
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 function get_submitted_post_value($param = null) {
54 //
55 if ($param == null) {
56 return $this->submitted_post_value;
57 }
58 //
59 if (isset($this->submitted_post_value[$param])) {
60 //
61 return $this->submitted_post_value[$param];
62 }
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 function get_submitted_get_value($param = null) {
75 //
76 if ($param == null) {
77 return $this->submitted_get_value;
78 }
79 //
80 if (isset($this->submitted_get_value[$param])) {
81 //
82 return $this->submitted_get_value[$param];
83 }
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 $this->set_submitted_value();
98 }
99
100 function set_submitted_value() {
101 if(isset($_GET) and !empty($_GET)) {
102 foreach ($_GET as $key => $value) {
103 $this->submitted_get_value[$key]=$this->clean_break($value);
104 }
105 }
106 if(isset($_POST) and !empty($_POST)) {
107 foreach ($_POST as $key => $value) {
108 $this->submitted_post_value[$key]=$this->clean_break($value);
109 }
110 }
111 }
112
113 // {{{
114
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
131 // {{{
132
133 var $om_utilisateur = array();
134 var $user_is_instr = NULL;
135 var $user_is_service = NULL;
136 var $user_is_admin = NULL;
137 var $user_is_service_ext = NULL;
138 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
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 "FROM ".DB_PREFIXE."om_utilisateur WHERE login = '".$_SESSION['login']."'";
154 $resUser=$this->db->query($sqlUser);
155 $this->addToLog("getUserInfos(): db->query(\"".$sqlUser."\");", VERBOSE_MODE);
156 if ( database::isError($resUser)){
157 die();
158 }
159 $this->om_utilisateur=&$resUser->fetchRow(DB_FETCHMODE_ASSOC);
160
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 // Sauvegarde le libelle du profil
169 $this->om_utilisateur["libelle_profil"] = $resProfil;
170
171 // si c'est un administrateur technique
172 // XXX Mauvaise méthode, il faut utiliser isAccredited
173 if ($resProfil == "ADMINISTRATEUR TECHNIQUE"
174 || $resProfil == "ADMINISTRATEUR FONCTIONNEL") {
175 $this->user_is_admin = true;
176 } else {
177 $this->user_is_admin = false;
178 }
179
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
215 // Récupération des infos instructeur
216 $sqlInstr = "SELECT instructeur.instructeur, instructeur.nom, instructeur.telephone,
217 division.division, division.code, division.libelle ".
218 "FROM ".DB_PREFIXE."instructeur INNER JOIN ".DB_PREFIXE."division ON division.division=instructeur.division ".
219 "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 if ( database::isError($resInstr)){
223 die();
224 }
225 $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 // Récupération des infos de services consultés
235 $sqlServ = "SELECT service.service, service.abrege, service.libelle ".
236 "FROM ".DB_PREFIXE."service ".
237 "INNER JOIN ".DB_PREFIXE."lien_service_om_utilisateur ON lien_service_om_utilisateur.service=service.service ".
238 "WHERE lien_service_om_utilisateur.om_utilisateur = ".$this->om_utilisateur['om_utilisateur'];
239 $resServ=$this->db->query($sqlServ);
240 $this->addToLog("getUserInfos(): db->query(\"".$sqlServ."\");", VERBOSE_MODE);
241 if ( database::isError($resServ)){
242 die();
243 }
244
245 while ($tempServ=&$resServ->fetchRow(DB_FETCHMODE_ASSOC)) {
246 $this->om_utilisateur['service'][]=$tempServ;
247 }
248 // Si il y a un resultat c'est un utilisateur de service
249 if(isset($this->om_utilisateur['service'])) {
250 $this->user_is_service=true;
251 } else {
252 $this->user_is_service=false;
253 }
254 }
255 }
256
257 /**
258 * getter user_is_service
259 */
260 function isUserService() {
261 //
262 if (is_null($this->user_is_service)) {
263 //
264 $this->getUserInfos();
265 }
266 //
267 return $this->user_is_service;
268 }
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 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 /**
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 // 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 if ( database::isError($res)){
370 die();
371 }
372 $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
394 // }}}
395
396
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 // {{{ GESTION DES FICHIERS
410
411 /**
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
427 // }}}
428 /**
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
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
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 // Met en majuscule si besoin
561 $parc["section"] = strtoupper($sect);
562 if( $ancien_ref_parc == "" OR $reference_tab[$i-1] == "/") {
563 // 1ere parcelle ou parcelle individuelle
564 // 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 // 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 $wParcelle = array();
599
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 if ($value["quartier"] !== ""
606 && $value["section"] !== ""
607 && $value["parcelle"] !== ""){
608
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 $wParcelle[] = $arrondissement.$value["quartier"].
616 str_pad($value["section"], 2, " ", STR_PAD_LEFT).
617 $value["parcelle"];
618 }
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 /**
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
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 }
673
674 /**
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 /**
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 // Instance de la classe en paramètre
703 require_once "../obj/".$table.".class.php";
704 $object = new $table("]", $this->db, DEBUG);
705
706 // Récupère les champs de la table
707 foreach ($object->champs as $champ) {
708 $list_column[] = $champ;
709 }
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 /*
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
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
932 /**
933 * Permet de détailler les conditions pour l'affichage des contraintes dans
934 * une édition.
935 * @param string $contraintes_param Chaine des conditions
936 *
937 * @return array Conditions
938 */
939 function explodeConditionContrainte($contraintes_param) {
940
941 // Initialisation des variables
942 $return = array();
943 $listGroupes = "";
944 $listSousgroupes = "";
945 $service_consulte = "";
946
947 // Coupe la condition au ";"
948 // Doit séparer groupe et sous-groupe
949 $contraintes_params = explode(";", $contraintes_param);
950
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 }
969
970 // Récupère la liste des groupes et sous-groupes qui doivent
971 // être utilisés pour la condition
972 if ($listGroupes != "") {
973 $listGroupes = explode(",", $listGroupes);
974 }
975 if ($listSousgroupes != "") {
976 $listSousgroupes = explode(",", $listSousgroupes);
977 }
978
979 // Tableau à retourner
980 $return['groupes'] = $listGroupes;
981 $return['sousgroupes'] = $listSousgroupes;
982 $return['service_consulte'] = $service_consulte;
983
984 //
985 return $return;
986 }
987
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 // Ajoute la condition
1015 $whereContraintes .= " ".$op_logique." lower(trim(both E'\n\r\t' from contrainte.groupe)) = lower('"
1016 .pg_escape_string($groupe)."')";
1017 }
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 $whereContraintes .= " ".$op_logique." lower(trim(both E'\n\r\t' from contrainte.sousgroupe)) = lower('"
1035 .pg_escape_string($sousgroupe)."')";
1036 }
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 $whereContraintes .= " AND service_consulte = cast(lower('".$service_consulte."') as boolean) ";
1049 }
1050
1051 // Condition retournée
1052 return $whereContraintes;
1053 }
1054
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
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
1071 // Découpage de la date
1072 $temp = explode("-", $date);
1073 $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 // 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 // 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 // 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 // Soustrait le délais
1106 $month -= $nb_month;
1107 // 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 // 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 // Retourne la date calculée
1150 return $year."-".$month."-".$day ;
1151 }
1152
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
1173 function clean_break($input) {
1174 //remove whitespace...
1175 $input = trim($input);
1176 //disable magic quotes...
1177 if(get_magic_quotes_gpc()) {
1178 stripslashes($input);
1179 }
1180 //prevent sql injection...
1181 if(is_numeric($input)) {
1182 $input = intval($input);
1183 } else {
1184 if(isset($this->db)) {
1185 $this->db->escapeSimple($input);
1186 }
1187 }
1188 //prevent xss...
1189 $input = htmlentities($input);
1190 return $input;
1191 }
1192 }
1193
1194 ?>

[email protected]
ViewVC Help
Powered by ViewVC 1.1.26