Subversion Repositories eFlore/Applications.del

Rev

Rev 1278 | Go to most recent revision | Show entire file | Ignore whitespace | Details | Blame | Last modification | View Log | RSS feed

Rev 1278 Rev 1297
Line 14... Line 14...
14
 * @version	$Id: Bdd.php 403 2012-02-22 14:35:20Z gduche $
14
 * @version	$Id: Bdd.php 403 2012-02-22 14:35:20Z gduche $
15
 * @see http://www.tela-botanica.org/wikini/eflore/wakka.php?wiki=ApiIdentiplante01Observations
15
 * @see http://www.tela-botanica.org/wikini/eflore/wakka.php?wiki=ApiIdentiplante01Observations
16
 */
16
 */
Line 17... Line 17...
17
 
17
 
18
class ListeObservations {
-
 
19
	
18
class ListeObservations {
20
	
19
 
21
	private $conteneur;
20
	private $conteneur;
22
	private $navigation;
21
	private $navigation;
23
	private $masque;
22
	private $masque;
24
	private $gestionBdd;
23
	private $gestionBdd;
Line 38... Line 37...
38
		$this->masque = $conteneur->getMasque();
37
		$this->masque = $conteneur->getMasque();
39
		$this->gestionBdd = $conteneur->getGestionBdd();
38
		$this->gestionBdd = $conteneur->getGestionBdd();
40
		$this->bdd = $this->gestionBdd->getBdd();
39
		$this->bdd = $this->gestionBdd->getBdd();
41
	}
40
	}
Line -... Line 41...
-
 
41
	
-
 
42
	
-
 
43
	/**
-
 
44
	 * RequeteSansParametres
-
 
45
	 * 
-
 
46
	 * permet de vérifier qu'il n'y a aucun paramètre dans la requete, excepté les informations de start et limite,
-
 
47
	 * pour ajuster la requête pour un gain de temps
-
 
48
	 * @param array $ressources les ressources telles qu'elles sont passées au script
-
 
49
	 * @param array $parametres les paramètres tels qu'il sont passés au script
-
 
50
	 * */
-
 
51
	public function requeteSansParametres($ressources, $parametres) {
-
 
52
		$estSansParametres = true;
-
 
53
		
-
 
54
		if (sizeof($ressources) > 0) {
-
 
55
			$estSansParametres = false;
-
 
56
		}
-
 
57
		
-
 
58
		if (sizeof($parametres) > 2) {
-
 
59
			// 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
-
 
60
			$estSansParametres = false;
-
 
61
		} else {
-
 
62
			if (sizeof($parametres) == 1) {
-
 
63
				if (!(isset($parametres['navigation.depart']) || isset($parametres['navigation.limite']))) {
-
 
64
					// s'il y a des paramètres, seul les paramètres de navigation n'interfère pas sur la requête
-
 
65
					$estSansParametres = false;
-
 
66
				}
-
 
67
			} elseif (sizeof($parametres) == 2) {
-
 
68
				// s'il y a des paramètres, seul les paramètres de navigation n'interfère pas sur la requête
-
 
69
				if (!(isset($parametres['navigation.depart']) && isset($parametres['navigation.limite']))) {
-
 
70
					$estSansParametres = false;
-
 
71
				}
-
 
72
			}
-
 
73
		}
-
 
74
		
-
 
75
		return $estSansParametres;
-
 
76
	}
42
	
77
	
43
	/**
78
	/**
44
	 * Méthode principale de la classe.
79
	 * Méthode principale de la classe.
45
	 * Lance la récupération des images dans la base et les place dans un objet ResultatService 
80
	 * Lance la récupération des images dans la base et les place dans un objet ResultatService 
46
	 * pour l'afficher.
81
	 * pour l'afficher.
47
	 * @param array $ressources les ressources situées après l'url de base (ex : http://url/ressource1/ressource2)
82
	 * @param array $ressources les ressources situées après l'url de base (ex : http://url/ressource1/ressource2)
48
	 * @param array $parametres les paramètres situés après le ? dans l'url
83
	 * @param array $parametres les paramètres situés après le ? dans l'url
49
	 * */
84
	 * */
