New file |
0,0 → 1,154 |
<?php |
/** |
* Description : |
* Retourne la liste des taxons répertoriés par le projet chorodep |
* |
* @package chorodep |
* @author Tela Botanica <equipe-dev@tela-botanica.org> |
* @license GPL v3 <http://www.gnu.org/licenses/gpl.txt> |
* @license CECILL v2 <http://www.cecill.info/licences/Licence_CeCILL_V2-en.txt> |
* @version 1.0 |
* @copyright 1999-2014 Tela Botanica (accueil@tela-botanica.org) |
*/ |
|
class Noms extends Commun { |
|
protected $serviceNom = 'noms'; |
protected $table; |
protected $masque; |
protected $depart; |
protected $limite; |
protected $tri; |
protected $tri_dir; |
|
public function __construct($config = null) { |
parent::__construct($config); |
$this->masque = array(); |
$this->depart = 0; |
$this->limite = 20; |
$this->tri = 'nom_sci'; |
$this->tri_dir = 'ASC'; |
$this->init(); |
} |
|
protected function init() { |
$this->traiterVersionProjet(); |
$this->table = $this->table_version[0]; |
} |
|
/** |
* Récupère les paramètres de navigation |
* @param type $parametres |
*/ |
protected function setDepartLimite($parametres) { |
if(isset($parametres['navigation.depart']) && $parametres['navigation.depart'] != '') { |
$this->depart = max(0, intval($parametres['navigation.depart'])); |
} |
if(isset($parametres['navigation.limite']) && $parametres['navigation.limite'] != '') { |
$this->limite = max(0, intval($parametres['navigation.limite'])); |
} |
} |
|
/** |
* Récupère les paramètres de filtrage |
* @param type $parametres |
*/ |
protected function setMasque($parametres) { |
if(isset($parametres['masque.nom']) && $parametres['masque.nom'] != '') { |
$this->masque['nom'] = $parametres['masque.nom']; |
} |
if(isset($parametres['masque.zone-geo']) && $parametres['masque.zone-geo'] != '') { |
$this->masque['zone-geo'] = $parametres['masque.zone-geo']; |
} |
} |
|
/** |
* Récupère les paramètres de tri |
* @param type $parametres |
*/ |
protected function setTri($parametres) { |
if(isset($parametres['retour.tri']) && $parametres['retour.tri'] != '') { |
$this->tri = $parametres['retour.tri']; |
} |
if(isset($parametres['retour.ordre']) && in_array($parametres['retour.ordre'], array('ASC', 'DESC'))) { |
$this->tri_dir = $parametres['retour.ordre']; |
} |
} |
|
public function consulter($ressources, $parametres) { |
$donnees = array(); |
|
$this->setDepartLimite($parametres); |
$this->setMasque($parametres); |
$this->setTri($parametres); |
$noms = $this->listeNoms(); |
$total = $this->compterNoms(); |
|
$url_base = Config::get('url_service'); |
|
$masqueEnParams = array(); |
foreach ($this->masque as $k => $v) { |
$masqueEnParams[] = 'masque.' . $k . '=' . $v; |
} |
$masqueEnParams = implode('&', $masqueEnParams); |
|
$donnees['entete'] = array( |
'masque' => $masqueEnParams, |
'total' => $total, |
'depart' => $this->depart, |
'limite' => $this->limite |
); |
if ($this->depart > 0) { |
$donnees['entete']['href.precedent'] = $url_base . '/' . $this->serviceNom . '?' |
. 'navigation.depart=' . max(0, ($this->depart - $this->limite)) . '&navigation.limite=' . $this->limite |
. '&retour.tri=' . $this->tri . '&retour.ordre=' . $this->tri_dir |
. '&' . $masqueEnParams; |
} |
if (($this->depart + $this->limite) < $total ) { |
$donnees['entete']['href.suivant'] = $url_base . '/' . $this->serviceNom . '?' |
. 'navigation.depart=' . ($this->depart + $this->limite) . '&navigation.limite=' . $this->limite |
. '&retour.tri=' . $this->tri . '&retour.ordre=' . $this->tri_dir |
. '&' . $masqueEnParams; |
} |
$donnees['resultat'] = $noms; |
|
return $donnees; |
} |
|
protected function listeNoms() { |
$req = "SELECT DISTINCT num_nom, nom_sci FROM " . $this->table; |
$req .= $this->construireWhere(); |
$req .= " ORDER BY ".$this->tri." ".$this->tri_dir." "; |
$req .= " LIMIT " . $this->depart . ", " . $this->limite; |
|
$resultat = $this->getBdd()->recupererTous($req); |
|
return $resultat; |
} |
|
protected function compterNoms() { |
$req = "SELECT count(DISTINCT num_nom, nom_sci) AS compte FROM " . $this->table; |
$req .= $this->construireWhere(); |
$resultat = $this->getBdd()->recuperer($req); |
|
return $resultat['compte']; |
} |
|
protected function construireWhere() { |
$where = ""; |
$conditions = array(); |
if(!empty($this->masque)) { |
if(isset($this->masque['nom'])) { |
$masqueNom = $this->getBdd()->proteger($this->masque['nom']); |
$conditions[] = "nom_sci LIKE $masqueNom"; |
} |
if(isset($this->masque['zone-geo'])) { |
$masqueZg = $this->getBdd()->proteger($this->masque['zone-geo']); |
//$conditions[] = "code_insee = $masqueZg"; |
} |
$where = " WHERE ".implode(' AND ', $conditions); |
} |
return $where; |
} |
} |
?> |