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 |
?> |