44,6 → 44,9 |
'depart' => 0, |
'limite' => 100 |
); |
|
protected $champ_tri = 'code_langue'; |
protected $direction_tri = 'asc'; |
|
/** |
* Precise la contenance plus ou moins précise du tableau à retourner : |
56,7 → 59,7 |
* - etendue : ajout automatique du signe % à la place des espaces et en fin de masque avec utilisation de LIKE. |
* - floue : recherche tolérante vis-à-vis d'approximations ou d'erreurs (fautes d'orthographe par exemple) */ |
protected $recherche; |
|
|
/** Permet de stocker le tableau de résultat (non encodé en json) */ |
protected $table_retour = array(); |
/** Stocke le nombre total de résultats de la requete principale. Est calculée lors de l'assemblage de la requete */ |
73,19 → 76,19 |
foreach ($this->parametres as $param => $valeur) { |
switch ($param) { |
case 'masque' : |
$this->ajouterLeFiltreMasque('nom_vernaculaire', $valeur); |
$this->ajouterFiltreMasque('nom_vernaculaire', $valeur); |
break; |
case 'masque.nt' : |
$this->ajouterLeFiltreMasque('num_taxon', $valeur); |
$this->ajouterFiltreMasque('num_taxon', $valeur); |
break; |
case 'masque.nv' : |
$this->ajouterLeFiltreMasque('nom_vernaculaire', $valeur); |
$this->ajouterFiltreMasque('nom_vernaculaire', $valeur); |
break; |
case 'masque.lg' : |
$this->ajouterLeFiltreMasque('code_langue', $valeur); |
$this->ajouterFiltreMasque('code_langue', $valeur); |
break; |
case 'masque.cce' : |
$this->ajouterLeFiltreMasque('num_statut', $valeur); |
$this->ajouterFiltreMasque('num_statut', $valeur); |
break; |
case 'retour.format' : |
$this->retour_format = $valeur; |
109,7 → 112,7 |
} |
} |
|
public function ajouterLeFiltreMasque($nom_champ, $valeur) { |
public function ajouterFiltreMasque($nom_champ, $valeur) { |
if ($nom_champ == 'num_taxon') { // si il s'agit d'un chiffre |
$this->requete_condition[] = $nom_champ.' = '.$this->getBdd()->proteger($valeur); |
} else { |
331,39 → 334,108 |
if (isset($url['suivant']) && $url['suivant'] != '') { |
$table_retour_json['entete']['href.suivant'] = $url['suivant']; |
} |
|
foreach ($resultat as $tab) { |
|
foreach ($resultat as &$tab) { |
$resultat_json[$tab['num_nom_vernaculaire']]['id'] = $tab['id']; |
$resultat_json[$tab['num_nom_vernaculaire']]['nom_vernaculaire'] = $tab['nom_vernaculaire']; |
$resultat_json[$tab['num_nom_vernaculaire']]['langue.code'] = $tab['code_langue']; |
$resultat_json[$tab['num_nom_vernaculaire']]['code_langue'] = $tab['code_langue']; |
$resultat_json[$tab['num_nom_vernaculaire']]['taxon.code'] = 'bdtfx.nt:'.$tab['num_taxon']; |
if ($this->retour_format == 'max') { |
$resultat_json[$tab['num_nom_vernaculaire']]['taxon'] = $tab['num_taxon']; |
$resultat_json[$tab['num_nom_vernaculaire']]['nom_retenu.code'] = $tab['num_taxon']; |
$this->taxons[] = $tab['num_taxon']; // utiliser pour chercher les noms latins |
$this->taxons[] = $tab['num_taxon']; // utilisé pour chercher les noms latins plus bas |
$resultat_json[$tab['num_nom_vernaculaire']]['href'] = $this->ajouterHref('noms-vernaculaires', $tab['id']); |
$resultat_json[$tab['num_nom_vernaculaire']] = $this->ajouterChampsOntologieLigneResultat($tab); |
} |
} |
|
if ($this->retour_format == 'max') { |
$resultat_json = $this->afficherTaxonsAttributions($resultat_json); |
// On est obligé de faire un deuxième boucle pour demander tous les taxons présents en une |
// fois et les attribuer aux noms car c'est beaucoup plus rapide |
$noms_sci = $this->recupererNomTaxons(); |
foreach ($resultat_json as &$tab) { |
$tab = $this->ajouterTaxonsAttributionsLigneResultat($resultat_json[$tab['num_nom_vernaculaire']], $noms_sci); |
} |
} |
|
uasort($resultat_json, array($this,'trierLigneTableau')); |
$table_retour_json['resultat'] = $resultat_json; |
return $table_retour_json; |
} |
|
public function afficherTaxonsAttributions($resultat) { |
$nom_sci = $this->recupererNomTaxons(); |
foreach ($resultat as $num=>$tab) { |
if (isset($nom_sci[$tab['taxon']])) { |
$resultat[$num]['nom_retenu.code'] = $nom_sci[$tab['taxon']]['id']; |
$resultat[$num]['taxon'] = $nom_sci[$tab['taxon']]['nom_sci']; |
public function ajouterChampsOntologieLigneResultat($ligne_resultat) { |
|
$intitule = ''; |
foreach($this->champ_infos as $cle => $champs_supplementaires) { |
extract($champs_supplementaires); |
$valeur_recherche = ''; |
switch($cle) { |
case 'taxon': |
$valeur_recherche = $ligne_resultat['num_taxon']; |
$intitule = 'taxon.code'; |
break; |
case 'genre': |
$valeur_recherche = $ligne_resultat['num_genre']; |
$intitule = 'genre'; |
break; |
case 'conseil_emploi': |
$valeur_recherche = $ligne_resultat['num_statut']; |
$intitule = 'conseil_emploi'; |
break; |
} |
$code_valeur = ''; |
if(trim($valeur_recherche) != '') { |
$url = $this->ajouterHrefAutreProjet($service, $ressource, $valeur_recherche, $projet); |
$code_valeur = $this->chercherSignificationCode($url, $nom); |
} |
$ligne_resultat[$intitule] = $code_valeur; |
} |
return $resultat; |
return $ligne_resultat; |
} |
|
/** |
* Fonction qui ajoute les attributions à une ligne de résultats |
* |
* @param array $ligne_tableau_resultat |
* @param array $nom_sci |
*/ |
public function ajouterTaxonsAttributionsLigneResultat(&$ligne_tableau_resultat, &$noms_sci) { |
if (isset($nom_sci[$ligne_tableau_resultat['taxon.code']])) { |
$ligne_tableau_resultat['nom_retenu.code'] = $nom_sci[$ligne_tableau_resultat['taxon']]['id']; |
$ligne_tableau_resultat['taxon'] = $nom_sci[$ligne_tableau_resultat['taxon']]['nom_sci']; |
} |
return $ligne_tableau_resultat; |
} |
|
private function trierLigneTableau($a, $b) { |
$retour = 0; |
|
if ($a[$this->champ_tri] == $b[$this->champ_tri]) { |
$retour = 0; |
} |
|
if($this->champ_tri == 'code_langue') { |
if ($a[$this->champ_tri] == 'fra' && $b[$this->champ_tri] != 'fra') { |
$retour = ($this->direction_tri == 'asc') ? -1 : 1; |
} else if ($a[$this->champ_tri] != 'fra' && $b[$this->champ_tri] == 'fra') { |
$retour = ($this->direction_tri == 'asc') ? 1 : -1; |
} else { |
$retour = $this->comparerChaineSelonDirectionTri($a[$this->champ_tri], $b[$this->champ_tri]); |
} |
} else { |
$retour = $this->comparerChaineSelonDirectionTri($a[$this->champ_tri], $b[$this->champ_tri]); |
} |
return $retour; |
} |
|
private function comparerChaineSelonDirectionTri($a, $b) { |
if($this->direction_tri == 'asc') { |
return ($a < $b) ? -1 : 1; |
} else { |
return ($a > $b) ? -1 : 1; |
} |
} |
|
// formatage de la reponse /id ss la forme |
// id, nom_vernaculaire, attributions |
// langue |
540,7 → 612,7 |
list($table, $version) = explode('_v',$this->table); |
$requete = "SELECT b.*, lb.notes FROM nvjfl_lien_biblio_v$version lb, nvjfl_biblio_v$version b ". |
"WHERE b.num_ref = lb.num_ref AND lb.num_nom = '$num_nom' ;"; |
$resultat = $this->getBdd()->recupererTous($requete); //Debug::printr($resultat); |
$resultat = $this->getBdd()->recupererTous($requete); |
|
if ($resultat == '') { //cas ou la requete comporte des erreurs |
$r = 'La requête SQL formée comporte une erreur !!'; |