39,7 → 39,6 |
$this->bdd = $this->gestionBdd->getBdd(); |
} |
|
|
/** |
* RequeteSansParametres |
* |
83,7 → 82,6 |
* @param array $parametres les paramètres situés après le ? dans l'url |
* */ |
public function consulter($ressources, $parametres) { |
|
$this->initialiserRessourcesEtParametres($ressources, $parametres); |
$this->configurer(); |
$this->verifierConfiguration(); |
90,8 → 88,8 |
$this->verifierParametresTri(); |
$this->initialiserTri(); |
|
$resultat = new ResultatService(); |
if ($this->requeteSansParametres($ressources, $parametres)) { |
|
$liaisons = $this->chargerLiaisonsSimple(); |
$observations = $this->chargerObservations($liaisons); |
$total = $this->compterObservations(); |
107,15 → 105,9 |
} |
|
// Mettre en forme le résultat et l'envoyer pour affichage |
$resultat = new ResultatService(); |
$resultat->corps = array('entete' => $this->conteneur->getEntete(), 'resultats' => $resultats); |
|
return $resultat; |
} else { |
|
// Lancement du service |
$liaisons = $this->chargerLiaisons(); |
|
$total = $this->compterObservations(); |
$this->navigation->setTotal($total); |
$observations = $this->chargerObservations($liaisons); |
123,11 → 115,10 |
$observations = $this->chargerDeterminations($observations); |
|
// Mettre en forme le résultat et l'envoyer pour affichage |
$resultat = new ResultatService(); |
$resultat->corps = array('entete' => $this->conteneur->getEntete(), 'resultats' => $observations); |
} |
return $resultat; |
} |
} |
|
private function initialiserRessourcesEtParametres($ressources, $parametres) { |
$this->ressources = $ressources; |
135,7 → 126,6 |
} |
|
private function verifierParametresTri() { |
|
$erreurs = array(); |
$tris_possibles = $this->conteneur->getParametre('tris_possibles'); |
$tris_possibles_tableau = explode(',', $tris_possibles); |
176,7 → 166,6 |
* Vérifier que le service est bien configuré |
* */ |
private function verifierConfiguration() { |
|
$erreurs = array(); |
$tableauObservations = $this->conteneur->getParametre('observations'); |
if (empty($tableauObservations)) { |
189,14 → 178,14 |
if ($this->conteneur->getParametre('url_images') == null) { |
$erreurs[] = '- paramètre "url_images" manquant ;'; |
} |
|
} |
|
if (empty($this->mappingObservation)) { |
$erreurs[] = '- le fichier de configuration ne contient pas le tableau [mapping_observation] ou celui-ci est vide ;'; |
} else { |
$champsMappingObs = array('id_observation', 'date_observation', 'date_transmission', 'famille', 'nom_sel', 'nom_sel_nn', 'nt', |
'ce_zone_geo', 'zone_geo', 'lieudit', 'station', 'courriel', 'ce_utilisateur', 'nom', 'prenom'); |
$champsMappingObs = array('id_observation', 'date_observation', 'date_transmission', 'famille', |
'nom_sel', 'nom_sel_nn', 'nt', 'ce_zone_geo', 'zone_geo', 'lieudit', 'station', 'courriel', |
'ce_utilisateur', 'nom', 'prenom'); |
|
foreach ($champsMappingObs as $champ) { |
if (!isset($this->mappingObservation[$champ])) { |
208,7 → 197,8 |
if (empty($this->mappingCommentaire)) { |
$erreurs[] = '- le fichier de configuration ne contient pas le tableau [mapping_commentaire] ou celui-ci est vide ;'; |
} else { |
$champsMappingCom = array('id_commentaire', 'texte', 'ce_utilisateur', 'utilisateur_nom', 'utilisateur_prenom', 'utilisateur_courriel', 'date'); |
$champsMappingCom = array('id_commentaire', 'texte', 'ce_utilisateur', 'utilisateur_nom', |
'utilisateur_prenom', 'utilisateur_courriel', 'date'); |
foreach ($champsMappingCom as $champ) { |
if (!isset($this->mappingCommentaire[$champ])) { |
$erreurs[] = '- le mapping du champ "'.$champ.'" pour le commentaire est manquant ;'; |
234,8 → 224,6 |
} |
} |
|
|
|
/** |
* Obtenir une chaine de caractère concaténant nom et prénom séparé par une virgule |
* @param String $auteurId l'identifiant de l'auteur |
256,7 → 244,6 |
$tableauMasque = $this->masque->getMasque(); |
if (!empty($tableauMasque)) { |
foreach($tableauMasque as $idMasque => $valeurMasque) { |
|
$idMasque = str_replace('masque.', '', $idMasque); |
switch ($idMasque) { |
// nom du masque => nom BDD |
333,7 → 320,10 |
} |
|
public function chargerIdsObservationsParNbCommentaires() { |
$requeteIdsObservations = 'SELECT ce_observation FROM `del_commentaire` GROUP BY ce_observation HAVING count(id_commentaire) > '.$this->conteneur->getParametre('nb_commentaires_discussion'); |
$requeteIdsObservations = 'SELECT ce_observation '. |
'FROM del_commentaire '. |
'GROUP BY ce_observation '. |
'HAVING count(id_commentaire) > '.$this->conteneur->getParametre('nb_commentaires_discussion'); |
$listeIdsObservations = $this->bdd->recupererTous($requeteIdsObservations); |
$idsObservations = ''; |
foreach ($listeIdsObservations as $idObservation) { |
394,8 → 384,8 |
')'; |
} |
} else { |
$masque = " courriel LIKE ".$this->proteger($valeurMasque.'%'). |
" OR dob.courriel_utilisateur LIKE ".$this->proteger($valeurMasque.'%')." "; |
$masque = ' courriel LIKE '.$this->proteger($valeurMasque.'%'). |
' OR dob.courriel_utilisateur LIKE '.$this->proteger($valeurMasque.'%').' '; |
} |
} |
return $masque; |
404,10 → 394,10 |
private function remplacerParJokerCaractere($valeurMasque) { |
return str_replace(array('-',' '), '_', $valeurMasque); |
} |
|
//TODO: déplacer les fonctions ci dessus et dessous dans une classe |
// utilitaire |
function supprimerAccents($str, $charset='utf-8') |
{ |
function supprimerAccents($str, $charset='utf-8') { |
$str = htmlentities($str, ENT_NOQUOTES, $charset); |
|
$str = preg_replace('#&([A-za-z])(?:acute|cedil|circ|grave|orn|ring|slash|th|tilde|uml);#', '\1', $str); |
418,7 → 408,6 |
} |
|
private function obtenirIdDepartement($nomDpt) { |
|
$nomDpt = $this->supprimerAccents($nomDpt); |
$nomDpt = strtolower(str_replace(' ','-',$nomDpt)); |
|
453,8 → 442,7 |
// autorisés pour la recherche, qui seraient ajoutés au OR |
$masque = '('; |
$masque .= (is_numeric($valeurMasque)) ? ' YEAR(date_observation) = '.$this->proteger($valeurMasque).' OR ' : ''; |
$masque .= " DATE_FORMAT(date_observation, '%d/%m/%Y') = ".$this->proteger($valeurMasque).' '. |
')'; |
$masque .= " DATE_FORMAT(date_observation, '%d/%m/%Y') = ".$this->proteger($valeurMasque).' )'; |
return $masque; |
} |
|
466,17 → 454,13 |
// comme avec implode (attention au fait que l'on concatène des % au début et à la fin) |
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 .= "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.') '. |
') '; |
|
$masque = "( ($requeteMotsClesImg) OR ($requeteMotsClesObs) ) "; |
return $masque; |
} |
|
487,40 → 471,41 |
* Chargement depuis la bdd de toutes les liaisons entre images et observations |
* */ |
private function chargerLiaisons() { |
|
$requeteLiaisons = 'SELECT SQL_CALC_FOUND_ROWS dob.id_observation, nom_sel, famille, ce_zone_geo, zone_geo, lieudit, '. |
$requeteLiaisons = 'SELECT SQL_CALC_FOUND_ROWS '. |
' dob.id_observation, nom_sel, famille, ce_zone_geo, zone_geo, lieudit, '. |
'station, milieu, date_observation, dob.mots_cles_texte, date_transmission, di.id_image, '. |
'dob.ce_utilisateur, prenom, nom, courriel, '. |
'dob.prenom_utilisateur, dob.nom_utilisateur, dob.courriel_utilisateur, '. |
'nom_original, dob.commentaire as dob_commentaire, '. |
' nom_original, dob.commentaire AS dob_commentaire, '. |
'dob.nt, dob.nom_sel_nn '. |
'FROM '.$this->gestionBdd->formaterTable('del_observation', 'dob'). |
'LEFT JOIN del_utilisateur du '. |
'FROM del_observation AS dob '. |
' LEFT JOIN del_utilisateur AS du '. |
'ON du.id_utilisateur = dob.ce_utilisateur '. |
'LEFT JOIN '.$this->gestionBdd->formaterTable('del_obs_image', 'doi'). |
' LEFT JOIN del_obs_image AS doi '. |
'ON doi.id_observation = dob.id_observation '. |
'LEFT JOIN del_image di '. |
'ON di.id_image = doi.id_image '; |
$requeteLiaisons .= $this->chargerClauseWhere(); |
$requeteLiaisons .= ' GROUP BY doi.id_observation'; |
$requeteLiaisons .= ' ORDER BY '.$this->tri.' '.$this->directionTri.' '; |
$requeteLiaisons .= $this->gestionBdd->getLimitSql(); |
' LEFT JOIN del_image AS di '. |
' ON di.id_image = doi.id_image '. |
$this->chargerClauseWhere(). |
' GROUP BY doi.id_observation'. |
' ORDER BY '.$this->tri.' '.$this->directionTri.' '. |
$this->gestionBdd->getLimitSql(); |
|
return $this->bdd->recupererTous($requeteLiaisons); |
} |
|
|
private function chargerLiaisonsSimple() { |
$requeteObs = 'SELECT SQL_CALC_FOUND_ROWS dob.id_observation, nom_sel, famille, ce_zone_geo, zone_geo, lieudit, '. |
$requeteObs = 'SELECT SQL_CALC_FOUND_ROWS '. |
' dob.id_observation, nom_sel, famille, ce_zone_geo, zone_geo, lieudit, '. |
'station, milieu, date_observation, dob.mots_cles_texte, date_transmission, '. |
'dob.ce_utilisateur, prenom, nom, courriel, '. |
'dob.prenom_utilisateur, dob.nom_utilisateur, dob.courriel_utilisateur, '. |
'dob.commentaire as dob_commentaire, '. |
'dob.nt, dob.nom_sel_nn '. |
'FROM del_observation dob '. |
' LEFT JOIN del_utilisateur du ON dob.ce_utilisateur = du.id_utilisateur '. |
' ORDER BY id_observation DESC '; |
$requeteObs .= $this->gestionBdd->getLimitSql(); |
'FROM del_observation AS dob '. |
' LEFT JOIN del_utilisateur AS du |
ON dob.ce_utilisateur = du.id_utilisateur '. |
'ORDER BY id_observation DESC '. |
$this->gestionBdd->getLimitSql(); |
$liaisons = $this->bdd->recupererTous($requeteObs); |
|
return $liaisons; |
540,7 → 525,6 |
* @param $liaisons les liaisons de la table del_obs_images |
* */ |
private function chargerObservations($liaisons) { |
|
$observations = array(); |
foreach ($liaisons as $liaison) { |
$idObs = $liaison[$this->mappingObservation['id_observation']]; |
565,13 → 549,13 |
* @param array $observations la liste des observations |
* */ |
private function chargerImages($observations) { |
|
$idObs = $observation['id_observation']; |
foreach ($observations as $id => $observation) { |
|
$requeteImages = 'SELECT * FROM '. $this->gestionBdd->formaterTable('del_obs_image', 'doi'). |
'INNER JOIN '.$this->gestionBdd->formaterTable('del_image', 'di'). |
$requeteImages = 'SELECT * '. |
'FROM del_obs_image AS doi '. |
' INNER JOIN del_image AS di '. |
'ON doi.id_image = di.id_image '. |
'WHERE doi.id_observation = '.$observation['id_observation']; |
"WHERE doi.id_observation = $idObs "; |
|
$images = $this->bdd->recupererTous($requeteImages); |
$images = $this->formaterImages($images); |
587,8 → 571,11 |
* */ |
private function chargerDeterminations($observations) { |
foreach ($observations as $id => $observation) { |
$requetePropositions = 'SELECT * FROM '.$this->gestionBdd->formaterTable('del_commentaire', 'dc'). |
'WHERE dc.nom_sel IS NOT NULL AND ce_observation = '.$observation['id_observation']; |
$idObs = $observation['id_observation']; |
$requetePropositions = 'SELECT * '. |
'FROM del_commentaire AS dc '. |
'WHERE dc.nom_sel IS NOT NULL '. |
" AND ce_observation = $idObs "; |
$propositions = $this->bdd->recupererTous($requetePropositions); |
$observations[$id]['commentaires'] = $this->formaterDeterminations($propositions); |
} |
600,9 → 587,10 |
* @param Array $observations le tableau des observations à mettre à jour |
* */ |
private function chargerVotes($ids_proposition, $propositions) { |
$requeteVotes = 'SELECT * FROM '. |
$this->gestionBdd->formaterTable('del_commentaire_vote'). |
'WHERE ce_proposition IN ('.implode(', ', $ids_proposition).')'; |
$listePropositions = implode(', ', $ids_proposition); |
$requeteVotes = 'SELECT * '. |
'FROM del_commentaire_vote '. |
"WHERE ce_proposition IN ($listePropositions)"; |
|
$resultatsVotes = $this->bdd->recupererTous($requeteVotes); |
foreach ($resultatsVotes as $vote) { |
616,9 → 604,10 |
* @param Array $observations le tableau des observatins à mettre à jour |
* */ |
private function chargerNombreCommentaire($ids_proposition, $propositions) { |
$requeteNbCommentaires = 'SELECT ce_commentaire_parent, ce_proposition, count( id_commentaire ) AS nb '. |
$listePropositions = implode(', ', $ids_proposition); |
$requeteNbCommentaires = 'SELECT ce_commentaire_parent, ce_proposition, COUNT( id_commentaire ) AS nb '. |
'FROM del_commentaire '. |
'WHERE ce_proposition IN ( '.implode(', ', $ids_proposition).') '. |
"WHERE ce_proposition IN ($listePropositions) ". |
'GROUP BY ce_proposition'; |
|
$listeCommentaires = $this->bdd->recupererTous($requeteNbCommentaires); |
631,8 → 620,6 |
$propositions[$ligneProposition['ce_proposition']]['observation']['nb_commentaires'] = $ligneProposition['nb']; |
} |
} |
|
|
return $propositions; |
} |
|
656,7 → 643,6 |
|
$imagesRetour[] = $imageCourante; |
} |
|
return $imagesRetour; |
} |
|
671,7 → 657,6 |
$observation[$nomFinal] = $liaison[$nomOriginal]; |
} |
$observation['images'] = array(); |
|
return $observation; |
} |
|
690,13 → 675,12 |
* Formate une liste de proposition en fonction du fichier de configuration |
*/ |
private function formaterDeterminations($listePropositions) { |
|
$propositions_format = array(); |
if ($listePropositions != array()) { |
foreach ($listePropositions as $id => $proposition) { |
$ids_proposition[] = $proposition['id_commentaire']; |
|
$proposition_formatee = array('nb_commentaires' => "0"); |
$proposition_formatee = array('nb_commentaires' => '0'); |
foreach ($this->mappingCommentaire as $nomOriginal => $nomFinal) { |
if (isset($proposition[$nomOriginal])) { |
$proposition_formatee[$nomFinal] = $proposition[$nomOriginal]; |
704,10 → 688,8 |
} |
$propositions_format[$proposition['id_commentaire']] = $proposition_formatee; |
} |
|
$propositions_format = $this->chargerVotes($ids_proposition, $propositions_format); |
$propositions_format = $this->chargerNombreCommentaire($ids_proposition, $propositions_format); |
|
} |
return $propositions_format; |
} |