Subversion Repositories eFlore/Applications.coel

Rev

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

Rev 1699 Rev 1700
1
<?php
1
<?php
2
/**
2
/**
3
 * Service fournissant des informations sur les collections et les structures répondant aux critères de recherche
3
 * Service fournissant des informations sur les collections et les structures répondant aux critères de recherche
4
 * fournis en paramêtre.
4
 * fournis en paramêtre.
5
 *
5
 *
6
 * @author Raphaël Droz <raphael@tela-botanica.org>
6
 * @author Raphaël Droz <raphael@tela-botanica.org>
7
 * @author Jean-Pascal MILCENT <jpm@tela-botanica.org>
7
 * @author Jean-Pascal MILCENT <jpm@tela-botanica.org>
8
 * @license GPL v3 <http://www.gnu.org/licenses/gpl.txt>
8
 * @license GPL v3 <http://www.gnu.org/licenses/gpl.txt>
9
 * @license CECILL v2 <http://www.cecill.info/licences/Licence_CeCILL_V2-en.txt>
9
 * @license CECILL v2 <http://www.cecill.info/licences/Licence_CeCILL_V2-en.txt>
10
 * @copyright 2009, 2013 Tela-Botanica
10
 * @copyright 2009, 2013 Tela-Botanica
11
 */
11
 */
