Subversion Repositories eFlore/Applications.coel

Rev

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

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