106,9 → 106,14 |
$this->requete_condition []= " annee <= ".$this->getBdd()->proteger($val); |
break; |
} |
|
} |
} |
|
|
|
|
|
public function verifierParamChamps($param, $val) { |
$this->recupererTableSignification('correspondance_champs,champs_api,champs_comp'); |
$champs_demandes = explode(',', $val); |
256,6 → 261,8 |
$this->requete_group_by = ' GROUP BY rang, left(nom_sci, 2)'; |
} |
|
|
|
//-----------------------------FONCTIONS DASSEMBLAGE DE LA REQUETE----------------------------------------------------- |
|
public function assemblerLaRequete() { |
262,75 → 269,15 |
if ( strrpos($this->format_reponse, 'noms/stats/') === false ) { |
$this->mettreAuFormat(); //Ds CommunNomsTaxons.php |
} |
$requete = 'SELECT '.$this->retournerChamps().' '. |
"FROM {$this->table} ". |
$this->retournerRequeteCondition().' '. |
$this->requete_group_by.' '. |
$this->retournerOrderBy().' '. |
$this->formerRequeteLimite(); |
$requete = ' SELECT '.$this->distinct.' '.$this->requete_champ. |
' FROM '.$this->table |
.$this->retournerRequeteCondition() |
.$this->requete_group_by |
.$this->formerRequeteLimite(); |
return $requete; |
} |
|
public function retournerChamps() { |
$sql = ''; |
if ($this->distinct) { |
$sql .= $this->distinct.' '; |
} |
if ($this->requete_champ) { |
$sql .= $this->requete_champ.' '; |
} |
|
// Champs "virtuels" pour tier sur l'ensemble des résultats |
if (isset($this->parametres['retour.tri'])) { |
list($champ, $ordre) = $this->decouperParametreRetourTri(); |
if ($champ == 'retenu') { |
$sql .= ", IF(num_nom = num_nom_retenu, '0', '1') AS nom_retenu_tri "; |
} |
} |
|
return $sql; |
} |
|
public function decouperParametreRetourTri() { |
$tri = array('', ''); |
if (isset($this->parametres['retour.tri'])) { |
if (preg_match('/^(retenu)(?:,(ASC|DESC)|)$/', $this->parametres['retour.tri'], $match)) |
$tri[0] = $match[1]; |
$tri[1] = isset($match[2]) ? $match[2] : ''; |
} |
return $tri; |
} |
|
public function retournerRequeteCondition() { |
$condition = ''; |
if ($this->requete_condition) { |
$condition = ' WHERE '.implode(' AND ', $this->requete_condition); |
} |
return $condition; |
} |
|
public function retournerOrderBy() { |
$orderBy = array(); |
|
// Tri sur l'ensemble des résultats |
if (isset($this->parametres['retour.tri'])) { |
list($champ, $ordre) = $this->decouperParametreRetourTri(); |
if ($champ == 'retenu') { |
$orderBy[] = "nom_retenu_tri $ordre"; |
} |
} |
// Tri par défaut |
if ($this->format_reponse == 'noms') { |
$orderBy[] = 'nom_sci ASC'; |
} |
|
$sql = ''; |
if (count($orderBy > 0)) { |
$sql = 'ORDER BY '.implode(', ', $orderBy).' '; |
} |
return $sql; |
} |
|
public function formerRequeteLimite() { |
if ($this->format_reponse != 'noms' && $this->format_reponse != 'noms/id/relations/synonymie' |
&& $this->format_reponse != 'noms/id/relations/homonymie') { |
345,6 → 292,15 |
return $this->requete_limite; |
} |
|
public function retournerRequeteCondition() { |
$condition = ''; |
if ($this->requete_condition) { |
$condition = ' WHERE '.implode(' AND ', $this->requete_condition); |
} |
return $condition; |
} |
|
|
/** Recupere le nombre total de résultat d'une requete lancée. */ |
public function recupererTotalResultat() { |
$total = null; |
445,9 → 401,9 |
$res = null; |
$parametres_url = ''; |
if ($this->parametres != array()) $parametres_url = '?'.http_build_query($this->parametres, '', '&'); |
$url = Config::get('url_service').'/'.$this->service.'/'. |
$this->ressources[0].'/relations/'. |
$relation.$parametres_url; |
$url = Config::get('url_service').'/'.$this->service.'/' |
.$this->ressources[0].'/relations/' |
.$relation.$parametres_url; Debug::printr($url); |
|
$relation = $this->consulterHref($url); |
|
608,14 → 564,10 |
|
public function formaterEnJsonMax($resultat) { |
$this->recupererTableSignification('correspondance_champs,champs_api,champs_comp'); |
|
// TODO : améliorer le trie des résultats |
// ATTENTION : ce comportement est étrange |
$masque = $this->recupererMasquePrincipal(); |
if (isset($masque)) { |
$resultat = $this->trierRechercheFloue($this->parametres[$masque[0]], $resultat, $masque[1]); |
} |
|
$table_retour_json['entete'] = $this->remplirJsonEntete(); |
$table_retour_json['resultat'] = $this->remplirJsonResultat($resultat); |
return $table_retour_json; |
626,8 → 578,8 |
if (array_key_exists('retour.champs', $this->parametres)) { |
$champs = explode(',', $this->parametres['retour.champs']); |
} |
|
$noms = array(); |
$nomsRetenus = array(); |
foreach ($resultat as $tab) { |
$this->table_retour = array(); |
$num = $tab['num_nom']; |
640,10 → 592,23 |
$this->ajouterChampsPersonnalises($champs, $reponse_id); |
$retour = array_merge($retour, $this->table_retour); |
} |
// Sépare les noms retenus des autres noms |
if (isset($retour['retenu']) && $retour['retenu'] == 'true') { |
$nomsRetenus[$num] = $retour; |
} else { |
$noms[$num] = $retour; |
} |
} |
// Trie par ordre alphabétique de nom_sci |
$nomsRetenus = Tableau::trierMD($nomsRetenus, array('nom_sci' => SORT_ASC)); |
$noms = Tableau::trierMD($noms, array('nom_sci' => SORT_ASC)); |
|
return $noms; |
// Rassemble la liste des noms avec les noms retenus en premier |
$nomsRetour = array(); |
Tableau::etendre($nomsRetour, $nomsRetenus); |
Tableau::etendre($nomsRetour, $noms); |
|
return $nomsRetour; |
} |
|
public function remplirJsonEntete() { |