12
class CoelRecherche extends Coel {
12
class CoelRecherche extends Coel {
13
 
13
 
14
	/**
14
	/**
15
	 * Méthode principale appelée avec une requête de type GET.
15
	 * Méthode principale appelée avec une requête de type GET.
16
	 * Elle sert d'aiguilleur pour appeller la méthode correspondant au type de recherche passé en paramêtre.
16
	 * Elle sert d'aiguilleur pour appeller la méthode correspondant au type de recherche passé en paramêtre.
17
	 */
17
	 */
18
	public function getElement($param = array()) {
18
	public function getElement($param = array()) {
19
		// Initialisation des variables
19
		// Initialisation des variables
20
		$info = array();
20
		$info = array();
21
				
21
				
22
		// Nour recherchons le type de requête demandé
22
		// Nour recherchons le type de requête demandé
23
		$type = $param[0];
23
		$type = $param[0];
24
				 
24
				 
25
		$methode = 'getElement'.$type;
25
		$methode = 'getElement'.$type;
26
		if (method_exists($this, $methode)) {
26
		if (method_exists($this, $methode)) {
27
			array_shift($param);
27
			array_shift($param);
28
			$info = $this->$methode($param);
28
			$info = $this->$methode($param);
29
		} else {
29
		} else {
30
			$this->messages[] = "Le type de recherche demandé '$type' n'est pas disponible.";
30
			$this->messages[] = "Le type de recherche demandé '$type' n'est pas disponible.";
31
		}
31
		}
32
		
32
		
33
		// Envoie sur la sortie standard
33
		// Envoie sur la sortie standard
-
 
34
		if($this->formatRetour == 'text/plain') {
-
 
35
			$this->envoyer($info, 'text/plain', 'utf-8', false);
-
 
36
			exit;
-
 
37
		}
34
		$this->envoyer($info);
38
		$this->envoyer($info);
35
	}
39
	}
36
	
40
	
37
 	/* Méthode pour récupérer une liste d'information sur les collections et/ou structures en fonction de mots et de
41
	/* Méthode pour récupérer une liste d'information sur les collections et/ou structures en fonction de mots et de
38
 	 * restrictions.
42
	 * restrictions.
39
	 * Appelée avec les paramêtres d'url suivant :
43
	 * Appelée avec les paramêtres d'url suivant :
40
	 * /CoelRecherche/ParDefaut/_
44
	 * /CoelRecherche/ParDefaut/_
41
	 * ou les _ représentent dans l'ordre : mots
45
	 * ou les _ représentent dans l'ordre : mots
42
	 * Si un des paramêtres est absent, il prendre la valeur *
46
	 * Si un des paramêtres est absent, il prendre la valeur *
43
	 */
47
	 */
44
	public function getElementParDefaut($param) {
48
	public function getElementParDefaut($param) {
45
		// Initialisation des variables
49
		// Initialisation des variables
46
		$info = array();
50
		$info = array();
47
				
51
				
48
		// Pré traitement des paramêtres
52
		// Pré traitement des paramêtres
49
		$p = $this->pretraiterParametresUrl($param);
53
		$p = $this->pretraiterParametresUrl($param);
50
 
54
 
51
        $fromClause = $whereClause = $joinClause = array();
55
		$fromClause = $whereClause = $joinClause = array();
52
        self::construireFromEtWhere($p, $fromClause, $joinClause, $whereClause);
56
		self::construireFromEtWhere($p, $fromClause, $joinClause, $whereClause);
53
 
57
 
54
		// Construction de la requête
58
		// Construction de la requête
55
		$requete = sprintf(
59
		$requete = sprintf(
56
            'SELECT %s cs_id_structure, cs_ville, cs_nom, cs_code_postal, cs_latitude, cs_longitude, cc_id_collection, cc_nom'
60
			'SELECT %s cs_id_structure, cs_ville, cs_nom, cs_code_postal, cs_latitude, cs_longitude, cc_id_collection, cc_nom'
57
            . ' FROM %s %s'
61
			. ' FROM %s %s'
58
            . ' WHERE %s ORDER BY %s %s -- %s:%d',
62
			. ' WHERE %s ORDER BY %s %s -- %s:%d',
59
 
63
 
60
            $this->distinct ? 'DISTINCT' : '',
64
			$this->distinct ? 'DISTINCT' : '',
61
 
65
 
62
            implode(',', $fromClause),
66
			implode(',', $fromClause),
63
            implode(' ', $joinClause),
67
			implode(' ', $joinClause),
64
 
68
 
65
            $whereClause ? implode(" AND ", $whereClause) : TRUE,
69
			$whereClause ? implode(" AND ", $whereClause) : TRUE,
66
            is_null($this->orderby) ? 'cs_ville ASC, cs_nom ASC, cc_nom ASC' : $this->orderby,
70
			is_null($this->orderby) ? 'cs_ville ASC, cs_nom ASC, cc_nom ASC' : $this->orderby,
67
 
71
 
68
            $this->limit != -1 ? "LIMIT {$this->start}, {$this->limit}" : "",
72
			$this->limit != -1 ? "LIMIT {$this->start}, {$this->limit}" : "",
69
            __FILE__, __LINE__);
73
			__FILE__, __LINE__);
70
 
74
 
71
		
75
		
72
		// Récupération des résultats
76
		// Récupération des résultats
73
		try {
77
		try {
74
			$donnees = $this->bdd->query($requete)->fetchAll(PDO::FETCH_ASSOC);
78
			$donnees = $this->bdd->query($requete)->fetchAll(PDO::FETCH_ASSOC);
75
			if ($donnees === false) {
79
			if ($donnees === false) {
76
				$this->messages[] = "La requête a retourné aucun résultat.";
80
				$this->messages[] = "La requête a retourné aucun résultat.";
77
			} else {
81
			} else {
78
				$info = $donnees;
82
				$info = $donnees;
79
			}
83
			}
80
		} catch (PDOException $e) {
84
		} catch (PDOException $e) {
81
			$this->messages[] = sprintf($this->getTxt('sql_erreur'), $e->getFile(), $e->getLine(), $e->getMessage());
85
			$this->messages[] = sprintf($this->getTxt('sql_erreur'), $e->getFile(), $e->getLine(), $e->getMessage());
82
		}
86
		}
83
		return $info;
87
		return $info;
84
	}
88
	}
85
	
89
	
86
	/* Méthode pour récupérer une liste d'information sur les collections et/ou structures en fonction de mots et de
90
	/* Méthode pour récupérer une liste d'information sur les collections et/ou structures en fonction de mots et de
87
 	 * restrictions.
91
	 * restrictions.
88
	 * Appelée avec les paramêtres d'url suivant :
92
	 * Appelée avec les paramêtres d'url suivant :
89
	 * /CoelRecherche/ParDefaut/_
93
	 * /CoelRecherche/ParDefaut/_
90
	 * ou les _ représentent dans l'ordre : mots
94
	 * ou les _ représentent dans l'ordre : mots
91
	 * Si un des paramêtres est absent, il prendre la valeur *
95
	 * Si un des paramêtres est absent, il prendre la valeur *
92
	 */
96
	 */
93
	public function getElementNombre($param) {
97
	public function getElementNombre($param) {
94
		// Initialisation des variables
98
		// Initialisation des variables
95
		$info = array();
99
		$info = array();
96
				
100
				
97
		// Pré traitement des paramêtres
101
		// Pré traitement des paramêtres
98
		$p = $this->pretraiterParametresUrl($param);
102
		$p = $this->pretraiterParametresUrl($param);
99
 
103
 
100
        $fromClause = $whereClause = $joinClause = array();
104
		$fromClause = $whereClause = $joinClause = array();
101
        self::construireFromEtWhere($p, $fromClause, $joinClause, $whereClause);
105
		self::construireFromEtWhere($p, $fromClause, $joinClause, $whereClause);
102
 
106
 
103
		// Construction de la requête
107
		// Construction de la requête
104
		// Il est important de compter le nombre d'association structure-collection différentes pour obtenir le bon nombre
108
		// Il est important de compter le nombre d'association structure-collection différentes pour obtenir le bon nombre
105
		$requete = sprintf(
109
		$requete = sprintf(
106
            'SELECT %s COUNT(cs_id_structure) AS nbre, cc_id_collection '
110
			'SELECT %s COUNT(cs_id_structure) AS nbre, cc_id_collection '
107
            . ' FROM %s %s'
111
			. ' FROM %s %s'
108
            . ' WHERE %s ORDER BY %s LIMIT %d, %d -- %s:%d',
112
			. ' WHERE %s ORDER BY %s LIMIT %d, %d -- %s:%d',
109
 
113
 
110
            $this->distinct ? 'DISTINCT' : '',
114
			$this->distinct ? 'DISTINCT' : '',
111
 
115
 
112
            implode(',', $fromClause),
116
			implode(',', $fromClause),
113
            implode(' ', $joinClause),
117
			implode(' ', $joinClause),
114
 
118
 
115
            $whereClause ? implode(" AND ", $whereClause) : TRUE,
119
			$whereClause ? implode(" AND ", $whereClause) : TRUE,
116
            is_null($this->orderby) ? 'cs_ville ASC, cs_nom ASC' : $this->orderby,
120
			is_null($this->orderby) ? 'cs_ville ASC, cs_nom ASC' : $this->orderby,
117
            $this->start, $this->limit,
121
			$this->start, $this->limit,
118
            __FILE__, __LINE__);
122
			__FILE__, __LINE__);
119
 
123
 
120
 
124
 
121
		// Récupération des résultats
125
		// Récupération des résultats
122
		try {
126
		try {
123
			$donnees = $this->bdd->query($requete)->fetch(PDO::FETCH_ASSOC);
127
			$donnees = $this->bdd->query($requete)->fetch(PDO::FETCH_ASSOC);
124
			if ($donnees === false) {
128
			if ($donnees === false) {
125
				$this->messages[] = "La requête a retourné aucun résultat.";
129
				$this->messages[] = "La requête a retourné aucun résultat.";
126
			} else {
130
			} else {
127
				$info = $donnees['nbre'];
131
				$info = $donnees['nbre'];
128
			}
132
			}
129
		} catch (PDOException $e) {
133
		} catch (PDOException $e) {
130
			$this->messages[] = sprintf($this->getTxt('sql_erreur'), $e->getFile(), $e->getLine(), $e->getMessage());
134
			$this->messages[] = sprintf($this->getTxt('sql_erreur'), $e->getFile(), $e->getLine(), $e->getMessage());
131
		}
135
		}
132
 
136
 
133
		return $info;
137
		return $info;
134
	}
138
	}
135
	
139
	
136
	private function pretraiterParametresUrl($param) {
140
	private function pretraiterParametresUrl($param) {
137
		// Tableau des paramêtres qui peuvent être passés dans l'url
141
		// Tableau des paramêtres qui peuvent être passés dans l'url
138
		$params_passes = array('mots' => 'str', 
142
		$params_passes = array(
-
 
143
			'mots' => 'str', 
139
			'sci' => 'bool', 
144
			'sci' => 'bool', 
140
			'bot' => 'int', 
145
			'bot' => 'int', 
141
			'zg' => 'str', 
146
			'zg' => 'str', 
142
			'p' => 'str', 
147
			'p' => 'str', 
143
			'pr' => 'int',
148
			'pr' => 'int',
144
			'str-d' => 'defaut',
149
			'str-d' => 'frdepliste',
145
			'veg' => 'int',
150
			'veg' => 'int',
146
			'projets' => 'int');
151
			'projets' => 'int');
147
		
152
		
148
		$p = $this->traiterParametresUrl(array_keys($params_passes), $param, false);
153
		$p = $this->traiterParametresUrl(array_keys($params_passes), $param, false);
149
		$this->debug[] = $param;
154
		$this->debug[] = $param;
150
		foreach ($params_passes as $param_passe => $type) {
155
		foreach ($params_passes as $param_passe => $type) {
151
			if (isset($p[$param_passe])) {
156
			if (isset($p[$param_passe])) {
152
				// Suppression des éventuels espaces en début et fin de chaine
157
				// Suppression des éventuels espaces en début et fin de chaine
153
				$valeur = trim($p[$param_passe]);
158
				$valeur = trim($p[$param_passe]);
154
				
159
				
155
				// Type de paramêtre chaine
160
				// Type de paramêtre chaine
156
				if ($type == 'str') {
161
				if ($type == 'str') {
157
					// Suppression des slash
162
					// Suppression des slash
158
					$valeur = stripslashes($valeur);
163
					$valeur = stripslashes($valeur);
159
					
164
					
160
					// Utilisation d'une recherche de chaîne exacte
165
					// Utilisation d'une recherche de chaîne exacte
161
					if (preg_match('/^"(.*)"$/', $valeur, $match)) {
166
					if (preg_match('/^"(.*)"$/', $valeur, $match)) {
162
						$valeur = '%'.$match[1].'%';
167
						$valeur = '%'.$match[1].'%';
163
					} else {
168
					} else {
164
						// Recherche de mots non liés
169
						// Recherche de mots non liés
165
						$mots = explode(' ', $valeur);
170
						$mots = explode(' ', $valeur);
166
						$valeur = '%'.implode ('%', $mots).'%';
171
						$valeur = '%'.implode ('%', $mots).'%';
167
					}
172
					}
168
					// Mise en place des quotes pour l'intérogation dans la bdd
173
					// Mise en place des quotes pour l'intérogation dans la bdd
169
					$valeur = $this->bdd->quote($valeur);
174
					$valeur = $this->bdd->quote($valeur);
170
				}
175
				}
171
				// Type de paramêtre booléen
176
				// Type de paramêtre booléen
172
				if ($type == 'bool') {
177
				if ($type == 'bool') {
173
					if (preg_match('/^[0]$/', $valeur)) {
178
					if (preg_match('/^[0]$/', $valeur)) {
174
						$valeur = false;
179
						$valeur = false;
175
					} else if (preg_match('/^[1]$/', $valeur)) {
180
					} else if (preg_match('/^[1]$/', $valeur)) {
176
						$valeur = true;
181
						$valeur = true;
177
					} else {
182
					} else {
178
						$this->messages[] = "Le paramêtre '$param_passe' attend une valeur de type 0 ou 1 et non '$valeur'.";
183
						$this->messages[] = "Le paramêtre '$param_passe' attend une valeur de type 0 ou 1 et non '$valeur'.";
179
						$valeur = null;
184
						$valeur = null;
180
					}
185
					}
181
					
186
					
182
				}
187
				}
183
				// Type de paramêtre entier
188
				// Type de paramêtre entier
184
				if ($type == 'int') {
189
				if ($type == 'int') {
185
					if (!preg_match('/^(?:[0-9]+,\s*)*[0-9]+$/', $valeur)) {
190
					if (!preg_match('/^(?:[0-9]+,\s*)*[0-9]+$/', $valeur)) {
186
						$this->messages[] = "Le paramêtre '$param_passe' attend une ou plusieurs valeurs de type entiers ".
191
						$this->messages[] = "Le paramêtre '$param_passe' attend une ou plusieurs valeurs de type entiers ".
187
							"séparés par des virgules et non '$valeur'.";
192
							"séparés par des virgules et non '$valeur'.";
188
						$valeur = null;
193
						$valeur = null;
189
					}
194
					}
190
				}
195
				}
191
				
196
 
-
 
197
				if ($type == 'frdepliste') {
-
 
198
					$valeur = array_filter(explode(',', $valeur), create_function('$val', 'return preg_match("/^(\d+|2A|2B)$/i", $val);'));
-
 
199
				}
-
 
200
 
192
				$p[$param_passe] = $valeur;
201
				$p[$param_passe] = $valeur;
193
			}
202
			}
194
		}
203
		}
195
		
204
		
196
		return $p;
205
		return $p;
197
	}
206
	}
198
	
207
	
199
	static function construireFromEtWhere($p, &$from, &$join, &$where) {
208
	static function construireFromEtWhere($p, &$from, &$join, &$where) {
200
        $from = array('coel_collection');
209
		$from = array('coel_collection');
201
        $join = array('LEFT JOIN coel_structure ON (cc_ce_structure = cs_id_structure)');
210
		$join = array('LEFT JOIN coel_structure ON (cc_ce_structure = cs_id_structure)');
202
		$where = array();
211
		$where = array();
203
 
212
 
204
		// Gestion du from en fonction des paramêtres
213
		// Gestion du from en fonction des paramêtres
205
		if (isset($p['str-d'])) {// ATTENTION : Remplace $from, doit être situé en première position!
214
		if (isset($p['str-d'])) {// ATTENTION : Remplace $from, doit être situé en première position!
206
			$from = array('coel_structure');
215
			$from = array('coel_structure');
207
            $join = array('LEFT JOIN coel_collection ON (cs_id_structure = cc_ce_structure)');
216
			$join = array('LEFT JOIN coel_collection ON (cs_id_structure = cc_ce_structure)');
208
		}
217
		}
209
		
218
		
210
		// Construire from et where en fonction des paramêtres 
219
		// Construire from et where en fonction des paramêtres 
211
		if (isset($p['mots'])) {
220
		if (isset($p['mots'])) {
212
			$where[] = '(' . implode(' OR ', array(
221
			$where[] = '(' . implode(' OR ', array(
213
				"cc_nom LIKE {$p['mots']}",
222
				"cc_nom LIKE {$p['mots']}",
214
				"cc_truk_nom_alternatif LIKE {$p['mots']}",
223
				"cc_truk_nom_alternatif LIKE {$p['mots']}",
215
				"cc_truk_code LIKE {$p['mots']}",
224
				"cc_truk_code LIKE {$p['mots']}",
216
				"cc_description LIKE {$p['mots']}",
225
				"cc_description LIKE {$p['mots']}",
217
				"cc_description_specialiste LIKE {$p['mots']}",
226
				"cc_description_specialiste LIKE {$p['mots']}",
218
				"cc_historique LIKE {$p['mots']}",
227
				"cc_historique LIKE {$p['mots']}",
219
				"cs_nom LIKE {$p['mots']}",
228
				"cs_nom LIKE {$p['mots']}",
220
				"cs_truk_nom_alternatif LIKE {$p['mots']}",
229
				"cs_truk_nom_alternatif LIKE {$p['mots']}",
221
				"cs_description LIKE {$p['mots']}",
230
				"cs_description LIKE {$p['mots']}",
222
				"cs_adresse_01 LIKE {$p['mots']}",
231
				"cs_adresse_01 LIKE {$p['mots']}",
223
				"cs_adresse_02 LIKE {$p['mots']}",
232
				"cs_adresse_02 LIKE {$p['mots']}",
224
				"cs_ville LIKE {$p['mots']}",
233
				"cs_ville LIKE {$p['mots']}",
225
				"cs_truk_identifiant_alternatif LIKE {$p['mots']}",
234
				"cs_truk_identifiant_alternatif LIKE {$p['mots']}",
226
				"cs_condition_acces LIKE {$p['mots']}",
235
				"cs_condition_acces LIKE {$p['mots']}",
227
				"cs_condition_usage LIKE {$p['mots']}",
236
				"cs_condition_usage LIKE {$p['mots']}",
228
				"cs_truk_telephone LIKE {$p['mots']}",
237
				"cs_truk_telephone LIKE {$p['mots']}",
229
				"cs_courriel LIKE {$p['mots']}",
238
				"cs_courriel LIKE {$p['mots']}",
230
				"cs_truk_url LIKE {$p['mots']}") . ')');
239
				"cs_truk_url LIKE {$p['mots']}") . ')');
231
		}
240
		}
232
 
241
 
233
		if (isset($p['sci'])) {
242
		if (isset($p['sci'])) {
234
			if ($p['sci'] === true) {
243
			if ($p['sci'] === true) {
235
				$where[] = 'csv_mark_visite_avec_motif = 1';
244
				$where[] = 'csv_mark_visite_avec_motif = 1';
236
			} else if ($p['sci'] === false) {
245
			} else if ($p['sci'] === false) {
237
				$where[] = 'csv_mark_acces_ss_motif = 1';
246
				$where[] = 'csv_mark_acces_ss_motif = 1';
238
			}
247
			}
239
		}
248
		}
240
 
249
 
241
		if (isset($p['bot'])) {
250
		if (isset($p['bot'])) {
242
			$where[] = "ccb_ce_truk_type IN ({$p['bot']})";
251
			$where[] = "ccb_ce_truk_type IN ({$p['bot']})";
243
		}
252
		}
244
		if (isset($p['zg'])) {
253
		if (isset($p['zg'])) {
245
			$where[] = "cc_truk_couverture_lieu LIKE {$p['zg']}";
254
			$where[] = "cc_truk_couverture_lieu LIKE {$p['zg']}";
246
		}
255
		}
247
		if (isset($p['p'])) {
256
		if (isset($p['p'])) {
248
			$where[] = "cp_fmt_nom_complet LIKE {$p['p']}";
257
			$where[] = "cp_fmt_nom_complet LIKE {$p['p']}";
249
		}
258
		}
250
		if (isset($p['pr'])) {
259
		if (isset($p['pr'])) {
251
			$where[] = "ccap_id_role IN ({$p['pr']})";
260
			$where[] = "ccap_id_role IN ({$p['pr']})";
252
		}
261
		}
253
		if (isset($p['str-d'])) {
262
		if (isset($p['str-d'])) {
254
			$where[] = 'cs_ce_truk_pays = 2654';
263
			$where[] = 'cs_ce_truk_pays = 2654';
255
            $where[] = "cs_code_postal LIKE '{$p['str-d']}%'";
264
			$where[] = sprintf("cs_code_postal REGEXP '^(%s).*'", implode('|', $p['str-d']));
256
		}
265
		}
257
 
266
 
258
		if (isset($p['veg'])) {
267
		if (isset($p['veg'])) {
259
			$veg = explode(',', $p['veg']);
268
			$veg = explode(',', $p['veg']);
260
			$veg_nbre = count($veg);
269
			$veg_nbre = count($veg);
261
			
270
			
262
			if ($veg_nbre == 1) {
271
			if ($veg_nbre == 1) {
263
				$where[] = "ccb_truk_nature LIKE '%{$p['veg']}%'";
272
				$where[] = "ccb_truk_nature LIKE '%{$p['veg']}%'";
264
			} else {
273
			} else {
265
				$recherche = array();
274
				$recherche = array();
266
				foreach ($veg as $id) {
275
				foreach ($veg as $id) {
267
					$recherche[] = "ccb_truk_nature LIKE '%$id%'";
276
					$recherche[] = "ccb_truk_nature LIKE '%$id%'";
268
				}
277
				}
269
				$where[] = '('.implode(' OR ', $recherche).') ';
278
				$where[] = '('.implode(' OR ', $recherche).') ';
270
			}
279
			}
271
		}
280
		}
272
		
281
		
273
		if (isset($p['projets'])) {
282
		if (isset($p['projets'])) {
274
			$where[] = "cc_ce_projet IN ({$p['projets']})";
283
			$where[] = "cc_ce_projet IN ({$p['projets']})";
275
            $where[] = "cs_ce_projet IN ({$p['projets']})";
284
			$where[] = "cs_ce_projet IN ({$p['projets']})";
276
		}
285
		}
277
		
286
		
278
 
287
 
279
		if (isset($p['sci'])) {
288
		if (isset($p['sci'])) {
280
			$join[] = 'LEFT JOIN coel_structure_valorisation ON (cs_id_structure = csv_id_structure)';
289
			$join[] = 'LEFT JOIN coel_structure_valorisation ON (cs_id_structure = csv_id_structure)';
281
		}
290
		}
282
		if (isset($p['bot']) || isset($p['veg'])) {
291
		if (isset($p['bot']) || isset($p['veg'])) {
283
			$join[] = 'LEFT JOIN coel_collection_botanique ON (cc_id_collection = ccb_id_collection)';
292
			$join[] = 'LEFT JOIN coel_collection_botanique ON (cc_id_collection = ccb_id_collection)';
284
		}
293
		}
285
		if (isset($p['p']) || isset($p['pr'])) {
294
		if (isset($p['p']) || isset($p['pr'])) {
286
			$join[] = 'LEFT JOIN coel_collection_a_personne ON (cc_id_collection = ccap_id_collection)';
295
			$join[] = 'LEFT JOIN coel_collection_a_personne ON (cc_id_collection = ccap_id_collection)';
287
		}
296
		}
288
		if (isset($p['p'])) {
297
		if (isset($p['p'])) {
289
			$join[] = 'LEFT JOIN coel_personne ON (ccap_id_personne = cp_id_personne)';
298
			$join[] = 'LEFT JOIN coel_personne ON (ccap_id_personne = cp_id_personne)';
290
		}
299
		}
291
    }
300
	}
292
}
301
}