50
	public function consulter($ressources, $parametres) {
-
 
Line 51... Line 85...
51
		$this->initialiserRessourcesEtParametres($ressources, $parametres);
85
	public function consulter($ressources, $parametres) {
52
		
86
		
53
		// Gestion des configuration du script
87
		$this->initialiserRessourcesEtParametres($ressources, $parametres);
54
		$this->configurer();
-
 
55
		$this->verifierConfiguration();
88
		$this->configurer();
56
		
89
		$this->verifierConfiguration();
57
		$this->verifierParametresTri();
90
		$this->verifierParametresTri();
-
 
91
		$this->initialiserTri();
-
 
92
 
-
 
93
		if ($this->requeteSansParametres($ressources, $parametres)) {
-
 
94
 
-
 
95
			$liaisons = $this->chargerLiaisonsSimple();
-
 
96
			$observations = $this->chargerObservations($liaisons);
-
 
97
			$total = $this->compterObservations();
-
 
98
			$this->navigation->setTotal($total);
-
 
99
			$observations = $this->chargerImages($observations);
-
 
100
			$observations = $this->chargerDeterminations($observations);
-
 
101
			
-
 
102
			//Compute
-
 
103
			$resultats = array();
-
 
104
			foreach ($observations as $id => $observation) {
-
 
105
				$idObs = $observation['id_observation'];
-
 
106
				$resultats['"'.$idObs.'"'] = $observation;
-
 
107
			}
-
 
108
			
-
 
109
			// Mettre en forme le résultat et l'envoyer pour affichage
-
 
110
			$resultat = new ResultatService();
-
 
111
			$resultat->corps = array('entete' => $this->conteneur->getEntete(), 'resultats' => $resultats);
-
 
112
			
-
 
113
			return $resultat;
58
		$this->initialiserTri();
114
		} else {
59
		
115
			
60
		// Lancement du service
116
			// Lancement du service
61
		$liaisons = $this->chargerLiaisons();
117
			$liaisons = $this->chargerLiaisons();
62
		
118
			
63
		$total = $this->compterObservations();
119
			$total = $this->compterObservations();
64
		$this->navigation->setTotal($total);
120
			$this->navigation->setTotal($total);
65
		$observations = $this->chargerObservations($liaisons);
121
			$observations = $this->chargerObservations($liaisons);
66
		$observations = $this->chargerImages($observations);
122
			$observations = $this->chargerImages($observations);
67
		$observations = $this->chargerDeterminations($observations);
123
			$observations = $this->chargerDeterminations($observations);
68
		
124
			
69
		// Mettre en forme le résultat et l'envoyer pour affichage
125
			// Mettre en forme le résultat et l'envoyer pour affichage
70
		$resultat = new ResultatService();
126
			$resultat = new ResultatService();
-
 
127
			$resultat->corps = array('entete' => $this->conteneur->getEntete(), 'resultats' => $observations);
71
		$resultat->corps = array('entete' => $this->conteneur->getEntete(), 'resultats' => $observations);
128
			return $resultat;
Line 72... Line 129...
72
		return $resultat;
129
		}
73
	}
130
	}
74
	
131
	
Line 450... Line 507...
450
		$requeteLiaisons .= $this->gestionBdd->getLimitSql();
507
		$requeteLiaisons .= $this->gestionBdd->getLimitSql();
Line 451... Line 508...
451
		
508
		
452
		return $this->bdd->recupererTous($requeteLiaisons);
509
		return $this->bdd->recupererTous($requeteLiaisons);
Line -... Line 510...
-
 
510
	}
-
 
511
	
-
 
512
	
-
 
513
	private function chargerLiaisonsSimple() {
-
 
514
		$requeteObs = 'SELECT SQL_CALC_FOUND_ROWS dob.id_observation, nom_sel, famille, ce_zone_geo, zone_geo, lieudit, '.
-
 
515
				'station, milieu, date_observation, dob.mots_cles_texte, date_transmission, '.
-
 
516
				'dob.ce_utilisateur, prenom, nom, courriel, '.
-
 
517
				'dob.prenom_utilisateur, dob.nom_utilisateur, dob.courriel_utilisateur, '.
-
 
518
				'dob.commentaire as dob_commentaire, '.
-
 
519
				'dob.nt, dob.nom_sel_nn '.
-
 
520
				'FROM del_observation dob '.
-
 
521
				' LEFT JOIN del_utilisateur du ON dob.ce_utilisateur = du.id_utilisateur '.
-
 
522
				' ORDER BY id_observation DESC ';
-
 
523
		$requeteObs .= $this->gestionBdd->getLimitSql();
-
 
524
		$liaisons = $this->bdd->recupererTous($requeteObs);
-
 
525
 
-
 
526
		return $liaisons;
453
	}
527
	}
454
	
528
	
455
	/**
529
	/**
456
	* Compter le nombre total d'images dans la base pour affichage dans entete.
530
	* Compter le nombre total d'images dans la base pour affichage dans entete.
457
	* */
531
	* */
Line 474... Line 548...
474
			if($liaison['ce_utilisateur'] == 0) {
548
			if($liaison['ce_utilisateur'] == 0) {
475
				$liaison['prenom'] = $liaison['prenom_utilisateur'];
549
				$liaison['prenom'] = $liaison['prenom_utilisateur'];
476
				$liaison['nom'] = $liaison['nom_utilisateur'];
550
				$liaison['nom'] = $liaison['nom_utilisateur'];
477
			}
551
			}
Line 478... Line 552...
478
			
552
			
-
 
553
			$observation = $this->formaterObservation($liaison);
479
			$observation = $this->formaterObservation($liaison); 
554
			 
480
			// attention, il est important que les index du tableau soient des chaines 
555
			// attention, il est important que les index du tableau soient des chaines 
481
			// de caractères pour que l'ordre d'insertion soit respecté lors de la lecture
556
			// de caractères pour que l'ordre d'insertion soit respecté lors de la lecture
482
			// du json par les navigateur (voir bug du moteur javascript v8 #164)
557
			// du json par les navigateur (voir bug du moteur javascript v8 #164)
483
			$observations['"'.$idObs.'"'] = $observation;
558
			$observations['"'.$idObs.'"'] = $observation;
Line 590... Line 665...
590
	*  @param $liaison liaison issue de la recherche
665
	*  @param $liaison liaison issue de la recherche
591
	*  @return $observation l'observation mise en forme
666
	*  @return $observation l'observation mise en forme
592
	* */
667
	* */
593
	private function formaterObservation($liaison) {
668
	private function formaterObservation($liaison) {
594
		$observation = array();
669
		$observation = array();
595
		
-
 
596
		foreach ($this->mappingObservation as $nomOriginal => $nomFinal) {
670
		foreach ($this->mappingObservation as $nomOriginal => $nomFinal) {
597
			$observation[$nomFinal] = $liaison[$nomOriginal];
671
			$observation[$nomFinal] = $liaison[$nomOriginal];
598
		}
672
		}
599
		
-
 
600
		$observation['images'] = array();
673
		$observation['images'] = array();
Line 601... Line 674...
601
 
674
 
602
		return $observation;
675
		return $observation;