Subversion Repositories eFlore/Projets.eflore-projets

Rev

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

Rev 163 Rev 189
Line 1... Line 1...
1
<?php 
1
<?php
2
class TaxonsListe {
2
class TaxonsListe {
Line 3... Line 3...
3
 
3
 
4
	private $parametres = null;
4
	private $parametres = null;
5
	private $ressources = null;
5
	private $ressources = null;
6
	private $bdd = null;
6
	private $bdd = null;
7
	
7
 
8
	private $nbreTotalNoms = 0;
8
	private $nbreTotalNoms = 0;
9
	private $noms = array();
9
	private $noms = array();
10
	
10
 
11
	public function __construct(Ressources $ressources, Parametres $parametres, Bdd $bdd) {
11
	public function __construct(Ressources $ressources, Parametres $parametres, Bdd $bdd) {
12
		$this->ressources = $ressources;
12
		$this->ressources = $ressources;
13
		$this->parametres = $parametres;
13
		$this->parametres = $parametres;
14
		$this->bdd = $bdd;
14
		$this->bdd = $bdd;
15
	}
15
	}
16
	
16
 
17
	public function consulter() {
17
	public function consulter() {
18
		$this->noms = $this->rechercher();
18
		$this->noms = $this->rechercher();
19
		$this->nbreNomsTotal = $this->recupererNombreNomsTotal();
19
		$this->nbreNomsTotal = $this->recupererNombreNomsTotal();
20
		$this->trierNoms();
20
		$this->trierNoms();
21
		$retour = $this->construireTableauRetour();
21
		$retour = $this->construireTableauRetour();
22
		return $retour;
22
		return $retour;
23
	}
23
	}
24
	
24
 
25
	private function rechercher() {
25
	private function rechercher() {
26
		$resultats = array();
26
		$resultats = array();
27
		$recherche = $this->parametres->get('recherche');
27
		$recherche = $this->parametres->get('recherche');
28
		
28
 
29
		if ($recherche == 'stricte') {
29
		if ($recherche == 'stricte') {
30
			$resultats = $this->rechercherStricte();
30
			$resultats = $this->rechercherStricte();
31
		} else if ($recherche == 'etendue') {
31
		} else if ($recherche == 'etendue') {
32
			$resultats = $this->rechercherEtendue();
32
			$resultats = $this->rechercherEtendue();
33
		} else if ($recherche == 'floue') {
33
		} else if ($recherche == 'floue') {
34
			$resultats = $this->rechercherFloue();
34
			$resultats = $this->rechercherFloue();
35
		}
35
		}
36
		
36
 
37
		return $resultats;		
37
		return $resultats;
38
	}
38
	}
39
	
39
 
40
	private function rechercherStricte() {		
40
	private function rechercherStricte() {
41
		$conditions = array();
41
		$conditions = array();
42
		if ($masque = $this->parametres->getMasquePourBdd()) {
42
		if ($masque = $this->parametres->getMasquePourBdd()) {
43
			$conditions[] = "nom_sci = $masque";
43
			$conditions[] = "nom_sci = $masque";
44
		}
44
		}
Line 51... Line 51...
51
		if ($masqueSp = $this->parametres->getMasquePourBdd('sp')) {
51
		if ($masqueSp = $this->parametres->getMasquePourBdd('sp')) {
52
			$conditions[] = "epithete_sp = $masqueSp";
52
			$conditions[] = "epithete_sp = $masqueSp";
53
		}
53
		}
54
		$requete = 'SELECT SQL_CALC_FOUND_ROWS '.
54
		$requete = 'SELECT SQL_CALC_FOUND_ROWS '.
55
			'	num_nom, nom_sci '.
55
			'	num_nom, nom_sci '.
56
			'FROM fournier_v1_00 '.
56
			'FROM bdtfx_v1_01 '.
57
			'WHERE num_nom = num_nom_retenu '.
57
			'WHERE num_nom = num_nom_retenu '.
58
			implode(' AND ', $conditions).
58
			implode(' AND ', $conditions).
59
			'ORDER BY nom_sci ASC '.
59
			'ORDER BY nom_sci ASC '.
60
			'LIMIT 0,100';
60
			'LIMIT 0,100';
61
		$resultats = $this->bdd->recupererTous($requete);
61
		$resultats = $this->bdd->recupererTous($requete);
62
		
62
 
63
		return $resultats;
63
		return $resultats;
64
	}
64
	}
Line 65... Line 65...
65
 
65
 
66
	private function rechercherEtendue() {
66
	private function rechercherEtendue() {
Line 77... Line 77...
77
		if ($masqueSp = $this->parametres->getMasquePourBdd('sp')) {
77
		if ($masqueSp = $this->parametres->getMasquePourBdd('sp')) {
78
			$conditions[] = "epithete_sp LIKE $masqueSp";
78
			$conditions[] = "epithete_sp LIKE $masqueSp";
79
		}
79
		}
80
		$requete = 'SELECT SQL_CALC_FOUND_ROWS '.
80
		$requete = 'SELECT SQL_CALC_FOUND_ROWS '.
81
			'	num_nom, nom_sci, num_nom_retenu '.
81
			'	num_nom, nom_sci, num_nom_retenu '.
82
			'FROM fournier_v1_00 '.
82
			'FROM bdtfx_v1_01 '.
83
			'WHERE num_nom = num_nom_retenu '.
83
			'WHERE num_nom = num_nom_retenu '.
84
			implode(' AND ', $conditions).
84
			implode(' AND ', $conditions).
85
			'ORDER BY nom_sci ASC '.
85
			'ORDER BY nom_sci ASC '.
86
			'LIMIT 0,100';
86
			'LIMIT 0,100';
87
		
87
 
88
		$resultats = $this->bdd->recupererTous($requete);
88
		$resultats = $this->bdd->recupererTous($requete);
89
		return $resultats;
89
		return $resultats;
90
	}
90
	}
91
	
91
 
92
	private function rechercherFloue() {
92
	private function rechercherFloue() {
93
		$masque = $this->parametres->getMasquePourBdd();
93
		$masque = $this->parametres->getMasquePourBdd();
94
		$requete = 'SELECT SQL_CALC_FOUND_ROWS '.
94
		$requete = 'SELECT SQL_CALC_FOUND_ROWS '.
95
			'	num_nom, nom_sci, num_nom_retenu '.
95
			'	num_nom, nom_sci, num_nom_retenu '.
96
			'FROM fournier_v1_00 '.
96
			'FROM bdtfx_v1_01 '.
97
			'WHERE num_nom = num_nom_retenu '.
97
			'WHERE num_nom = num_nom_retenu '.
98
			($masque ? 'AND '.
98
			($masque ? 'AND '.
99
				"	(SOUNDEX(nom_sci) = SOUNDEX($masque)) ".
99
				"	(SOUNDEX(nom_sci) = SOUNDEX($masque)) ".
100
				"	OR (SOUNDEX(REVERSE(nom_sci)) = SOUNDEX(REVERSE($masque))) " : '').
100
				"	OR (SOUNDEX(REVERSE(nom_sci)) = SOUNDEX(REVERSE($masque))) " : '').
101
			'ORDER BY nom_sci ASC '.
101
			'ORDER BY nom_sci ASC '.
102
			'LIMIT 0,100';
102
			'LIMIT 0,100';
103
		$resultats = $this->bdd->recupererTous($requete);
103
		$resultats = $this->bdd->recupererTous($requete);
104
		return $resultats;
104
		return $resultats;
105
	}
105
	}
106
	
106
 
107
	private function recupererNombreNomsTotal() {
107
	private function recupererNombreNomsTotal() {
108
		$requete = 'SELECT FOUND_ROWS() AS nbre';
108
		$requete = 'SELECT FOUND_ROWS() AS nbre';
109
		$nombre = $this->bdd->recuperer($requete);
109
		$nombre = $this->bdd->recuperer($requete);
110
		return (int) $nombre['nbre'];
110
		return (int) $nombre['nbre'];
111
	}
111
	}
112
	
112
 
113
	private function trierNoms() {
113
	private function trierNoms() {
114
		$recherche = $this->parametres->get('recherche');
114
		$recherche = $this->parametres->get('recherche');
115
		if ($recherche == 'floue') {
115
		if ($recherche == 'floue') {
116
			$this->trierRechercheFloue();
116
			$this->trierRechercheFloue();
117
		}
117
		}
118
	}
118
	}
119
	
119
 
120
	public function trierRechercheFloue() {
120
	public function trierRechercheFloue() {
121
		$nomDemande = $this->parametres->get('masque');
121
		$nomDemande = $this->parametres->get('masque');
122
		$nomDemandeSimple = strtolower(Chaine::supprimerAccents($nomDemande));
122
		$nomDemandeSimple = strtolower(Chaine::supprimerAccents($nomDemande));
Line 123... Line 123...
123
 
123
 
Line 131... Line 131...
131
		}
131
		}
132
		$noms = $this->noms;
132
		$noms = $this->noms;
133
		$this->noms = Tableau::trierMD($noms, array('score' => false));
133
		$this->noms = Tableau::trierMD($noms, array('score' => false));
134
		//print_r($this->noms);
134
		//print_r($this->noms);
135
	}
135
	}
