Subversion Repositories eFlore/Projets.eflore-projets

Rev

Rev 1106 | Go to most recent revision | Only display areas with differences | Ignore whitespace | Details | Blame | Last modification | View Log | RSS feed

Rev 1106 Rev 1111
1
<?php
1
<?php
2
/**
2
/**
3
* Retourne la liste des noms répertoriés par le projet chorodep
3
* Retourne la liste des noms répertoriés par le projet chorodep
4
* 
4
* 
5
* @package chorodep
5
* @package chorodep
6
* @author Tela Botanica <equipe-dev@tela-botanica.org>
6
* @author Mathias Chouet <mathias@tela-botanica.org>
7
* @license GPL v3 <http://www.gnu.org/licenses/gpl.txt>
7
* @license GPL v3 <http://www.gnu.org/licenses/gpl.txt>
8
* @license CECILL v2 <http://www.cecill.info/licences/Licence_CeCILL_V2-en.txt>
8
* @license CECILL v2 <http://www.cecill.info/licences/Licence_CeCILL_V2-en.txt>
9
* @version 1.0
9
* @version 1.0
10
* @copyright 1999-2014 Tela Botanica (accueil@tela-botanica.org)
10
* @copyright 1999-2014 Tela Botanica (accueil@tela-botanica.org)
11
*/
11
*/
12
 
12
 
