Line 236... |
Line 236... |
236 |
* @param $req le tableau, passé par référence représentant les composants de la requête à bâtir
|
236 |
* @param $req le tableau, passé par référence représentant les composants de la requête à bâtir
|
237 |
* @param $c conteneur, utilisé soit pour l'appel récursif à requestFilterParams() en cas de param "masque"
|
237 |
* @param $c conteneur, utilisé soit pour l'appel récursif à requestFilterParams() en cas de param "masque"
|
238 |
* soit pour la définition du type (qui utilise la variable nb_commentaires_discussion)
|
238 |
* soit pour la définition du type (qui utilise la variable nb_commentaires_discussion)
|
239 |
*/
|
239 |
*/
|
240 |
static function sqlAddConstraint($p, $db, &$req, Conteneur $c = NULL) {
|
240 |
static function sqlAddConstraint($p, $db, &$req, Conteneur $c = NULL) {
|
- |
|
241 |
if(!empty($p['masque.tag'])) {
|
- |
|
242 |
// TODO: remove LOWER() lorsqu'on est sur que les tags sont uniformés en minuscule
|
- |
|
243 |
// i_mots_cles_texte provient de la VIEW v_del_image
|
- |
|
244 |
if(isset($p['masque.tag']['AND'])) {
|
- |
|
245 |
/* Lorsque nous interprêtons la chaîne provenant du masque général (cf: buildTagsAST($p['masque'], 'OR', ' ') dans sqlAddMasqueConstraint()),
|
- |
|
246 |
nous sommes splittés par espace. Cependant, assurons que si une virgule à été saisie, nous n'aurons pas le motif
|
- |
|
247 |
" AND CONCAT(mots_cles_texte, i_mots_cles_texte) REGEXP ',' " dans notre requête.
|
- |
|
248 |
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 */
|
- |
|
249 |
$subwhere = array();
|
- |
|
250 |
foreach($p['masque.tag']['AND'] as $tag) {
|
- |
|
251 |
if(trim($tag) == ',') continue;
|
- |
|
252 |
|
- |
|
253 |
$subwhere[] = sprintf('LOWER(CONCAT(%s)) REGEXP %s',
|
- |
|
254 |
DelTk::sqlAddIfNullPourConcat(array('vdi.mots_cles_texte', 'vdi.i_mots_cles_texte')),
|
- |
|
255 |
$db->proteger(strtolower($tag)));
|
- |
|
256 |
}
|
- |
|
257 |
$req['where'][] = '(' . implode(' AND ', $subwhere) . ')';
|
- |
|
258 |
}
|
- |
|
259 |
else {
|
- |
|
260 |
$req['where'][] = sprintf('LOWER(CONCAT(%s)) REGEXP %s',
|
- |
|
261 |
DelTk::sqlAddIfNullPourConcat(array('vdi.mots_cles_texte', 'vdi.i_mots_cles_texte')),
|
- |
|
262 |
$db->proteger(strtolower(implode('|', $p['masque.tag']['OR']))));
|
- |
|
263 |
}
|
- |
|
264 |
}
|
- |
|
265 |
|
241 |
if(!empty($p['masque.type'])) {
|
266 |
if(!empty($p['masque.type'])) {
|
242 |
self::addTypeConstraints($p['masque.type'], $db, $req, $c);
|
267 |
self::addTypeConstraints($p['masque.type'], $db, $req, $c);
|
243 |
}
|
268 |
}
|
244 |
}
|
269 |
}
|