* @license GPL v3 * @license CECILL v2 * @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 :
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
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+#champ if (($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
Ressources disponibles :
  • noms/#id/relations
  • noms/#id/#champ+#champ
  • noms/#id/relations/synonymie
  • noms/#id/relations/flores
  • noms/#id/relations/homonymie
  • '); } } 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/#relation switch ($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
    Ressources disponibles :
  • noms/#id/relations
  • noms/#id/relations/synonymie
  • noms/#id/relations/flores
  • noms/#id/relations/homonymie
  • '); 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() :
    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 CommunNomsTaxons case 'noms/id/champ' : $reponse = $this->formaterIdChamp($resultat); break; //ds CommunNomsTaxons case '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 CommunsNomsTaxons case 'noms/stats/annees' : $reponse = $this->formaterStatsAnnee($resultat); break; //ds CommunNomsTaxons case 'noms/stats/rangs' : $reponse = $this->formaterStatsRang($resultat); break; //ds CommunNomsTaxons case 'noms/stats/initiales' : $reponse = $this->formaterStatsInitiales($resultat); break; //ds CommunNomsTaxons case '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_data if (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 resultats foreach ($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; } } ?>