* @license GPL v3 * @license CECILL v2 * @version 1.0 * @copyright 1999-${year} Tela Botanica (accueil@tela-botanica.org) */ class Taxons extends CommunNomsTaxons { /** * Valeur du paramètre de requete recherche stricte, etendue, floue */ protected $recherche = false; /** Permet de stocker la requete formulée : * - taxons | taxons/#id | taxons/#id/#champ+#champ * - taxons/#id/relations | taxons/#id/relations/synonymie | taxons/#id/relations/homonymie * | taxons/#id/relations/flores | taxons/#id/relations/superieurs | taxons/#id/relations/inferieurs * - taxons/stats/rangs | taxons/stats/annees | taxons/stats/initiales */ protected $format_reponse = 'taxons'; /** 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, num_tax '; /** Représente la partie de la requete SQL ajoutant une condition (WHERE ...)*/ protected $requete_condition = 'num_nom = num_nom_retenu '; /** 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); /** Stocke le num_nom du nom retenu du num_nom recherché */ protected $num_nom_taxon; protected $service = 'taxons'; protected $presence_num_tax = true; public function consulter($ressources, $parametres) { $resultat_formate = ''; $this->initialiserRestClient(); //création d'un objet RestClient $this->traiterParametres($parametres); $this->traiterVersionProjet($ressources) ; if ($this->corps_http == '' && $this->entete_http == '') { foreach ($this->table_version as $version) { $this->table = $version; //on stocke ici la table correspondant à la version du projet analysée $this->recupererNomChamp($this->table); $this->gererNumTax(); $this->traiterRessources($ressources); if ($this->corps_http == '' && $this->entete_http == '') { $requete = $this->assemblerLaRequete(); $resultat = $this->getBdd()->recupererTous($requete); if ($resultat == '') { //cas ou la requete comporte des erreurs $this->renvoyerErreur(RestServeur::HTTP_CODE_RESSOURCE_INTROUVABLE, 'Fct consulter() : La requete formée comporte une erreur !!'); } elseif ($resultat) { $res_version[$version] = $resultat; } else { //cas ou la requete renvoi un tableau vide $this->renvoyerErreur(RestServeur::HTTP_CODE_RESSOURCE_INTROUVABLE, 'Données introuvables dans la base '.$version.'
L\'identifiant demande n\'est pas un taxon et aucun taxon ne lui a ete attribue'); } } } } if ($this->corps_http == '' && $this->entete_http == '') { $resultat_formate = $this->retournerResultatFormate($res_version); } $this->formerReponseHTTP($resultat_formate); } /** * * Permet d'analyser les paramètres * @param array $parametres */ public function traiterParametres($parametres) { $this->table_param = $parametres; if (isset($parametres) && ($parametres)) { 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); $this->requete_champ .= ' ,'.implode(', ',$this->compo_nom); break; case 'masque' : $this->ajouterFiltreMasque($val); break; case 'masque_nt' : $this->ajouterFiltreMasqueNt($val); break; case 'masque_rg' : $this->requete_condition .= ' AND rang = '.$this->getBdd()->proteger($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 'recherche' : break; default : $this->renvoyerErreur(RestServeur::HTTP_CODE_MAUVAISE_REQUETE, 'Erreur dans les parametres de recherche de votre requete :
Le parametre " '.$param.' " n\'existe pas.'); break; } } } } public function ajouterFiltreMasque($val) { if ($this->recherche == 'etendue') { $val = str_replace(' ','%', $val); $val .= '%'; $this->requete_condition .= ' AND nom_sci LIKE '.$this->getBdd()->proteger($val); } elseif ($this->recherche == 'floue') { $this->requete_condition .= ' AND (SOUNDEX(nom_sci) = SOUNDEX(\''.$val.'\')' .' OR SOUNDEX(REVERSE(nom_sci)) = SOUNDEX(REVERSE(\'' .$val.'\'))) '; } else { $this->requete_condition .= ' AND nom_sci LIKE '.$this->getBdd()->proteger($val); } } public function ajouterFiltreMasqueNt($val) { if (strrpos($val, ',') !== false) { $ids_taxon = explode(",", $val); } else { $ids_taxon[] = $val; } foreach ($ids_taxon as $id) { $this->requete_condition .= ' OR num_tax = '.$this->getBdd()->proteger($id); } $this->requete_condition = str_replace('num_nom = num_nom_retenu OR ', 'num_nom = num_nom_retenu AND (' , $this->requete_condition).')'; } /** * Permet d'ajouter à la requete_champ les parametres demandés qui composeront le nom_sci. * Permet de remplir le tableau compo_nom qui regroupe les parametres demandés qui composeront le nom_sci. * (parametres à ajouter aux nom_sci sous la forme : Auteur [annee, biblio] [addendum]) * @param la valeur du parametre nl.structure */ public function recupererParametreNom($valeur) { $structure_nom = explode(",",$valeur); foreach ($structure_nom as $structure) { switch ($structure) { case 'au' : $this->compo_nom['au'] = 'auteur'; break; case 'an' : $this->compo_nom['an'] = 'annee'; break; case 'bib' : $this->compo_nom['bib'] = 'biblio_origine'; break; case 'ad' : $this->compo_nom['ad'] = 'nom_addendum'; break; default : $this->renvoyerErreur( RestServeur::HTTP_CODE_MAUVAISE_REQUETE, 'Erreur : Le parametre "'.$structure.'" n\'existe pas.

Les parametres du nom possibles sont :
  • au (auteur)
  • an (annee)
  • bib (bibliographie)
  • ad (nom_addendum)
  • '); break; } } if (isset($this->compo_nom)) { $this->requete_champ .= ' ,'.implode(', ',$this->compo_nom); } } //------------------------------------------Fonction ressources--------------------------------------------------------------------- public function gererNumTax() { if (!in_array('num_tax', $this->champs_table)) { $this->presence_num_tax = false; $this->requete_champ = str_replace(', num_tax ', '', $this->requete_champ); } else { $this->presence_num_tax = true; } } public function traiterRessourcesIdentifiant() { $this->format_reponse = 'taxons/id'; $this->num_nom_taxon = $this->recupererNumNomTaxon(); //on recupere le taxon correspondant au num_nom recherché if ($this->entete_http == '') { $this->requete_condition = ' num_nom = '.$this->num_nom_taxon; if (isset($this->table_ressources[1]) && !empty($this->table_ressources[1])) { //---------------- requete de type taxons/#id/#champ+#champ-------------------------------------- if ($this->table_ressources[1] != 'relations') { // SELECT *, nom_sci FROM bftfx_v2_00 WHERE num_nom = X; $this->requete_champ = ' *, nom_sci '; $this->format_reponse .= '/champ'; //---------------- requete de type taxons/#id/relations/#relation-------------------------------- } elseif ($this->table_ressources[1] == 'relations') { $this->traiterRessourceIdRelations(); } else { $this->renvoyerErreur(RestServeur::HTTP_CODE_MAUVAISE_REQUETE, 'Erreur dans votre requete
    Ressources disponibles :
  • #id/relations
  • #id/#champ+#champ
  • #id/relations
  • #id/relations/inferieurs
  • #id/relations/superieurs
  • '); } } else { //--------------- requete de type taxons/#id----------------------------------------------------- $this->requete_champ = ' *, nom_sci '; } } } /** * Permet de récupérer le num_nom du taxon recherché. Soit le numéro taxonomique est demandé (avec nt: ) * soit un num_nom dont on recherche le num_nom_retenu */ public function recupererNumNomTaxon() { $identifiant = ''; if (strrpos($this->table_ressources[0], 'nt:') !== false) { if ($this->presence_num_tax) { // SELECT num_nom FROM bdtfx_v2_00 WHERE num_nom = num_nom_retenu AND num_tax = X; $this->requete_condition = ' num_nom = num_nom_retenu AND num_tax = ' .str_replace('nt:', '', $this->table_ressources[0]).' '; } else { $this->renvoyerErreur(RestServeur::HTTP_CODE_MAUVAISE_REQUETE, 'Erreur dans votre requete :
    Le numero taxonomique n\'existe pas dans ce projet' ); } } else { // SELECT num_nom FROM bdtfx_v2_00 WHERE num_nom = (SELECT num_nom_retenu FROM bdtfx_v2_00 WHERE num_nom = X); $this->requete_condition = ' num_nom = (SELECT num_nom_retenu FROM ' .$this->table.' WHERE num_nom = '.$this->table_ressources[0].')'; } if ($this->entete_http == '') { //on récupere l'identifiant du taxon correspondant au num_nom ou num_tax demandé pour pouvoir l'afficher $res = ''; $req_tax = 'SELECT num_nom FROM '.$this->table.' WHERE '.$this->requete_condition; $res_tax = $this->getBdd()->recuperer($req_tax); //on recherche ensuite les identifiants des taxons supérieurs ou inférieurs if ($res_tax == '') { $this->renvoyerErreur(RestServeur::HTTP_CODE_RESSOURCE_INTROUVABLE, 'Le numéro de taxon ou l\'identifiant de nom correspondant au num_nom ' .$this->table_ressources[0].' n\'existe pas dans la table '.$this->table); } elseif ($res_tax) { $identifiant = $res_tax['num_nom']; } else { $this->renvoyerErreur(RestServeur::HTTP_CODE_RESSOURCE_INTROUVABLE, 'Le numéro de taxon ou l\'identifiant de nom correspondant au num_nom ' .$this->table_ressources[0].' n\'existe pas dans la table '.$this->table); } } return $identifiant; } public function traiterRessourceIdRelations() { //----------------- requete de type taxons/#id/relations------------------------------------------- // SELECT *, nom_sci FROM bftfx_v2_00 WHERE num_nom = X; $this->format_reponse .= '/relations'; if (isset($this->table_ressources[2])) { //------------- requete de type taxons/#id/relations/#relation-------------------------------- switch ($this->table_ressources[2]) { case 'superieurs' : $rel = 'recupererIdSup'; $this->format_reponse .= '/superieurs'; $this->traiterRessourceIdRelationInfSup($rel); break; case 'inferieurs' : $rel = 'recupererIdInf'; $this->format_reponse .= '/inferieurs'; $this->traiterRessourceIdRelationInfSup($rel); break; default : $this->renvoyerErreur(RestServeur::HTTP_CODE_MAUVAISE_REQUETE, 'Erreur dans votre requête
    Ressources disponibles :
  • taxons/#id/relations
  • taxons/#id/relations/flores
  • taxons/#id/relations/homonymie
  • #id/relations/inferieurs
  • #id/relations/superieurs
  • '); break; } } } public function traiterRessourceIdRelationInfSup($rel) { //Appel de la fct récupérerIdSup ou recupererIdInf : retourne les num_nom des noms inferieurs ou superieurs $res_relation = $this->$rel(); //analyse du résultat retourné par la requete de recherche des identifiants correspondant aux taxons inf|sup : if ($res_relation == '') { //dans le cas ou la requete comporte des erreurs $this->renvoyerErreur(RestServeur::HTTP_CODE_RESSOURCE_INTROUVABLE, 'Fct traiterRessourceIdHomonymie : La requete forme comporte une erreur !!'); } elseif ($res_relation) { //dans le cas ou une ou plusieurs relations est retournée, on récupère les identifiants ss la forme (id, id, id) foreach ($res_relation as $ligne) $res[] = $ligne['num_nom']; $res = implode(',',$res); $this->requete_condition = ' num_nom IN ('.$res.')'; $this->requete_champ .= ', rang, num_tax_sup '; } else { //dans le cas ou aucune relation n'existe $res = array($this->num_nom_taxon => null); $this->corps_http = json_encode($res); $this->entete_http = RestServeur::HTTP_CODE_OK; } } public function recupererIdInf() { //SELECT num_nom FROM bfdtx_v2_00 WHERE num_tax_sup = (SELECT num_nom FROM bdtfx_v2_00 WHERE num_nom = X); $req_relation = 'SELECT num_nom FROM '.$this->table .' WHERE num_tax_sup = (SELECT num_nom FROM ' .$this->table .' WHERE '.$this->requete_condition.')'; $res_relation = $this->getBdd()->recupererTous($req_relation); return $res_relation; } public function recupererIdSup() { //SELECT num_nom FROM bfdtx_v2_00 WHERE num_nom = (SELECT num_tax_sup FROM bdtfx_v2_00 WHERE num_nom = X); $req_relation = 'SELECT num_nom FROM '.$this->table .' WHERE num_nom = (SELECT num_tax_sup FROM ' .$this->table .' WHERE '.$this->requete_condition.')'; $res_relation = $this->getBdd()->recupererTous($req_relation); return $res_relation; } public function traiterRessourceStatsInitiales() { // SELECT count(nom_sci) as nb, rang, left(nom_sci, 2) as lettre FROM bdtfx_v2_00 GROUP BY rang, left(nom_sci, 2); $this->format_reponse = 'taxons/stats/initiales'; $this->requete_champ = 'count(nom_sci) as nb, rang, left(nom_sci, 2) as lettre '; $this->requete_group_by = ' GROUP BY rang, left(nom_sci, 2) '; } public function traiterRessourceStatsRangs() { // SELECT count(*) as nombre, rang FROM bdtfx_v2_00 [WHERE rang = 290] GROUP BY rang ORDER BY rang; $this->format_reponse = 'taxons/stats/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 = 'taxons/stats/annees'; $this->requete_champ = 'count(*) as nombre, annee '; $this->requete_group_by = ' GROUP BY annee ORDER BY annee '; } //-----------------------------FONCTIONS DASSEMBLAGE DE LA REQUETE----------------------------------------------------- public function assemblerLaRequete() { if ($this->format_reponse != 'taxons/stats/initiales') { $this->mettreAuFormat(); //on remplace les nom_sci par les nom_sci_html } if ($this->requete_condition != '') { $this->requete_condition = ltrim($this->requete_condition, ' AND, WHERE'); $this->requete_condition = ' WHERE '.$this->requete_condition; } if ($this->format_reponse != 'taxons' && $this->format_reponse != 'taxons/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é * @return Le nombre total de résultat */ public function recupererTotalResultat() { $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 DE FORMATION DU RESULTAT----------------------------------------------------------- /** * 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 'taxons/id' : $reponse = $this->formaterId($resultat); break; //ds CommunNomsTaxons case 'taxons/id/champ' : $reponse = $this->formaterIdChamp($resultat); break; //ds CommunNomsTaxons case 'taxons/id/relations' : $reponse = $this->formaterIdRelations($resultat); break; case 'taxons/id/relations/superieurs' : $reponse = $this->formaterIdSuperieur($resultat); break; case 'taxons/id/relations/inferieurs' : $reponse = $this->formaterIdInferieur($resultat); break; case 'taxons/stats/annees' : $reponse = $this->formaterStatsAnnee($resultat); break; //ds CommunNomsTaxons case 'taxons/stats/rangs' : $reponse = $this->formaterStatsRang($resultat); break; //ds CommunNomsTaxons case 'taxons/stats/initiales' : $reponse = $this->formaterStatsInitiales($resultat); break; //ds CommunNomsTaxons case 'taxons' : $reponse = $this->formatertaxons($resultat); break; default : break; } return json_encode($reponse); } //----------------------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 formaterTaxons($resultat) { if ($this->retour_format == 'oss') { $reponse = $this->formaterEnOss($resultat); } 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'] if (isset($this->table_param['masque'])) $this->afficherDonnees('masque', $this->table_param['masque']); if (isset($this->table_param['masque_nt'])) $this->afficherDonnees('masque.nt', $this->table_param['masque_nt']); $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'] $tab_tax_inf = $this->recupererListeTaxonInf($res_version); foreach ($res_version as $tab) { $this->resultat_req = $tab; if (isset($this->table_param['masque_nt'])) $this->afficherDonnees('num_tax', $tab['num_tax']); foreach ($tab as $key => $val) { if ($val != '') { switch ($key) { case 'num_nom' : $num = $val; $this->afficherDonnees($key, $val); break; case 'num_nom_retenu' : $retenu = ($val == $num) ? 'true' : 'false'; $this->table_retour['retenu'] = $retenu; break; default : break; } } } $this->afficherTaxonInfNb($num, $tab_tax_inf); unset($this->table_retour['id']); $resultat_json[$num] = $this->table_retour; $this->table_retour = array(); //on vide le tableau table_retour } $table_retour_json['resultat'] = $resultat_json; $res = $this->afficherVersionOuPas($version, $table_retour_json, $res); } return $res; } //--------------------concerne les resultats pour des requetes de type noms/id---------------------------------------- public function formaterIdRelations($resultat) { $this->recupererTableSignification('correspondance_champs,champs_api,champs_comp'); $res = array(); foreach ($resultat as $version => $res_version) { $this->resultat_req = $res_version; $retour_id_rel = array ('entete' => array()); //on initialise pr que l'entete apparaisse en premier //on affiche le resultat $superieurs = $this->ajouterRelations('superieurs', $version); if (isset($superieurs)) $retour_id_rel['resultat']['superieurs'] = $superieurs; $inferieurs = $this->ajouterRelations('inferieurs', $version); if (isset($inferieurs)) $retour_id_rel['resultat']['inferieurs'] = $inferieurs; //on renvoit un tableau null si il n'existe aucune relations if (!isset($retour_id_rel['resultat'])) { $retour_id_rel = null; //on rajoute l'entete si des relations existent } else { $this->afficherDonnees('num_nom', $this->num_nom_taxon); //$this->afficherEnteteRangBorneTotalUrls($resultat, '/'.$this->service.'/'.$this->table_ressources[0].'/relations/synonymie'); $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; } public function ajouterRelations($relation, $version) { $version = str_replace(Config::get('bdd_table').'_v', '', $version); $res = null; $taxon = $this->num_nom_taxon; $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; } elseif (isset($relation->$taxon)) { //pour les relations inf et sup $res = $relation->$taxon; } } else { $this->renvoyerErreur(RestServeur::HTTP_CODE_RESSOURCE_INTROUVABLE, 'Le service '.$this->service.' de ce projet comporte des erreurs. url lancée : '.$url); } return $res; } public function formaterIdSuperieur($resultat) { $this->recupererTableSignification('correspondance_champs,champs_api,champs_comp'); $res = array(); foreach ($resultat as $version => $res_version) { //on remplit le tableau de formatage if (($res_version) != '' ) { //on recupere d'abord les rangs supérieurs $sup = $res_version[0]; do { $sup = $this->recupererIdSuperieur($sup['num_tax_sup'], $version); if ($sup['rang'] == '0') $sup['rang'] = '10'; //erreur dans la base if (isset($sup)) $res_version[] = $sup; } while ($sup != null); krsort($res_version); //on les affiche ensuite 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, $num); break; case 'num_nom_retenu' : $retenu = ($val == $num) ? 'true' : 'false'; $this->table_retour['retenu'] = $retenu; break; case 'rang' : $this->afficherDonnees($key, $val); break; default : break; } } } unset($this->table_retour['id']); $tab_inf[$num] = $this->table_retour; $this->table_retour = array(); } $tab_relation[$this->num_nom_taxon] = $tab_inf; } else { //si il n'existe aucune relation $tab_relation = null; } //recuperation du resultat de chaque version $res = $this->afficherVersionOuPas($version, $tab_relation, $res); } return $res; } public function recupererIdSuperieur($id, $version) { $req = 'SELECT num_nom, num_nom_retenu, num_tax_sup, rang FROM ' .$version.' WHERE num_nom = '.$this->getBdd()->proteger($id); $res = $this->getBdd()->recupererTous($req); if ($res) { $resultat = $res[0]; } else { $resultat = null; //on return null si il n'y a pas de taxon superieur } return $resultat; } public function formaterIdInferieur($resultat) { $this->recupererTableSignification('champs_api,champs_comp,correspondance_champs'); $res = array(); foreach ($resultat as $version => $res_version) { //on veut récupérer pour chacun des taxons inférieur le nb de taxons inf : $tab_tax_inf = $this->recupererListeTaxonInf($res_version); //on commence le formatage if (($res_version) != '' ) { 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, $num); break; case 'num_nom_retenu' : $retenu = ($val == $num) ? 'true' : 'false'; $this->table_retour['retenu'] = $retenu; break; default : break; } } } $this->afficherTaxonInfNb($num, $tab_tax_inf); unset($this->table_retour['id']); $tab_inf[$num] = $this->table_retour; $this->table_retour = array(); //on vide le tableau table_retour } $tab_relation[$this->num_nom_taxon] = $tab_inf; } else { $tab_relation = null; } //recuperation du resultat de chaque version $res = $this->afficherVersionOuPas($version, $tab_relation, $res); } return $res; } public function afficherTaxonInfNb($num, $tab_tax_inf) { foreach ($tab_tax_inf as $taxNb) { if ($taxNb['num_tax_sup'] == $num) { $this->table_retour['taxon_inferieur_nbre'] = $taxNb['nb']; } } if (!isset($this->table_retour['taxon_inferieur_nbre'])) { $this->table_retour['taxon_inferieur_nbre'] = '0'; } } public function recupererListeTaxonInf($resultat) { // SELECT num_tax_sup, count(*) as nb FROM bdtfx_v2_00 WHERE num_tax_sup IN (id, id, id) AND num_nom = num_nom_retenu GROUP BY num_tax_sup'; foreach ($resultat as $tab) { $tab_num[] = $tab['num_nom']; //on regroupe ici les id des taxons dont on cherche le nb de taxon inf } $req = 'SELECT num_tax_sup, count(*) as nb FROM '.$this->table .' WHERE num_tax_sup IN ('.implode(',',$tab_num) .') AND num_nom = num_nom_retenu GROUP BY num_tax_sup'; $res = $this->getBdd()->recupererTous($req); if ($res) { $resultat = $res; } else { $resultat = array(); //on return un tableau vide s'il n'y a pas de taxon inférieurs } return $resultat; } } ?>