16,8 → 16,7 |
*/ |
|
class ListeObservations { |
|
|
|
private $conteneur; |
private $navigation; |
private $masque; |
40,7 → 39,43 |
$this->bdd = $this->gestionBdd->getBdd(); |
} |
|
|
/** |
* RequeteSansParametres |
* |
* permet de vérifier qu'il n'y a aucun paramètre dans la requete, excepté les informations de start et limite, |
* pour ajuster la requête pour un gain de temps |
* @param array $ressources les ressources telles qu'elles sont passées au script |
* @param array $parametres les paramètres tels qu'il sont passés au script |
* */ |
public function requeteSansParametres($ressources, $parametres) { |
$estSansParametres = true; |
|
if (sizeof($ressources) > 0) { |
$estSansParametres = false; |
} |
|
if (sizeof($parametres) > 2) { |
// s'il y a plus de 2 paramètres, on est forcément dans le cas où on a demandé des paramètres autre que la navigation |
$estSansParametres = false; |
} else { |
if (sizeof($parametres) == 1) { |
if (!(isset($parametres['navigation.depart']) || isset($parametres['navigation.limite']))) { |
// s'il y a des paramètres, seul les paramètres de navigation n'interfère pas sur la requête |
$estSansParametres = false; |
} |
} elseif (sizeof($parametres) == 2) { |
// s'il y a des paramètres, seul les paramètres de navigation n'interfère pas sur la requête |
if (!(isset($parametres['navigation.depart']) && isset($parametres['navigation.limite']))) { |
$estSansParametres = false; |
} |
} |
} |
|
return $estSansParametres; |
} |
|
/** |
* Méthode principale de la classe. |
* Lance la récupération des images dans la base et les place dans un objet ResultatService |
* pour l'afficher. |
48,28 → 83,50 |
* @param array $parametres les paramètres situés après le ? dans l'url |
* */ |
public function consulter($ressources, $parametres) { |
|
$this->initialiserRessourcesEtParametres($ressources, $parametres); |
|
// Gestion des configuration du script |
$this->configurer(); |
$this->verifierConfiguration(); |
|
$this->verifierParametresTri(); |
$this->initialiserTri(); |
|
// Lancement du service |
$liaisons = $this->chargerLiaisons(); |
|
$total = $this->compterObservations(); |
$this->navigation->setTotal($total); |
$observations = $this->chargerObservations($liaisons); |
$observations = $this->chargerImages($observations); |
$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; |
|
if ($this->requeteSansParametres($ressources, $parametres)) { |
|
$liaisons = $this->chargerLiaisonsSimple(); |
$observations = $this->chargerObservations($liaisons); |
$total = $this->compterObservations(); |
$this->navigation->setTotal($total); |
$observations = $this->chargerImages($observations); |
$observations = $this->chargerDeterminations($observations); |
|
//Compute |
$resultats = array(); |
foreach ($observations as $id => $observation) { |
$idObs = $observation['id_observation']; |
$resultats['"'.$idObs.'"'] = $observation; |
} |
|
// 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); |
$observations = $this->chargerImages($observations); |
$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) { |
452,6 → 509,23 |
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, '. |
'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(); |
$liaisons = $this->bdd->recupererTous($requeteObs); |
|
return $liaisons; |
} |
|
/** |
* Compter le nombre total d'images dans la base pour affichage dans entete. |
* */ |
476,7 → 550,8 |
$liaison['nom'] = $liaison['nom_utilisateur']; |
} |
|
$observation = $this->formaterObservation($liaison); |
$observation = $this->formaterObservation($liaison); |
|
// attention, il est important que les index du tableau soient des chaines |
// de caractères pour que l'ordre d'insertion soit respecté lors de la lecture |
// du json par les navigateur (voir bug du moteur javascript v8 #164) |
592,11 → 667,9 |
* */ |
private function formaterObservation($liaison) { |
$observation = array(); |
|
foreach ($this->mappingObservation as $nomOriginal => $nomFinal) { |
$observation[$nomFinal] = $liaison[$nomOriginal]; |
} |
|
$observation['images'] = array(); |
|
return $observation; |