/[openfoncier]/branches/3.14.2/app/geolocalisation_treatment.php
ViewVC logotype

Contents of /branches/3.14.2/app/geolocalisation_treatment.php

Parent Directory Parent Directory | Revision Log Revision Log


Revision 2205 - (show annotations)
Fri Aug 30 15:49:47 2013 UTC (11 years, 5 months ago) by nhaye
Original Path: trunk/app/geolocalisation_treatment.php
File size: 11515 byte(s)
Correction d'une erreur de base de données,
ajout des tests fonctionnels concernant le lien vers le sig
ajout des tests de géolocalisation à la suite des autres tests.

1 <?php
2 /**
3 *
4 *
5 * @package openfoncier
6 * @version SVN : $Id$
7 */
8
9 // Fichires requis
10 require_once "../obj/utils.class.php";
11 require_once '../services/outgoing/MessageSenderSoap.class.php';
12 require_once "../obj/sig_elyx.class.php";
13 require_once "../obj/dossier.class.php";
14
15 // Paramétres GET
16 $id = (isset($_GET['id']) ? $_GET['id'] : "" );
17 $fieldname = (isset($_GET['fieldname']) ? $_GET['fieldname'] : "" );
18
19 // Vérifie les paramètres obligatoires
20 if (isset($id) && $id != ''
21 && isset($fieldname) && $fieldname != '') {
22
23 // Instance de la classe utils
24 $f = new utils("nohtml");
25 $f->disableLog();
26
27 /**
28 * Récupération des données de sig_elyx
29 * @param string $id Identifiant du dossier
30 * @param object $f instance de la class utils
31 * @return array Tableau de résultat
32 */
33 function get_sig_elyx($id, $f) {
34
35 // Requête sql
36 $sqlDonneesSIG = "SELECT *
37 FROM ".DB_PREFIXE."sig_elyx
38 WHERE dossier = '$id'";
39 $resDonneesSIG = $f->db->query($sqlDonneesSIG);
40 $f->addToLog("app/geolocalisation_treatment.php : db->query(\"".$sqlDonneesSIG."\")", VERBOSE_MODE);
41 $f->isDatabaseError($resDonneesSIG);
42 $rowDonneesSIG = &$resDonneesSIG->fetchRow(DB_FETCHMODE_ASSOC);
43
44 // Tableau de résultat retourné
45 return $rowDonneesSIG;
46 }
47
48 // Récupération des données de sig_elyx
49 $rowDonneesSIG = get_sig_elyx($id, $f);
50
51 // Récupération des données du dossier d'autorisation
52 $sqlDonneesDI = "SELECT *
53 FROM ".DB_PREFIXE."dossier
54 WHERE dossier = '$id'";
55 $resDonneesDI = $f->db->query($sqlDonneesDI);
56 $f->addToLog("app/geolocalisation_treatment.php : db->query(\"".$sqlDonneesDI."\")", VERBOSE_MODE);
57 $f->isDatabaseError($resDonneesDI);
58 $rowDonneesDI = &$resDonneesDI->fetchRow(DB_FETCHMODE_ASSOC);
59
60 // Formatage des parcelles pour l'envoi au webservice
61 $liste_parcelles = $f->parseParcelles($rowDonneesDI['terrain_references_cadastrales']);
62 $wParcelle = $f->formatParcelleToSend($liste_parcelles);
63
64 // Si l'enregistrement n'existe pas dans la table sig_elyx
65 if (count($rowDonneesSIG) == 0) {
66
67 // Création de l'enregistrement
68 $sig_elyx = new sig_elyx(']', $f->db, DEBUG);
69 // Création d'un tableau avec la liste des champs de sig_elyx
70 foreach($sig_elyx->champs as $champ) {
71 $valF[$champ] = NULL;
72 }
73 $valF['dossier'] = $id;
74 $valF['terrain_references_cadastrales_archive'] = $rowDonneesDI['terrain_references_cadastrales'];
75 // Si l'ajout à réussi
76 if ($sig_elyx->ajouter($valF, $f->db, DEBUG)) {
77
78 // On récupére les données de l'enregistrement
79 $rowDonneesSIG = get_sig_elyx($id, $f);
80 }
81 }
82
83 // Configuration du soap
84 $conf = $f->config['sig_elyx'];
85
86 // Instance de la classe permettant d'envoyer des requête SOAP
87 $soap = new MessageSenderSoap($conf['url'], $conf['wsdl'], $conf['login'],
88 $conf['password']);
89
90 // Instance de sig_elyx
91 $sig_elyx = new sig_elyx($rowDonneesSIG['sig_elyx'], $f->db, DEBUG);
92 // Instance de dossier
93 $dossier = new dossier($id, $f->db, DEBUG);
94
95 // Initialisation des variables
96 $message = "";
97 $execute = array();
98
99 // Si les références cadastrales sont à changer dans sig_elyx
100 $flag_ref_cadastrales = false;
101
102 // Fait appele aux différents webservices selon le bouton cliqué
103 switch ($fieldname) {
104 //
105 case 'verif_parcelle':
106 // Crée une chaîne de parcelle séparée par des ";"
107 $stringParcelles = implode(';', $wParcelle);
108 //
109 $data = array(
110 "wParcelle" => $stringParcelles,
111 );
112 // Exécute le webservices
113 $execute = $soap->execute('getExistParcelle', $data);
114 break;
115 //
116 case 'calcul_emprise':
117 // Crée une chaîne de parcelle séparée par des ";"
118 $stringParcelles = implode(';', $wParcelle);
119 // Données à envoyer au wsdl
120 $data = array(
121 "wParcelle" => $stringParcelles,
122 "wId" => $id,
123 );
124 // Exécute le webservices
125 $execute = $soap->execute('getCalculEmprise', $data);
126 break;
127 //
128 case 'dessin_emprise':
129 // Permet de récupérer la première parcelle
130 $parcelle = $wParcelle[0];
131 // Construit le lien
132 $execute['return'] = "http://".$f->collectivite['sig_web_server']
133 ."?disabledAttributes=IDENTIFIANT&createObject="
134 .$f->collectivite['sig_couche_emprise_dossier']
135 ."&attributeValues.IDENTIFIANT=".$id."&KEY="
136 .$f->collectivite['sig_couche_affichage_parcelle']."*/"
137 .$parcelle."&SELECT=false";
138 break;
139 //
140 case 'calcul_centroide':
141 // Données à envoyer au wsdl
142 $data = array(
143 "wId" => $id,
144 );
145 // Exécute le webservice
146 $execute = $soap->execute('getCentroideDossier', $data);
147 break;
148 //
149 case 'recup_contrainte':
150 break;
151 }
152
153 // Si une erreur interne '500' est retournée
154 if ($soap->getResponseCode() == '500') {
155 // Met l'état à false
156 $etat = 'f';
157 // Traitement du message d'erreur
158 $message = explode(":", $execute['fault']['faultstring']);
159 $error_code = trim($message[0]);
160 $message = trim($message[1]);
161
162 // Traduction d'une erreur qui n'en est pas une pour l'utilisateur
163 // si le bouton cliqué est 'Calculer l'emprise' et que le code erreur
164 // est 'ORA-00001'
165 if ($fieldname == 'calcul_emprise' && $error_code == 'ORA-00001') {
166 // Met l'état à vrai
167 $etat = 't';
168 // Message pour l'utilisateur
169 $message = _("L'emprise a deja ete calcule.");
170 }
171 }
172
173 // Si le code HTTP retour est un '200'
174 // ou que le bouton cliqué est 'dessiner l'emprise'
175 if ($soap->getResponseCode() == '200'
176 || $fieldname = 'dessin_emprise') {
177 // Met l'état à vrai
178 $etat = 't';
179
180 // Traitement selon le bouton cliqué
181 switch ($fieldname) {
182 //
183 case 'verif_parcelle':
184 // Traitement du message
185 $message = _("Les parcelles existent.");
186 // Initialise le tableau qui contiendra les parcelles qui
187 // n'existent pas
188 $list_error_parcelle = array();
189 // Vérifie l'existence des parcelles
190 foreach ($execute['return'] as $key => $ret) {
191 // Si c'est un tableau
192 if (is_array($execute['return'][$key])) {
193 //
194 if ($ret['existe'] != '0') {
195 $list_error_parcelle[] = $ret['id'];
196 }
197 } elseif ($key == 'existe' && $execute['return'][$key] == '1') {
198 $list_error_parcelle[] = $execute['return']['id'];
199 }
200 }
201 // Si des parcelles n'existent pas alors ont les affichent
202 // à l'utilisateur
203 if (count($list_error_parcelle) != 0) {
204 //
205 $etat = 'f';
206 //
207 $string_error_parcelle = implode(", ", $list_error_parcelle);
208 //
209 $message = sprintf(_("La/Les parcelle(s) %s n'existe(nt) pas."), $string_error_parcelle);
210 } else {
211 // Sinon ont met à jour le champ
212 // terrain_references_cadastrales_archive dans la table
213 // sig_elyx
214 $flag_ref_cadastrales = true;
215 }
216 break;
217 //
218 case 'calcul_emprise':
219 // Traitement du message
220 $message = _("L'emprise a ete calcule.");
221 break;
222 //
223 case 'dessin_emprise':
224 // Traitement du message
225 $message = _("Redirige vers ElyxWeb.");
226 break;
227 //
228 case 'calcul_centroide':
229 // Récupération du code de référentiel sig
230 if($f->getParameter("sig_referentiel") == "" OR
231 $f->getParameter("sig_referentiel") == NULL) {
232 $etat = 'f';
233 $message = _("Erreur de configuration. Contactez votre administrateur.");
234 } else {
235 $coord = $execute['return']['coordX']." ".$execute['return']['coordY'];
236
237 // Traitement du message
238 $message = _("Le centroide a ete calcule")." : ".
239 $execute['return']['coordX'].", ".
240 $execute['return']['coordY'];
241
242 // Met à jour le centroide dans le dossier
243 $res = $f->db->query("UPDATE ".DB_PREFIXE."dossier ".
244 "SET geom = public.ST_GeomFromText('POINT(".$coord.")',".
245 $f->getParameter("sig_referentiel").") ".
246 "WHERE dossier = '".$id."'");
247 $f->addToLog("app/geolocalisation_treatment.php: db->query(\"UPDATE ".
248 DB_PREFIXE."dossier SET geom = public.ST_GeomFromText('POINT(".
249 $coord.")',".$f->getParameter("sig_referentiel").") WHERE dossier = '".$id."'", VERBOSE_MODE);
250 $f->isDatabaseError($res);
251 }
252 break;
253 //
254 case 'recup_contrainte':
255 break;
256 }
257 }
258
259 // Format de la date pour l'affichage
260 $date = date('d/m/Y H:i:s');
261 // Format de la date pour la BDD
262 $date_db = $f->formatTimestamp($date, false);
263
264 // Valeur à modifier dans sig_elyx
265 $valueSIG = array();
266 foreach($sig_elyx->champs as $key => $champ) {
267 //
268 $valueSIG[$champ] = $sig_elyx->val[$key];
269
270 // Pour les champs de type timestamp étant vide, il faut renvoyer NULL
271 $champ_split = explode("_", $champ);
272 if ($champ_split[0] == "date" && $valueSIG[$champ] == '') {
273 $valueSIG[$champ] = null;
274 }
275 }
276 $valueSIG['date_'.$fieldname] = $date_db;
277 $valueSIG['etat_'.$fieldname] = $etat;
278 $valueSIG['message_'.$fieldname] = $message;
279 // Si les références cadastrales ont été modifiées et vérifier
280 if ($flag_ref_cadastrales === true) {
281 //
282 $valueSIG['terrain_references_cadastrales_archive'] = $rowDonneesDI['terrain_references_cadastrales'];
283 }
284 // Modification de l'enregistrement
285 $sig_elyx->modifier($valueSIG, $f->db, DEBUG);
286
287 // Message affiché à l'utilisateur
288 $message = sprintf(_("Dernier traitement effectue le %s."), $date)." ".$message;
289
290 // Tableau à retourner
291 $return = $execute;
292 // Ajoute les informations sur les traitements dans le tableau retourné
293 $return['log'] = array(
294 "date"=> $date,
295 "etat"=> $etat,
296 "message"=> $message,
297 );
298
299 // Retourne le résultat dans un tableau json
300 echo json_encode($return);
301
302 }
303
304 ?>

Properties

Name Value
svn:executable *
svn:keywords Id

[email protected]
ViewVC Help
Powered by ViewVC 1.1.26