26,9 → 26,12 |
// SELECT MAX(num_nom) FROM bdtfx_v2_00; |
define('_LISTE_OBS_MAX_BDTFX_NN', 103386 + 10000); |
|
require_once(dirname(__FILE__) . '/../images/ListeImages2.php'); |
/* |
restore_error_handler(); |
restore_exception_handler(); |
error_reporting(E_ALL); |
*/ |
|
class ListeObservations { |
|
165,6 → 168,9 |
|
// filtrage de l'INPUT |
$params = self::requestFilterParams($parametres, self::$parametres_autorises, $this->conteneur); |
|
$params['masque.tag'] = ListeImages2::buildTagsAST(@$parametres['masque.tag'], 'OR', ','); |
|
// ... et paramètres par défaut |
$params = array_merge(self::$default_params, $params); |
|
364,12 → 370,31 |
$req['where'][] = 'vdi.zone_geo LIKE '.$db->proteger($p['masque.commune'].'%'); |
} |
if(!empty($p['masque.tag'])) { |
// TODO: remove LOWER() lorsqu'on est sur que les tags sont uniformés en minuscule |
// i_mots_cles_texte provient de la VIEW v_del_image |
// TODO: remove LOWER() lorsqu'on est sur que les tags sont uniformés en minuscule |
$req['where'][] = sprintf('LOWER(CONCAT(%s)) REGEXP %s', |
if(isset($p['masque.tag']['AND'])) { |
/* Lorsque nous interprêtons la chaîne provenant du masque général (cf: buildTagsAST($p['masque'], 'OR', ' ') dans sqlAddMasqueConstraint()), |
nous sommes splittés par espace. Cependant, assurons que si une virgule à été saisie, nous n'aurons pas le motif |
" AND CONCAT(mots_cles_texte, i_mots_cles_texte) REGEXP ',' " dans notre requête. |
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 */ |
$subwhere = array(); |
foreach($p['masque.tag']['AND'] as $tag) { |
if(trim($tag) == ',') continue; |
|
$subwhere[] = sprintf( |
'LOWER(CONCAT(%s)) REGEXP %s', |
self::sqlAddIfNullPourConcat(array('vdi.mots_cles_texte', 'vdi.i_mots_cles_texte')), |
$db->proteger(strtolower($p['masque.tag']))); |
$db->proteger(strtolower($tag))); |
} |
$req['where'][] = '(' . implode(' AND ', $subwhere) . ')'; |
} |
else { |
$req['where'][] = sprintf( |
'LOWER(CONCAT(%s)) REGEXP %s', |
self::sqlAddIfNullPourConcat(array('vdi.mots_cles_texte', 'vdi.i_mots_cles_texte')), |
$db->proteger(strtolower(implode('|', $p['masque.tag']['OR'])))); |
} |
} |
|
if(!empty($p['masque.type'])) { |
self::addTypeConstraints($p['masque.type'], $db, $req, $c); |
392,6 → 417,7 |
'masque.genre' => $p['masque'], |
/* milieu: TODO ? */ ); |
$or_masque = self::requestFilterParams($or_params, array_keys($or_params), $c); |
$or_masque['masque.tag'] = ListeImages2::buildTagsAST($p['masque'], 'OR', ' '); |
// $or_req = array('select' => array(), 'join' => array(), 'where' => array(), 'groupby' => array(), 'having' => array()); |
$or_req = array('join' => array(), 'where' => array()); |
self::sqlAddConstraint($or_masque, $db, $or_req); |