Line 152... |
Line 152... |
152 |
* pour l'afficher.
|
152 |
* pour l'afficher.
|
153 |
* @param array $ressources les ressources situées après l'url de base (ex : http://url/ressource1/ressource2)
|
153 |
* @param array $ressources les ressources situées après l'url de base (ex : http://url/ressource1/ressource2)
|
154 |
* @param array $parametres les paramètres situés après le ? dans l'url
|
154 |
* @param array $parametres les paramètres situés après le ? dans l'url
|
155 |
**/
|
155 |
**/
|
156 |
public function consulter($ressources, $parametres) {
|
156 |
public function consulter($ressources, $parametres) {
|
- |
|
157 |
// SELECT, à terme, pourrait affecter getInfos(), mais en aucune manière getIdObs()
|
157 |
$req = array('select' => array(), 'join' => array(), 'where' => array(), 'groupby' => array(), 'having' => array());
|
158 |
$req = array('select' => array(), 'join' => array(), 'where' => array(), 'groupby' => array(), 'having' => array());
|
- |
|
159 |
|
158 |
// toujours nécessaire puisque nous tapons sur v_del_image qui INNER JOIN cel_images, or nous voulons certes
|
160 |
// toujours nécessaire puisque nous tapons sur v_del_image qui INNER JOIN cel_images, or nous voulons certes
|
159 |
// toutes les images, mais nous voulons $limite observations uniques.
|
161 |
// toutes les images, mais nous voulons $limite observations uniques.
|
160 |
$req['groupby'][] = 'dob.id_observation';
|
162 |
$req['groupby'][] = 'vdi.id_observation';
|
Line 161... |
Line 163... |
161 |
|
163 |
|
Line 162... |
Line 164... |
162 |
$db = $this->bdd;
|
164 |
$db = $this->bdd;
|
163 |
|
165 |
|
164 |
// filtrage de l'INPUT
|
166 |
// filtrage de l'INPUT
|
165 |
$params = self::requestFilterParams($parametres, self::$parametres_autorises, $this->conteneur);
|
167 |
$params = self::requestFilterParams($parametres, self::$parametres_autorises, $this->conteneur);
|
- |
|
168 |
// création des contraintes (masques)
|
Line 166... |
Line 169... |
166 |
// création des contraintes (masques)
|
169 |
self::sqlAddConstraint($params, $db, $req, $this->conteneur);
|
167 |
self::sqlAddConstraint($params, $db, $req, $this->conteneur);
|
170 |
self::sqlAddMasqueConstraint($params, $db, $req, $this->conteneur);
|
168 |
|
171 |
|
169 |
// 1) grunt-work: *la* requête de récupération des id valides (+ SQL_CALC_FOUND_ROWS)
|
172 |
// 1) grunt-work: *la* requête de récupération des id valides (+ SQL_CALC_FOUND_ROWS)
|
Line 170... |
Line 173... |
170 |
$idobs_tab = self::getIdObs($params, $req, $db);
|
173 |
$idobs_tab = self::getIdObs($params, $req, $db);
|
171 |
// idobs est une liste (toujours ordonnée) des id d'observations recherchées
|
174 |
// idobs est une liste (toujours ordonnée) des id d'observations recherchées
|
Line 172... |
Line 175... |
172 |
$idobs = array_values(array_map(create_function('$a', 'return $a["id_observation"];'), $idobs_tab));
|
175 |
$idobs = array_values(array_map(create_function('$a', 'return $a["id_observation"];'), $idobs_tab));
|
- |
|
176 |
|
- |
|
177 |
if($idobs) {
|
173 |
|
178 |
$total = $db->recuperer('SELECT FOUND_ROWS() AS c'); $total = intval($total['c']);
|
Line 174... |
Line 179... |
174 |
if($idobs) {
|
179 |
|
175 |
$total = $db->recuperer('SELECT FOUND_ROWS() AS c'); $total = intval($total['c']);
|
180 |
// 2) récupération des données nécessaires pour ces observations (obs + images)
|
Line 220... |
Line 225... |
220 |
* @param req: le tableau représentant les composants de la requete SQL
|
225 |
* @param req: le tableau représentant les composants de la requete SQL
|
221 |
* @param db: l'instance de db
|
226 |
* @param db: l'instance de db
|
222 |
*/
|
227 |
*/
|
223 |
static function getIdObs($p, $req, $db) {
|
228 |
static function getIdObs($p, $req, $db) {
|
224 |
$req_s = sprintf('SELECT SQL_CALC_FOUND_ROWS id_observation' .
|
229 |
$req_s = sprintf('SELECT SQL_CALC_FOUND_ROWS id_observation' .
|
225 |
' FROM v_del_image dob'.
|
230 |
' FROM v_del_image vdi'.
|
226 |
' %s' . // LEFT JOIN if any
|
231 |
' %s' . // LEFT JOIN if any
|
227 |
' WHERE %s'. // where-clause ou TRUE
|
232 |
' WHERE %s'. // where-clause ou TRUE
|
228 |
' %s'. // group-by
|
233 |
' %s'. // group-by
|
229 |
' %s'. // having (si commentaires)
|
234 |
' %s'. // having (si commentaires)
|
230 |
' ORDER BY %s %s %s'.
|
235 |
' ORDER BY %s %s %s'.
|
Line 236... |
Line 241... |
236 |
$req['groupby'] ? ('GROUP BY ' . implode(', ', array_unique($req['groupby']))) : '',
|
241 |
$req['groupby'] ? ('GROUP BY ' . implode(', ', array_unique($req['groupby']))) : '',
|
237 |
$req['having'] ? ('HAVING ' . implode(' AND ', $req['having'])) : '',
|
242 |
$req['having'] ? ('HAVING ' . implode(' AND ', $req['having'])) : '',
|
Line 238... |
Line 243... |
238 |
|
243 |
|
239 |
$p['tri'], strtoupper($p['ordre']),
|
244 |
$p['tri'], strtoupper($p['ordre']),
|
- |
|
245 |
// date_transmission peut-être NULL et nous voulons de la consistence
|
240 |
// date_transmission peut-être NULL et nous voulons de la consistence
|
246 |
// (sauf après r1860 de Cel)
|
Line 241... |
Line 247... |
241 |
$p['tri'] == 'date_transmission' ? ', id_observation' : '',
|
247 |
$p['tri'] == 'date_transmission' ? ', id_observation' : '',
|
Line 242... |
Line 248... |
242 |
|
248 |
|
Line 254... |
Line 260... |
254 |
}
|
260 |
}
|
Line 255... |
Line 261... |
255 |
|
261 |
|
256 |
/*
|
262 |
/*
|
257 |
Champs récupérés:
|
263 |
Champs récupérés:
|
258 |
Pour del_images, la vue retourne déjà ce que nous recherchons de cel_obs et cel_images
|
264 |
Pour del_images, la vue retourne déjà ce que nous recherchons de cel_obs et cel_images
|
259 |
(cel_obs.* et cel_images.{id_observation, doi.id_image, date_prise_de_vue AS date, hauteur , largeur})
|
265 |
(cel_obs.* et cel_[obs_]images.{id_observation, id_image, date_prise_de_vue AS date, hauteur, largeur})
|
260 |
Pour del_commentaires: nous voulons *
|
266 |
Pour del_commentaires: nous voulons *
|
- |
|
267 |
Reste ensuite à formatter.
|
- |
|
268 |
Note: le préfixe de table utilisé ici (vdi) n'impacte *aucune* autre partie du code car rien
|
261 |
Reste ensuite à formatter
|
269 |
n'en dépend pour l'heure. (inutilisation de $req['select'])
|
262 |
*/
|
270 |
*/
|
263 |
static function getInfos($idobs, $db) {
|
271 |
static function getInfos($idobs, $db) {
|
264 |
/*$select_fields = implode(',', array_merge(
|
272 |
/*$select_fields = implode(',', array_merge(
|
265 |
array_map(create_function('$a', 'return "dob.".$a;'), self::$sql_fields_liaisons['dob']),
|
273 |
array_map(create_function('$a', 'return "vdi.".$a;'), self::$sql_fields_liaisons['dob']),
|
266 |
array_map(create_function('$a', 'return "di.".$a;'), self::$sql_fields_liaisons['di']),
|
274 |
array_map(create_function('$a', 'return "vdi.".$a;'), self::$sql_fields_liaisons['di']),
|
267 |
array_map(create_function('$a', 'return "du.".$a;'), self::$sql_fields_liaisons['du'])));*/
|
275 |
array_map(create_function('$a', 'return "du.".$a;'), self::$sql_fields_liaisons['du'])));*/
|
268 |
$select_fields = array_merge(self::$sql_fields_liaisons['dob'],
|
276 |
$select_fields = array_merge(self::$sql_fields_liaisons['dob'],
|
269 |
self::$sql_fields_liaisons['di']);
|
277 |
self::$sql_fields_liaisons['di']);
|
270 |
$req_s = sprintf('SELECT %s FROM v_del_image di'.
|
278 |
$req_s = sprintf('SELECT %s FROM v_del_image vdi'.
|
271 |
// ' LEFT JOIN del_commentaire AS dc ON di.id_observation = dc.ce_observation AND dc.nom_sel IS NOT NULL'.
|
279 |
// ' LEFT JOIN del_commentaire AS dc ON di.id_observation = dc.ce_observation AND dc.nom_sel IS NOT NULL'.
|
272 |
' WHERE id_observation IN (%s)',
|
280 |
' WHERE id_observation IN (%s)',
|
273 |
implode(',', $select_fields),
|
281 |
implode(',', $select_fields),
|
274 |
implode(',', $idobs));
|
282 |
implode(',', $idobs));
|
275 |
return $db->recupererTous($req_s);
|
283 |
return $db->recupererTous($req_s);
|
Line 276... |
Line 284... |
276 |
}
|
284 |
}
|
277 |
|
285 |
|
278 |
|
286 |
|
- |
|
287 |
/**
|
279 |
/**
|
288 |
* - Rempli le tableau des contraintes "where" et "join" nécessaire
|
280 |
* - Rempli le tableau des contraintes "where" et "join" nécessaire
|
289 |
* à la *recherche* des observations demandées ($req) utilisées par self::getIdObs()
|
281 |
* à la *recherche* des observations demandées ($req)
|
290 |
*
|
282 |
* Attention, cela signifie que toutes les tables ne sont pas *forcément*
|
291 |
* Attention, cela signifie que toutes les tables ne sont pas *forcément*
|
283 |
* join'ées, par exemple si aucune contrainte ne le nécessite.
|
292 |
* join'ées, par exemple si aucune contrainte ne le nécessite.
|
284 |
* $req tel qu'il est rempli ici est utile pour récupéré la seule liste des
|
293 |
* $req tel qu'il est rempli ici est utile pour récupéré la seule liste des
|
285 |
* id d'observation qui match.
|
294 |
* id d'observation qui match.
|
286 |
* Pour la récupération effective de "toutes" les données correspondante, il faut
|
295 |
* Pour la récupération effective de "toutes" les données correspondante, il faut
|
287 |
* réinitialiser $req["join"] afin d'y ajouter toutes les autres tables.
|
296 |
* réinitialiser $req["join"] afin d'y ajouter toutes les autres tables.
|
288 |
*
|
- |
|
289 |
* Note: toujours rajouter les préfixes de table (dob,du,doi ou di)
|
297 |
*
|
290 |
* le préfix de del_observation est "dob"
|
298 |
* Note: toujours rajouter les préfixes de table (vdi,du,doi ou di), en fonction de ce que défini
|
291 |
* le préfix de del_utilisateur sur id_utilisateur = dob.ce_utilisateur est "du"
|
299 |
* les JOIN qui sont utilisés.
|
292 |
* le préfix de del_obs_image sur id_observation = dob.id_observation est "doi"
|
300 |
* le préfix de v_del_image est "vdi" (cf: "FROM" de self::getIdObs())
|
293 |
* le préfix de v_del_image sur id_image = doi.id_image est "di"
|
301 |
* le préfix de del_utilisateur sur id_utilisateur = vdi.ce_utilisateur est "du"
|
294 |
*
|
302 |
*
|
295 |
* @param $p les paramètres (notamment de masque) passés par l'URL et déjà traités/filtrés (sauf quotes)
|
303 |
* @param $p les paramètres (notamment de masque) passés par l'URL et déjà traités/filtrés (sauf quotes)
|
296 |
* @param $req le tableau représentant les composants de la requête à bâtir
|
304 |
* @param $req le tableau, passé par référence représentant les composants de la requête à bâtir
|
297 |
* @param $c conteneur, utilisé soit pour l'appel récursif à requestFilterParams() en cas de param "masque"
|
305 |
* @param $c conteneur, utilisé soit pour l'appel récursif à requestFilterParams() en cas de param "masque"
|
298 |
* soit pour la définition du type (qui utilise la variable nb_commentaires_discussion)
|
306 |
* soit pour la définition du type (qui utilise la variable nb_commentaires_discussion)
|
299 |
*/
|
307 |
*/
|
300 |
static function sqlAddConstraint($p, $db, &$req, Conteneur $c = NULL) {
|
308 |
static function sqlAddConstraint($p, $db, &$req, Conteneur $c = NULL) {
|
301 |
if(!empty($p['masque.auteur'])) {
|
309 |
if(!empty($p['masque.auteur'])) {
|
302 |
// id du poster de l'obs
|
310 |
// id du poster de l'obs
|
303 |
$req['join'][] = 'LEFT JOIN del_utilisateur AS du ON du.id_utilisateur = dob.ce_utilisateur';
|
311 |
$req['join'][] = 'LEFT JOIN del_utilisateur AS du ON du.id_utilisateur = vdi.ce_utilisateur';
|
Line 304... |
Line 312... |
304 |
// id du poster de l'image... NON, c'est le même que le posteur de l'obs
|
312 |
// id du poster de l'image... NON, c'est le même que le posteur de l'obs
|
305 |
// Cette jointure de table est ignoré ci-dessous pour les recherches d'auteurs
|
313 |
// Cette jointure de table est ignoré ci-dessous pour les recherches d'auteurs
|
306 |
// $req['join'][] = 'LEFT JOIN del_utilisateur AS dui ON dui.id_utilisateur = dob.i_ce_utilisateur';
|
314 |
// $req['join'][] = 'LEFT JOIN del_utilisateur AS dui ON dui.id_utilisateur = vdi.i_ce_utilisateur';
|
307 |
|
315 |
|
308 |
if(is_numeric($p['masque.auteur'])) {
|
316 |
if(is_numeric($p['masque.auteur'])) {
|
309 |
$req['where'][] = sprintf('(du.id_utilisateur = %1$d OR dob.id_utilisateur = %1$d )', $p['masque.auteur']);
|
317 |
$req['where'][] = sprintf('(du.id_utilisateur = %1$d OR vdi.id_utilisateur = %1$d )', $p['masque.auteur']);
|
310 |
}
|
318 |
}
|
311 |
elseif(preg_match(';^.{5,}@[a-z0-9-.]{5,}$;i', $p['masque.auteur'])) {
|
319 |
elseif(preg_match(';^.{5,}@[a-z0-9-.]{5,}$;i', $p['masque.auteur'])) {
|
312 |
$req['where'][] = sprintf('(du.courriel LIKE %1$s OR dob.courriel LIKE %1$s )',
|
320 |
$req['where'][] = sprintf('(du.courriel LIKE %1$s OR vdi.courriel LIKE %1$s )',
|
313 |
$db->proteger($p['masque.auteur'] . '%'));
|
321 |
$db->proteger($p['masque.auteur'] . '%'));
|
314 |
}
|
322 |
}
|
Line 315... |
Line 323... |
315 |
else {
|
323 |
else {
|
316 |
self::addAuteursConstraint($p['masque.auteur'], $db, $req['where']);
|
324 |
self::addAuteursConstraint($p['masque.auteur'], $db, $req['where']);
|
317 |
}
|
325 |
}
|
318 |
}
|
326 |
}
|
319 |
|
327 |
|
320 |
if(!empty($p['masque.date'])) {
|
328 |
if(!empty($p['masque.date'])) {
|
321 |
if(is_integer($p['masque.date']) && $p['masque.date'] < 2030 && $p['masque.date'] > 1600) {
|
329 |
if(is_integer($p['masque.date']) && $p['masque.date'] < 2030 && $p['masque.date'] > 1600) {
|
322 |
$req['where'][] = sprintf("YEAR(dob.date_observation) = %d", $p['masque.date']);
|
330 |
$req['where'][] = sprintf("YEAR(vdi.date_observation) = %d", $p['masque.date']);
|
323 |
}
|
331 |
}
|
Line 324... |
Line 332... |
324 |
else {
|
332 |
else {
|
325 |
$req['where'][] = sprintf("DATE_FORMAT(dob.date_observation, '%%Y-%%m-%%d') = %s",
|
333 |
$req['where'][] = sprintf("DATE_FORMAT(vdi.date_observation, '%%Y-%%m-%%d') = %s",
|
326 |
$db->proteger(strftime('%Y-%m-%d', $p['masque.date'])));
|
334 |
$db->proteger(strftime('%Y-%m-%d', $p['masque.date'])));
|
327 |
}
|
335 |
}
|
328 |
}
|
336 |
}
|
329 |
|
337 |
|
330 |
// TODO: avoir des champs d'entrée distinct
|
338 |
// TODO: avoir des champs d'entrée distinct
|
331 |
if(!empty($p['masque.departement'])) {
|
339 |
if(!empty($p['masque.departement'])) {
|
332 |
$req['where'][] = sprintf("dob.ce_zone_geo = %s", $db->proteger('INSEE-C:'.$p['masque.departement']));
|
340 |
$req['where'][] = sprintf("vdi.ce_zone_geo = %s", $db->proteger('INSEE-C:'.$p['masque.departement']));
|
333 |
}
|
341 |
}
|
334 |
if(!empty($p['masque.id_zone_geo'])) {
|
342 |
if(!empty($p['masque.id_zone_geo'])) {
|
335 |
$req['where'][] = sprintf("dob.ce_zone_geo = %s", $db->proteger($p['masque.id_zone_geo']));
|
343 |
$req['where'][] = sprintf("vdi.ce_zone_geo = %s", $db->proteger($p['masque.id_zone_geo']));
|
336 |
}
|
344 |
}
|
337 |
if(!empty($p['masque.genre'])) {
|
345 |
if(!empty($p['masque.genre'])) {
|
338 |
$req['where'][] = 'dob.nom_sel LIKE '.$db->proteger('%' . $p['masque.genre'].'% %');
|
346 |
$req['where'][] = 'vdi.nom_sel LIKE '.$db->proteger('%' . $p['masque.genre'].'% %');
|
339 |
}
|
347 |
}
|
340 |
if(!empty($p['masque.famille'])) {
|
348 |
if(!empty($p['masque.famille'])) {
|
341 |
$req['where'][] = 'dob.famille = '.$db->proteger($p['masque.famille']);
|
349 |
$req['where'][] = 'vdi.famille = '.$db->proteger($p['masque.famille']);
|
342 |
}
|
350 |
}
|
343 |
if(!empty($p['masque.ns'])) {
|
351 |
if(!empty($p['masque.ns'])) {
|
344 |
$req['where'][] = 'dob.nom_sel LIKE '.$db->proteger($p['masque.ns'].'%');
|
352 |
$req['where'][] = 'vdi.nom_sel LIKE '.$db->proteger($p['masque.ns'].'%');
|
345 |
}
|
353 |
}
|
346 |
if(!empty($p['masque.nn'])) {
|
354 |
if(!empty($p['masque.nn'])) {
|
347 |
$req['where'][] = sprintf('dob.nom_sel_nn = %1$d OR dob.nom_ret_nn = %1$d', $p['masque.nn']);
|
355 |
$req['where'][] = sprintf('vdi.nom_sel_nn = %1$d OR vdi.nom_ret_nn = %1$d', $p['masque.nn']);
|
348 |
}
|
356 |
}
|
349 |
if(!empty($p['masque.referentiel'])) {
|
357 |
if(!empty($p['masque.referentiel'])) {
|
350 |
$req['where'][] = sprintf('dob.nom_referentiel LIKE %s', $db->proteger($p['masque.referentiel'].'%'));
|
358 |
$req['where'][] = sprintf('vdi.nom_referentiel LIKE %s', $db->proteger($p['masque.referentiel'].'%'));
|
351 |
}
|
359 |
}
|
352 |
if(!empty($p['masque.commune'])) {
|
360 |
if(!empty($p['masque.commune'])) {
|
353 |
$req['where'][] = 'dob.zone_geo LIKE '.$db->proteger($p['masque.commune'].'%');
|
361 |
$req['where'][] = 'vdi.zone_geo LIKE '.$db->proteger($p['masque.commune'].'%');
|
354 |
}
|
362 |
}
|
Line 355... |
Line 363... |
355 |
if(!empty($p['masque.tag'])) {
|
363 |
if(!empty($p['masque.tag'])) {
|
356 |
// i_mots_cles_texte provient de la VIEW v_del_image
|
364 |
// i_mots_cles_texte provient de la VIEW v_del_image
|
357 |
$req['where'][] = sprintf('CONCAT(%s) REGEXP %s',
|
365 |
$req['where'][] = sprintf('CONCAT(%s) REGEXP %s',
|
- |
|
366 |
self::sqlAddIfNullPourConcat(array('vdi.mots_cles_texte', 'vdi.i_mots_cles_texte')),
|
Line 358... |
Line 367... |
358 |
self::sqlAddIfNullPourConcat(array('dob.mots_cles_texte', 'dob.i_mots_cles_texte')),
|
367 |
$db->proteger($p['masque.tag']));
|
359 |
$db->proteger($p['masque.tag']));
|
368 |
}
|
360 |
}
|
369 |
|
361 |
|
370 |
if(!empty($p['masque.type'])) {
|
- |
|
371 |
self::addTypeConstraints($p['masque.type'], $db, $req, $c);
|
362 |
if(!empty($p['masque.type'])) {
|
372 |
}
|
363 |
self::addTypeConstraints($p['masque.type'], $db, $req, $c);
|
373 |
}
|
364 |
}
|
374 |
|
365 |
|
375 |
/* Le masque fait une recherche générique parmi de nombreux champs ci-dessus.
|
366 |
/* Le masque fait une recherche générique parmi de nombreux champs ci-dessus.
|
376 |
Nous initialisons donc ces paramètres (excepté masque biensur), et nous rappelons
|
367 |
Nous initialisons donc ces paramètres (excepté masque biensur), et nous rappelons
|
377 |
récursivement. À la seule différence que nous n'utiliserons que $or_req['where']
|
368 |
récursivement. À la seule différence que nous n'utiliserons que $or_req['where']
|
378 |
imploded par des " OR ". */
|
369 |
imploded par des " OR ". */
|
379 |
static function sqlAddMasqueConstraint($p, $db, &$req, Conteneur $c = NULL) {
|
370 |
if(!empty($p['masque'])) {
|
380 |
if(!empty($p['masque'])) {
|
371 |
$or_params = array('masque.auteur' => $p['masque'],
|
381 |
$or_params = array('masque.auteur' => $p['masque'],
|
372 |
'masque.departement' => $p['masque'],
|
382 |
'masque.departement' => $p['masque'],
|
373 |
'masque.id_zone_geo' => $p['masque'],
|
383 |
'masque.id_zone_geo' => $p['masque'],
|
374 |
'masque.tag' => $p['masque'],
|
384 |
'masque.tag' => $p['masque'],
|
375 |
'masque.ns' => $p['masque'],
|
385 |
'masque.ns' => $p['masque'],
|
Line 408... |
Line 418... |
408 |
return implode(',',array_map(create_function('$a', 'return "IFNULL($a, \"\")";'), $tab));
|
418 |
return implode(',',array_map(create_function('$a', 'return "IFNULL($a, \"\")";'), $tab));
|
409 |
}
|
419 |
}
|
Line 410... |
Line 420... |
410 |
|
420 |
|
411 |
/*
|
421 |
/*
|
412 |
Retourne une clausse where du style:
|
422 |
Retourne une clausse where du style:
|
413 |
CONCAT(IF(du.prenom IS NULL, "", du.prenom), [...] dob.i_nomutilisateur) REGEXP 'xxx'
|
423 |
CONCAT(IF(du.prenom IS NULL, "", du.prenom), [...] vdi.i_nomutilisateur) REGEXP 'xxx'
|
414 |
Note; i_(nom|prenom_utilisateur), alias pour cel_images.(nom|prenom), n'est pas traité
|
424 |
Note; i_(nom|prenom_utilisateur), alias pour cel_images.(nom|prenom), n'est pas traité
|
415 |
car cette information est redondante dans cel_image et devrait être supprimée.
|
425 |
car cette information est redondante dans cel_image et devrait être supprimée.
|
416 |
*/
|
426 |
*/
|
417 |
static function addAuteursConstraint($val, $db, &$where) {
|
427 |
static function addAuteursConstraint($val, $db, &$where) {
|
418 |
@list($a, $b) = explode(' ', $val, 2);
|
428 |
@list($a, $b) = explode(' ', $val, 2);
|
419 |
// un seul terme
|
429 |
// un seul terme
|
420 |
$champs_n = array('du.prenom', // info user authentifié de l'obs depuis l'annuaire
|
430 |
$champs_n = array('du.prenom', // info user authentifié de l'obs depuis l'annuaire
|
421 |
'dob.prenom_utilisateur', // info user anonyme de l'obs
|
431 |
'vdi.prenom_utilisateur', // info user anonyme de l'obs
|
422 |
/* 'dob.i_prenom_utilisateur' */ ); // info user anonyme de l'image
|
432 |
/* 'vdi.i_prenom_utilisateur' */ ); // info user anonyme de l'image
|
423 |
$champs_p = array('du.nom', // idem pour le nom
|
433 |
$champs_p = array('du.nom', // idem pour le nom
|
424 |
'dob.nom_utilisateur',
|
434 |
'vdi.nom_utilisateur',
|
425 |
/* 'dob.i_nom_utilisateur' */ );
|
435 |
/* 'vdi.i_nom_utilisateur' */ );
|
426 |
if(! $b) {
|
436 |
if(! $b) {
|
427 |
$where[] = sprintf('CONCAT(%s) REGEXP %s',
|
437 |
$where[] = sprintf('CONCAT(%s) REGEXP %s',
|
428 |
self::sqlAddIfNullPourConcat($champs_n).
|
438 |
self::sqlAddIfNullPourConcat($champs_n).
|
429 |
',' .
|
439 |
',' .
|
Line 444... |
Line 454... |
444 |
*/
|
454 |
*/
|
445 |
static function addTypeConstraints($val, $db, &$req, Conteneur $c) {
|
455 |
static function addTypeConstraints($val, $db, &$req, Conteneur $c) {
|
446 |
if(array_key_exists('adeterminer', $val)) {
|
456 |
if(array_key_exists('adeterminer', $val)) {
|
447 |
//On récupère toutes les observations qui on le tag "aDeterminer" *ou* qui n'ont pas de nom d'espèce
|
457 |
//On récupère toutes les observations qui on le tag "aDeterminer" *ou* qui n'ont pas de nom d'espèce
|
448 |
$req['where'][] = '(' . implode(' OR ', array(
|
458 |
$req['where'][] = '(' . implode(' OR ', array(
|
449 |
'dob.certitude = "aDeterminer"',
|
459 |
'vdi.certitude = "aDeterminer"',
|
450 |
'dob.mots_cles_texte LIKE "%aDeterminer%"',
|
460 |
'vdi.mots_cles_texte LIKE "%aDeterminer%"',
|
451 |
'dob.nom_sel_nn IS NULL', // TODO: ensure pas d'entrée à 0
|
461 |
'vdi.nom_sel_nn IS NULL', // TODO: ensure pas d'entrée à 0
|
452 |
)) . ')';
|
462 |
)) . ')';
|
453 |
}
|
463 |
}
|
454 |
if(array_key_exists('aconfirmer', $val)) {
|
464 |
if(array_key_exists('aconfirmer', $val)) {
|
455 |
//On récupère toutes les observations qui ne sont pas "aDeterminer" *et* qui ont un nom d'espèce
|
465 |
//On récupère toutes les observations qui ne sont pas "aDeterminer" *et* qui ont un nom d'espèce
|
456 |
$req['where'][] = '(' . implode(' AND ', array(
|
466 |
$req['where'][] = '(' . implode(' AND ', array(
|
457 |
'dob.nom_sel IS NOT NULL',
|
467 |
'vdi.nom_sel IS NOT NULL',
|
458 |
'dob.certitude != "aDeterminer"',
|
468 |
'vdi.certitude != "aDeterminer"',
|
459 |
'(dob.mots_cles_texte IS NULL OR dob.mots_cles_texte NOT LIKE "%aDeterminer%"',
|
469 |
'(vdi.mots_cles_texte IS NULL OR vdi.mots_cles_texte NOT LIKE "%aDeterminer%"',
|
460 |
)) . ')';
|
470 |
)) . ')';
|
461 |
}
|
471 |
}
|
Line 462... |
Line 472... |
462 |
|
472 |
|
463 |
// solution n°1: impraticable
|
473 |
// solution n°1: impraticable
|
464 |
if(false && array_key_exists('endiscussion', $val)) {
|
474 |
if(false && array_key_exists('endiscussion', $val)) {
|
465 |
//Si on veut les observations en discussion,
|
475 |
//Si on veut les observations en discussion,
|
466 |
// on va récupérer les ids des observations dont le nombre de commentaire est supérieur à N
|
476 |
// on va récupérer les ids des observations dont le nombre de commentaire est supérieur à N
|
467 |
$req['select'][] = 'COUNT(dc.id_commentaire) AS comm_count';
|
477 |
$req['select'][] = 'COUNT(dc.id_commentaire) AS comm_count';
|
468 |
$req['join'][] = 'INNER JOIN del_commentaire AS dc ON dob.id_observation = dc.ce_observation';
|
478 |
$req['join'][] = 'INNER JOIN del_commentaire AS dc ON vdi.id_observation = dc.ce_observation';
|
469 |
$req['groupby'][] = 'dob.id_observation';
|
479 |
$req['groupby'][] = 'vdi.id_observation';
|
470 |
$req['having'][] = "COUNT(id_commentaire) > " . $c->getParametre('nb_commentaires_discussion');
|
480 |
$req['having'][] = "COUNT(id_commentaire) > " . $c->getParametre('nb_commentaires_discussion');
|
Line 471... |
Line 481... |
471 |
}
|
481 |
}
|
472 |
|
482 |
|