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->compterObservations(); |
69,6 → 74,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 |
--------------------------------------------------------------------------------*/ |
209,15 → 240,15 |
$whereIdZoneGeo = $this->creerFiltreIdZoneGeo($valeurMasque); |
|
$masqueGeneral = '( '. |
(($whereAuteur != '') ? $whereAuteur.' OR ' : '' ). |
(($whereIdZoneGeo != '') ? $whereIdZoneGeo.' OR ' : '' ). |
(($whereAuteur != '') ? $whereAuteur.' OR ' : '' ). |
(($whereIdZoneGeo != '') ? $whereIdZoneGeo.' OR ' : '' ). |
'zone_geo LIKE '.$this->proteger($this->remplacerParJokerCaractere($valeurMasque).'%').' OR '. |
$this->creerFiltreMotsCles($valeurMasque).' OR '. |
$this->creerFiltreMotsCles($valeurMasque).' OR '. |
'nom_sel LIKE '.$this->proteger($valeurMasque.'%').' OR '. |
'famille LIKE '.$this->proteger($valeurMasque.'%').' OR '. |
'milieu LIKE '.$this->proteger($valeurMasque).' OR '. |
$this->mappingFiltre['ns'].' LIKE '.$this->proteger('%'.$valeurMasque.'% %').' OR '. |
$this->creerFiltreDate($valeurMasque). |
$this->mappingFiltre['ns'].' LIKE '.$this->proteger('%'.$valeurMasque.'% %').' OR '. |
$this->creerFiltreDate($valeurMasque). |
') '; |
|
return $masqueGeneral; |
310,9 → 341,25 |
} |
|
private function creerFiltreMotsCles($valeurMasque) { |
$masque = '(di.mots_cles_texte LIKE '.$this->proteger('%'.$valeurMasque.'%').' OR '. |
' dob.mots_cles_texte LIKE '.$this->proteger('%'.$valeurMasque.'%').') '; |
return $masque; |
$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; |
} |
|
/*------------------------------------------------------------------------------- |
323,15 → 370,17 |
* */ |
private function chargerLiaisons() { |
|
$requeteLiaisons = 'SELECT SQL_CALC_FOUND_ROWS * '. |
$requeteLiaisons = 'SELECT SQL_CALC_FOUND_ROWS *, di.mots_cles_texte '. |
'FROM '.$this->gestionBdd->formaterTable('del_observation', 'dob'). |
'INNER JOIN '.$this->gestionBdd->formaterTable('del_obs_image', 'doi'). |
'ON doi.id_observation = dob.id_observation '. |
'INNER JOIN del_utilisateur du '. |
'ON du.id_utilisateur = doi.id_utilisateur '; |
'ON du.id_utilisateur = doi.id_utilisateur '. |
'INNER JOIN del_image di '. |
'ON di.id_image = doi.id_image '; |
$requeteLiaisons .= $this->chargerClauseWhere(); |
$requeteLiaisons .= ' GROUP BY doi.id_observation'; |
$requeteLiaisons .= ' ORDER BY date_transmission DESC '; |
$requeteLiaisons .= ' GROUP BY doi.id_observation'; |
$requeteLiaisons .= ' ORDER BY '.$this->tri.' '.$this->directionTri.' '; |
$requeteLiaisons .= $this->gestionBdd->getLimitSql(); |
|
return $this->bdd->recupererTous($requeteLiaisons); |