13
class Noms extends Commun {
13
class Noms extends Commun {
14
 
14
 
15
	protected $serviceNom = 'noms';
15
	protected $serviceNom = 'noms';
16
	protected $table;
16
	protected $table;
17
	protected $masque;
17
	protected $masque;
18
	protected $depart;
18
	protected $depart;
19
	protected $limite;
19
	protected $limite;
20
	protected $tri;
20
	protected $tri;
21
	protected $tri_dir;
21
	protected $tri_dir;
22
 
-
 
23
	public function __construct($config = null) {
22
 
24
		parent::__construct($config);
23
	protected function init() {
25
		$this->masque = array();
24
		$this->masque = array();
26
		$this->depart = 0;
25
		$this->depart = 0;
27
		$this->limite = 20;
26
		$this->limite = 20;
28
		$this->tri = 'nom_sci';
27
		$this->tri = 'nom_sci';
29
		$this->tri_dir = 'ASC';
28
		$this->tri_dir = 'ASC';
30
		$this->init();
-
 
31
	}
-
 
32
 
-
 
33
	protected function init() {
-
 
34
		$this->traiterVersionProjet();
29
		$this->traiterVersionProjet();
35
		$this->table = $this->table_version[0];
30
		$this->table = $this->table_version[0];
36
	}
31
	}
37
 
32
 
38
	/**
33
	/**
39
	 * Récupère les paramètres de navigation
34
	 * Récupère les paramètres de navigation
40
	 * @param type $parametres
35
	 * @param type $parametres
41
	 */
36
	 */
42
	protected function setDepartLimite($parametres) {
37
	protected function setDepartLimite($parametres) {
43
		if(isset($parametres['navigation.depart']) && $parametres['navigation.depart'] != '') {
38
		if(isset($parametres['navigation.depart']) && $parametres['navigation.depart'] != '') {
44
			$this->depart = max(0, intval($parametres['navigation.depart']));
39
			$this->depart = max(0, intval($parametres['navigation.depart']));
45
		}
40
		}
46
		if(isset($parametres['navigation.limite']) && $parametres['navigation.limite'] != '') {
41
		if(isset($parametres['navigation.limite']) && $parametres['navigation.limite'] != '') {
47
			$this->limite = max(0, intval($parametres['navigation.limite']));
42
			$this->limite = max(0, intval($parametres['navigation.limite']));
48
		}
43
		}
49
	}
44
	}
50
 
45
 
51
	/**
46
	/**
52
	 * Récupère les paramètres de filtrage
47
	 * Récupère les paramètres de filtrage
53
	 * @param type $parametres
48
	 * @param type $parametres
54
	 */
49
	 */
55
	protected function setMasque($parametres) {
50
	protected function setMasque($parametres) {
56
		if(isset($parametres['masque.nom']) && $parametres['masque.nom'] != '') {
51
		if(isset($parametres['masque.nom']) && $parametres['masque.nom'] != '') {
57
			$this->masque['nom'] = $parametres['masque.nom'];
52
			$this->masque['nom'] = $parametres['masque.nom'];
58
		}
53
		}
59
		if(isset($parametres['masque.zone-geo']) && $parametres['masque.zone-geo'] != '') {
54
		if(isset($parametres['masque.zone-geo']) && $parametres['masque.zone-geo'] != '') {
60
			$zg = $parametres['masque.zone-geo'];
55
			$zg = $parametres['masque.zone-geo'];
61
			// Tango Corse
56
			// Tango Corse
62
			if ($zg == '2A' || $zg == '2B') {
57
			if ($zg == '2A' || $zg == '2B') {
63
				$zg = '20';
58
				$zg = '20';
64
			}
59
			}
65
			$this->masque['zone-geo'] = $zg;
60
			$this->masque['zone-geo'] = $zg;
66
		}
61
		}
67
	}
62
	}
68
 
63
 
69
	/**
64
	/**
70
	 * Récupère les paramètres de tri
65
	 * Récupère les paramètres de tri
71
	 * @param type $parametres
66
	 * @param type $parametres
72
	 */
67
	 */
73
	protected function setTri($parametres) {
68
	protected function setTri($parametres) {
74
		if(isset($parametres['retour.tri']) && $parametres['retour.tri'] != '') {
69
		if(isset($parametres['retour.tri']) && $parametres['retour.tri'] != '') {
75
			$this->tri = $parametres['retour.tri'];
70
			$this->tri = $parametres['retour.tri'];
76
		}
71
		}
77
		if(isset($parametres['retour.ordre']) && in_array($parametres['retour.ordre'], array('ASC', 'DESC'))) {
72
		if(isset($parametres['retour.ordre']) && in_array($parametres['retour.ordre'], array('ASC', 'DESC'))) {
78
			$this->tri_dir = $parametres['retour.ordre'];
73
			$this->tri_dir = $parametres['retour.ordre'];
79
		}
74
		}
80
	}
75
	}
81
 
76
 
82
	public function consulter($ressources, $parametres) {
77
	public function consulter($ressources, $parametres) {
83
		$donnees = array();
78
		$donnees = array();
84
 
79
 
85
		$this->setDepartLimite($parametres);
80
		$this->setDepartLimite($parametres);
86
		$this->setMasque($parametres);
81
		$this->setMasque($parametres);
87
		$this->setTri($parametres);
82
		$this->setTri($parametres);
88
		$noms = $this->listeNoms();
83
		$noms = $this->listeNoms();
89
		$total = $this->compterNoms();
84
		$total = $this->compterNoms();
90
 
85
 
91
		$url_base = Config::get('url_service');
86
		$url_base = Config::get('url_service');
92
 
87
 
93
		$masqueEnParams = array();
88
		$masqueEnParams = array();
94
		foreach ($this->masque as $k => $v) {
89
		foreach ($this->masque as $k => $v) {
95
			$masqueEnParams[] = 'masque.' . $k . '=' . $v;
90
			$masqueEnParams[] = 'masque.' . $k . '=' . $v;
96
		}
91
		}
97
		$masqueEnParams = implode('&', $masqueEnParams);
92
		$masqueEnParams = implode('&', $masqueEnParams);
98
 
93
 
99
		$donnees['entete'] = array(
94
		$donnees['entete'] = array(
100
			'masque' => $masqueEnParams,
95
			'masque' => $masqueEnParams,
101
			'total' => $total,
96
			'total' => $total,
102
			'depart' => $this->depart,
97
			'depart' => $this->depart,
103
			'limite' => $this->limite
98
			'limite' => $this->limite
104
		);
99
		);
105
		if ($this->depart > 0) {
100
		if ($this->depart > 0) {
106
			$donnees['entete']['href.precedent'] = $url_base . '/' . $this->serviceNom . '?'
101
			$donnees['entete']['href.precedent'] = $url_base . '/' . $this->serviceNom . '?'
107
					. 'navigation.depart=' . max(0, ($this->depart - $this->limite)) . '&navigation.limite=' . $this->limite
102
					. 'navigation.depart=' . max(0, ($this->depart - $this->limite)) . '&navigation.limite=' . $this->limite
108
					. '&retour.tri=' . $this->tri . '&retour.ordre=' . $this->tri_dir
103
					. '&retour.tri=' . $this->tri . '&retour.ordre=' . $this->tri_dir
109
					. '&' . $masqueEnParams;
104
					. '&' . $masqueEnParams;
110
		}
105
		}
111
		if (($this->depart + $this->limite) < $total ) {
106
		if (($this->depart + $this->limite) < $total ) {
112
			$donnees['entete']['href.suivant'] = $url_base . '/' . $this->serviceNom . '?'
107
			$donnees['entete']['href.suivant'] = $url_base . '/' . $this->serviceNom . '?'
113
					. 'navigation.depart=' . ($this->depart + $this->limite) . '&navigation.limite=' . $this->limite
108
					. 'navigation.depart=' . ($this->depart + $this->limite) . '&navigation.limite=' . $this->limite
114
					. '&retour.tri=' . $this->tri . '&retour.ordre=' . $this->tri_dir
109
					. '&retour.tri=' . $this->tri . '&retour.ordre=' . $this->tri_dir
115
					. '&' . $masqueEnParams;
110
					. '&' . $masqueEnParams;
116
		}
111
		}
117
		$donnees['resultat'] = $noms;
112
		$donnees['resultat'] = $noms;
118
 
113
 
119
		return $donnees;
114
		return $donnees;
120
	}
115
	}
121
 
116
 
122
	/**
117
	/**
123
	 * Renvoie la liste des noms répertoriés par chorodep; si un masque a été
118
	 * Renvoie la liste des noms répertoriés par chorodep; si un masque a été
124
	 * défini sur une zone géographique, retourne aussi la présence sur cette zone
119
	 * défini sur une zone géographique, retourne aussi la présence sur cette zone
125
	 */
120
	 */
126
	protected function listeNoms() {
121
	protected function listeNoms() {
127
		$req = "SELECT DISTINCT num_nom, nom_sci";
122
		$req = "SELECT DISTINCT num_nom, nom_sci";
128
		if (isset($this->masque['zone-geo']) && $this->masque['zone-geo'] != null) {
123
		if (isset($this->masque['zone-geo']) && $this->masque['zone-geo'] != null) {
129
			$req .= ", `" . $this->masque['zone-geo'] . "` as presence";
124
			$req .= ", `" . $this->masque['zone-geo'] . "` as presence";
130
		}
125
		}
131
		$req .= " FROM " . $this->table;
126
		$req .= " FROM " . $this->table;
132
		$req .= $this->construireWhere();
127
		$req .= $this->construireWhere();
133
		$req .= " ORDER BY ".$this->tri." ".$this->tri_dir." ";
128
		$req .= " ORDER BY ".$this->tri." ".$this->tri_dir." ";
134
		$req .= " LIMIT " . $this->depart . ", " . $this->limite;
129
		$req .= " LIMIT " . $this->depart . ", " . $this->limite;
135
 
130
 
136
		$resultat = $this->getBdd()->recupererTous($req);
131
		$resultat = $this->getBdd()->recupererTous($req);
137
 
132
 
138
		return $resultat;
133
		return $resultat;
139
	}
134
	}
140
 
135
 
141
	protected function compterNoms() {
136
	protected function compterNoms() {
142
		$req = "SELECT count(DISTINCT num_nom, nom_sci) AS compte FROM " . $this->table;
137
		$req = "SELECT count(DISTINCT num_nom, nom_sci) AS compte FROM " . $this->table;
143
		$req .= $this->construireWhere();
138
		$req .= $this->construireWhere();
144
		$resultat = $this->getBdd()->recuperer($req);
139
		$resultat = $this->getBdd()->recuperer($req);
145
 
140
 
146
		return $resultat['compte'];
141
		return $resultat['compte'];
147
	}
142
	}
148
 
143
 
149
	protected function construireWhere() {
144
	protected function construireWhere() {
150
		$where = "";
145
		$where = "";
151
		$conditions = array();
146
		$conditions = array();
152
		// élimination des entrées sans nn valide
147
		// élimination des entrées sans nn valide
153
		$conditions[] = "CAST(num_nom AS decimal) != 0";
148
		$conditions[] = "CAST(num_nom AS decimal) != 0";
154
		// masque
149
		// masque
155
		if(!empty($this->masque)) {
150
		if(!empty($this->masque)) {
156
			if(isset($this->masque['nom'])) {
151
			if(isset($this->masque['nom'])) {
157
				$masqueNom = $this->getBdd()->proteger($this->masque['nom']);
152
				$masqueNom = $this->getBdd()->proteger($this->masque['nom']);
158
				$conditions[] = "nom_sci LIKE $masqueNom";
153
				$conditions[] = "nom_sci LIKE $masqueNom";
159
			}
154
			}
160
			if(isset($this->masque['zone-geo'])) {
155
			if(isset($this->masque['zone-geo'])) {
161
				$masqueZg = $this->masque['zone-geo'];
156
				$masqueZg = $this->masque['zone-geo'];
162
				$conditions[] = "`$masqueZg` in ('1', '1?')";
157
				$conditions[] = "`$masqueZg` in ('1', '1?')";
163
			}
158
			}
164
		}
159
		}
165
		$where = " WHERE " . implode(' AND ', $conditions);
160
		$where = " WHERE " . implode(' AND ', $conditions);
166
		return $where;
161
		return $where;
167
	}
162
	}
168
}
163
}
169
?>
164
?>