Subversion Repositories eFlore/Applications.coel

Rev

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

Rev 1699 Rev 1700
Line 29... Line 29...
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
		}
Line 32... Line 32...
32
		
32
		
-
 
33
		// Envoie sur la sortie standard
-
 
34
		if($this->formatRetour == 'text/plain') {
-
 
35
			$this->envoyer($info, 'text/plain', 'utf-8', false);
-
 
36
			exit;
33
		// Envoie sur la sortie standard
37
		}
34
		$this->envoyer($info);
38
		$this->envoyer($info);
Line 35... Line 39...
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
Line 46... Line 50...
46
		$info = array();
50
		$info = array();
Line 47... Line 51...
47
				
51
				
48
		// Pré traitement des paramêtres
52
		// Pré traitement des paramêtres
Line 49... Line 53...
49
		$p = $this->pretraiterParametresUrl($param);
53
		$p = $this->pretraiterParametresUrl($param);
50
 
54
 
Line 51... Line 55...
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(
Line 56... Line 60...
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'
Line 57... Line 61...
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',
Line 59... Line 63...
59
 
63
 
60
            $this->distinct ? 'DISTINCT' : '',
64
			$this->distinct ? 'DISTINCT' : '',
Line 61... Line 65...
61
 
65
 
62
            implode(',', $fromClause),
66
			implode(',', $fromClause),
Line 63... Line 67...
63
            implode(' ', $joinClause),
67
			implode(' ', $joinClause),
64
 
68
 
65
            $whereClause ? implode(" AND ", $whereClause) : TRUE,
69
			$whereClause ? implode(" AND ", $whereClause) : TRUE,
Line 82... Line 86...
82
		}
86
		}
83
		return $info;
87
		return $info;
84
	}
88
	}
Line 85... Line 89...
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 *
Line 95... Line 99...
95
		$info = array();
99
		$info = array();
Line 96... Line 100...
96
				
100
				
97
		// Pré traitement des paramêtres
101
		// Pré traitement des paramêtres
Line 98... Line 102...
98
		$p = $this->pretraiterParametresUrl($param);
102
		$p = $this->pretraiterParametresUrl($param);
99
 
103
 
Line 100... Line 104...
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,
Line 116... Line 120...
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__);
Line 133... Line 137...
133
		return $info;
137
		return $info;
134
	}
138
	}
Line 135... Line 139...
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
-
 
142
		$params_passes = array(
138
		$params_passes = array('mots' => 'str', 
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',
Line 146... Line 151...
146
			'projets' => 'int');
151
			'projets' => 'int');
147
		
152
		
Line 186... Line 191...
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
		}
Line 195... Line 204...
195
		
204
		
196
		return $p;
205
		return $p;
Line 197... Line 206...
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');
Line 201... Line 210...
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!
Line 206... Line 215...
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
		}
Line 250... Line 259...
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
		}
Line 257... Line 266...
257
 
266
 
258
		if (isset($p['veg'])) {
267
		if (isset($p['veg'])) {
259
			$veg = explode(',', $p['veg']);
268
			$veg = explode(',', $p['veg']);
Line 270... Line 279...
270
			}
279
			}
271
		}
280
		}
Line 272... Line 281...
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']})";
Line 276... Line 285...
276
		}
285
		}
277
		
286
		
Line 286... Line 295...
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
}