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

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

Parent Directory Parent Directory | Revision Log Revision Log


Revision 3866 - (hide annotations)
Wed Apr 6 09:30:22 2016 UTC (8 years, 9 months ago) by jymadier
File size: 19363 byte(s)
Correction du chemin par défaut pointant sur le connecteur SIG

1 mbroquet 3730 <?php
2     /**
3     * La classe 'geoads' est une classe d'abstraction, spécifique à openADS,
4     * permettant de gérer les requêtes vers divers webservices SIG et ainsi
5     * proposer aux utilisateurs des informations géographiques.
6     * Cette classe est instanciée et utilisée par d'autres scripts pour
7     * gérer notamment la vérification de parcelles et ce peu importe le SIG utilisé.
8     * Son objectif est d'instancier les classes spécifiques aux SIG aussi appelées
9     * connecteurs correspondant au paramétrage de la collectivité.
10     *
11     * Ces connecteurs héritent de la classe 'geoads_base' qui leur sert de modèle.
12     *
13     * Enfin la classe 'geoads_exception' permet de gérer les erreurs.
14     * Plusieurs classes en héritent afin de spécifier le type d'exception.
15     *
16     * @package openads
17     * @version SVN : $Id$
18     */
19    
20     /**
21     * Abstracteur de la géolocalisation spécifique à openADS
22     */
23     class geoads {
24     /**
25     * Cet attribut permet de stocker l'instance du connecteur SIG utilisé.
26     * Sa valeur doit être remplie en fonction du paramétrage de la collectivité.
27     *
28     * @var object instance du connecteur SIG
29     */
30     var $sig = null;
31    
32    
33     /**
34     * Le constructeur instancie la classe du SIG envoyée par le paramétrage
35     * de la collectivité.
36     *
37     * @param array $collectivite Identifiant de la collectivité.
38     */
39     public function __construct(array $collectivite) {
40     // Récupération de la conf sig de la collectivité
41     $this->collectivite = $collectivite;
42     if(!isset($this->collectivite['sig'])) {
43     throw new geoads_configuration_exception();
44     }
45     // instanciation du connecteur
46 jymadier 3866 $path = "";
47 mbroquet 3730 if(isset($this->collectivite['sig']['path'])) {
48     $path = $this->collectivite['sig']['path'];
49     }
50     $connecteur = 'geoads_'.$this->collectivite['sig']['connector'];
51     require_once $path.$connecteur.'.class.php';
52     $this->sig = new $connecteur($this->collectivite);
53     }
54    
55    
56     /**
57     * Le destructeur permet de détruire la ressource instanciée
58     * dans le constructeur
59     */
60     public function __destruct() {
61     if ($this->sig != null) {
62     unset($this->sig);
63     }
64     }
65    
66    
67     /**
68     * GET- Vérification d'existence de parcelles et récupération de leurs adresses.
69     *
70     * openADS fournit une liste de parcelles. Le SIG renvoie une collection,
71     * en mentionnant pour chaque parcelle si elle existe, et le cas échéant
72     * l'adresse qui y est rattachée.
73     *
74     * @param array $parcelles Tableau de parcelles à interroger.
75     * Exemple de structure du tableau d'entrée pour une
76     * seule parcelle :
77     * array (
78     * array(
79     * 'prefixe' => string,
80     * 'quartier' => string,
81     * 'section' => string,
82     * 'parcelle' => string
83     * ), // ...
84     * ).
85     *
86     * @return array Tableau de résultats (un sous-tableau par parcelle) :
87     * array(
88     * array (
89     * "parcelle"=> "1312158980H0126",
90     * "existe"=> true,
91     * "adresse"=> array (
92     * "numero_voie"=> "666",
93     * "type_voie"=> "RUE",
94     * "nom_voie"=> "DE LA LIBERTE",
95     * "arrondissement"=> "11"
96     * )
97     * ), // ...
98     * )
99     * La parcelle n'existe pas :
100     * array(
101     * array (
102     * "parcelle"=> "1312158980H0126",
103     * "existe"=> false,
104     * ), // ...
105     * )
106     */
107     public function verif_parcelle(array $parcelles) {
108    
109     // S'il ne s'agit pas d'un ensemble de parcelles
110     if (!is_array($parcelles) or empty($parcelles)){
111     // On lève une exception
112     throw new geoads_parameter_exception(_("Veuillez vérifier que les references cadastrales ont bien ete saisies"));
113     }
114    
115     // On retourne les parcelles
116     return $this->sig->verif_parcelle($parcelles);
117     }
118    
119    
120     /**
121     * POST -Déclenche sur lme SIG le calcul de l'emprise des parcelles d'un dossier.
122     *
123     * openADS fournit une liste de parcelles et le numéro de dossier correspondant.
124     * Le SIG renvoie un statut, spécifiant si le calcul été effectué correctement ou non.
125     *
126     * @param array $parcelles Tableau de parcelles.
127     * Exemple de structure du tableau d'entrée pour une
128     * seule parcelle :
129     * array (
130     * array(
131     * 'prefixe' => string,
132     * 'quartier' => string,
133     * 'section' => string,
134     * 'parcelle' => string
135     * ), // ...
136     * ).
137     * @param string $dossier Numéro du dossier. Ex. : PC1305515J0045P0.
138     *
139     * @return boolean true si le calcul est OK, false sinon
140     */
141     public function calcul_emprise(array $parcelles, $dossier) {
142     // S'il ne s'agit pas d'un ensemble de parcelles ou manque le dossier
143     if (!is_array($parcelles) or count($parcelles) == 0 or $dossier == "") {
144     // On lève une exception
145     throw new geoads_parameter_exception();
146     }
147     // Retourne true ou false
148     return $this->sig->calcul_emprise($parcelles, $dossier);
149     }
150    
151    
152     /**
153     * POST - Déclenche sur le SIG le calcul du centroïde d'un dossier.
154     *
155     * openADS appelle la méthode centroide sur la ressource du dossier souhaité.
156     * Si le calcul du centroïde est conduit avec succès, le SIG renvoie un
157     * statut positif, accompagné des coordonnées du centroïde. Dans le cas
158     * contraire, le SIG renvoie un statut négatif.
159     *
160     * @param string $dossier Numéro du dossier. Ex. : PC1305515J0045P0.
161     *
162     * @return mixed Coordonnées du centroïde
163     * array(
164     * "statut_calcul_centroide" => true,
165     * "x" => "1888778.84",
166     * "y" => "3131268.88"
167     * )
168     * ou false si le calcul a échoué
169     */
170     public function calcul_centroide($dossier) {
171     // S'il manque le dossier
172     if ($dossier == ""){
173     // On lève une exception
174     throw new geoads_parameter_exception();
175     }
176     // Centroid ou false
177     return $this->sig->calcul_centroide($dossier);
178     }
179    
180    
181     /**
182     * GET - Récupération des contraintes applicables sur un dossier.
183     *
184     * openADS appelle la méthode contrainte sur la ressource du dossier souhaité.
185     * Le SIG renvoie une collection de contraintes qui s'y appliquent.
186     *
187     * @param string $dossier Numéro du dossier. Ex. : PC1305515J0045P0.
188     *
189     * @return array Tableau de contraintes :
190     * array(
191     * array(
192     * "contrainte" => "26",
193     * "groupe_contrainte" => "ZONES DU PLU",
194     * "sous_groupe_contrainte" => "protection",
195     * "libelle" => "Une seconde contrainte du PLU",
196     * ), // ...
197     * )
198     */
199     public function recup_contrainte_dossier($dossier) {
200     // S'il manque le dossier
201     if ($dossier == ""){
202     // On lève une exception
203     throw new geoads_parameter_exception();
204     }
205    
206     // récupère les contraintes applicables sur un dossier
207     return $this->sig->recup_contrainte_dossier($dossier);
208     }
209    
210    
211     /**
212     * GET - Récupération de toutes les contraintes existantes pour une commune.
213     *
214     * OpenADS appelle le SIG en précisant seulement le code INSEE de la commune.
215     * Il renvoie une collection de l'intégralité des contraintes existantes.
216     *
217     * @return array Tableau de toutes les contraintes existantes.
218     * array(
219     * array(
220     * "groupe_contrainte" => "ZONES DU PLU",
221     * "contrainte" => "26",
222     * "libelle" => "Une seconde contrainte du PLU",
223     * "sous_groupe_contrainte" => "protection",
224     * )
225     * )
226     */
227     public function recup_toutes_contraintes() {
228    
229     // récupère les contraintes applicables sur la commune
230     return $this->sig->recup_toutes_contraintes($this->collectivite["insee"]);
231     }
232    
233    
234     /**
235     * Redirection vers le SIG dans le contexte de dessin d'emprise pour un
236     * dossier.
237     *
238     * @param array $parcelles Tableau de parcelles.
239     * @param string $dossier L'identifiant du dossier.
240     *
241     * @return string L'url du SIG
242     */
243     public function redirection_web_emprise(array $parcelles, $dossier) {
244     // S'il ne s'agit pas d'un ensemble de parcelles ou manque le dossier
245     if (!is_array($parcelles) or count($parcelles) == 0 or $dossier == "") {
246     // On lève une exception
247     throw new geoads_parameter_exception();
248     }
249     //
250     return $this->sig->redirection_web_emprise($parcelles, $dossier);
251     }
252    
253    
254     /**
255     * Redirection vers le SIG dans le contexte de visualisation du dossier.
256     * Si les deux arguments sont nuls, c'est l'url par défaut du sig qui doit
257     * être retourné.
258     *
259     * @param array $parcelles Tableau de parcelles.
260     * @param string $dossier L'identifiant du dossier.
261     *
262     * @return string L'url du SIG
263     */
264     public function redirection_web(array $parcelles = null, $dossier = null) {
265    
266     // récupère les contraintes applicables sur un dossier
267     return $this->sig->redirection_web($parcelles, $dossier);
268     }
269    
270    
271     }
272    
273     /**
274     * Classe parente de tous les connecteurs SIG
275     */
276     class geoads_base {
277    
278     /**
279     * Handler d'envoi de messages REST ou SOAP.
280     *
281     * @var null
282     */
283     var $messageSender = null;
284    
285     /**
286     * Paramètres de connexion au sig
287     *
288     * @var array
289     */
290     var $sig_parameters = array();
291    
292     /**
293     * Paramètres de la collectivite
294     *
295     * @var array
296     */
297     var $collectivite_parameters = array();
298    
299    
300     /**
301     * Le constructeur instancie le connecteur SIG selon la configuration
302     *
303     * @param array $collectivite Configuration du connecteur.
304     */
305     public function __construct(array $collectivite) {
306     // Config du connecteur SIG de la collectivité en attribut
307     $this->set_sig_config($collectivite['sig']);
308     // Parametres de la collectivité
309     $this->set_collectivite_parameters($collectivite);
310     // Instance de la classe permettant d'envoyer des requêtes REST
311     $this->init_message_sender();
312     }
313    
314    
315     public function init_message_sender() {
316     // Cette méthode doit être implémentée par tous les connecteurs
317     throw new geoads_connector_method_not_implemented_exception();
318     }
319    
320    
321     public function verif_parcelle($parcelles) {
322     // Cette méthode doit être implémentée par tous les connecteurs
323     throw new geoads_connector_method_not_implemented_exception();
324     }
325    
326    
327     public function calcul_emprise($parcelles, $dossier) {
328     // Cette méthode doit être implémentée par tous les connecteurs
329     throw new geoads_connector_method_not_implemented_exception();
330     }
331    
332    
333     public function calcul_centroide($dossier) {
334     // Cette méthode doit être implémentée par tous les connecteurs
335     throw new geoads_connector_method_not_implemented_exception();
336     }
337    
338    
339     public function recup_contrainte_dossier($dossier) {
340     // Cette méthode doit être implémentée par tous les connecteurs
341     throw new geoads_connector_method_not_implemented_exception();
342     }
343    
344    
345     public function recup_toutes_contraintes($code_insee) {
346     // Cette méthode doit être implémentée par tous les connecteurs
347     throw new geoads_connector_method_not_implemented_exception();
348     }
349    
350    
351     public function redirection_web_emprise($parcelles, $dossier) {
352     // Cette méthode doit être implémentée par tous les connecteurs
353     throw new geoads_connector_method_not_implemented_exception();
354     }
355    
356    
357     public function redirection_web($parcelles = null, $dossier = null) {
358     // Cette méthode doit être implémentée par tous les connecteurs
359     throw new geoads_connector_method_not_implemented_exception();
360     }
361    
362    
363     /**
364     * Défini l'attribut contenant le tableau de configuration du SIG.
365     *
366     * @param array $conf Tableau de config.
367     */
368     public function set_sig_config(array $conf) {
369     $this->sig_parameters = $conf;
370     }
371    
372     /**
373     * Défini les paramètres de la collectivite
374     *
375     * @param array $conf Tableau de config de la collectivité.
376     */
377     public function set_collectivite_parameters(array $collectivite) {
378     $this->collectivite_parameters["departement"] = $collectivite["departement"];
379     $this->collectivite_parameters["code_direction"] = $collectivite["code_direction"];
380     $this->collectivite_parameters["commune"] = $collectivite["commune"];
381     }
382    
383    
384     /**
385     * Permet de récupérer un élement de configuration.
386     *
387     * @param string $key Nom de la clé de l'élément.
388     *
389     * @return string Valeur de la config.
390     */
391     public function get_sig_config($key) {
392     if(isset($this->sig_parameters[$key]) === false) {
393     throw new geoads_configuration_exception();
394    
395     }
396     return $this->sig_parameters[$key];
397     }
398    
399    
400     /**
401     * Permet de récupérer un élement de paramétrage de la collectivité.
402     *
403     * @param string $key Nom de la clé de l'élément.
404     *
405     * @return string Valeur de la config.
406     */
407     public function get_collectivite_parameter($key) {
408     if(isset($this->collectivite_parameters[$key]) === false) {
409     throw new geoads_configuration_exception($key);
410    
411     }
412     return $this->collectivite_parameters[$key];
413     }
414    
415    
416    
417     }
418    
419     /**
420     * Classe gérant les erreurs (une exception est levée pour chacune).
421     */
422     class geoads_exception extends Exception {
423    
424    
425     /**
426     * Construit l'exception
427     *
428     * @param string $message Le message de l'exception à lancer.
429     * @param integer $code Le code de l'exception.
430     * @param Exception $previous L'exception précédente, utilisée pour le chaînage d'exception.
431     */
432     public function __construct($message = "" , $code = 0, Exception $previous = null) {
433     parent::__construct($message, $code, $previous);
434     logger::instance()->writeErrorLogToFile();
435     }
436    
437    
438     /**
439     * Cette fonction ajoute dans le fichier de log.
440     *
441     * @param string $code Le nom de fichier, ou l'identifiant du fichier.
442     * @param string $msg Le message a logger.
443     */
444     protected function addToLog($code, $msg) {
445     require_once "../core/om_logger.class.php";
446     logger::instance()->log("SIG Connector - Error code : ".$code." -> ".$msg);
447     }
448    
449    
450     }
451    
452     class geoads_bdd_exception extends geoads_exception {
453    
454    
455     /**
456     * Redéfinition du message d'erreur.
457     */
458     public function __construct() {
459     $message = _("Erreur de base de donnees. Contactez votre administrateur.");
460     // Appel du parent
461     parent::__construct($message);
462     }
463    
464    
465     }
466    
467     class geoads_configuration_exception extends geoads_exception {
468    
469    
470     /**
471     * Redéfinition du message d'erreur.
472     */
473     public function __construct() {
474     $message = _("Erreur de configuration SIG.")." "._("Veuillez contacter votre administrateur.");
475     // Appel du parent
476     parent::__construct($message);
477     }
478    
479    
480     }
481    
482     class geoads_parameter_exception extends geoads_exception {
483    
484    
485     /**
486     * Redéfinition du message d'erreur.
487     */
488     public function __construct($message = null) {
489     if($message == null) {
490     $message = _("Parametres d'appel au SIG non valides.")." "._("Veuillez contacter votre administrateur.");
491     }
492     // Appel du parent
493     parent::__construct($message);
494     }
495    
496    
497     }
498    
499    
500     /**
501     * Classe de gestion des exceptions sur les methodes non implémentées
502     */
503     class geoads_connector_method_not_implemented_exception extends geoads_exception {
504    
505    
506     /**
507     * Redéfinition du message d'erreur.
508     */
509     public function __construct() {
510     $message = _("Erreur lors de la connexion au SIG.")." "._("Veuillez contacter votre administrateur");
511     // Appel du parent
512     parent::__construct($message);
513     }
514    
515    
516     }
517    
518     /**
519     * Classe de gestion des exceptions retournée lors d'un code 4XX
520     */
521     class geoads_connector_4XX_exception extends geoads_exception {
522    
523    
524     /**
525     * Redéfinition du message d'erreur.
526     *
527     * @param string $message Message d'erreur http.
528     * @param integer $code Code de l'erreur http.
529     */
530     public function __construct($message, $code = null) {
531     // Log de l'erreur technique
532     $this->addToLog($code, $message);
533     // Création du log utilisateur
534     $message = _("Erreur lors de la connexion au SIG.")." "._("Veuillez contacter votre administrateur");
535     // Appel du parent
536     parent::__construct($message);
537     }
538    
539    
540     }
541    
542     /**
543     * Classe de gestion des exceptions retournée lors d'un code 5XX
544     */
545     class geoads_connector_5XX_exception extends geoads_exception {
546    
547    
548     /**
549     * Log et redéfinition du message d'erreur.
550     *
551     * @param string $message Message d'erreur technique.
552     * @param integer $code Code de l'erreur http.
553     */
554     public function __construct($message, $code = null) {
555     // Log de l'erreur technique
556     $this->addToLog($code, $message);
557     // Création du log utilisateur
558     $message = _("Erreur de traitement du SIG.")." "._("Veuillez contacter le service responsable du SIG");
559     // Appel du parent
560     parent::__construct($message);
561     }
562    
563    
564     }
565    
566     /**
567     * Classe de gestion des exceptions génériques remontées par le générateur
568     */
569     class geoads_connector_exception extends geoads_exception {
570    
571    
572     /**
573     * Log et redéfinition du message d'erreur.
574     *
575     * @param string $message Message d'erreur technique.
576     * @param integer $code Code de l'erreur http.
577     */
578     public function __construct($message = null, $code = null) {
579     // Log de l'erreur technique
580     $this->addToLog($code, $message);
581     // Création du log utilisateur
582     $message = _("Erreur SIG.")." "._("Veuillez contacter votre administrateur");
583     // Appel du parent
584     parent::__construct($message);
585     }
586    
587    
588     }
589    
590    
591     ?>

[email protected]
ViewVC Help
Powered by ViewVC 1.1.26