Line 24... |
Line 24... |
24 |
// SELECT MAX(num_taxonomique) FROM bdtfx_v2_00;
|
24 |
// SELECT MAX(num_taxonomique) FROM bdtfx_v2_00;
|
25 |
define('_LISTE_OBS_MAX_BDTFX_NT', 44378 + 1000);
|
25 |
define('_LISTE_OBS_MAX_BDTFX_NT', 44378 + 1000);
|
26 |
// SELECT MAX(num_nom) FROM bdtfx_v2_00;
|
26 |
// SELECT MAX(num_nom) FROM bdtfx_v2_00;
|
27 |
define('_LISTE_OBS_MAX_BDTFX_NN', 103386 + 10000);
|
27 |
define('_LISTE_OBS_MAX_BDTFX_NN', 103386 + 10000);
|
Line -... |
Line 28... |
- |
|
28 |
|
- |
|
29 |
require_once(dirname(__FILE__) . '/../images/ListeImages2.php');
|
28 |
|
30 |
/*
|
29 |
restore_error_handler();
|
31 |
restore_error_handler();
|
30 |
restore_exception_handler();
|
32 |
restore_exception_handler();
|
- |
|
33 |
error_reporting(E_ALL);
|
Line 31... |
Line 34... |
31 |
error_reporting(E_ALL);
|
34 |
*/
|
Line 32... |
Line 35... |
32 |
|
35 |
|
33 |
class ListeObservations {
|
36 |
class ListeObservations {
|
Line 163... |
Line 166... |
163 |
|
166 |
|
Line 164... |
Line 167... |
164 |
$db = $this->bdd;
|
167 |
$db = $this->bdd;
|
165 |
|
168 |
|
- |
|
169 |
// filtrage de l'INPUT
|
- |
|
170 |
$params = self::requestFilterParams($parametres, self::$parametres_autorises, $this->conteneur);
|
- |
|
171 |
|
166 |
// filtrage de l'INPUT
|
172 |
$params['masque.tag'] = ListeImages2::buildTagsAST(@$parametres['masque.tag'], 'OR', ',');
|
167 |
$params = self::requestFilterParams($parametres, self::$parametres_autorises, $this->conteneur);
|
173 |
|
Line 168... |
Line 174... |
168 |
// ... et paramètres par défaut
|
174 |
// ... et paramètres par défaut
|
169 |
$params = array_merge(self::$default_params, $params);
|
175 |
$params = array_merge(self::$default_params, $params);
|
Line 362... |
Line 368... |
362 |
}
|
368 |
}
|
363 |
if(!empty($p['masque.commune'])) {
|
369 |
if(!empty($p['masque.commune'])) {
|
364 |
$req['where'][] = 'vdi.zone_geo LIKE '.$db->proteger($p['masque.commune'].'%');
|
370 |
$req['where'][] = 'vdi.zone_geo LIKE '.$db->proteger($p['masque.commune'].'%');
|
365 |
}
|
371 |
}
|
366 |
if(!empty($p['masque.tag'])) {
|
372 |
if(!empty($p['masque.tag'])) {
|
367 |
// i_mots_cles_texte provient de la VIEW v_del_image
|
- |
|
368 |
// TODO: remove LOWER() lorsqu'on est sur que les tags sont uniformés en minuscule
|
373 |
// TODO: remove LOWER() lorsqu'on est sur que les tags sont uniformés en minuscule
|
- |
|
374 |
// i_mots_cles_texte provient de la VIEW v_del_image
|
- |
|
375 |
if(isset($p['masque.tag']['AND'])) {
|
- |
|
376 |
/* Lorsque nous interprêtons la chaîne provenant du masque général (cf: buildTagsAST($p['masque'], 'OR', ' ') dans sqlAddMasqueConstraint()),
|
- |
|
377 |
nous sommes splittés par espace. Cependant, assurons que si une virgule à été saisie, nous n'aurons pas le motif
|
- |
|
378 |
" AND CONCAT(mots_cles_texte, i_mots_cles_texte) REGEXP ',' " dans notre requête.
|
- |
|
379 |
XXX: Au 12/11/2013, une recherche sur tag depuis le masque général implique un OU, donc le problème ne se pose pas ici */
|
- |
|
380 |
$subwhere = array();
|
- |
|
381 |
foreach($p['masque.tag']['AND'] as $tag) {
|
- |
|
382 |
if(trim($tag) == ',') continue;
|
- |
|
383 |
|
- |
|
384 |
$subwhere[] = sprintf(
|
369 |
$req['where'][] = sprintf('LOWER(CONCAT(%s)) REGEXP %s',
|
385 |
'LOWER(CONCAT(%s)) REGEXP %s',
|
- |
|
386 |
self::sqlAddIfNullPourConcat(array('vdi.mots_cles_texte', 'vdi.i_mots_cles_texte')),
|
- |
|
387 |
$db->proteger(strtolower($tag)));
|
- |
|
388 |
}
|
- |
|
389 |
$req['where'][] = '(' . implode(' AND ', $subwhere) . ')';
|
- |
|
390 |
}
|
- |
|
391 |
else {
|
- |
|
392 |
$req['where'][] = sprintf(
|
- |
|
393 |
'LOWER(CONCAT(%s)) REGEXP %s',
|
370 |
self::sqlAddIfNullPourConcat(array('vdi.mots_cles_texte', 'vdi.i_mots_cles_texte')),
|
394 |
self::sqlAddIfNullPourConcat(array('vdi.mots_cles_texte', 'vdi.i_mots_cles_texte')),
|
371 |
$db->proteger(strtolower($p['masque.tag'])));
|
395 |
$db->proteger(strtolower(implode('|', $p['masque.tag']['OR']))));
|
- |
|
396 |
}
|
372 |
}
|
397 |
}
|
Line 373... |
Line 398... |
373 |
|
398 |
|
374 |
if(!empty($p['masque.type'])) {
|
399 |
if(!empty($p['masque.type'])) {
|
375 |
self::addTypeConstraints($p['masque.type'], $db, $req, $c);
|
400 |
self::addTypeConstraints($p['masque.type'], $db, $req, $c);
|
Line 390... |
Line 415... |
390 |
'masque.famille' => $p['masque'],
|
415 |
'masque.famille' => $p['masque'],
|
391 |
'masque.date' => $p['masque'],
|
416 |
'masque.date' => $p['masque'],
|
392 |
'masque.genre' => $p['masque'],
|
417 |
'masque.genre' => $p['masque'],
|
393 |
/* milieu: TODO ? */ );
|
418 |
/* milieu: TODO ? */ );
|
394 |
$or_masque = self::requestFilterParams($or_params, array_keys($or_params), $c);
|
419 |
$or_masque = self::requestFilterParams($or_params, array_keys($or_params), $c);
|
- |
|
420 |
$or_masque['masque.tag'] = ListeImages2::buildTagsAST($p['masque'], 'OR', ' ');
|
395 |
// $or_req = array('select' => array(), 'join' => array(), 'where' => array(), 'groupby' => array(), 'having' => array());
|
421 |
// $or_req = array('select' => array(), 'join' => array(), 'where' => array(), 'groupby' => array(), 'having' => array());
|
396 |
$or_req = array('join' => array(), 'where' => array());
|
422 |
$or_req = array('join' => array(), 'where' => array());
|
397 |
self::sqlAddConstraint($or_masque, $db, $or_req);
|
423 |
self::sqlAddConstraint($or_masque, $db, $or_req);
|
Line 398... |
Line 424... |
398 |
|
424 |
|