Subversion Repositories eFlore/Applications.coel

Rev

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

Rev 1788 Rev 1858
Line 9... Line 9...
9
 * @license GPL v3 <http://www.gnu.org/licenses/gpl.txt>
9
 * @license GPL v3 <http://www.gnu.org/licenses/gpl.txt>
10
 * @license CECILL v2 <http://www.cecill.info/licences/Licence_CeCILL_V2-en.txt>
10
 * @license CECILL v2 <http://www.cecill.info/licences/Licence_CeCILL_V2-en.txt>
11
 * @copyright 2009, 2013 Tela-Botanica
11
 * @copyright 2009, 2013 Tela-Botanica
12
 */
12
 */
13
class CoelRecherche extends Coel {
13
class CoelRecherche extends Coel {
-
 
14
	protected $fromClause = array();
-
 
15
	protected $whereClause = array();
-
 
16
	protected $joinClause = array();
Line 14... Line 17...
14
 
17
 
15
	/**
18
	/**
16
	 * Méthode principale appelée avec une requête de type GET.
19
	 * Méthode principale appelée avec une requête de type GET.
17
	 * Elle sert d'aiguilleur pour appeller la méthode correspondant au type de recherche passé en paramêtre.
20
	 * Elle sert d'aiguilleur pour appeller la méthode correspondant au type de recherche passé en paramêtre.
Line 49... Line 52...
49
 
52
 
50
	/**
53
	/**
51
	 * Retourne les collections correspondant aux critères de recherche
54
	 * Retourne les collections correspondant aux critères de recherche
52
	 */
55
	 */
53
	public function getElementCollections($param) {
-
 
54
		// Initialisation des variables
-
 
55
		$info = array();
-
 
56
		$fromClause = $whereClause = $joinClause = array();
-
 
57
 
56
	public function getElementCollections($param) {
58
		// Pré traitement des paramêtres
57
		// Pré traitement des paramêtres
Line 59... Line 58...
59
		$p = $this->pretraiterParametresUrlCollections($param, $_GET);
58
		$p = $this->pretraiterParametresUrlCollections($param, $_GET);
60
 
59
 
Line 61... Line 60...
61
		// Construction des clauses
60
		// Construction des clauses
62
		self::construireFromEtWhereCollections($p, $fromClause, $joinClause, $whereClause);
-
 
63
 
61
		self::construireFromEtWhereCollections($p);
64
		// Construction de la requête
-
 
65
		$requete = sprintf(
-
 
66
			'SELECT %s cs_id_structure, cs_ville, cs_nom, cs_code_postal, cs_latitude, cs_longitude, cc_id_collection, cc_nom'
-
 
67
			. ' FROM %s %s'
-
 
68
			. ' WHERE %s ORDER BY %s %s -- %s:%d',
-
 
69
 
-
 
70
			$this->distinct ? 'DISTINCT' : '',	
-
 
71
			implode(',', $fromClause),
62
 
72
			implode(' ', $joinClause),
63
		// Construction de la requête
73
			$whereClause ? implode(" AND ", $whereClause) : TRUE,
-
 
74
			is_null($this->orderby) ? 'cs_ville ASC, cs_nom ASC, cc_nom ASC' : $this->orderby,
-
 
75
			$this->limit != -1 ? "LIMIT {$this->start}, {$this->limit}" : "",
-
 
76
			__FILE__,
64
		$champs = "cs_id_structure, cs_ville, cs_nom, cs_code_postal, cs_latitude, cs_longitude, cc_id_collection, cc_nom";
77
			__LINE__
65
		$this->orderby = is_null($this->orderby) ? 'cs_ville ASC, cs_nom ASC, cc_nom ASC' : $this->orderby;
78
		);
-
 
79
		
-
 
80
		//echo "REQUETE: " . $requete;
-
 
81
		//exit;
-
 
82
		// Récupération des résultats
-
 
83
		try {
-
 
84
			$donnees = $this->bdd->query($requete)->fetchAll(PDO::FETCH_ASSOC);
-
 
85
			if ($donnees === false) {
-
 
86
				$this->messages[] = "La requête n'a retourné aucun résultat.";
-
 
87
			} else {
-
 
88
				$info = $donnees;
-
 
89
			}
-
 
90
		} catch (PDOException $e) {
66
		$requete = $this->assemblerRequete($champs);
91
			$this->messages[] = sprintf($this->getTxt('sql_erreur'), $e->getFile(), $e->getLine(), $e->getMessage());
67
 
Line 92... Line 68...
92
		}
68
		$info =$this->lancerRequete($requete);
93
		return $info;
69
		return $info;
94
	}
70
	}
95
 
71
 
96
	/**
-
 
97
	 * Retourne le nombre de collections correspondant aux critères de recherche
-
 
98
	 */
-
 
Line 99... Line 72...
99
	public function getElementNombreCollections($param) {
72
	/**
100
		// Initialisation des variables
73
	 * Retourne le nombre de collections correspondant aux critères de recherche
Line 101... Line 74...
101
		$info = array();
74
	 */
102
		$fromClause = $whereClause = $joinClause = array();
75
	public function getElementNombreCollections($param) {
Line 103... Line 76...
103
		
76
		
104
		// Pré traitement des paramêtres
77
		// Pré traitement des paramêtres
105
		$p = $this->pretraiterParametresUrlCollections($param, $_GET);
78
		$p = $this->pretraiterParametresUrlCollections($param, $_GET);
106
 
79
 
107
		// Construction des clauses
80
		// Construction des clauses
108
		self::construireFromEtWhereCollections($p, $fromClause, $joinClause, $whereClause);
81
		self::construireFromEtWhereCollections($p);
109
		
-
 
110
		// Construction de la requête
82
		
111
		// Il est important de compter le nombre d'association structure-collection différentes pour obtenir le bon nombre
83
		// Construction de la requête
112
		// @WTF si on compte(*) on a le nombre d'associations structure-collection
84
		// Il est important de compter le nombre d'association structure-collection différentes pour obtenir le bon nombre
113
		// si on compte(cs_id_structure) on a le nombre d'associations structure-collection dont la structure n'est pas null
85
		// @WTF si on compte(*) on a le nombre d'associations structure-collection
114
		// en aucun cas on n'a le nombre d'association structure-collection DIFFERENTES, à moins de faire un distinct, ce qui n'est pas le cas ici
-
 
115
		// @AMHA on devrait compter(*) car la recherche de collections renvoie même celles qui ont une structure null
-
 
116
		$requete = sprintf(
-
 
117
				'SELECT COUNT(%s *) AS nbre, cc_id_collection '
-
 
118
			. ' FROM %s %s'
-
 
119
			. ' WHERE %s -- %s:%d',
-
 
120
		
-
 
121
			$this->distinct ? 'DISTINCT' : '',
-
 
122
			implode(',', $fromClause),
-
 
123
			implode(' ', $joinClause),
-
 
124
			$whereClause ? implode(" AND ", $whereClause) : TRUE,
-
 
125
			__FILE__,
86
		// si on compte(cs_id_structure) on a le nombre d'associations structure-collection dont la structure n'est pas null
126
			__LINE__
-
 
127
		);
-
 
128
		// echo "REQUETE: " . $requete;
-
 
129
		// exit;
-
 
130
		// Récupération des résultats
-
 
131
		try {
-
 
132
			$donnees = $this->bdd->query($requete)->fetch(PDO::FETCH_ASSOC);
-
 
133
			if ($donnees === false) {
-
 
Line 134... Line 87...
134
				$this->messages[] = "La requête n'a retourné aucun résultat.";
87
		// en aucun cas on n'a le nombre d'association structure-collection DIFFERENTES, à moins de faire un distinct, ce qui n'est pas le cas ici
135
			} else {
88
		// @AMHA on devrait compter(*) car la recherche de collections renvoie même celles qui ont une structure null
Line 136... Line 89...
136
				$info = $donnees['nbre'];
89
		$champs = 'COUNT(*) AS nbre, cc_id_collection ';
137
			}
90
		$this->orderby = is_null($this->orderby) ? 'cs_ville ASC, cs_nom ASC, cc_nom ASC' : $this->orderby;
138
		} catch (PDOException $e) {
91
		$requete = $this->assemblerRequete($champs);
139
			$this->messages[] = sprintf($this->getTxt('sql_erreur'), $e->getFile(), $e->getLine(), $e->getMessage());
92
 
140
		}
-
 
141
 
-
 
142
		return $info;
-
 
143
	}
-
 
144
 
93
		$info = $this->lancerRequeteNombre($requete);
145
	/**
94
 
Line 146... Line 95...
146
	 * Retourne les personnes correspondant aux critères de recherche
95
		return $info;
147
	 */
96
	}
-
 
97
 
-
 
98
	/**
-
 
99
	 * Retourne les personnes correspondant aux critères de recherche
Line -... Line 100...
-
 
100
	 */
-
 
101
	public function getElementPersonnes($param) {
-
 
102
		// Pré traitement des paramêtres
-
 
103
		$p = $this->pretraiterParametresUrlPersonnes($param, $_GET);
-
 
104
 
-
 
105
		// Construction des clauses
-
 
106
		self::construireFromEtWherePersonnes($p);
-
 
107
		$champs = 'cp_id_personne, cp_fmt_nom_complet, cp_prenom, cp_nom, cp_truk_nom_autre, cp_adresse_01, cp_ville, cp_naissance_date, cp_deces_date';
-
 
108
		$this->orderby = is_null($this->orderby) ? 'cp_nom ASC, cp_prenom ASC' : $this->orderby;
-
 
109
		$requete = $this->assemblerRequete($champs);
-
 
110
		
-
 
111
		$info = $this->lancerRequete($requete);
-
 
112
		return $info;
-
 
113
	}
-
 
114
 
-
 
115
	/**
-
 
116
	 * Retourne le nombre de personnes correspondant aux critères de recherche
-
 
117
	 */
-
 
118
	public function getElementNombrePersonnes($param) {
-
 
119
		// Pré traitement des paramêtres
-
 
120
		$p = $this->pretraiterParametresUrlPersonnes($param, $_GET);
-
 
121
 
-
 
122
		// Construction des clauses
-
 
123
		self::construireFromEtWherePersonnes($p);
-
 
124
		$this->orderby = is_null($this->orderby) ? 'cp_nom ASC, cp_prenom ASC' : $this->orderby;
-
 
125
		$champs = 'count(*) as nbre';
-
 
126
		// Construction de la requête
-
 
127
		$requete = $this->assemblerRequete($champs);
-
 
128
		$info = $this->lancerRequeteNombre($requete);
-
 
129
		return $info;
-
 
130
	}
-
 
131
	
-
 
132
	/**
-
 
133
	 * Retourne les publications correspondant aux critères de recherche
-
 
134
	 */
-
 
135
	public function getElementPublications($param) {
-
 
136
		// Pré traitement des paramêtres
-
 
137
		$p = $this->pretraiterParametresUrlPublications($param, $_GET);
-
 
138
	
-
 
139
		// Construction des clauses
-
 
140
		self::construireFromEtWherePublications($p);
-
 
141
		$champs = '*';
-
 
142
		$this->orderby = is_null($this->orderby) ? 'cpu_fmt_auteur ASC' : $this->orderby;
-
 
143
		$requete = $this->assemblerRequete($champs);
-
 
144
	
-
 
145
		$info = $this->lancerRequete($requete);
-
 
146
		return $info;
-
 
147
	}
-
 
148
	
-
 
149
	/**
-
 
150
	 * Retourne le nombre de personnes correspondant aux critères de recherche
-
 
151
	 */
-
 
152
	public function getElementNombrePublications($param) {
-
 
153
		// Pré traitement des paramêtres
-
 
154
		$p = $this->pretraiterParametresUrlPublications($param, $_GET);
-
 
155
	
148
	public function getElementPersonnes($param) {
156
		// Construction des clauses
149
		// Initialisation des variables
157
		self::construireFromEtWherePublications($p);
150
		$info = array();
158
		$this->orderby = is_null($this->orderby) ? 'cpu_fmt_auteur ASC' : $this->orderby;
151
		$fromClause = $whereClause = $joinClause = array();
159
		$champs = 'count(*) as nbre';
152
 
160
		// Construction de la requête
153
		// Pré traitement des paramêtres
161
		$requete = $this->assemblerRequete($champs);
154
		$p = $this->pretraiterParametresUrlPersonnes($param, $_GET);
162
		$info = $this->lancerRequeteNombre($requete);
-
 
163
		return $info;
155
 
164
	}
156
		// Construction des clauses
165
	
157
		self::construireFromEtWherePersonnes($p, $fromClause, $joinClause, $whereClause);
166
	private function assemblerRequete($champs) {
158
		
167
		// Construction de la requête
159
		// Construction de la requête
168
		$requete = sprintf(
160
		$requete = sprintf(
169
				'SELECT %s %s'
161
				'SELECT %s cp_id_personne, cp_fmt_nom_complet, cp_prenom, cp_nom, cp_truk_nom_autre, cp_adresse_01, cp_ville, cp_naissance_date, cp_deces_date'
170
				. ' FROM %s %s'
162
				. ' FROM %s %s'
171
				. ' WHERE %s ORDER BY %s %s -- %s:%d',
163
				. ' WHERE %s ORDER BY %s %s -- %s:%d',
172
	
164
 
173
				$this->distinct ? 'DISTINCT' : '',
-
 
174
				$champs,
-
 
175
				implode(',', $this->fromClause),
-
 
176
				implode(' ', $this->joinClause),
-
 
177
				$this->whereClause ? implode(" AND ", $this->whereClause) : TRUE,
-
 
178
				$this->orderby,
165
				$this->distinct ? 'DISTINCT' : '',
179
				$this->limit != -1 ? "LIMIT {$this->start}, {$this->limit}" : "",
166
				implode(',', $fromClause),
180
				__FILE__,
167
				implode(' ', $joinClause),
181
				__LINE__
168
				$whereClause ? implode(" AND ", $whereClause) : TRUE,
182
		);
169
				is_null($this->orderby) ? 'cp_nom ASC, cp_prenom ASC' : $this->orderby,
183
		//echo "REQUETE: " . $requete;
Line 184... Line 198...
184
		} catch (PDOException $e) {
198
		} catch (PDOException $e) {
185
			$this->messages[] = sprintf($this->getTxt('sql_erreur'), $e->getFile(), $e->getLine(), $e->getMessage());
199
			$this->messages[] = sprintf($this->getTxt('sql_erreur'), $e->getFile(), $e->getLine(), $e->getMessage());
186
		}
200
		}
187
		return $info;
201
		return $info;
188
	}
202
	}
189
 
203
	
190
	/**
-
 
191
	 * Retourne le nombre de personnes correspondant aux critères de recherche
-
 
192
	 */
-
 
193
	public function getElementNombrePersonnes($param) {
204
	private function lancerRequeteNombre($requete) {
194
		// Initialisation des variables
-
 
195
		$info = array();
205
		$info = array();
196
		$fromClause = $whereClause = $joinClause = array();
-
 
197
 
-
 
198
		// Pré traitement des paramêtres
-
 
199
		$p = $this->pretraiterParametresUrlPersonnes($param, $_GET);
-
 
200
 
-
 
201
		// Construction des clauses
-
 
202
		self::construireFromEtWherePersonnes($p, $fromClause, $joinClause, $whereClause);
-
 
203
 
-
 
204
		// Construction de la requête
-
 
205
		$requete = sprintf(
-
 
206
				'SELECT count(%s *) as nbre'
-
 
207
				. ' FROM %s %s'
-
 
208
				. ' WHERE %s -- %s:%d',
-
 
209
		
-
 
210
				$this->distinct ? 'DISTINCT' : '',
-
 
211
				implode(',', $fromClause),
-
 
212
				implode(' ', $joinClause),
-
 
213
				$whereClause ? implode(" AND ", $whereClause) : TRUE,
-
 
214
				__FILE__,
-
 
215
				__LINE__
-
 
216
		);
-
 
217
		//echo "REQUETE: " . $requete;
-
 
218
		//exit;
-
 
219
		// Récupération des résultats
206
		// Récupération des résultats
220
		try {
207
		try {
221
			$donnees = $this->bdd->query($requete)->fetch(PDO::FETCH_ASSOC);
208
			$donnees = $this->bdd->query($requete)->fetch(PDO::FETCH_ASSOC);
222
			if ($donnees === false) {
209
			if ($donnees === false) {
223
				$this->messages[] = "La requête n'a retourné aucun résultat.";
210
				$this->messages[] = "La requête n'a retourné aucun résultat.";
Line 253... Line 240...
253
			'adresse' => 'str', 
240
			'adresse' => 'str', 
254
			'date-vivant' => 'int'
241
			'date-vivant' => 'int'
255
		);
242
		);
256
		return $this->pretraiterParametresUrl($param, $qs, $params_passes);
243
		return $this->pretraiterParametresUrl($param, $qs, $params_passes);
257
	}
244
	}
-
 
245
	
-
 
246
	// Voici les paramètres qu'il faut passer au service Personnes, tous et dans l'ordre (soit une valeur soit '*')
-
 
247
	private function pretraiterParametresUrlPublications($param, $qs) {
-
 
248
		$params_passes = array(
-
 
249
				'titre' => 'str',
-
 
250
				'auteur' => 'str',
-
 
251
				'mot-cle' => 'str',
-
 
252
				'revue' => 'str',
-
 
253
				'date' => 'int'
-
 
254
		);
-
 
255
		return $this->pretraiterParametresUrl($param, $qs, $params_passes);
-
 
256
	}
Line 258... Line 257...
258
 
257
 
259
	private function pretraiterParametresUrl($param, $qs, $params_passes) {
258
	private function pretraiterParametresUrl($param, $qs, $params_passes) {
260
		$p = $this->traiterParametresUrl(array_keys($params_passes), $param, false);
259
		$p = $this->traiterParametresUrl(array_keys($params_passes), $param, false);
261
		$this->debug[] = $param;
260
		$this->debug[] = $param;
Line 316... Line 315...
316
 
315
 
317
		return $p;
316
		return $p;
Line 318... Line 317...
318
	}
317
	}
319
 
318
 
320
	// construit les clauses FROM et WHERE pour la recherche de collections (#CaptainObvious)
319
	// construit les clauses FROM et WHERE pour la recherche de collections (#CaptainObvious)
321
	static function construireFromEtWhereCollections($p, &$from, &$join, &$where) {
320
	private function construireFromEtWhereCollections($p) {
322
		$from = array('coel_collection');
321
		$this->fromClause = array('coel_collection');
Line 323... Line 322...
323
		$join = array('LEFT JOIN coel_structure ON (cc_ce_structure = cs_id_structure)');
322
		$this->joinClause = array('LEFT JOIN coel_structure ON (cc_ce_structure = cs_id_structure)');
324
		$where = array();
323
		$this->whereClause = array();
325
 
324
 
326
		// Gestion du from en fonction des paramêtres
325
		// Gestion du from en fonction des paramêtres
327
		if (isset($p['str-d'])) {// ATTENTION : Remplace $from, doit être situé en première position!
326
		if (isset($p['str-d'])) {// ATTENTION : Remplace $this->fromClause, doit être situé en première position!
Line 328... Line 327...
328
			$from = array('coel_structure');
327
			$this->fromClause = array('coel_structure');
329
			$join = array('LEFT JOIN coel_collection ON (cs_id_structure = cc_ce_structure)');
328
			$this->joinClause = array('LEFT JOIN coel_collection ON (cs_id_structure = cc_ce_structure)');
330
		}
329
		}
331
		
330
		
332
		// Construire from et where en fonction des paramêtres 
331
		// Construire from et where en fonction des paramêtres 
333
		if (isset($p['mots'])) {
332
		if (isset($p['mots'])) {
334
			$where[] = '(' . implode(' OR ', array(
333
			$this->whereClause[] = '(' . implode(' OR ', array(
335
				"cc_nom LIKE {$p['mots']}",
334
				"cc_nom LIKE {$p['mots']}",
Line 351... Line 350...
351
				"cs_truk_url LIKE {$p['mots']}")) . ')';
350
				"cs_truk_url LIKE {$p['mots']}")) . ')';
352
		}
351
		}
Line 353... Line 352...
353
 
352
 
354
		if (isset($p['sci'])) {
353
		if (isset($p['sci'])) {
355
			if ($p['sci'] === true) {
354
			if ($p['sci'] === true) {
356
				$where[] = 'csv_mark_visite_avec_motif = 1';
355
				$this->whereClause[] = 'csv_mark_visite_avec_motif = 1';
357
			} else if ($p['sci'] === false) {
356
			} else if ($p['sci'] === false) {
358
				$where[] = 'csv_mark_acces_ss_motif = 1';
357
				$this->whereClause[] = 'csv_mark_acces_ss_motif = 1';
359
			}
358
			}
360
		}
359
		}
361
		if (isset($p['bot'])) {
360
		if (isset($p['bot'])) {
362
			$where[] = "ccb_ce_truk_type IN ({$p['bot']})";
361
			$this->whereClause[] = "ccb_ce_truk_type IN ({$p['bot']})";
363
		}
362
		}
364
		if (isset($p['lieu-stockage'])) {
363
		if (isset($p['lieu-stockage'])) {
365
      $join[] = 'LEFT JOIN coel_meta_liste_valeur cmlv ON cmlv.cmlv_id_valeur = cs_ce_truk_pays';
364
      $this->joinClause[] = 'LEFT JOIN coel_meta_liste_valeur cmlv ON cmlv.cmlv_id_valeur = cs_ce_truk_pays';
366
			$where[] = '(' . implode(' OR ', array(
365
			$this->whereClause[] = '(' . implode(' OR ', array(
367
				"cs_adresse_01 LIKE {$p['lieu-stockage']}",
366
				"cs_adresse_01 LIKE {$p['lieu-stockage']}",
368
				"cs_code_postal LIKE {$p['lieu-stockage']}",
367
				"cs_code_postal LIKE {$p['lieu-stockage']}",
369
				"cs_ville LIKE {$p['lieu-stockage']}",
368
				"cs_ville LIKE {$p['lieu-stockage']}",
370
				"cs_ce_truk_pays LIKE {$p['lieu-stockage']}",
369
				"cs_ce_truk_pays LIKE {$p['lieu-stockage']}",
371
				"cmlv.cmlv_nom LIKE {$p['lieu-stockage']}",
370
				"cmlv.cmlv_nom LIKE {$p['lieu-stockage']}",
372
			)) . ')';
371
			)) . ')';
373
		}
372
		}
374
		if (isset($p['zg'])) {
373
		if (isset($p['zg'])) {
375
			$where[] = "cc_truk_couverture_lieu LIKE {$p['zg']}";
374
			$this->whereClause[] = "cc_truk_couverture_lieu LIKE {$p['zg']}";
376
		}
375
		}
377
		if (isset($p['p'])) {
376
		if (isset($p['p'])) {
378
			$where[] = "cp_fmt_nom_complet LIKE {$p['p']}";
377
			$this->whereClause[] = "cp_fmt_nom_complet LIKE {$p['p']}";
379
		}
378
		}
380
		if (isset($p['pr'])) {
379
		if (isset($p['pr'])) {
381
			$where[] = "ccap_id_role IN ({$p['pr']})";
380
			$this->whereClause[] = "ccap_id_role IN ({$p['pr']})";
Line 382... Line 381...
382
		}
381
		}
383
 
382
 
384
        // par défaut, spécifier un département restreint à la France
383
        // par défaut, spécifier un département restreint à la France
385
        // TODO: INNER JOIN
384
        // TODO: INNER JOIN
386
		if (isset($p['str-d'])) {
385
		if (isset($p['str-d'])) {
387
            $join[] = 'LEFT JOIN coel_meta_liste_valeur cv ON cv.cmlv_id_valeur = cs_ce_truk_pays';
386
            $this->joinClause[] = 'LEFT JOIN coel_meta_liste_valeur cv ON cv.cmlv_id_valeur = cs_ce_truk_pays';
388
			$where[] = "cv.cmlv_abreviation IN ('FR', 'RE', 'YT', 'GP', 'MQ', 'GF', 'NC')";
387
			$this->whereClause[] = "cv.cmlv_abreviation IN ('FR', 'RE', 'YT', 'GP', 'MQ', 'GF', 'NC')";
Line 389... Line 388...
389
			$where[] = sprintf("cs_code_postal REGEXP '^(%s).*'", implode('|', $p['str-d']));
388
			$this->whereClause[] = sprintf("cs_code_postal REGEXP '^(%s).*'", implode('|', $p['str-d']));
390
		}
389
		}
391
 
390
 
392
		if (isset($p['pays'])) {
391
		if (isset($p['pays'])) {
393
            if(array_search('FR', $p['pays']) !== FALSE) $p['pays'] = array_merge($p['pays'], array('RE','YT','GP','MQ','GF','NC'));
392
            if(array_search('FR', $p['pays']) !== FALSE) $p['pays'] = array_merge($p['pays'], array('RE','YT','GP','MQ','GF','NC'));
Line 394... Line 393...
394
            $join[] = 'LEFT JOIN coel_meta_liste_valeur cv ON cv.cmlv_id_valeur = cs_ce_truk_pays';
393
            $this->joinClause[] = 'LEFT JOIN coel_meta_liste_valeur cv ON cv.cmlv_id_valeur = cs_ce_truk_pays';
395
			$where[] = sprintf('cv.cmlv_abreviation IN ("%s")', implode('","', $p['pays']));
394
			$this->whereClause[] = sprintf('cv.cmlv_abreviation IN ("%s")', implode('","', $p['pays']));
396
		}
395
		}
Line 397... Line 396...
397
 
396
 
398
		if (isset($p['veg'])) {
397
		if (isset($p['veg'])) {
399
			$veg = explode(',', $p['veg']);
398
			$veg = explode(',', $p['veg']);
400
			$veg_nbre = count($veg);
399
			$veg_nbre = count($veg);
401
			
400
			
402
			if ($veg_nbre == 1) {
401
			if ($veg_nbre == 1) {
403
				$where[] = "ccb_truk_nature LIKE '%{$p['veg']}%'";
402
				$this->whereClause[] = "ccb_truk_nature LIKE '%{$p['veg']}%'";
404
			} else {
403
			} else {
405
				$recherche = array();
404
				$recherche = array();
406
				foreach ($veg as $id) {
405
				foreach ($veg as $id) {
Line 407... Line 406...
407
					$recherche[] = "ccb_truk_nature LIKE '%$id%'";
406
					$recherche[] = "ccb_truk_nature LIKE '%$id%'";
408
				}
407
				}
409
				$where[] = '('.implode(' OR ', $recherche).') ';
408
				$this->whereClause[] = '('.implode(' OR ', $recherche).') ';
410
			}
409
			}
411
		}
410
		}
412
		
411
		
413
 
412
 
414
		if (isset($p['sci'])) {
413
		if (isset($p['sci'])) {
415
			$join[] = 'LEFT JOIN coel_structure_valorisation ON (cs_id_structure = csv_id_structure)';
414
			$this->joinClause[] = 'LEFT JOIN coel_structure_valorisation ON (cs_id_structure = csv_id_structure)';
416
		}
415
		}
417
		if (isset($p['bot']) || isset($p['veg'])) {
416
		if (isset($p['bot']) || isset($p['veg'])) {
418
			$join[] = 'LEFT JOIN coel_collection_botanique ON (cc_id_collection = ccb_id_collection)';
417
			$this->joinClause[] = 'LEFT JOIN coel_collection_botanique ON (cc_id_collection = ccb_id_collection)';
Line 419... Line 418...
419
		}
418
		}
420
		if (isset($p['p']) || isset($p['pr'])) {
419
		if (isset($p['p']) || isset($p['pr'])) {
Line 421... Line 420...
421
			$join[] = 'LEFT JOIN coel_collection_a_personne ON (cc_id_collection = ccap_id_collection)';
420
			$this->joinClause[] = 'LEFT JOIN coel_collection_a_personne ON (cc_id_collection = ccap_id_collection)';
422
		}
421
		}
423
		if (isset($p['p'])) {
422
		if (isset($p['p'])) {
424
			$join[] = 'LEFT JOIN coel_personne ON (ccap_id_personne = cp_id_personne)';
423
			$this->joinClause[] = 'LEFT JOIN coel_personne ON (ccap_id_personne = cp_id_personne)';
425
		}
424
		}
Line 426... Line 425...
426
 
425
 
Line 427... Line 426...
427
        $join = array_unique($join);
426
        $this->joinClause = array_unique($this->joinClause);
428
	}
427
	}
429
 
428
 
430
	// construit les clauses FROM et WHERE pour la recherche de personnes (#CaptainObvious)
429
	// construit les clauses FROM et WHERE pour la recherche de personnes (#CaptainObvious)
431
	static function construireFromEtWherePersonnes($p, &$from, &$join, &$where) {
430
	private function construireFromEtWherePersonnes($p) {
432
		$from = array('coel_personne');
431
		$this->fromClause = array('coel_personne');
433
		$join = array();
432
		$this->joinClause = array();
434
		$where = array();
433
		$this->whereClause = array();
435
 
434
 
436
		//"cp_truk_recolte LIKE {$p['adresse']}", // Inclure le lieu de récolte ?
435
		//"cp_truk_recolte LIKE {$p['adresse']}", // Inclure le lieu de récolte ?
437
 
436
 
438
		if (isset($p['nom-famille'])) {
437
		if (isset($p['nom-famille'])) {
439
			$where[] = "cp_nom LIKE {$p['nom-famille']}";
438
			$this->whereClause[] = "cp_nom LIKE {$p['nom-famille']}";
440
		}
439
		}
441
		if (isset($p['adresse'])) {
440
		if (isset($p['adresse'])) {
442
      $join[] = 'LEFT JOIN coel_meta_liste_valeur cmlv ON cmlv.cmlv_id_valeur = cp_ce_truk_pays';
441
      $this->joinClause[] = 'LEFT JOIN coel_meta_liste_valeur cmlv ON cmlv.cmlv_id_valeur = cp_ce_truk_pays';
443
			$where[] = '(' . implode(' OR ', array(
442
			$this->whereClause[] = '(' . implode(' OR ', array(
444
				"cp_adresse_01 LIKE {$p['adresse']}",
443
				"cp_adresse_01 LIKE {$p['adresse']}",
445
				"cp_code_postal LIKE {$p['adresse']}",
444
				"cp_code_postal LIKE {$p['adresse']}",
446
				"cp_ville LIKE {$p['adresse']}",
445
				"cp_ville LIKE {$p['adresse']}",
447
				"cp_ce_truk_pays LIKE {$p['adresse']}",
446
				"cp_ce_truk_pays LIKE {$p['adresse']}",
448
				"cp_naissance_lieu LIKE {$p['adresse']}",
447
				"cp_naissance_lieu LIKE {$p['adresse']}",
Line 449... Line 448...
449
				"cp_deces_lieu LIKE {$p['adresse']}",
448
				"cp_deces_lieu LIKE {$p['adresse']}",
450
				"cmlv.cmlv_nom LIKE {$p['adresse']}",
449
				"cmlv.cmlv_nom LIKE {$p['adresse']}",
451
			)) . ')';
450
			)) . ')';
452
		}
451
		}
453
		if (isset($p['date-vivant'])) {
452
		if (isset($p['date-vivant'])) {
454
			$where[] = "cp_naissance_date <= {$p['date-vivant']}";
453
			$this->whereClause[] = "cp_naissance_date <= {$p['date-vivant']}";
-
 
454
			$this->whereClause[] = "cp_deces_date >= {$p['date-vivant']}";
-
 
455
			$this->whereClause[] = "cp_naissance_date IS NOT NULL";
-
 
456
			$this->whereClause[] = "cp_deces_date IS NOT NULL";
-
 
457
			//$this->whereClause[] = "(cp_deces_date IS NULL OR cp_deces_date >= {$p['date-vivant']})";
-
 
458
		}
-
 
459
 
-
 
460
		// pour inclure éventuellement les adresses de la structure
-
 
461
		/*if (isset($p['adresse'])) {
-
 
462
			$this->joinClause[] = 'JOIN coel_structure_a_personne ON (cp_id_personne = csap_id_personne)';
-
 
463
			$this->joinClause[] = 'JOIN coel_structure ON (cs_id_structure = csap_id_structure)';
-
 
464
		}*/
-
 
465
        $this->joinClause = array_unique($this->joinClause);
-
 
466
	}
-
 
467
	
-
 
468
	// construit les clauses FROM et WHERE pour la recherche de publications (#CaptainObvious)
-
 
469
	private function construireFromEtWherePublications($p) {
-
 
470
		$this->fromClause = array('coel_publication');
-
 
471
		$this->joinClause = array();
-
 
472
		$this->whereClause = array();
-
 
473
	
-
 
474
		if (isset($p['titre'])) {
-
 
475
			$this->whereClause[] = "cpu_titre LIKE {$p['titre']}";
-
 
476
		}
-
 
477
		if (isset($p['auteur'])) {
455
			$where[] = "cp_deces_date >= {$p['date-vivant']}";
478
			$this->whereClause[] = "cpu_fmt_auteur LIKE {$p['auteur']}";
456
			$where[] = "cp_naissance_date IS NOT NULL";
479
		}