645,11 → 645,44 |
//$resultat = $this->trierRechercheFloue($this->parametres[$index], $resultat, $masque[1]); |
} |
|
// Tri à la mode du CeL : lexicographique puis noms retenus (retour.tri = "alpharet") |
if (isset($this->parametres['retour.tri']) && ($this->parametres['retour.tri'] == "alpharet")) { |
usort($resultat, array($this, 'genrePuisNomsRetenusEnTete')); |
} |
|
$table_retour_json['entete'] = $this->remplirJsonEntete(); |
$table_retour_json['resultat'] = $this->remplirJsonResultat($resultat); |
return $table_retour_json; |
} |
|
// Trie les éléments du tableau de résultats : le genre en tête, puis les noms retenus, puis le reste |
// mais à partir du jeu de données retourné par SQL (indépendents du statut "retenu") |
private function genrePuisNomsRetenusEnTete($a, $b) { |
// On pourrait utiliser l'indice ['retenu'] mais il contient parfois "absent", qui est dur à traiter |
$aEstRetenu = ($a['num_nom'] == $a['num_nom_retenu']); |
$bEstRetenu = ($b['num_nom'] == $b['num_nom_retenu']); |
$retour = 0; |
|
// les noms retenus en premier ("inférieurs") |
if ($aEstRetenu) { |
if (! $bEstRetenu) { |
$retour = -1; |
} |
} else { |
if ($bEstRetenu) { |
$retour = 1; |
} |
} |
|
// en cas d'égalité on conserve le tri lexicographique - devrait faire sortir le genre en première position |
// car il ne contient pas le nom d'auteur |
if ($retour == 0) { |
$retour = strcasecmp($a['nom_sci'], $b['nom_sci']); |
} |
|
return $retour; |
} |
|
public function remplirJsonResultat($resultat) { |
$champs = null; |
if (array_key_exists('retour.champs', $this->parametres)) { |