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

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

Parent Directory Parent Directory | Revision Log Revision Log


Revision 7996 - (hide annotations)
Fri Jul 20 17:12:33 2018 UTC (6 years, 6 months ago) by softime
File size: 19546 byte(s)
* Merge de la branche d'intégration 4.7.0 vers le trunk

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 softime 7996 public function verif_parcelle(array $parcelles) {
322 mbroquet 3730 // 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 softime 7996 public function calcul_emprise(array $parcelles, $dossier) {
328 mbroquet 3730 // 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 softime 7996 public function redirection_web_emprise(array $parcelles, $dossier) {
352 mbroquet 3730 // 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 softime 7996 public function redirection_web(array $parcelles = null, $dossier = null) {
358 mbroquet 3730 // 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 softime 5024 // Ce om_parametre peut ne pas être défini selon la configuration
380     if (isset($collectivite["code_direction"]) === true) {
381     $this->collectivite_parameters["code_direction"] = $collectivite["code_direction"];
382     }
383 mbroquet 3730 $this->collectivite_parameters["commune"] = $collectivite["commune"];
384     }
385    
386    
387     /**
388     * Permet de récupérer un élement de configuration.
389     *
390     * @param string $key Nom de la clé de l'élément.
391     *
392     * @return string Valeur de la config.
393     */
394     public function get_sig_config($key) {
395     if(isset($this->sig_parameters[$key]) === false) {
396     throw new geoads_configuration_exception();
397    
398     }
399     return $this->sig_parameters[$key];
400     }
401    
402    
403     /**
404     * Permet de récupérer un élement de paramétrage de la collectivité.
405     *
406     * @param string $key Nom de la clé de l'élément.
407     *
408     * @return string Valeur de la config.
409     */
410     public function get_collectivite_parameter($key) {
411     if(isset($this->collectivite_parameters[$key]) === false) {
412     throw new geoads_configuration_exception($key);
413    
414     }
415     return $this->collectivite_parameters[$key];
416     }
417    
418    
419    
420     }
421    
422     /**
423     * Classe gérant les erreurs (une exception est levée pour chacune).
424     */
425     class geoads_exception extends Exception {
426    
427    
428     /**
429     * Construit l'exception
430     *
431     * @param string $message Le message de l'exception à lancer.
432     * @param integer $code Le code de l'exception.
433     * @param Exception $previous L'exception précédente, utilisée pour le chaînage d'exception.
434     */
435     public function __construct($message = "" , $code = 0, Exception $previous = null) {
436     parent::__construct($message, $code, $previous);
437     logger::instance()->writeErrorLogToFile();
438     }
439    
440    
441     /**
442     * Cette fonction ajoute dans le fichier de log.
443     *
444     * @param string $code Le nom de fichier, ou l'identifiant du fichier.
445     * @param string $msg Le message a logger.
446     */
447     protected function addToLog($code, $msg) {
448 softime 7996 require_once PATH_OPENMAIRIE."om_logger.class.php";
449 mbroquet 3730 logger::instance()->log("SIG Connector - Error code : ".$code." -> ".$msg);
450     }
451    
452    
453     }
454    
455     class geoads_bdd_exception extends geoads_exception {
456    
457    
458     /**
459     * Redéfinition du message d'erreur.
460     */
461     public function __construct() {
462     $message = _("Erreur de base de donnees. Contactez votre administrateur.");
463     // Appel du parent
464     parent::__construct($message);
465     }
466    
467    
468     }
469    
470     class geoads_configuration_exception extends geoads_exception {
471    
472    
473     /**
474     * Redéfinition du message d'erreur.
475     */
476     public function __construct() {
477     $message = _("Erreur de configuration SIG.")." "._("Veuillez contacter votre administrateur.");
478     // Appel du parent
479     parent::__construct($message);
480     }
481    
482    
483     }
484    
485     class geoads_parameter_exception extends geoads_exception {
486    
487    
488     /**
489     * Redéfinition du message d'erreur.
490     */
491     public function __construct($message = null) {
492     if($message == null) {
493     $message = _("Parametres d'appel au SIG non valides.")." "._("Veuillez contacter votre administrateur.");
494     }
495     // Appel du parent
496     parent::__construct($message);
497     }
498    
499    
500     }
501    
502    
503     /**
504     * Classe de gestion des exceptions sur les methodes non implémentées
505     */
506     class geoads_connector_method_not_implemented_exception extends geoads_exception {
507    
508    
509     /**
510     * Redéfinition du message d'erreur.
511     */
512     public function __construct() {
513     $message = _("Erreur lors de la connexion au SIG.")." "._("Veuillez contacter votre administrateur");
514     // Appel du parent
515     parent::__construct($message);
516     }
517    
518    
519     }
520    
521     /**
522     * Classe de gestion des exceptions retournée lors d'un code 4XX
523     */
524     class geoads_connector_4XX_exception extends geoads_exception {
525    
526    
527     /**
528     * Redéfinition du message d'erreur.
529     *
530     * @param string $message Message d'erreur http.
531     * @param integer $code Code de l'erreur http.
532     */
533     public function __construct($message, $code = null) {
534     // Log de l'erreur technique
535     $this->addToLog($code, $message);
536     // Création du log utilisateur
537     $message = _("Erreur lors de la connexion au SIG.")." "._("Veuillez contacter votre administrateur");
538     // Appel du parent
539     parent::__construct($message);
540     }
541    
542    
543     }
544    
545     /**
546     * Classe de gestion des exceptions retournée lors d'un code 5XX
547     */
548     class geoads_connector_5XX_exception extends geoads_exception {
549    
550    
551     /**
552     * Log et redéfinition du message d'erreur.
553     *
554     * @param string $message Message d'erreur technique.
555     * @param integer $code Code de l'erreur http.
556     */
557     public function __construct($message, $code = null) {
558     // Log de l'erreur technique
559     $this->addToLog($code, $message);
560     // Création du log utilisateur
561     $message = _("Erreur de traitement du SIG.")." "._("Veuillez contacter le service responsable du SIG");
562     // Appel du parent
563     parent::__construct($message);
564     }
565    
566    
567     }
568    
569     /**
570     * Classe de gestion des exceptions génériques remontées par le générateur
571     */
572     class geoads_connector_exception extends geoads_exception {
573    
574    
575     /**
576     * Log et redéfinition du message d'erreur.
577     *
578     * @param string $message Message d'erreur technique.
579     * @param integer $code Code de l'erreur http.
580     */
581     public function __construct($message = null, $code = null) {
582     // Log de l'erreur technique
583     $this->addToLog($code, $message);
584     // Création du log utilisateur
585     $message = _("Erreur SIG.")." "._("Veuillez contacter votre administrateur");
586     // Appel du parent
587     parent::__construct($message);
588     }
589    
590    
591     }
592    
593    
594 softime 7996

Properties

Name Value
svn:keywords "Id"

[email protected]
ViewVC Help
Powered by ViewVC 1.1.26