Subversion Repositories eFlore/Applications.del

Rev

Rev 1490 | Rev 1498 | Go to most recent revision | Show entire file | Regard whitespace | Details | Blame | Last modification | View Log | RSS feed

Rev 1490 Rev 1494
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
    }