136
	
136
 
137
	private function construireTableauRetour() {
137
	private function construireTableauRetour() {
138
		$retour = array('entete' => array(), 'resultats' => array());
138
		$retour = array('entete' => array(), 'resultats' => array());
139
		$retour['resultats'] = $this->construireResultats();
139
		$retour['resultats'] = $this->construireResultats();
140
		$retour['entete'] = $this->construireEntete();
140
		$retour['entete'] = $this->construireEntete();
141
		return $retour;
141
		return $retour;
142
	}	
142
	}
143
	
143
 
144
	private function construireResultats() {
144
	private function construireResultats() {
145
		$nomsFormates = array();
145
		$nomsFormates = array();
146
		foreach ($this->noms as $nom) {
146
		foreach ($this->noms as $nom) {
147
			$id = $nom['num_nom'];
147
			$id = $nom['num_nom'];
148
			$nomsFormates[$id] = $this->formaterNom($nom);
148
			$nomsFormates[$id] = $this->formaterNom($nom);
149
		}
149
		}
150
		return $nomsFormates;
150
		return $nomsFormates;
151
	}
151
	}
152
	
152
 
153
	private function formaterNom($nom) {
153
	private function formaterNom($nom) {
154
		$nomFormate = array();
154
		$nomFormate = array();
155
		$nomformate['nom_sci'] = $nom['nom_sci'];
155
		$nomformate['nom_sci'] = $nom['nom_sci'];
156
		$nomformate['retenu'] = ($nom['num_nom'] == $nom['num_nom_retenu']) ? true : false;
156
		$nomformate['retenu'] = ($nom['num_nom'] == $nom['num_nom_retenu']) ? true : false;
157
		$nomformate['href'] = $this->formaterHref($nom);
157
		$nomformate['href'] = $this->formaterHref($nom);
158
		return $nomformate;
158
		return $nomformate;
159
	}
159
	}
