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

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

Parent Directory Parent Directory | Revision Log Revision Log


Revision 2690 - (hide annotations)
Wed Jan 22 16:04:33 2014 UTC (11 years ago) by softime
File size: 30372 byte(s)
Correction/Amélioration du script permettant la copie des événements. Il peut désormais être utilisé pour d'autre objet et peut prendre en compte des traitements spécifiques récupérés depuis la fonction copier de la classe de l'objet.
Ajout de test concernant la fonction de copie.
Ajout de nouvelle traduction.

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 fraynaud 96 }
867 fraynaud 3
868 fraynaud 96 ?>

[email protected]
ViewVC Help
Powered by ViewVC 1.1.26