1 |
<?php
|
1 |
<?php
|
2 |
/**
|
2 |
/**
|
3 |
* Classe Commun.php est une classe abstraite qui contient les méthodes de base communes à tous les
|
3 |
* Classe Commun.php est une classe abstraite qui contient les méthodes de base communes à tous les
|
4 |
* sous-services des projets.
|
4 |
* sous-services des projets.
|
5 |
*
|
5 |
*
|
6 |
* Encodage en entrée : utf8
|
6 |
* Encodage en entrée : utf8
|
7 |
* Encodage en sortie : utf8
|
7 |
* Encodage en sortie : utf8
|
8 |
* @package eflore-projets
|
8 |
* @package eflore-projets
|
9 |
* @author Jennifer DHÉ <jennifer.dhe@tela-botanica.org>
|
9 |
* @author Jennifer DHÉ <jennifer.dhe@tela-botanica.org>
|
10 |
* @author Delphine CAUQUIL <delphine@tela-botanica.org>
|
10 |
* @author Delphine CAUQUIL <delphine@tela-botanica.org>
|
11 |
* @author Jean-Pascal MILCENT <jpm@tela-botanica.org>
|
11 |
* @author Jean-Pascal MILCENT <jpm@tela-botanica.org>
|
12 |
* @license GPL v3 <http://www.gnu.org/licenses/gpl.txt>
|
12 |
* @license GPL v3 <http://www.gnu.org/licenses/gpl.txt>
|
13 |
* @license CECILL v2 <http://www.cecill.info/licences/Licence_CeCILL_V2-en.txt>
|
13 |
* @license CECILL v2 <http://www.cecill.info/licences/Licence_CeCILL_V2-en.txt>
|
14 |
* @version 1.0
|
14 |
* @version 1.0
|
15 |
* @copyright 1999-2011 Tela Botanica (accueil@tela-botanica.org)
|
15 |
* @copyright 1999-2011 Tela Botanica (accueil@tela-botanica.org)
|
16 |
*/
|
16 |
*/
|
17 |
|
17 |
|
18 |
abstract class Commun {
|
18 |
abstract class Commun {
|
19 |
|
19 |
|
20 |
/** Objet Bdd. */
|
20 |
/** Objet Bdd. */
|
21 |
private $Bdd = null;
|
21 |
private $Bdd = null;
|
22 |
/** Objet Rest Client. */
|
22 |
/** Objet Rest Client. */
|
23 |
private $RestClient = null;
|
23 |
private $RestClient = null;
|
24 |
|
24 |
|
25 |
/** par défaut : configuration du projet, section [NomDuService] */
|
25 |
/** par défaut : configuration du projet, section [NomDuService] */
|
26 |
protected $config;
|
26 |
protected $config;
|
27 |
|
27 |
|
28 |
/** Contients les paramètres. Doit remplacer table_param. */
|
28 |
/** Contients les paramètres. Doit remplacer table_param. */
|
29 |
protected $parametres = array();
|
29 |
protected $parametres = array();
|
30 |
/** Contients les ressources. Doit remplacer table_ressources. */
|
30 |
/** Contients les ressources. Doit remplacer table_ressources. */
|
31 |
protected $ressources = array();
|
31 |
protected $ressources = array();
|
32 |
/** Le nom du service courrant. */
|
32 |
/** Le nom du service courrant. */
|
33 |
protected $serviceNom = null;
|
33 |
protected $serviceNom = null;
|
34 |
|
34 |
|
35 |
//Classe commune à tous les services web d'un projet. Contient par exemple les fonctions permettant de
|
35 |
//Classe commune à tous les services web d'un projet. Contient par exemple les fonctions permettant de
|
36 |
//renvoyer la réponse http...
|
36 |
//renvoyer la réponse http...
|
37 |
protected $entete_http; // Entete de la réponse correspondant au code de réponse de la requete http */
|
37 |
protected $entete_http; // Entete de la réponse correspondant au code de réponse de la requete http */
|
38 |
protected $corps_http; // Tableau de résultat à retourner au format json ou la description de l'erreur si elle existe */
|
38 |
protected $corps_http; // Tableau de résultat à retourner au format json ou la description de l'erreur si elle existe */
|
39 |
protected $service; // Nom du service appelé
|
39 |
protected $service; // Nom du service appelé
|
40 |
/** Stocke la version du projet demandée dans la requete
|
40 |
/** Stocke la version du projet demandée dans la requete
|
41 |
* - "*" : (/#projet/* /meta-donnees) Renvoi les meta-données de toutes les versions du projet
|
41 |
* - "*" : (/#projet/* /meta-donnees) Renvoi les meta-données de toutes les versions du projet
|
42 |
* - "numero de la version" : (/#projet/2.00/meta-donnees) Renvoi les meta-données de la version 2.00 du projet */
|
42 |
* - "numero de la version" : (/#projet/2.00/meta-donnees) Renvoi les meta-données de la version 2.00 du projet */
|
43 |
protected $version_projet = '+';
|
43 |
protected $version_projet = '+';
|
44 |
protected $table_version; //Stocke les noms des tables de toutes les versions du projet disponibles
|
44 |
protected $table_version; //Stocke les noms des tables de toutes les versions du projet disponibles
|
45 |
/** tableau contenant tous les champs d'une table (est rempli par la fonction Commun::recupererNomChamp($table)) */
|
45 |
/** tableau contenant tous les champs d'une table (est rempli par la fonction Commun::recupererNomChamp($table)) */
|
46 |
protected $champs_table = array();
|
46 |
protected $champs_table = array();
|
47 |
|
47 |
|
48 |
public function __construct($bdd = null, $config = null) {
|
48 |
public function __construct($bdd = null, $config = null) {
|
49 |
$this->Bdd = is_null($bdd) ? $this->getBdd() : $bdd;
|
49 |
$this->Bdd = is_null($bdd) ? $this->getBdd() : $bdd;
|
50 |
$this->config = is_null($config) ? Config::get($this->serviceNom) : $config;
|
50 |
$this->config = is_null($config) ? Config::get($this->serviceNom) : $config;
|
51 |
$this->init();
|
51 |
$this->init();
|
52 |
}
|
52 |
}
|
53 |
|
53 |
|
54 |
// ajustements post-constructeur
|
54 |
// ajustements post-constructeur
|
55 |
protected function init() {}
|
55 |
protected function init() {}
|
56 |
|
56 |
|
57 |
public function consulter($ressources, $parametres) {
|
57 |
public function consulter($ressources, $parametres) {
|
58 |
$this->ressources = $ressources;
|
58 |
$this->ressources = $ressources;
|
59 |
$this->parametres = $parametres;
|
59 |
$this->parametres = $parametres;
|
60 |
$this->chargerNomDuService();
|
60 |
$this->chargerNomDuService();
|
61 |
|
61 |
|
62 |
$this->traiterParametres();
|
62 |
$this->traiterParametres();
|
63 |
$this->traiterVersionProjet();
|
63 |
$this->traiterVersionProjet();
|
64 |
|
64 |
|
65 |
$resultats = '';
|
65 |
$resultats = '';
|
66 |
foreach ($this->table_version as $version) {
|
66 |
foreach ($this->table_version as $version) {
|
67 |
$this->table = $version; //on stocke le nom de la table correspondant à la version du projet en cours
|
67 |
$this->table = $version; //on stocke le nom de la table correspondant à la version du projet en cours
|
68 |
$this->recupererNomChamp($this->table); //on récupère les noms des champs disponibles (Ds Commun.php)
|
68 |
$this->recupererNomChamp($this->table); //on récupère les noms des champs disponibles (Ds Commun.php)
|
69 |
$this->traiterRessources(); //dans CommunNomsTaxons.php
|
69 |
$this->traiterRessources(); //dans CommunNomsTaxons.php
|
70 |
$requete = $this->assemblerLaRequete();// dans Noms ou Taxons...
|
70 |
$requete = $this->assemblerLaRequete();// dans Noms ou Taxons...
|
71 |
$resultat = $this->getBdd()->recupererTous($requete . ' -- ' . __FILE__ . ':' . __LINE__ . ' (' .$this->table . ')');
|
71 |
$resultat = $this->getBdd()->recupererTous($requete . ' -- ' . __FILE__ . ':' . __LINE__ . ' (' .$this->table . ')');
|
72 |
$versionResultat = $this->traiterResultat($resultat, $version, $requete);
|
72 |
$versionResultat = $this->traiterResultat($resultat, $version, $requete);
|
73 |
if (count($this->table_version) > 1) {
|
73 |
if (count($this->table_version) > 1) {
|
74 |
$resultats[$version] = $versionResultat;
|
74 |
$resultats[$version] = $versionResultat;
|
75 |
} else {
|
75 |
} else {
|
76 |
$resultats = $versionResultat;
|
76 |
$resultats = $versionResultat;
|
77 |
}
|
77 |
}
|
78 |
}
|
78 |
}
|
79 |
|
79 |
|
80 |
return $resultats;
|
80 |
return $resultats;
|
81 |
}
|
81 |
}
|
82 |
|
82 |
|
83 |
private function chargerNomDuService() {
|
83 |
private function chargerNomDuService() {
|
84 |
$this->serviceNom = get_class($this);
|
84 |
$this->serviceNom = get_class($this);
|
85 |
}
|
85 |
}
|
86 |
|
86 |
|
87 |
public function traiterResultat($resultat, $version) {
|
87 |
public function traiterResultat($resultat, $version) {
|
88 |
$versionResultat = null;
|
88 |
$versionResultat = null;
|
89 |
if ($resultat == '') {
|
89 |
if ($resultat == '') {
|
90 |
//cas ou la requete comporte des erreurs
|
90 |
//cas ou la requete comporte des erreurs
|
91 |
$message = 'La requête SQL formée comporte une erreur!';
|
91 |
$message = 'La requête SQL formée comporte une erreur!';
|
92 |
$code = RestServeur::HTTP_CODE_RESSOURCE_INTROUVABLE;
|
92 |
$code = RestServeur::HTTP_CODE_RESSOURCE_INTROUVABLE;
|
93 |
throw new Exception($message, $code);
|
93 |
throw new Exception($message, $code);
|
94 |
} elseif ($resultat) {
|
94 |
} elseif ($resultat) {
|
95 |
$versionResultat = $this->retournerResultatFormate($resultat, $version);
|
95 |
$versionResultat = $this->retournerResultatFormate($resultat, $version);
|
96 |
} else {
|
96 |
} else {
|
97 |
$message = 'Les données recherchées sont introuvables.';
|
97 |
$message = 'Les données recherchées sont introuvables.';
|
98 |
$code = RestServeur::HTTP_CODE_RESSOURCE_INTROUVABLE;
|
98 |
$code = RestServeur::HTTP_CODE_RESSOURCE_INTROUVABLE;
|
99 |
throw new Exception($message, $code);
|
99 |
throw new Exception($message, $code);
|
100 |
}
|
100 |
}
|
101 |
return $versionResultat;
|
101 |
return $versionResultat;
|
102 |
}
|
102 |
}
|
103 |
|
103 |
|
104 |
//+------------------------------------------------------------------------------------------------------+
|
104 |
//+------------------------------------------------------------------------------------------------------+
|
105 |
// Méthodes concernant les paramètres
|
105 |
// Méthodes concernant les paramètres
|
106 |
/**
|
106 |
/**
|
107 |
* Permet de récupérer une liste des noms des champs de la table passée en paramètre
|
107 |
* Permet de récupérer une liste des noms des champs de la table passée en paramètre
|
108 |
* @param $table : Nom de la table dont on souhaite connaitre les champs
|
108 |
* @param $table : Nom de la table dont on souhaite connaitre les champs
|
109 |
*/
|
109 |
*/
|
110 |
public function recupererNomChamp($table) {
|
110 |
public function recupererNomChamp($table) {
|
111 |
$resultat = @$this->getBdd()->recupererTous('SHOW FIELDS FROM '.$table);
|
111 |
$resultat = @$this->getBdd()->recupererTous('SHOW FIELDS FROM '.$table);
|
112 |
if (!$resultat) {
|
112 |
if (!$resultat) {
|
113 |
$m = "La table recherchée n'existe pas";
|
113 |
$m = "La table recherchée n'existe pas";
|
114 |
$this->renvoyerErreur(RestServeur::HTTP_CODE_RESSOURCE_INTROUVABLE, $m);
|
114 |
$this->renvoyerErreur(RestServeur::HTTP_CODE_RESSOURCE_INTROUVABLE, $m);
|
115 |
}
|
115 |
}
|
116 |
|
116 |
|
117 |
foreach ($resultat as $info) $this->champs_table[] = $info['Field'];
|
117 |
foreach ($resultat as $info) $this->champs_table[] = $info['Field'];
|
118 |
}
|
118 |
}
|
119 |
|
119 |
|
120 |
/**
|
120 |
/**
|
121 |
* Fonction permettant de creer la table dont le nom est passé en paramètre (champs_api, champs_bdtfx,
|
121 |
* Fonction permettant de creer la table dont le nom est passé en paramètre (champs_api, champs_bdtfx,
|
122 |
* correspondance_champs...). Les données de chaque table sont présentes dans le fichier de configuration config.ini
|
122 |
* correspondance_champs...). Les données de chaque table sont présentes dans le fichier de configuration config.ini
|
123 |
* @param String $table : Peut contenir plusieurs nom de table dont on souhaite récupérer les données : table,table,table.
|
123 |
* @param String $table : Peut contenir plusieurs nom de table dont on souhaite récupérer les données : table,table,table.
|
124 |
* Ex : recupererTableConfig('champs_api,champs_bdtfx')
|
124 |
* Ex : recupererTableConfig('champs_api,champs_bdtfx')
|
125 |
*/
|
125 |
*/
|
126 |
public function recupererTableConfig($table) {
|
126 |
public function recupererTableConfig($table) {
|
127 |
$tables = explode(',', $table);
|
127 |
$tables = explode(',', $table);
|
128 |
foreach ($tables as $tab) {
|
128 |
foreach ($tables as $tab) {
|
129 |
$tableau = explode(',', Config::get($tab));
|
129 |
$tableau = explode(',', Config::get($tab));
|
130 |
$tableau = array_map('trim', $tableau);
|
130 |
$tableau = array_map('trim', $tableau);
|
131 |
foreach ($tableau as $champ) {
|
131 |
foreach ($tableau as $champ) {
|
132 |
list($code, $rang) = explode('=', $champ);
|
132 |
list($code, $rang) = explode('=', $champ);
|
133 |
$tab_tampon[$code] = $rang;
|
133 |
$tab_tampon[$code] = $rang;
|
134 |
}
|
134 |
}
|
135 |
$this->$tab = $tab_tampon;
|
135 |
$this->$tab = $tab_tampon;
|
136 |
$tab_tampon = array();
|
136 |
$tab_tampon = array();
|
137 |
}
|
137 |
}
|
138 |
}
|
138 |
}
|
139 |
|
139 |
|
140 |
public function renvoyerErreur($entete, $message) {
|
140 |
public function renvoyerErreur($entete, $message) {
|
141 |
throw new Exception($message, $entete);
|
141 |
throw new Exception($message, $entete);
|
142 |
}
|
142 |
}
|
143 |
|
143 |
|
144 |
/**
|
144 |
/**
|
145 |
* Permet de remplir la variable version_projet et de retirer cette donnée du tableau des ressources
|
145 |
* Permet de remplir la variable version_projet et de retirer cette donnée du tableau des ressources
|
146 |
* @param $ressources
|
146 |
* @param $ressources
|
147 |
*/
|
147 |
*/
|
148 |
public function traiterVersionProjet() {
|
148 |
public function traiterVersionProjet() {
|
149 |
if (isset($this->parametres['version.projet'])) {
|
149 |
if (isset($this->parametres['version.projet'])) {
|
150 |
if (preg_match('/^[0-9]+(?:[._][0-9]+|)$/', $this->parametres['version.projet'])) {
|
150 |
if (preg_match('/^[0-9]+(?:[._][0-9]+|)$/', $this->parametres['version.projet'])) {
|
151 |
$this->version_projet = $this->parametres['version.projet'];
|
151 |
$this->version_projet = $this->parametres['version.projet'];
|
152 |
$this->version_projet = 'v'.str_replace('.', '_', $this->version_projet);
|
152 |
$this->version_projet = 'v'.str_replace('.', '_', $this->version_projet);
|
153 |
} else {
|
153 |
} else {
|
154 |
$this->version_projet = $this->parametres['version.projet'];
|
154 |
$this->version_projet = $this->parametres['version.projet'];
|
155 |
}
|
155 |
}
|
156 |
}
|
156 |
}
|
157 |
//si la liste des noms est demandée pr toutes les versions, on affiche seulement la dernière version :
|
157 |
//si la liste des noms est demandée pr toutes les versions, on affiche seulement la dernière version :
|
158 |
if ($this->version_projet == '*' && $this->ressources == array()) {
|
158 |
if ($this->version_projet == '*' && $this->ressources == array()) {
|
159 |
$message = "L'affichage de plusieurs versions ne fonctionne que pour les ressources de type /ressources/#id";
|
159 |
$message = "L'affichage de plusieurs versions ne fonctionne que pour les ressources de type /ressources/#id";
|
160 |
$code = RestServeur::HTTP_CODE_MAUVAISE_REQUETE;
|
160 |
$code = RestServeur::HTTP_CODE_MAUVAISE_REQUETE;
|
161 |
throw new Exception($message, $code);
|
161 |
throw new Exception($message, $code);
|
162 |
}
|
162 |
}
|
163 |
//on recupère les versions du projet disponible dans la table des meta-donnees (utilisation service MetaDonnees)
|
163 |
//on recupère les versions du projet disponible dans la table des meta-donnees (utilisation service MetaDonnees)
|
164 |
$table_num_version = $this->recupererVersionDisponible();
|
164 |
$table_num_version = $this->recupererVersionDisponible();
|
165 |
//on recupere la liste des noms des tables de la bdd correspondant aux differentes versions du projet en fct de la ou les versions demandées
|
165 |
//on recupere la liste des noms des tables de la bdd correspondant aux differentes versions du projet en fct de la ou les versions demandées
|
166 |
$this->recupererListeNomTablePrChaqueVersion($table_num_version);
|
166 |
$this->recupererListeNomTablePrChaqueVersion($table_num_version);
|
167 |
}
|
167 |
}
|
168 |
|
168 |
|
169 |
/**
|
169 |
/**
|
170 |
* Recupération des versions disponibles par appel du service metaDonnees
|
170 |
* Recupération des versions disponibles par appel du service metaDonnees
|
171 |
* Verification de l'existance du service recherché dans la requete (si précisé : hors *)
|
171 |
* Verification de l'existance du service recherché dans la requete (si précisé : hors *)
|
172 |
* @return array : tableau contenant le numéro de chaque version disponible
|
172 |
* @return array : tableau contenant le numéro de chaque version disponible
|
173 |
*/
|
173 |
*/
|
174 |
public function recupererVersionDisponible() {
|
174 |
public function recupererVersionDisponible() {
|
175 |
$versions_dispo = '';
|
175 |
$versions_dispo = [];
|
176 |
$req_version = 'SELECT version FROM '.Config::get('bdd_table_meta');
|
176 |
$req_version = 'SELECT version FROM '.Config::get('bdd_table_meta');
|
177 |
$res_version = $this->getBdd()->recupererTous($req_version);
|
177 |
$res_version = $this->getBdd()->recupererTous($req_version);
|
178 |
if ($res_version == '') { //cas ou la requete comporte des erreurs
|
178 |
if ($res_version == '') { //cas ou la requete comporte des erreurs
|
179 |
$e = "La requête SQL de versionnage formée comporte une erreur : $req_version";
|
179 |
$e = "La requête SQL de versionnage formée comporte une erreur : $req_version";
|
180 |
$this->renvoyerErreur(RestServeur::HTTP_CODE_RESSOURCE_INTROUVABLE, $e);
|
180 |
$this->renvoyerErreur(RestServeur::HTTP_CODE_RESSOURCE_INTROUVABLE, $e);
|
181 |
} elseif ($res_version) {
|
181 |
} elseif ($res_version) {
|
182 |
foreach ($res_version as $version) {
|
182 |
foreach ($res_version as $version) {
|
183 |
$versions_dispo[] = $version['version'];
|
183 |
$versions_dispo[] = $version['version'];
|
184 |
}
|
184 |
}
|
185 |
} else {
|
185 |
} else {
|
186 |
$m = 'Versions introuvables dans la table des méta-données';
|
186 |
$m = 'Versions introuvables dans la table des méta-données';
|
187 |
$this->renvoyerErreur(RestServeur::HTTP_CODE_RESSOURCE_INTROUVABLE, $m);
|
187 |
$this->renvoyerErreur(RestServeur::HTTP_CODE_RESSOURCE_INTROUVABLE, $m);
|
188 |
}
|
188 |
}
|
189 |
return $versions_dispo;
|
189 |
return $versions_dispo;
|
190 |
}
|
190 |
}
|
191 |
|
191 |
|
192 |
public function recupererListeNomTablePrChaqueVersion($table_num_version) {
|
192 |
public function recupererListeNomTablePrChaqueVersion($table_num_version) {
|
193 |
switch ($this->serviceNom) {
|
193 |
switch ($this->serviceNom) {
|
194 |
case 'Ontologies' :
|
194 |
case 'Ontologies' :
|
195 |
$prefixe_table = 'bdd_table_ontologies';
|
195 |
$prefixe_table = 'bdd_table_ontologies';
|
196 |
break;
|
196 |
break;
|
197 |
default:
|
197 |
default:
|
198 |
$prefixe_table = 'bdd_table';
|
198 |
$prefixe_table = 'bdd_table';
|
199 |
}
|
199 |
}
|
200 |
switch ($this->version_projet) {
|
200 |
switch ($this->version_projet) {
|
201 |
case '+' :
|
201 |
case '+' :
|
202 |
$derniere_version = $table_num_version[count($table_num_version) - 1];
|
202 |
$derniere_version = $table_num_version[count($table_num_version) - 1];
|
203 |
$this->table_version[] = Config::get($prefixe_table).'_v'.str_replace('.', '_', $derniere_version);
|
203 |
$this->table_version[] = Config::get($prefixe_table).'_v'.str_replace('.', '_', $derniere_version);
|
204 |
break;
|
204 |
break;
|
205 |
case '*' :
|
205 |
case '*' :
|
206 |
foreach ($table_num_version as $num_version) {
|
206 |
foreach ($table_num_version as $num_version) {
|
207 |
$this->table_version[] = Config::get($prefixe_table).'_v'.str_replace('.', '_', $num_version);
|
207 |
$this->table_version[] = Config::get($prefixe_table).'_v'.str_replace('.', '_', $num_version);
|
208 |
}
|
208 |
}
|
209 |
break;
|
209 |
break;
|
210 |
default :
|
210 |
default :
|
211 |
$this->table_version[] = Config::get($prefixe_table).'_'.$this->version_projet;
|
211 |
$this->table_version[] = Config::get($prefixe_table).'_'.$this->version_projet;
|
212 |
break;
|
212 |
break;
|
213 |
}
|
213 |
}
|
214 |
}
|
214 |
}
|
215 |
|
215 |
|
216 |
//valeur * signifie pas de limites
|
216 |
//valeur * signifie pas de limites
|
217 |
public function definirNavigationLimite($valeur){
|
217 |
public function definirNavigationLimite($valeur){
|
218 |
if (isset($this->parametres['navigation.limite']) ) {
|
218 |
if (isset($this->parametres['navigation.limite']) ) {
|
219 |
if ((preg_match('/^([0-9]+)$/', $valeur) && $valeur != 0 ) || $valeur == '*' ){
|
219 |
if ((preg_match('/^([0-9]+)$/', $valeur) && $valeur != 0 ) || $valeur == '*' ){
|
220 |
$this->limite_requete['limite'] = $valeur;
|
220 |
$this->limite_requete['limite'] = $valeur;
|
221 |
} else {
|
221 |
} else {
|
222 |
$e = "Erreur : valeur erronnée pour le paramètre navigation.limite.";
|
222 |
$e = "Erreur : valeur erronnée pour le paramètre navigation.limite.";
|
223 |
throw new Exception($e, RestServeur::HTTP_CODE_MAUVAISE_REQUETE);
|
223 |
throw new Exception($e, RestServeur::HTTP_CODE_MAUVAISE_REQUETE);
|
224 |
}
|
224 |
}
|
225 |
}
|
225 |
}
|
226 |
}
|
226 |
}
|
227 |
|
227 |
|
228 |
public function definirNavigationDepart($valeur){
|
228 |
public function definirNavigationDepart($valeur){
|
229 |
if (isset($this->parametres['navigation.depart'])) {
|
229 |
if (isset($this->parametres['navigation.depart'])) {
|
230 |
if(preg_match('/^([0-9]+)$/', $valeur)){
|
230 |
if(preg_match('/^([0-9]+)$/', $valeur)){
|
231 |
$this->limite_requete['depart'] = $valeur;
|
231 |
$this->limite_requete['depart'] = $valeur;
|
232 |
} else {
|
232 |
} else {
|
233 |
$e = "Erreur : valeur erronnée pour le paramètre navigation.depart.";
|
233 |
$e = "Erreur : valeur erronnée pour le paramètre navigation.depart.";
|
234 |
throw new Exception($e, RestServeur::HTTP_CODE_MAUVAISE_REQUETE);
|
234 |
throw new Exception($e, RestServeur::HTTP_CODE_MAUVAISE_REQUETE);
|
235 |
}
|
235 |
}
|
236 |
} else {
|
236 |
} else {
|
237 |
$e = "indiquez également la valeur pour le paramètre navigation.limite.";
|
237 |
$e = "indiquez également la valeur pour le paramètre navigation.limite.";
|
238 |
throw new Exception($e, RestServeur::HTTP_CODE_MAUVAISE_REQUETE);
|
238 |
throw new Exception($e, RestServeur::HTTP_CODE_MAUVAISE_REQUETE);
|
239 |
}
|
239 |
}
|
240 |
}
|
240 |
}
|
241 |
/**
|
241 |
/**
|
242 |
* Est appelée pour former l'url complete des resultats precedants ou suivants.
|
242 |
* Est appelée pour former l'url complete des resultats precedants ou suivants.
|
243 |
* @param int : Permet de connaitre le nombre de noms obtenus par la requete
|
243 |
* @param int : Permet de connaitre le nombre de noms obtenus par la requete
|
244 |
* @return string Retourne l'url complete des resultats precedents ou suivant sous la forme d'un tableau
|
244 |
* @return string Retourne l'url complete des resultats precedents ou suivant sous la forme d'un tableau
|
245 |
*/
|
245 |
*/
|
246 |
public function formulerUrl($nb_resultat, $id = null) {
|
246 |
public function formulerUrl($nb_resultat, $id = null) {
|
247 |
$url = array();
|
247 |
$url = array();
|
248 |
$debut_url = Config::get('url_service').$id.'?';
|
248 |
$debut_url = Config::get('url_service').$id.'?';
|
249 |
//on recréé l'url sans les parametres de navigation qui seront rajoutés ci-apres. On les enlève dc de la table des parametres
|
249 |
//on recréé l'url sans les parametres de navigation qui seront rajoutés ci-apres. On les enlève dc de la table des parametres
|
250 |
foreach($this->parametres as $cle => $val) {
|
250 |
foreach($this->parametres as $cle => $val) {
|
251 |
$param_url[str_replace('_', '.', $cle)] = $val;
|
251 |
$param_url[str_replace('_', '.', $cle)] = $val;
|
252 |
}
|
252 |
}
|
253 |
|
253 |
|
254 |
$this->recupererLesLimitesSuivantes($nb_resultat, $param_url);
|
254 |
$this->recupererLesLimitesSuivantes($nb_resultat, $param_url);
|
255 |
if (isset($param_url['navigation.depart']) && isset($param_url['navigation.limite'])) {
|
255 |
if (isset($param_url['navigation.depart']) && isset($param_url['navigation.limite'])) {
|
256 |
$url['suivant'] = $debut_url.http_build_query($param_url);
|
256 |
$url['suivant'] = $debut_url.http_build_query($param_url);
|
257 |
}
|
257 |
}
|
258 |
|
258 |
|
259 |
$this->recupererLesLimitesPrecedentes($param_url);
|
259 |
$this->recupererLesLimitesPrecedentes($param_url);
|
260 |
if (isset($param_url['navigation.depart']) && isset($param_url['navigation.limite'])) {
|
260 |
if (isset($param_url['navigation.depart']) && isset($param_url['navigation.limite'])) {
|
261 |
$url['precedent'] = $debut_url.http_build_query($param_url);
|
261 |
$url['precedent'] = $debut_url.http_build_query($param_url);
|
262 |
}
|
262 |
}
|
263 |
return $url;
|
263 |
return $url;
|
264 |
}
|
264 |
}
|
265 |
|
265 |
|
266 |
public function supprimerNavigation(&$param_url) {
|
266 |
public function supprimerNavigation(&$param_url) {
|
267 |
unset($param_url['navigation.depart']);
|
267 |
unset($param_url['navigation.depart']);
|
268 |
unset($param_url['navigation.limite']);
|
268 |
unset($param_url['navigation.limite']);
|
269 |
}
|
269 |
}
|
270 |
|
270 |
|
271 |
/**
|
271 |
/**
|
272 |
* Description :
|
272 |
* Description :
|
273 |
* Permet de former les limites de la requete retournant les résultats suivants.
|
273 |
* Permet de former les limites de la requete retournant les résultats suivants.
|
274 |
* Cette url sera afficher dans l'entete de la reponse retournée en format JSON (retour.format=defaut).
|
274 |
* Cette url sera afficher dans l'entete de la reponse retournée en format JSON (retour.format=defaut).
|
275 |
* @param int : $nb_resultat : Permet de connaitre le nombre de résultats obtenus par la requete
|
275 |
* @param int : $nb_resultat : Permet de connaitre le nombre de résultats obtenus par la requete
|
276 |
* @return string : la fin de l'url decrivant les limites des resultats suivants. Si aucun résultats ne suient,
|
276 |
* @return string : la fin de l'url decrivant les limites des resultats suivants. Si aucun résultats ne suient,
|
277 |
* une chaine de caractère vide est retournée
|
277 |
* une chaine de caractère vide est retournée
|
278 |
*/
|
278 |
*/
|
279 |
public function recupererLesLimitesSuivantes($nb_resultat, &$param_url_suiv) {
|
279 |
public function recupererLesLimitesSuivantes($nb_resultat, &$param_url_suiv) {
|
280 |
$this->supprimerNavigation($param_url);
|
280 |
$this->supprimerNavigation($param_url);
|
281 |
$depart = $this->limite_requete['depart'];
|
281 |
$depart = $this->limite_requete['depart'];
|
282 |
$limite = $this->limite_requete['limite'];
|
282 |
$limite = $this->limite_requete['limite'];
|
283 |
$depart_suivant = $depart + $limite;
|
283 |
$depart_suivant = $depart + $limite;
|
284 |
$limite_suivant = $limite;
|
284 |
$limite_suivant = $limite;
|
285 |
if ($nb_resultat > $depart_suivant) {
|
285 |
if ($nb_resultat > $depart_suivant) {
|
286 |
$param_url_suiv['navigation.depart'] = $depart_suivant;
|
286 |
$param_url_suiv['navigation.depart'] = $depart_suivant;
|
287 |
$param_url_suiv['navigation.limite'] = $limite_suivant;
|
287 |
$param_url_suiv['navigation.limite'] = $limite_suivant;
|
288 |
} else {
|
288 |
} else {
|
289 |
$param_url_suiv['navigation.depart'] = null;
|
289 |
$param_url_suiv['navigation.depart'] = null;
|
290 |
$param_url_suiv['navigation.limite'] = null;
|
290 |
$param_url_suiv['navigation.limite'] = null;
|
291 |
}
|
291 |
}
|
292 |
}
|
292 |
}
|
293 |
|
293 |
|
294 |
/**
|
294 |
/**
|
295 |
* Description :
|
295 |
* Description :
|
296 |
* Permet de former les limites de la requete retournant les résultats precedents.
|
296 |
* Permet de former les limites de la requete retournant les résultats precedents.
|
297 |
* Cette url sera afficher dans l'entete de la taxons/105reponse retournée en format JSON (retour.format=defaut)
|
297 |
* Cette url sera afficher dans l'entete de la taxons/105reponse retournée en format JSON (retour.format=defaut)
|
298 |
* @return string : la fin de l'url decrivant les limites des resultats precedents.
|
298 |
* @return string : la fin de l'url decrivant les limites des resultats precedents.
|
299 |
* Si aucun résultats ne precedent, une chaine de caractère vide est retournée
|
299 |
* Si aucun résultats ne precedent, une chaine de caractère vide est retournée
|
300 |
*/
|
300 |
*/
|
301 |
public function recupererLesLimitesPrecedentes(&$param_url) {
|
301 |
public function recupererLesLimitesPrecedentes(&$param_url) {
|
302 |
$this->supprimerNavigation($param_url);
|
302 |
$this->supprimerNavigation($param_url);
|
303 |
$depart = $this->limite_requete['depart'];
|
303 |
$depart = $this->limite_requete['depart'];
|
304 |
$limite = $this->limite_requete['limite'];
|
304 |
$limite = $this->limite_requete['limite'];
|
305 |
if ($depart == 0) {
|
305 |
if ($depart == 0) {
|
306 |
$url_precedente = '';
|
306 |
$url_precedente = '';
|
307 |
} else {
|
307 |
} else {
|
308 |
if (($depart - $limite) < 0) {
|
308 |
if (($depart - $limite) < 0) {
|
309 |
$depart_precedent = 0;
|
309 |
$depart_precedent = 0;
|
310 |
} else {
|
310 |
} else {
|
311 |
$depart_precedent = $depart - $limite;
|
311 |
$depart_precedent = $depart - $limite;
|
312 |
}
|
312 |
}
|
313 |
$param_url['navigation.depart'] = $depart_precedent;
|
313 |
$param_url['navigation.depart'] = $depart_precedent;
|
314 |
$param_url['navigation.limite'] = $limite;
|
314 |
$param_url['navigation.limite'] = $limite;
|
315 |
}
|
315 |
}
|
316 |
}
|
316 |
}
|
317 |
|
317 |
|
318 |
static function getDureeCache() {
|
318 |
static function getDureeCache() {
|
319 |
$dureecache = 0;
|
319 |
$dureecache = 0;
|
320 |
$dureecache = Config::get('dureecache');
|
320 |
$dureecache = Config::get('dureecache');
|
321 |
if ($dureecache == null || !is_numeric($dureecache) || $dureecache < 0) {
|
321 |
if ($dureecache == null || !is_numeric($dureecache) || $dureecache < 0) {
|
322 |
$dureecache = 0;
|
322 |
$dureecache = 0;
|
323 |
}
|
323 |
}
|
324 |
return (int) $dureecache;
|
324 |
return (int) $dureecache;
|
325 |
}
|
325 |
}
|
326 |
|
326 |
|
327 |
public function ajouterHref($service, $val) {
|
327 |
public function ajouterHref($service, $val) {
|
328 |
// http://tela-botanica.org/service:eflore:0.1/[projet]/[version_projet]/[service]/[ressource]:[valeur]
|
328 |
// http://tela-botanica.org/service:eflore:0.1/[projet]/[version_projet]/[service]/[ressource]:[valeur]
|
329 |
if ($this->version_projet == '+') {
|
329 |
if ($this->version_projet == '+') {
|
330 |
$url = Config::get('url_service_base').Config::get('nom_projet').'/'.$service.'/'.$val;
|
330 |
$url = Config::get('url_service_base').Config::get('nom_projet').'/'.$service.'/'.$val;
|
331 |
} else {
|
331 |
} else {
|
332 |
$url = Config::get('url_service_base').Config::get('nom_projet').'/'.$service.'/'.$val.'?version.projet='.ltrim($this->version_projet, 'v');
|
332 |
$url = Config::get('url_service_base').Config::get('nom_projet').'/'.$service.'/'.$val.'?version.projet='.ltrim($this->version_projet, 'v');
|
333 |
}
|
333 |
}
|
334 |
return $url;
|
334 |
return $url;
|
335 |
}
|
335 |
}
|
336 |
|
336 |
|
337 |
static function s_ajouterHref($service, $val, $version_projet = '') {
|
337 |
static function s_ajouterHref($service, $val, $version_projet = '') {
|
338 |
// http://tela-botanica.org/service:eflore:0.1/[projet]/[version_projet]/[service]/[ressource]:[valeur]
|
338 |
// http://tela-botanica.org/service:eflore:0.1/[projet]/[version_projet]/[service]/[ressource]:[valeur]
|
339 |
return Config::get('url_service_base').Config::get('nom_projet').'/'.$service.'/'.$val . ($version_projet != '+') ? ('?version.projet='.ltrim($version_projet, 'v')) : '';
|
339 |
return Config::get('url_service_base').Config::get('nom_projet').'/'.$service.'/'.$val . ($version_projet != '+') ? ('?version.projet='.ltrim($version_projet, 'v')) : '';
|
340 |
}
|
340 |
}
|
341 |
|
341 |
|
342 |
public function ajouterHrefAutreProjet($service, $ressource, $valeur, $projet = null, $param = null) {
|
342 |
public function ajouterHrefAutreProjet($service, $ressource, $valeur, $projet = null, $param = null) {
|
343 |
//on enleve les GA et Co, les meta ou les "_"
|
343 |
//on enleve les GA et Co, les meta ou les "_"
|
344 |
$this->transliterer($service, $valeur);
|
344 |
$this->transliterer($service, $valeur);
|
345 |
//on définit les nom des projets, des services et des ressources de l'url (dans les méta-donnees)
|
345 |
//on définit les nom des projets, des services et des ressources de l'url (dans les méta-donnees)
|
346 |
$tab = array(
|
346 |
$tab = array(
|
347 |
'langue' => array('service' => 'langues', 'projet' => 'iso-639-1', 'ressource' => ''),
|
347 |
'langue' => array('service' => 'langues', 'projet' => 'iso-639-1', 'ressource' => ''),
|
348 |
'couverture_spatiale' => array('service' => 'zone-geo', 'projet' => 'iso-3166-1', 'ressource' => ''),
|
348 |
'couverture_spatiale' => array('service' => 'zone-geo', 'projet' => 'iso-3166-1', 'ressource' => ''),
|
349 |
'type' => array('service' => 'ontologies', 'projet' => 'eflore', 'ressource' => 'contactType:'),
|
349 |
'type' => array('service' => 'ontologies', 'projet' => 'eflore', 'ressource' => 'contactType:'),
|
350 |
'datum' => array('service' => 'ontologies', 'projet' => 'eflore', 'ressource' => 'datum:')
|
350 |
'datum' => array('service' => 'ontologies', 'projet' => 'eflore', 'ressource' => 'datum:')
|
351 |
);
|
351 |
);
|
352 |
if (array_key_exists($service, $tab)) {
|
352 |
if (array_key_exists($service, $tab)) {
|
353 |
extract($tab[$service]);
|
353 |
extract($tab[$service]);
|
354 |
} else {
|
354 |
} else {
|
355 |
if (strpos(Config::get('nom_projet'), 'bd') === 0 && $projet == null) {
|
355 |
if (strpos(Config::get('nom_projet'), 'bd') === 0 && $projet == null) {
|
356 |
$projet = 'bdnt';
|
356 |
$projet = 'bdnt';
|
357 |
$service = 'ontologies';
|
357 |
$service = 'ontologies';
|
358 |
$ressource = '';
|
358 |
$ressource = '';
|
359 |
}
|
359 |
}
|
360 |
}
|
360 |
}
|
361 |
$param = ($param) ? "?".$param : "";
|
361 |
$param = ($param) ? "?".$param : "";
|
362 |
$url = Config::get('url_service_base').$projet.'/'.$service.'/'.$ressource.$valeur.$param;
|
362 |
$url = Config::get('url_service_base').$projet.'/'.$service.'/'.$ressource.$valeur.$param;
|
363 |
return $url;
|
363 |
return $url;
|
364 |
}
|
364 |
}
|
365 |
|
365 |
|
366 |
static function s_ajouterHrefAutreProjet($service, $ressource, $valeur, $projet = null, $param = null) {
|
366 |
static function s_ajouterHrefAutreProjet($service, $ressource, $valeur, $projet = null, $param = null) {
|
367 |
//on enleve les GA et Co, les meta ou les "_"
|
367 |
//on enleve les GA et Co, les meta ou les "_"
|
368 |
self::s_transliterer($service, $valeur);
|
368 |
self::s_transliterer($service, $valeur);
|
369 |
//on définit les nom des projets, des services et des ressources de l'url (dans les méta-donnees)
|
369 |
//on définit les nom des projets, des services et des ressources de l'url (dans les méta-donnees)
|
370 |
$tab = array(
|
370 |
$tab = array(
|
371 |
'langue' => array('service' => 'langues', 'projet' => 'iso-639-1', 'ressource' => ''),
|
371 |
'langue' => array('service' => 'langues', 'projet' => 'iso-639-1', 'ressource' => ''),
|
372 |
'couverture_spatiale' => array('service' => 'zone-geo', 'projet' => 'iso-3166-1', 'ressource' => ''),
|
372 |
'couverture_spatiale' => array('service' => 'zone-geo', 'projet' => 'iso-3166-1', 'ressource' => ''),
|
373 |
'type' => array('service' => 'ontologies', 'projet' => 'eflore', 'ressource' => 'contactType:'),
|
373 |
'type' => array('service' => 'ontologies', 'projet' => 'eflore', 'ressource' => 'contactType:'),
|
374 |
'datum' => array('service' => 'ontologies', 'projet' => 'eflore', 'ressource' => 'datum:')
|
374 |
'datum' => array('service' => 'ontologies', 'projet' => 'eflore', 'ressource' => 'datum:')
|
375 |
);
|
375 |
);
|
376 |
if (array_key_exists($service, $tab)) {
|
376 |
if (array_key_exists($service, $tab)) {
|
377 |
extract($tab[$service]);
|
377 |
extract($tab[$service]);
|
378 |
} else {
|
378 |
} else {
|
379 |
if (strpos(Config::get('nom_projet'), 'bd') === 0 && $projet == null) {
|
379 |
if (strpos(Config::get('nom_projet'), 'bd') === 0 && $projet == null) {
|
380 |
$projet = 'bdnt';
|
380 |
$projet = 'bdnt';
|
381 |
$service = 'ontologies';
|
381 |
$service = 'ontologies';
|
382 |
$ressource = '';
|
382 |
$ressource = '';
|
383 |
}
|
383 |
}
|
384 |
}
|
384 |
}
|
385 |
$param = ($param) ? "?".$param : "";
|
385 |
$param = ($param) ? "?".$param : "";
|
386 |
$url = Config::get('url_service_base').$projet.'/'.$service.'/'.$ressource.$valeur.$param;
|
386 |
$url = Config::get('url_service_base').$projet.'/'.$service.'/'.$ressource.$valeur.$param;
|
387 |
return $url;
|
387 |
return $url;
|
388 |
}
|
388 |
}
|
389 |
|
389 |
|
390 |
/**Permet de consulter une url et retourne le résultat ou une erreur
|
390 |
/**Permet de consulter une url et retourne le résultat ou une erreur
|
391 |
* @param $url */
|
391 |
* @param $url */
|
392 |
public function consulterHref($url) {
|
392 |
public function consulterHref($url) {
|
393 |
$res = $this->getRestClient()->consulter($url);
|
393 |
$res = $this->getRestClient()->consulter($url);
|
394 |
$entete = $this->getRestClient()->getReponseEntetes();
|
394 |
$entete = $this->getRestClient()->getReponseEntetes();
|
395 |
//Si le service meta-donnees fonctionne correctement, l'entete comprend la clé wrapper_data
|
395 |
//Si le service meta-donnees fonctionne correctement, l'entete comprend la clé wrapper_data
|
396 |
if (isset($entete['wrapper_data'])) {
|
396 |
if (isset($entete['wrapper_data'])) {
|
397 |
$res = json_decode($res);
|
397 |
$res = json_decode($res);
|
398 |
return $res;
|
398 |
return $res;
|
399 |
} else {
|
399 |
} else {
|
400 |
$u = 'L\'url <a href="'.$url.'">'.$url.'</a> lancée via RestClient renvoie une erreur';
|
400 |
$u = 'L\'url <a href="'.$url.'">'.$url.'</a> lancée via RestClient renvoie une erreur';
|
401 |
$this->renvoyerErreur(RestServeur::HTTP_CODE_RESSOURCE_INTROUVABLE, $u);
|
401 |
$this->renvoyerErreur(RestServeur::HTTP_CODE_RESSOURCE_INTROUVABLE, $u);
|
402 |
}
|
402 |
}
|
403 |
}
|
403 |
}
|
404 |
|
404 |
|
405 |
public function transliterer(&$service, &$val) {
|
405 |
public function transliterer(&$service, &$val) {
|
406 |
if (preg_match('/^.+:(.+)$/', $val, $match)) {
|
406 |
if (preg_match('/^.+:(.+)$/', $val, $match)) {
|
407 |
$val = $match[1];
|
407 |
$val = $match[1];
|
408 |
}
|
408 |
}
|
409 |
$service = str_replace(array('_Ga','_Co','_meta'), '', $service);
|
409 |
$service = str_replace(array('_Ga','_Co','_meta'), '', $service);
|
410 |
if ($service == 'rang') {
|
410 |
if ($service == 'rang') {
|
411 |
$ressource = 'rangTaxo';
|
411 |
$ressource = 'rangTaxo';
|
412 |
} elseif (preg_match('/^(statut)(?:_|-)([^_-]+)$/', $service, $match)) {
|
412 |
} elseif (preg_match('/^(statut)(?:_|-)([^_-]+)$/', $service, $match)) {
|
413 |
$service = $match[1].ucfirst($match[2]);
|
413 |
$service = $match[1].ucfirst($match[2]);
|
414 |
} elseif (strrpos($service, 'datum') !== false) {
|
414 |
} elseif (strrpos($service, 'datum') !== false) {
|
415 |
$service = 'datum';
|
415 |
$service = 'datum';
|
416 |
}
|
416 |
}
|
417 |
}
|
417 |
}
|
418 |
|
418 |
|
419 |
static function s_transliterer(&$service, &$val) {
|
419 |
static function s_transliterer(&$service, &$val) {
|
420 |
if (preg_match('/^.+:(.+)$/', $val, $match)) {
|
420 |
if (preg_match('/^.+:(.+)$/', $val, $match)) {
|
421 |
$val = $match[1];
|
421 |
$val = $match[1];
|
422 |
}
|
422 |
}
|
423 |
$service = str_replace(array('_Ga','_Co','_meta'), '', $service);
|
423 |
$service = str_replace(array('_Ga','_Co','_meta'), '', $service);
|
424 |
if ($service == 'rang') {
|
424 |
if ($service == 'rang') {
|
425 |
$ressource = 'rangTaxo';
|
425 |
$ressource = 'rangTaxo';
|
426 |
} elseif (preg_match('/^(statut)(?:_|-)([^_-]+)$/', $service, $match)) {
|
426 |
} elseif (preg_match('/^(statut)(?:_|-)([^_-]+)$/', $service, $match)) {
|
427 |
$service = $match[1].ucfirst($match[2]);
|
427 |
$service = $match[1].ucfirst($match[2]);
|
428 |
} elseif (strrpos($service, 'datum') !== false) {
|
428 |
} elseif (strrpos($service, 'datum') !== false) {
|
429 |
$service = 'datum';
|
429 |
$service = 'datum';
|
430 |
}
|
430 |
}
|
431 |
}
|
431 |
}
|
432 |
|
432 |
|
433 |
// prend en arguments la valeur de la recherche, les résultats approchés, le paramétre recherche
|
433 |
// prend en arguments la valeur de la recherche, les résultats approchés, le paramétre recherche
|
434 |
// retourne le tableau trié en fonction de la ressemblance entre le résultat approché et la valeur recherchée
|
434 |
// retourne le tableau trié en fonction de la ressemblance entre le résultat approché et la valeur recherchée
|
435 |
public function trierRechercheFloue($nom_demande, $tab_approchee, $nom) {
|
435 |
public function trierRechercheFloue($nom_demande, $tab_approchee, $nom) {
|
436 |
$trie = '';
|
436 |
$trie = '';
|
437 |
$resultat = array();
|
437 |
$resultat = array();
|
438 |
foreach ($tab_approchee as $id => $tab) {
|
438 |
foreach ($tab_approchee as $id => $tab) {
|
439 |
$nom_demande_ss = strtolower(Chaine::supprimerAccents($nom_demande));
|
439 |
$nom_demande_ss = strtolower(Chaine::supprimerAccents($nom_demande));
|
440 |
$nom_flou_ss = strtolower(Chaine::supprimerAccents($tab[$nom]));
|
440 |
$nom_flou_ss = strtolower(Chaine::supprimerAccents($tab[$nom]));
|
441 |
$stat = array();
|
441 |
$stat = array();
|
442 |
// Prime pour la ressemblance globale :
|
442 |
// Prime pour la ressemblance globale :
|
443 |
$score = 500 - levenshtein($nom_flou_ss, $nom_demande_ss);
|
443 |
$score = 500 - levenshtein($nom_flou_ss, $nom_demande_ss);
|
444 |
// On affine
|
444 |
// On affine
|
445 |
$score = $score + (similar_text($nom_demande_ss, $nom_flou_ss) * 3);
|
445 |
$score = $score + (similar_text($nom_demande_ss, $nom_flou_ss) * 3);
|
446 |
$stat['score'] = $score;
|
446 |
$stat['score'] = $score;
|
447 |
foreach ($tab as $key => $valeur) {
|
447 |
foreach ($tab as $key => $valeur) {
|
448 |
$stat[$key] = $valeur;
|
448 |
$stat[$key] = $valeur;
|
449 |
}
|
449 |
}
|
450 |
$resultat[] = $stat;
|
450 |
$resultat[] = $stat;
|
451 |
}
|
451 |
}
|
452 |
|
452 |
|
453 |
|
453 |
|
454 |
// Vérification que nous avons bien trouvé un nom approché
|
454 |
// Vérification que nous avons bien trouvé un nom approché
|
455 |
if (count($resultat) > 0) {
|
455 |
if (count($resultat) > 0) {
|
456 |
$trie = Tableau::trierMD($resultat, array('score' => SORT_DESC));
|
456 |
$trie = Tableau::trierMD($resultat, array('score' => SORT_DESC));
|
457 |
}
|
457 |
}
|
458 |
return $trie;
|
458 |
return $trie;
|
459 |
}
|
459 |
}
|
460 |
|
460 |
|
461 |
protected function recupererTableauConfig($param) {
|
461 |
protected function recupererTableauConfig($param) {
|
462 |
$tableau = array();
|
462 |
$tableau = array();
|
463 |
$tableauPartiel = explode(',', Config::get($param));
|
463 |
$tableauPartiel = explode(',', Config::get($param));
|
464 |
$tableauPartiel = array_map('trim', $tableauPartiel);
|
464 |
$tableauPartiel = array_map('trim', $tableauPartiel);
|
465 |
foreach ($tableauPartiel as $champ) {
|
465 |
foreach ($tableauPartiel as $champ) {
|
466 |
if (strpos($champ, '=') === false) {
|
466 |
if (strpos($champ, '=') === false) {
|
467 |
$tableau[] = $champ;
|
467 |
$tableau[] = $champ;
|
468 |
} else {
|
468 |
} else {
|
469 |
list($cle, $val) = explode('=', $champ);
|
469 |
list($cle, $val) = explode('=', $champ);
|
470 |
$tableau[$cle] = $val;
|
470 |
$tableau[$cle] = $val;
|
471 |
}
|
471 |
}
|
472 |
}
|
472 |
}
|
473 |
return $tableau;
|
473 |
return $tableau;
|
474 |
}
|
474 |
}
|
475 |
|
475 |
|
476 |
static function s_recupererTableauConfig($param) {
|
476 |
static function s_recupererTableauConfig($param) {
|
477 |
$tableau = array();
|
477 |
$tableau = array();
|
478 |
$tableauPartiel = array_map('trim', explode(',', Config::get($param)));
|
478 |
$tableauPartiel = array_map('trim', explode(',', Config::get($param)));
|
479 |
foreach ($tableauPartiel as $champ) {
|
479 |
foreach ($tableauPartiel as $champ) {
|
480 |
if (strpos($champ, '=') === false) {
|
480 |
if (strpos($champ, '=') === false) {
|
481 |
$tableau[] = $champ;
|
481 |
$tableau[] = $champ;
|
482 |
} else {
|
482 |
} else {
|
483 |
list($cle, $val) = explode('=', $champ);
|
483 |
list($cle, $val) = explode('=', $champ);
|
484 |
$tableau[$cle] = $val;
|
484 |
$tableau[$cle] = $val;
|
485 |
}
|
485 |
}
|
486 |
}
|
486 |
}
|
487 |
return $tableau;
|
487 |
return $tableau;
|
488 |
}
|
488 |
}
|
489 |
|
489 |
|
490 |
//+------------------------------------------------------------------------------------------------------+
|
490 |
//+------------------------------------------------------------------------------------------------------+
|
491 |
// Méthodes d'accès aux objets du Framework
|
491 |
// Méthodes d'accès aux objets du Framework
|
492 |
/**
|
492 |
/**
|
493 |
* Méthode de connection à la base de données sur demande.
|
493 |
* Méthode de connection à la base de données sur demande.
|
494 |
* Tous les services web n'ont pas besoin de s'y connecter.
|
494 |
* Tous les services web n'ont pas besoin de s'y connecter.
|
495 |
*/
|
495 |
*/
|
496 |
protected function getBdd() {
|
496 |
protected function getBdd() {
|
497 |
if (! isset($this->Bdd)) {
|
497 |
if (! isset($this->Bdd)) {
|
498 |
$this->Bdd = new Bdd();
|
498 |
$this->Bdd = new Bdd();
|
499 |
}
|
499 |
}
|
500 |
return $this->Bdd;
|
500 |
return $this->Bdd;
|
501 |
}
|
501 |
}
|
502 |
|
502 |
|
503 |
/**
|
503 |
/**
|
504 |
* Méthode permettant de faire appel à un client REST en fonction des besoins du service.
|
504 |
* Méthode permettant de faire appel à un client REST en fonction des besoins du service.
|
505 |
*/
|
505 |
*/
|
506 |
protected function getRestClient() {
|
506 |
protected function getRestClient() {
|
507 |
if (! isset($this->RestClient)) {
|
507 |
if (! isset($this->RestClient)) {
|
508 |
$this->RestClient = new RestClient();
|
508 |
$this->RestClient = new RestClient();
|
509 |
}
|
509 |
}
|
510 |
return $this->RestClient;
|
510 |
return $this->RestClient;
|
511 |
}
|
511 |
}
|
512 |
|
512 |
|
513 |
|
513 |
|
514 |
/**
|
514 |
/**
|
515 |
* Génération de fichiers pour les cartes
|
515 |
* Génération de fichiers pour les cartes
|
516 |
*/
|
516 |
*/
|
517 |
static function convertirEnPNGAvecRsvg($idFichier, $chemin, $svg) {
|
517 |
static function convertirEnPNGAvecRsvg($idFichier, $chemin, $svg) {
|
518 |
// test répertoire de cache
|
518 |
// test répertoire de cache
|
519 |
if(!is_dir($chemin)) {
|
519 |
if(!is_dir($chemin)) {
|
520 |
mkdir($chemin, 0777, true);
|
520 |
mkdir($chemin, 0777, true);
|
521 |
}
|
521 |
}
|
522 |
if(!is_dir($chemin)) {
|
522 |
if(!is_dir($chemin)) {
|
523 |
error_log(__FILE__ . ": can't create cache {$chemin}");
|
523 |
error_log(__FILE__ . ": can't create cache {$chemin}");
|
524 |
return NULL;
|
524 |
return NULL;
|
525 |
}
|
525 |
}
|
526 |
|
526 |
|
527 |
// test présence du binaire de conversion (rsvg)
|
527 |
// test présence du binaire de conversion (rsvg)
|
528 |
/*
|
528 |
/*
|
529 |
// `which` no possible using safe-mode...
|
529 |
// `which` no possible using safe-mode...
|
530 |
$i = $s = NULL;
|
530 |
$i = $s = NULL;
|
531 |
exec('which rsvg-convert', $s, $i);
|
531 |
exec('which rsvg-convert', $s, $i);
|
532 |
if($i != 0) {
|
532 |
if($i != 0) {
|
533 |
error_log(__FILE__ . ": no rsvg-convert binary");
|
533 |
error_log(__FILE__ . ": no rsvg-convert binary");
|
534 |
return NULL;
|
534 |
return NULL;
|
535 |
}
|
535 |
}
|
536 |
*/
|
536 |
*/
|
537 |
// conversion svg => png
|
537 |
// conversion svg => png
|
538 |
// troncage du nom de fichier si celui-ci est trop long
|
538 |
// troncage du nom de fichier si celui-ci est trop long
|
539 |
// (passé 255 caractères, le risque de collision est très faible)
|
539 |
// (passé 255 caractères, le risque de collision est très faible)
|
540 |
$cheminReduit = substr($chemin.$idFichier, 0, 240);
|
540 |
$cheminReduit = substr($chemin.$idFichier, 0, 240);
|
541 |
|
541 |
|
542 |
$fichierPng = $cheminReduit.'.png';
|
542 |
$fichierPng = $cheminReduit.'.png';
|
543 |
$fichierSvg = $cheminReduit.'.svg';
|
543 |
$fichierSvg = $cheminReduit.'.svg';
|
544 |
|
544 |
|
545 |
|
545 |
|
546 |
file_put_contents($fichierSvg, $svg);
|
546 |
file_put_contents($fichierSvg, $svg);
|
547 |
$i = $s = NULL;
|
547 |
$i = $s = NULL;
|
548 |
$rsvg = exec("rsvg-convert $fichierSvg -d 75 -p 75 -o $fichierPng", $s, $i);
|
548 |
$rsvg = exec("rsvg-convert $fichierSvg -d 75 -p 75 -o $fichierPng", $s, $i);
|
549 |
if($i != 0) {
|
549 |
if($i != 0) {
|
550 |
error_log(__FILE__ . ": `rsvg-convert $fichierSvg -o $fichierPng` returned $i: " . implode(', ', $s));
|
550 |
error_log(__FILE__ . ": `rsvg-convert $fichierSvg -o $fichierPng` returned $i: " . implode(', ', $s));
|
551 |
return NULL;
|
551 |
return NULL;
|
552 |
}
|
552 |
}
|
553 |
|
553 |
|
554 |
self::indexerFichierPng($fichierPng);
|
554 |
self::indexerFichierPng($fichierPng);
|
555 |
return file_get_contents($fichierPng);
|
555 |
return file_get_contents($fichierPng);
|
556 |
}
|
556 |
}
|
557 |
|
557 |
|
558 |
static function indexerFichierPng($fichierPng) {
|
558 |
static function indexerFichierPng($fichierPng) {
|
559 |
$img = imagecreatefrompng($fichierPng);
|
559 |
$img = imagecreatefrompng($fichierPng);
|
560 |
imagetruecolortopalette($img, false, 32);
|
560 |
imagetruecolortopalette($img, false, 32);
|
561 |
$blanc = imagecolorallocate($img, 255, 255, 255);
|
561 |
$blanc = imagecolorallocate($img, 255, 255, 255);
|
562 |
imagefill($img, 0, 0, $blanc);
|
562 |
imagefill($img, 0, 0, $blanc);
|
563 |
imagepng($img, $fichierPng, 9, PNG_ALL_FILTERS);
|
563 |
imagepng($img, $fichierPng, 9, PNG_ALL_FILTERS);
|
564 |
}
|
564 |
}
|
565 |
|
565 |
|
566 |
//+------------------------------------------------------------------------------------------------------+
|
566 |
//+------------------------------------------------------------------------------------------------------+
|
567 |
// Fonctions appelées par plusieurs web services
|
567 |
// Fonctions appelées par plusieurs web services
|
568 |
public function obtenirNumNomTaxonsSuperieurs($referentiel, $nn_demande) {
|
568 |
public function obtenirNumNomTaxonsSuperieurs($referentiel, $nn_demande) {
|
569 |
$nn_taxons_sup = array();
|
569 |
$nn_taxons_sup = array();
|
570 |
// TODO: ceci ramène trop de champs alors que l'on a besoin que du numéro nomenclatural
|
570 |
// TODO: ceci ramène trop de champs alors que l'on a besoin que du numéro nomenclatural
|
571 |
// et il y a peut-être un meilleur moyen que ramener la hierarchie des taxons supérieurs
|
571 |
// et il y a peut-être un meilleur moyen que ramener la hierarchie des taxons supérieurs
|
572 |
// mais pour le moment ça marche et c'est assez rapide
|
572 |
// mais pour le moment ça marche et c'est assez rapide
|
573 |
$url = $this->ajouterHrefAutreProjet('taxons', $nn_demande, '/relations/superieurs',$referentiel);
|
573 |
$url = $this->ajouterHrefAutreProjet('taxons', $nn_demande, '/relations/superieurs',$referentiel);
|
574 |
$classification = $this->consulterHref($url);
|
574 |
$classification = $this->consulterHref($url);
|
575 |
$classification = is_object($classification) ? get_object_vars($classification) : array();
|
575 |
$classification = is_object($classification) ? get_object_vars($classification) : array();
|
576 |
|
576 |
|
577 |
if(isset($classification[$nn_demande])) {
|
577 |
if(isset($classification[$nn_demande])) {
|
578 |
$classification_nn_demande = get_object_vars($classification[$nn_demande]);
|
578 |
$classification_nn_demande = get_object_vars($classification[$nn_demande]);
|
579 |
$tab_nn_demandes = array_keys($classification_nn_demande);
|
579 |
$tab_nn_demandes = array_keys($classification_nn_demande);
|
580 |
$nn_taxons_sup = $tab_nn_demandes;
|
580 |
$nn_taxons_sup = $tab_nn_demandes;
|
581 |
}
|
581 |
}
|
582 |
return $nn_taxons_sup;
|
582 |
return $nn_taxons_sup;
|
583 |
}
|
583 |
}
|
584 |
|
584 |
|
585 |
|
585 |
|
586 |
static function extraireComplementsOntologies($ontologie) {
|
586 |
static function extraireComplementsOntologies($ontologie) {
|
587 |
if (!$ontologie['complements']) return $ontologie;
|
587 |
if (!$ontologie['complements']) return $ontologie;
|
588 |
$complements = explode(',', trim($ontologie['complements']));
|
588 |
$complements = explode(',', trim($ontologie['complements']));
|
589 |
foreach ($complements as $complement) {
|
589 |
foreach ($complements as $complement) {
|
590 |
@list($cle, $val) = explode('=', trim($complement));
|
590 |
@list($cle, $val) = explode('=', trim($complement));
|
591 |
// TODO: dirty workaround. Les compléments aux ontologies utilisent
|
591 |
// TODO: dirty workaround. Les compléments aux ontologies utilisent
|
592 |
// des séparateurs variables.
|
592 |
// des séparateurs variables.
|
593 |
// cf disabledtestSeparateurToutesOntologies() dans tests/0.1/eflore/EfloreOntologiesTest.php
|
593 |
// cf disabledtestSeparateurToutesOntologies() dans tests/0.1/eflore/EfloreOntologiesTest.php
|
594 |
// ainsi nous testons $cle et $val
|
594 |
// ainsi nous testons $cle et $val
|
595 |
if($cle && $val) $ontologie[trim($cle)] = trim($val);
|
595 |
if($cle && $val) $ontologie[trim($cle)] = trim($val);
|
596 |
}
|
596 |
}
|
597 |
return $ontologie;
|
597 |
return $ontologie;
|
598 |
}
|
598 |
}
|
599 |
}
|
599 |
}
|
600 |
?>
|
- |
|
601 |
|
600 |
?>
|
- |
|
601 |
|