Subversion Repositories eFlore/Projets.eflore-projets

Compare Revisions

Ignore whitespace Rev 659 → Rev 660

/trunk/services/modules/0.1/bdtfx/Noms.php
271,22 → 271,83
if ( strrpos($this->format_reponse, 'noms/stats/') === false ) {
$this->mettreAuFormat(); //Ds CommunNomsTaxons.php
}
$requete = ' SELECT '.$this->distinct.' '.$this->requete_champ.
' FROM '.$this->table
.$this->retournerRequeteCondition()
.$this->requete_group_by
.$this->formerRequeteLimite();
$requete = 'SELECT '.$this->retournerChamps().' '.
"FROM {$this->table} ".
$this->retournerRequeteCondition().' '.
$this->requete_group_by.' '.
$this->retournerOrderBy().' '.
$this->formerRequeteLimite();
// Debug::printr($requete);
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') {
&& $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->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'];
294,15 → 355,6
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;
566,10 → 618,14
 
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;
580,8 → 636,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'];
594,23 → 650,10
$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;
}
$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));
 
// Rassemble la liste des noms avec les noms retenus en premier
$nomsRetour = array();
Tableau::etendre($nomsRetour, $nomsRetenus);
Tableau::etendre($nomsRetour, $noms);
 
return $nomsRetour;
return $noms;
}
 
public function remplirJsonEntete() {