Subversion Repositories eFlore/Applications.del

Compare Revisions

Regard whitespace Rev 2119 → Rev 2120

/branches/v1.10-sodium/services/bibliotheque/Sql.php
569,14 → 569,24
if (isset($this->parametres['masque.tag_del'])) {
$nbTags = $this->getNombreDeTags();
if($nbTags > 1) {
$tagsMotif = $this->construireTagsMotif();
if (is_null($tagsMotif) === false) {
// sous-requêtes car le GROUP BY avec GROUP_CONCAT est *trop* lent
if (isset($this->parametres['masque.tag_del']['AND'])) {
foreach ($this->parametres['masque.tag_del']['AND'] as $mc) {
$sousRequete = 'SELECT ce_image '.
'FROM del_image_tag '.
'WHERE actif = 1 '.
'GROUP BY ce_image '.
"HAVING GROUP_CONCAT(DISTINCT tag_normalise ORDER BY tag_normalise) REGEXP $tagsMotif ";
"AND tag_normalise LIKE '%$mc%' ";
$this->addWhere('masque.tag_del', "di.id_image IN ($sousRequete)");
}
} else if (isset($this->parametres['masque.tag_del']['OR'])) {
$tagsMotif = "'(" . implode('|', $this->parametres['masque.tag_del']['OR']) . ")'";
$sousRequete = 'SELECT ce_image '.
'FROM del_image_tag '.
'WHERE actif = 1 '.
"AND tag_normalise REGEXP $tagsMotif ";
$this->addWhere('masque.tag_del', "di.id_image IN ($sousRequete)");
}
} else {
// Si un seul tag est demandé il se trouve dans le OR dans le cas de la recherche
// spécifique et dans le AND dans le cas de la recherche générale
592,11 → 602,12
'FROM del_image_tag '.
'WHERE actif = 1 '.
'AND tag_normalise LIKE '.$this->bdd->proteger($tag.'%');
}
$this->addWhere('masque.tag_del', "di.id_image IN ($sousRequete)");
}
}
}
private function getNombreDeTags() {
$somme = 0;
608,21 → 619,6
return $somme;
}
 
private function construireTagsMotif() {
$tagsMotif = null;
if (isset($this->parametres['masque.tag_del']['AND'])) {
$tags = $this->parametres['masque.tag_del']['AND'];
// ATTENTION -> optimisation: en cas de "AND" on sort() l'input et le GROUP_CONCAT()
// donc nous utilisons des ".*" plutôt que de multiples conditions et "|"
sort($tags);
$tagsMotif = $this->bdd->proteger(implode('.*', $tags));
} else if (isset($this->parametres['masque.tag_del']['OR'])) {
$tags = $this->parametres['masque.tag_del']['OR'];
$tagsMotif = $this->bdd->proteger(implode('|', $tags));
}
return $tagsMotif;
}
 
/**
* Partie spécifique à PictoFlora:
* Attention : si le critère de tri n'est pas suffisant, les résultats affichés peuvent varier à chaque appel