Rev 880 | Blame | Compare with Previous | Last modification | View Log | RSS feed
<?php/*** Description :* Classe Noms.php permettant de fournir des informations sur les noms scientifiques.* Si l'url finit par /noms on retourne une liste de noms latin et leurs identifiants (seulement les 100 premeiers noms par défaut).* L'url peut contenir des paramètres optionnels passés après le ? : /noms?param1=val1¶m2=val2&...** Les paramètres de requête disponibles sont : masque, masque.gen (nom de genre), masque.sp (épithète d'espèce), masque.ssp (épithète infra-spécifique),* masque.au (auteur du nom), masque.an (année de publication du nom), masque.bib (réf biblio de la publi d'origine du nom), masque.ad (nomen addendum),* masque.nn (identifiant du nom), recherche, rang, distinct, retour.format, nl.format, nl.structure, navigation.depart et navigation.limite.** Encodage en entrée : utf8* Encodage en sortie : utf8* @package framework-v3* @author Jennifer Dhé <jennifer.dhe@tela-botanica.org>* @license GPL v3 <http://www.gnu.org/licenses/gpl.txt>* @license CECILL v2 <http://www.cecill.info/licences/Licence_CeCILL_V2-en.txt>* @version 1.0* @copyright 1999-${year} Tela Botanica (accueil@tela-botanica.org)*/class Noms extends CommunNomsTaxons {/** Permet de stocker la requete formulée :* - noms | noms/#id | noms/#id/#champ+#champ* - noms/#id/relations | noms/#id/relations/synonymie | noms/#id/relations/homonymie | noms/#id/relations/flores* - noms/stats/rangs | noms/stats/annees | noms/stats/initiales */protected $format_reponse = 'noms';protected $service = 'noms';/** Valeur du paramètre de requete recherche : stricte etendue floue */protected $recherche = false;/** Valeur du paramètre de requete distinct (=0|1) */protected $distinct = null;/** Représente la première partie de la requete SQL (entre le SELECT et le WHERE) */protected $requete_champ = 'num_nom, nom_sci, num_nom_retenu';/** Représente la partie de la requete SQL ajoutant une condition (WHERE ...) */protected $requete_condition = '';/** Représente la partie GROUP BY de la requete SQL (GROUP BY ...) */protected $requete_group_by = '';/** Permet de stocker les limite de la requete SQL (par défaut seul les 100 premiers résultats seront retournés).*/protected $limite_requete = array('depart' => 0,'limite' => 100);public function consulter($ressources, $parametres) {$resultat_formate = '';$res_version = '';$this->initialiserRestClient(); //création d'un objet RestClient$this->traiterParametres($parametres);//On récupère les différentes versions existantes ds la table des meta-données (WS metaDonnees) et on traite la version demandée :$this->traiterVersionProjet($ressources);if ($this->corps_http == '' && $this->entete_http == '') {foreach ($this->table_version as $version) {$this->table = $version; //on stocke le nom de la table correspondant à la version du projet en cours$this->recupererNomChamp($this->table); //on récupère les noms des champs disponibles (Ds Commun.php)$this->traiterRessources($ressources); //dans CommunNomsTaxons.php$requete = $this->assemblerLaRequete();$resultat = $this->getBdd()->recupererTous($requete);if ($resultat == '') { //cas ou la requete comporte des erreurs$this->renvoyerErreur(RestServeur::HTTP_CODE_RESSOURCE_INTROUVABLE,'La requête SQL formée comporte une erreur !!');} elseif ($resultat) {$res_version[$version] = $resultat;} else {$this->renvoyerErreur(RestServeur::HTTP_CODE_RESSOURCE_INTROUVABLE,'Les données recherchées sont introuvables dans la version '.$version);}}}if ($this->corps_http == '' && $this->entete_http == '') {$resultat_formate = $this->retournerResultatFormate($res_version);}$this->formerReponseHTTP($resultat_formate);}//-----------------FONCTION D'ANALYSE DES PARAMETRES--------------------------------------------------------------------/**** Permet d'analyser les paramètres* @param array $parametres*/public function traiterParametres($parametres) {$this->table_param = $parametres;if (isset($parametres) && !empty($parametres)) {//définition de $recherche permettant d'ajouter les % ds la requete sql (cas recherche étendue) utilisé dans la fct ajouterLeFiltreMasque()if (isset($parametres['recherche']) && $parametres['recherche'] != '') {$this->recherche = $parametres['recherche'];}foreach ($parametres as $param => $val) {switch ($param) {case 'ns_format' : $this->html = $val; break;case 'ns_structure' : $this->remplirTableCompositionNom($val); //ds CommunNomsTaxons.php$this->requete_champ .= ' ,'.implode(', ',$this->compo_nom); break;case 'masque' : $this->ajouterLeFiltreMasque('nom_sci', $val); break;case 'masque_sg' : $this->ajouterLeFiltreMasque('nom_supra_generique', $val); break;case 'masque_gen' : $this->ajouterLeFiltreMasque('genre', $val); break;case 'masque_sp' : $this->ajouterLeFiltreMasque('epithete_sp', $val); break;case 'masque_ssp' : $this->ajouterLeFiltreMasque('epithete_infra_sp',$val); break;case 'masque_au' : $this->ajouterLeFiltreMasque('auteur', $val); break;case 'masque_an' : $this->ajouterLeFiltreMasque('annee', $val); break;case 'masque_bib' : $this->ajouterLeFiltreMasque('biblio_origine',$val); break;case 'masque_ad' : $this->ajouterLeFiltreMasque('nom_addendum', $val); break;case 'masque_nn' : $this->requete_condition .= ' AND num_nom IN ('.$val.')'; break;case 'masque_rg' : $this->ajouterLeFiltreMasque('rang', $val); break;case 'navigation_depart': $this->limite_requete['depart'] = $val; break;case 'navigation_limite': $this->limite_requete['limite'] = $val; break;case 'retour_format' : $this->retour_format = $val; break;case 'distinct' : $this->distinct = $val; break;case 'recherche' : break;default : $this->renvoyerErreur(RestServeur::HTTP_CODE_MAUVAISE_REQUETE,'Erreur dans les parametres de recherche de votre requête :</br> Le parametre " '.$param.' " n\'existe pas.'); break;}}$this->ajouterNomDistinct();if ($this->recherche == 'floue') {$this->rechercheFloue();}}}/**** fonction d'ajout dans la requete SQL des conditions (WHERE ...) en fonctions des parametres demandés* @param $nom_champ* @param $valeur* @param $masque*/public function ajouterLeFiltreMasque($nom_champ, $valeur) {if ($nom_champ == 'annee' || $nom_champ == 'rang') {$this->requete_condition .= ' AND '.$nom_champ.' = '.$this->getBdd()->proteger($valeur);} else {if ($this->recherche == 'etendue') {$valeur = str_replace(' ','%', $valeur);$valeur .= '%';}$this->requete_condition .= ' AND '.$nom_champ.' LIKE '.$this->getBdd()->proteger($valeur);}}/*** Permet de rajouter à la requete sql le parametre distinct. N'est utilisé qu'avec le format oss*/public function ajouterNomDistinct() {if (isset($this->distinct)) {if (($this->distinct == 1) && ($this->retour_format == 'oss')) {if ($this->compo_nom == '') {$this->requete_champ = ' DISTINCT nom_sci ';} else {$this->requete_champ = ' DISTINCT nom_sci, '.implode(', ',$this->compo_nom);}} elseif (($this->distinct == 1) && ($this->retour_format != 'oss')) {$this->renvoyerErreur(RestServeur::HTTP_CODE_MAUVAISE_REQUETE,'Erreur dans votre requête </br>L\'utilisation du parametre distinct ne se fait que sous le format oss');}}}/**** Permet d'ajouter à notre requete une condition de recherche floue à l'aide de l'alhorithme soundex.* On remplace ainsi les filtres exceptés le masque année et le filtre rang*/public function rechercheFloue() {foreach ($this->ordre_masque as $masque) {if (array_key_exists($masque, $this->table_param)) {$radical = $this->table_param[$masque];switch ($masque) {case 'masque' : $this->ajoutSoundex('nom_sci', $radical); break;case 'masque_sg' : $this->ajoutSoundex('nom_supra_generique', $radical); break;case 'masque_gen' : $this->ajoutSoundex('genre', $radical); break;case 'masque_sp' : $this->ajoutSoundex('epithete_sp', $radical); break;case 'masque_ssp' : $this->ajoutSoundex('epithete_infra_sp', $radical); break;case 'masque_au' : $this->ajoutSoundex('auteur', $radical); break;default : break;}}}}/** Ajoute à la requete SQL l'expression pour la recherche floue en fonction du masque demandé */public function ajoutSoundex($champ, $radical) {$this->requete_condition = str_replace(' AND '.$champ.' LIKE \''.$radical.'\'',' AND (SOUNDEX('.$champ.') = SOUNDEX(\''.$radical.'\')'.' OR SOUNDEX(REVERSE('.$champ.')) = SOUNDEX(REVERSE(\''.$radical.'\'))) ',$this->requete_condition);}//-----------------FONCTION D'ANALYSE DES RESSOURCES--------------------------------------------------------------------public function traiterRessourcesIdentifiant() {//on initialise la condition de la requete sql et le format de réponse$this->requete_condition = ' num_nom = '.$this->getBdd()->proteger($this->table_ressources[0]);$this->format_reponse = $this->service.'/id';if (isset($this->table_ressources[1]) && !empty($this->table_ressources[1])) {// requete de type noms/#id/#champ+#champif (($this->table_ressources[1] != 'relations')) {$this->requete_champ = ' *, nom_sci ';$this->format_reponse .= '/champ';// requete de type noms/#id/relations/#relations} elseif ($this->table_ressources[1] == 'relations') {$this->traiterRessourceIdRelations();} else {$this->renvoyerErreur(RestServeur::HTTP_CODE_MAUVAISE_REQUETE,'Erreur dans votre requête </br> Ressources disponibles : <br/><li> noms/#id/relations </li> <li> noms/#id/#champ+#champ </li><li> noms/#id/relations/synonymie </li> <li> noms/#id/relations/flores </li><li> noms/#id/relations/homonymie </li>');}} else {// requete de type noms/#id : rajout du nom_sci pour récupérer le format html par la fct mettreAuFormat()// SELECT *, nom_sci FROM bdtfx_v2_00 WHERE num_nom = X;$this->requete_champ = ' *, nom_sci ';}}public function traiterRessourceIdRelations() {$this->format_reponse .= '/relations';if (isset($this->table_ressources[2]) && !empty($this->table_ressources[2])) {// requete de type noms/#id/relations/#relationswitch ($this->table_ressources[2]) {case 'synonymie' : $this->traiterRessourceIdSynonymie(); break;case 'flores' : $this->traiterRessourceIdFlores(); break;case 'homonymie' : $this->traiterRessourceIdHomonymie(); break;default : $this->renvoyerErreur(RestServeur::HTTP_CODE_MAUVAISE_REQUETE,'Erreur dans votre requête </br> Ressources disponibles : <br/><li> noms/#id/relations </li> <li> noms/#id/relations/synonymie </li><li> noms/#id/relations/flores </li> <li> noms/#id/relations/homonymie </li>'); break;}}}public function traiterRessourceIdSynonymie() {// SELECT num_nom, nom_sci, num_nom_retenu, basionyme FROM bdtfx_v2_00 WHERE num_nom = X LIMIT 0,100;$this->format_reponse .= '/synonymie';if (strrpos($this->requete_champ, ', basionyme') === false) $this->requete_champ .= ', basionyme ';$this->requete_condition = ' num_nom_retenu = (SELECT num_nom_retenu FROM '.$this->table.' WHERE '.$this->requete_condition.')';}public function traiterRessourceIdHomonymie() {// SELECT num_nom, nom_sci, num_nom_retenu FROM bdtfx_v2_00 WHERE nom_sci =// (SELECT nom_sci FROM bdtfx_v2_00 WHERE num_nom = X);$this->format_reponse .= '/homonymie';$this->requete_condition = 'nom_sci = (SELECT nom_sci FROM '.$this->table.' WHERE '.$this->requete_condition.')';}public function traiterRessourceIdFlores() {$champ_flores = '';foreach ($this->champs_table as $champ) {if (preg_match('/^flore_.*$/', $champ)) {$champ_flores .= ', '.$champ;}}$this->format_reponse .= '/flores';$this->requete_champ = 'num_nom'.$champ_flores;}public function traiterRessourceStatsRangs() {// SELECT count(*) as nombre, rang FROM bdtfx_v2_00 [WHERE rang = 290] GROUP BY rang ORDER BY rang;$this->format_reponse .= '/rangs';$this->requete_champ = 'count(*) as nombre, rang ';$this->requete_group_by = ' GROUP BY rang ORDER BY rang ';}public function traiterRessourceStatsAnnees() {// SELECT count(*) as nombre, annee FROM bdtfx_v2_00 GROUP BY annee ORDER BY annee;$this->format_reponse .= '/annees';$this->requete_champ = 'count(*) as nombre, annee ';$this->requete_condition = '';$this->requete_group_by = ' GROUP BY annee ORDER BY annee ';}public function traiterRessourceStatsInitiales() {// SELECT count(left( nom_sci, 2 )) as nb, rang, left(nom_sci, 2) as lettre GROUP BY rang, left(nom_sci, 2);$this->format_reponse .= '/initiales';$this->requete_condition = '';$this->requete_champ = 'count(left( nom_sci, 2 )) as nb, rang, left(nom_sci, 2) as lettre ';$this->requete_group_by = ' GROUP BY rang, left(nom_sci, 2)';}//-----------------------------FONCTIONS DASSEMBLAGE DE LA REQUETE-----------------------------------------------------public function assemblerLaRequete() {if ( strrpos($this->format_reponse, 'noms/stats/') === false ) {$this->mettreAuFormat(); //Ds CommunNomsTaxons.php}if ($this->requete_condition != '') {$this->requete_condition = ltrim($this->requete_condition, ' AND, WHERE');$this->requete_condition = ' WHERE '.$this->requete_condition;}if ($this->format_reponse != 'noms' && $this->format_reponse != 'noms/id/relations/synonymie' && $this->format_reponse != 'noms/id/relations/homonymie') {$this->requete_limite = '';} elseif (($depart = $this->limite_requete['depart']) > ($this->total_resultat = $this->recupererTotalResultat())) {$this->limite_requete['depart'] =(($this->total_resultat - $this->limite_requete['limite']) < 0) ? 0 : ($this->total_resultat - $this->limite_requete['limite']);$this->requete_limite = ' LIMIT '.$this->limite_requete['depart'].', '.$this->limite_requete['limite'];} else {$this->requete_limite = ' LIMIT '.$this->limite_requete['depart'].', '.$this->limite_requete['limite'];}$requete = ' SELECT '.$this->requete_champ.' FROM '.$this->table.$this->requete_condition.$this->requete_group_by.$this->requete_limite;return $requete;}/*** Recupere le nombre total de résultat d'une requete lancée.* Est utilisée lors de l'affichage du total dans le résultat retourné et pr déterminer les limites et départ* @return nombre total de résultat*/public function recupererTotalResultat() {$total = null;$requete = 'SELECT count(*) as nombre FROM '.$this->table.$this->requete_condition.$this->requete_group_by;$res = $this->getBdd()->recuperer($requete);if ($res) {$total = $res['nombre'];} else {$this->renvoyerErreur(RestServeur::HTTP_CODE_RESSOURCE_INTROUVABLE,'Fct recupererTotalResultat() : <br/>Données introuvables dans la base');}return $total;}//-------------------FONCTIONS POUR LE FORMATAGE EN JSON----------------------------------------------------------------/*** Permet de récupérer le résultat à retourner propre à chaque requete et de l'encoder en json* @param array $resultat* @param array $ressources* @return le résultat encoder en json*/public function retournerResultatFormate($resultat) {switch ($this->format_reponse) {case 'noms/id' : $reponse = $this->formaterId($resultat); break; //ds CommunNomsTaxonscase 'noms/id/champ' : $reponse = $this->formaterIdChamp($resultat); break; //ds CommunNomsTaxonscase 'noms/id/relations' : $reponse = $this->formaterIdRelations($resultat); break;case 'noms/id/relations/synonymie' : $reponse = $this->formaterIdSynonymie($resultat); break;case 'noms/id/relations/homonymie' : $reponse = $this->formaterIdHomonymie($resultat); break;case 'noms/id/relations/flores' : $reponse = $this->formaterIdFlores($resultat); break; //ds CommunsNomsTaxonscase 'noms/stats/annees' : $reponse = $this->formaterStatsAnnee($resultat); break; //ds CommunNomsTaxonscase 'noms/stats/rangs' : $reponse = $this->formaterStatsRang($resultat); break; //ds CommunNomsTaxonscase 'noms/stats/initiales' : $reponse = $this->formaterStatsInitiales($resultat); break; //ds CommunNomsTaxonscase 'noms' : $reponse = $this->formaterNoms($resultat); break;default : break;}return json_encode($reponse);}//----------------------concerne les resultats pour des requetes de type noms/id----------------------------------------/*** Formate et retourne toutes les relations correpondant au nom recherché : les flores, les synonyme et les homonymes* @param array $resultat*/public function formaterIdRelations($resultat) {$this->recupererTableSignification('correspondance_champs,champs_api,champs_comp');$res = array();foreach ($resultat as $version => $res_version) {$res_version = $res_version[0];$this->resultat_req = $res_version;$retour_id_rel = array ('entete' => array()); //on initialise pr que l'entete apparaisse en premier lors de l'affichage//on recupère le resultat de chaque relation (appel du WS correspondant)$flores = $this->ajouterRelations('flores', $version);if (isset($flores)) $retour_id_rel['resultat']['flores'] = $flores;$homonymes = $this->ajouterRelations('homonymie', $version);if (isset($homonymes)) $retour_id_rel['resultat']['homonymes'] = $homonymes;$synonymes = $this->ajouterRelations('synonymie', $version);if (isset($synonymes)) $retour_id_rel['resultat']['synonyme'] = $synonymes;//on renvoit un tableau null si il n'existe aucune relations (on efface l'entete en premier lieu)if (!isset($retour_id_rel['resultat'])) {$retour_id_rel = null;//on rajoute l'entete si des relations existent} else {$this->afficherDonnees('num_nom', $this->table_ressources[0]);$retour_id_rel['entete'] = $this->table_retour;$this->table_retour = array();}//recuperation du resultat de chaque version$res = $this->afficherVersionOuPas($version, $retour_id_rel, $res);}return $res;}/*** Recupere les relations (type de la relation passée en paramètres :[type_relation] = synonymie, homonymie ou* flores) par l'appel du web service [version]/noms/#id/relations/[type_relation]* @param String $relation* @param String $version (numéro de la version)*/public function ajouterRelations($relation, $version) {$version = str_replace(Config::get('bdd_table').'_v', '', $version);$res = null;$parametres_url = '';if ($this->table_param != array()) $parametres_url = '?'.http_build_query($this->table_param, '', '&');$url = Config::get('url_service').'/'.$version.'/'.$this->service.'/'.$this->table_ressources[0].'/relations/'.$relation.$parametres_url;$relation = $this->rest_client->consulter($url);$entete = $this->rest_client->getReponseEntetes();//Si le service meta-donnees fonctionne correctement, l'entete comprend la clé wrapper_dataif (isset($entete['wrapper_data'])) {$relation = json_decode($relation);if (isset($relation->resultat)) {$res = $relation->resultat;}} else {$this->renvoyerErreur(RestServeur::HTTP_CODE_RESSOURCE_INTROUVABLE,'Le service '.$this->service.' de ce projet comporte des erreurs. url lancée : '.$url);}return $res;}/*** Formate et retourne toutes les synonymes correpondants au nom recherché* @param array $resultat*/public function formaterIdSynonymie($resultat) {$this->recupererTableSignification('correspondance_champs,champs_api,champs_comp');$res = array();foreach ($resultat as $version => $res_version) {$retour_id_syn = array();if ($res_version[0]['num_nom_retenu'] == '') {$retour_id_syn[] = 'nom_retenu N.D.';} elseif (count($res_version) != 1) {//on remplit d'abord l'entete du resultat$this->table_retour['id'] = $this->table_ressources[0];$this->afficherEnteteRangBorneTotalUrls($res_version, '/'.$this->service.'/'.$this->table_ressources[0].'/relations/synonymie');$retour_id_syn['entete'] = $this->table_retour;$this->table_retour = array();//on remplit ensuite les resultatsforeach ($res_version as $tab) {//pour chaque basionyme, on recupère le résultat : num_nom, nom_sci, basionyme et num_nom_retenu :$this->resultat_req = $tab;foreach ($tab as $key => $val) {if ($val != '') {switch ($key) {case 'num_nom_retenu' : $retenu = ($val == $num) ? 'true' : 'false';$this->table_retour['retenu'] = $retenu; break;case 'basionyme' : $this->afficherDonnees($key, $val); break;case 'num_nom' : $num = $val;$this->afficherDonnees($key, $val);unset($this->table_retour['id']); break;default : break;}}}$retour_id_syn['resultat'][$num] = $this->table_retour;$this->table_retour = array();}}if (!isset($retour_id_syn['resultat']) && !in_array('nom_retenu N.D.', $retour_id_syn)) {$retour_id_syn = null; //on initialise le resultat à null}$res = $this->afficherVersionOuPas($version, $retour_id_syn, $res);}return $res;}/*** Formate et retourne toutes les homonymes correpondants au nom recherché* @param array $resultat*/public function formaterIdHomonymie($resultat) {$this->recupererTableSignification('correspondance_champs,champs_api,champs_comp');$res = array();foreach ($resultat as $version => $res_version) {if (count($res_version) != 1) {$this->table_retour['id'] = $this->table_ressources[0];$this->afficherEnteteRangBorneTotalUrls($res_version, '/'.$this->service.'/'.$this->table_ressources[0].'/relations/homonymie');$retour_id_hom['entete'] = $this->table_retour;$this->table_retour = array();foreach ($res_version as $homonyme) {$this->resultat_req = $homonyme;$id = $homonyme['num_nom'];$this->afficherDonnees('num_nom', $id);if ($homonyme['num_nom_retenu'] != '') {$retenu = ($id == $homonyme['num_nom_retenu']) ? 'true' : 'false';$this->table_retour['retenu'] = $retenu;}$retour_id_hom['resultat'][$id] = $this->table_retour;unset($retour_id_hom['resultat'][$id]['id']);$this->table_retour = array();}} else {$retour_id_hom = null;}$res = $this->afficherVersionOuPas($version, $retour_id_hom, $res);}return $res;}public function formaterIdFlores($resultat) {$this->recupererTableSignification('correspondance_champs,champs_api,champs_comp,noms_projets');$res = array();foreach ($resultat as $version => $res_version) {$res_version = $res_version[0];$this->resultat_req = $res_version;$id = array_shift($res_version);//-----formatage de l'entete du résultat$reponse['entete']['id'] = $id;//-----formatage du résultat$total = 0;foreach ($res_version as $flores => $valeur) {if ($valeur != '' && $valeur != '0') {$this->afficherInfosFlore($res_version, $flores, $valeur);$total++;}}$reponse['entete']['total'] = $total;if ($this->table_retour != array()) {$reponse['resultat'] = $this->table_retour;$this->table_retour = array();} else {$reponse = null;}//Si les infos de plrs versions sont renvoyés, on ajoute au tableau de resultat le numéro de la version$res = $this->afficherVersionOuPas($version, $reponse, $res);}return $res;}public function afficherInfosFlore(&$resultat, $flores, $valeur) {$flore = substr($flores,0,strrpos($flores, '_'));if (strrpos($flores, 'num') !== false) {$projet = $this->noms_projets[$flore];if (preg_match('/^([0-9]+)(?:[.]syn[^a-z]*|(.*))?$/', $valeur, $match)) {$this->table_retour[$flore]['id'] = $match[1];$this->table_retour[$flore]['href'] = $this->ajouterHrefAutreProjet('noms', $match[1], $projet);if (isset($match[2]) && $match[2] != '') $this->table_retour[$flore]['cle'] = $match[2];}if (isset($resultat[$flore.'_rem']) && !empty($resultat[$flore.'_rem'])) {$this->table_retour[$flore]['remarque'] = $resultat[$flore.'_rem'];unset($resultat[$flore.'_rem']);}} elseif (strrpos($flores,'belge') !== false) {$projet = $this->noms_projets[$flore];if (preg_match('/^([0-9]+) (R|S)?$/', $valeur, $match)) {if (isset($match[2])) $type = ($match[2] == 'R') ? 'taxons' : 'synonyme';$this->table_retour[$flore]['page'] = $match[1];$this->table_retour[$flore]['type'] = $type;//$this->table_retour[$flore]['href'] = $this->ajouterHrefAutreProjet('noms', $match[1], $projet);}}}//----------------------concerne les resultats pour des requetes de type /noms avec ou sans paramètres------------------/**** Est utilisée pour les requetes de type /noms avec ou sans parametres. Détermine le format json ou oss.* @param retourne le résultat sous forme de tableau, à encoder en json.*/public function formaterNoms($resultat) {if ($this->retour_format == 'oss') {$reponse = $this->formaterEnOss($resultat); //Ds CommunNomsTaxons.php} else {$reponse = $this->formaterEnJsonMax($resultat);}return $reponse;}/**** Permet de créer un tableau ($table_retour_json) au format defaut puis de l'encoder en json (json_encode).* Le format comprend deux parties, une partie entete (contenu dans le tableau $entete_json) et une partie* resultat (contenu dans le tableau $resultat_json).* @param string $resultat : résultat de la requete (liste des noms et leur identifiant)* @return une chaine encodé json (format par default)*/public function formaterEnJsonMax($resultat) {$this->recupererTableSignification('correspondance_champs,champs_api,champs_comp');$res = array();foreach ($resultat as $version => $res_version) {//on remplit la table $table_retour_json['entete']$masque = $this->ordonnerMasque();if ($masque != '') $this->table_retour['masque'] = $masque;$this->afficherEnteteRangBorneTotalUrls($res_version, '/'.$this->service);$table_retour_json['entete'] = $this->table_retour;$this->table_retour = array();//on remplit la table $table_retour_json['resultat']foreach ($res_version as $tab) {$this->resultat_req = $tab;foreach ($tab as $key => $val) {if ($val != '') {switch ($key) {case 'num_nom' : $num = $val;$this->afficherDonnees($key, $val); break;case 'nom_sci' : if ($this->retour_format == 'min') {// sinon est affiché ds afficherDonnees(num_nom, $val) ci-dessus$this->table_retour[$key] = $val.$this->ajouterCompositionNom($tab);} break;case 'num_nom_retenu' :$retenu = ($val == $num) ? 'true' : 'false';$this->table_retour['retenu'] = $retenu; break;default : break;}unset($this->table_retour['id']);}}$resultat_json[$num] = $this->table_retour;$this->table_retour = array();}$table_retour_json['resultat'] = $resultat_json;$res = $this->afficherVersionOuPas($version, $table_retour_json, $res);}return $res;}}?>