160
	
160
 
161
	private function formaterHref($nom) {
161
	private function formaterHref($nom) {
162
		$squelette = 'http://localhost/service:nel:0.1/fournier/taxons/%s';
162
		$squelette = 'http://localhost/service:nel:0.1/fournier/taxons/%s';
163
		$href = sprintf($squelette, $nom['num_nom_retenu']);
163
		$href = sprintf($squelette, $nom['num_nom_retenu']);
164
		return $href;
164
		return $href;
165
	}
165
	}
166
	
166
 
167
	private function construireEntete() {
167
	private function construireEntete() {
168
		$entete = array('masque' => '', 'depart' => 0, 'limite' => 100, 'total' => 0);
168
		$entete = array('masque' => '', 'depart' => 0, 'limite' => 100, 'total' => 0);
169
		$entete['masque'] = $this->formaterEnteteMasque();
169
		$entete['masque'] = $this->formaterEnteteMasque();
170
		$entete['depart'] = (int) $this->parametres->get('navigation.depart');
170
		$entete['depart'] = (int) $this->parametres->get('navigation.depart');
171
		$entete['limite'] = (int) $this->parametres->get('navigation.limite');
171
		$entete['limite'] = (int) $this->parametres->get('navigation.limite');
Line 176... Line 176...
176
		if ($hrefSuivant = $this->formaterEnteteHrefSuivant()) {
176
		if ($hrefSuivant = $this->formaterEnteteHrefSuivant()) {
177
			$entete['href.suivant'] = $hrefSuivant;
177
			$entete['href.suivant'] = $hrefSuivant;
178
		}
178
		}
179
		return $entete;
179
		return $entete;
180
	}
180
	}
181
	
181
 
182
	private function formaterEnteteMasque() {
182
	private function formaterEnteteMasque() {
183
		$masqueComplet = array();
183
		$masqueComplet = array();
184
		if ($this->parametres->exister('masque')) {
184
		if ($this->parametres->exister('masque')) {
185
			$masque = '';
185
			$masque = '';
186
			$masque .= 'nom_sci='.$this->parametres->get('masque');
186
			$masque .= 'nom_sci='.$this->parametres->get('masque');
Line 213... Line 213...
213
			}
213
			}
214
			$masqueComplet[] = $masque;
214
			$masqueComplet[] = $masque;
215
		}
215
		}
216
		return implode('&', $masqueComplet);
216
		return implode('&', $masqueComplet);
217
	}
217
	}
218
	
218
 
219
	private function formaterEnteteHrefPrecedent() {
219
	private function formaterEnteteHrefPrecedent() {
220
		$limite = $this->parametres->get('navigation.limite');
220
		$limite = $this->parametres->get('navigation.limite');
221
		$departActuel = $this->parametres->get('navigation.depart');
221
		$departActuel = $this->parametres->get('navigation.depart');
222
		$departPrecedent = $departActuel - $limite;
222
		$departPrecedent = $departActuel - $limite;
223
		$href = null;
223
		$href = null;
Line 225... Line 225...
225
			$squelette = 'http://localhost/service:nel:0.1/fournier/taxons?navigation.depart=%s&navigation.limite=%s';
225
			$squelette = 'http://localhost/service:nel:0.1/fournier/taxons?navigation.depart=%s&navigation.limite=%s';
226
			$href = sprintf($squelette, $departPrecedent, $limite);
226
			$href = sprintf($squelette, $departPrecedent, $limite);
227
		}
227
		}
228
		return $href;
228
		return $href;
229
	}
229
	}
230
	
230
 
231
	private function formaterEnteteHrefSuivant() {
231
	private function formaterEnteteHrefSuivant() {
232
		$limite = $this->parametres->get('navigation.limite');
232
		$limite = $this->parametres->get('navigation.limite');
233
		$departActuel = $this->parametres->get('navigation.depart');
233
		$departActuel = $this->parametres->get('navigation.depart');
234
		$departSuivant = $departActuel + $limite;
234
		$departSuivant = $departActuel + $limite;
235
		$href = null;
235
		$href = null;