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; |