Subversion Repositories eFlore/Applications.del

Compare Revisions

Ignore whitespace Rev 799 → Rev 800

/trunk/services/modules/0.1/images/ListeImages.php
25,6 → 25,8
private $bdd;
private $parametres = array();
private $ressources = array();
private $tri = 'date_transmission';
private $directionTri = 'desc';
public function __construct(Conteneur $conteneur = null) {
$this->conteneur = $conteneur == null ? new Conteneur() : $conteneur;
51,6 → 53,9
$this->configurer();
$this->verifierConfiguration();
$this->verifierParametresTri();
$this->initialiserTri();
// Lancement du service
$liaisons = $this->chargerLiaisons();
$total = $this->compterImages();
68,6 → 73,32
$this->ressources = $ressources;
$this->parametres = $parametres;
}
private function verifierParametresTri() {
$erreurs = array();
$tris_possibles = $this->conteneur->getParametre('tris_possibles');
$tris_possibles_tableau = explode(',', $tris_possibles);
if(isset($this->parametres['tri']) && !in_array($this->parametres['tri'], $tris_possibles_tableau)) {
$erreurs[] = '- le type de tri demandé est incorrect, les valeurs possibles sont '.$tris_possibles.' ;';
}
$directions_tri = array('asc', 'desc');
if(isset($this->parametres['ordre']) && !in_array($this->parametres['ordre'], $directions_tri)) {
$erreurs[] = '- la direction du tri demandé est incorrecte, les valeurs supportées sont asc ou desc ;';
}
if (!empty($erreurs)) {
$e = 'Erreur lors de l\'analyse des parametres du tri : '."\n";
$e .= implode("\n", $erreurs);
throw new Exception($e, RestServeur::HTTP_CODE_ERREUR);
}
}
private function initialiserTri() {
$this->tri = isset($this->parametres['tri']) ? $this->parametres['tri'] : $this->tri;
$this->directionTri = isset($this->parametres['ordre']) ? $this->parametres['ordre'] : $this->directionTri;
}
/*-------------------------------------------------------------------------------
CONFIGURATION DU SERVICE
--------------------------------------------------------------------------------*/
123,6 → 154,11
}
}
$tris_possibles = $this->conteneur->getParametre('tris_possibles');
if (empty($tris_possibles)) {
$erreurs[] = '- le fichier de configuration ne contient pas le parametre tris_possibles ou celui-ci est vide ;';
}
if (!empty($erreurs)) {
$e = 'Erreur lors de la configuration : '."\n";
$e .= implode("\n", $erreurs);
148,8 → 184,6
* Charger la clause WHERE en fonction des paramètres de masque
* */
private function chargerClauseWhere() {
// TODO: factoriser cette fonction qui est quasiment identique dans liste image et dans liste observation
// faire une classe mère, une classe utilitaire ?
$where = array();
$tableauMasque = $this->masque->getMasque();
if (!empty($tableauMasque)) {
309,10 → 343,27
')';
return $masque;
}
private function creerFiltreMotsCles($valeurMasque) {
$masque = '(di.mots_cles_texte LIKE '.$this->proteger('%'.$valeurMasque.'%').' OR '.
' dob.mots_cles_texte LIKE '.$this->proteger('%'.$valeurMasque.'%').') ';
$mots_cles = explode(' ', $valeurMasque);
$requeteMotsClesImg = '';
$requeteMotsClesObs = '';
//TODO voir s'il existe un moyen plus simple que le foreach + rtrim
// comme avec implode
foreach($mots_cles as $mot_cle) {
$requeteMotsCles = $this->proteger('%'.$mot_cle.'%');
$requeteMotsClesImg .= 'di.mots_cles_texte LIKE '.$requeteMotsCles.' AND ';
$requeteMotsClesObs .= 'dob.mots_cles_texte LIKE '.$requeteMotsCles.' AND ';
}
$requeteMotsClesImg = rtrim($requeteMotsClesImg, ' AND ');
$requeteMotsClesObs = rtrim($requeteMotsClesObs, ' AND ');
$masque = '('.
'('.$requeteMotsClesImg.') OR '.
'('.$requeteMotsClesObs.') '.
') ';
return $masque;
}
324,7 → 375,7
* */
private function chargerLiaisons() {
$requeteLiaisons = 'SELECT SQL_CALC_FOUND_ROWS * '.
$requeteLiaisons = 'SELECT DISTINCT SQL_CALC_FOUND_ROWS * '.
'FROM '.$this->gestionBdd->formaterTable('del_obs_image', 'doi').
'INNER JOIN del_image di '.
'ON doi.id_image = di.id_image '.
333,12 → 384,20
'INNER JOIN del_utilisateur du '.
'ON du.id_utilisateur = doi.id_utilisateur';
$requeteLiaisons .= $this->chargerClauseWhere();
$requeteLiaisons .= ' ORDER BY date_transmission DESC';
$requeteLiaisons .= $this->getTri();
$requeteLiaisons .= $this->gestionBdd->getLimitSql();
 
return $this->bdd->recupererTous($requeteLiaisons);
}
private function getTri() {
$order = '';
if($this->tri != 'vote') {
$order = ' ORDER BY '.$this->tri.' '.$this->directionTri.' ';
}
return $order;
}
/**
* Compter le nombre total d'images dans la base pour affichage dans entete.
* */
360,7 → 419,8
// On enregistre l'ID de l'image pour n'effectuer qu'une seule requête par la suite
$this->imageIds[] = $idImage;
$images[$idImage] = array('id_image' => $idImage, 'date' => $liaison['date_prise_de_vue'], 'binaire.href' => $this->formaterLienImage($idImage),
$index = $liaison['id_image'].'-'.$liaison['id_observation'];
$images[$index] = array('id_image' => $idImage, 'date' => $liaison['date_prise_de_vue'], 'binaire.href' => $this->formaterLienImage($idImage),
'hauteur' => $liaison['hauteur'], 'largeur' => $liaison['largeur'], 'protocoles_votes' => array(), 'observation' => $this->formaterObservation($liaison));
}
return $images;