Recherches spéciales intitle: ou inurl: ou author:

Permet de chercher en utilisant intitle: ou inurl: ou author: comme dans
certains moteurs de recherche. Pour l'instant, un seul de ces mots clefs
à la fois peut être spécifié en tout début de chaîne de recherche et
sera appliqué à l'ensemble du reste de la recherche.
NB: À ajouter à la documentation, wiki
pull/326/head
Alexandre Alapetite 11 years ago
parent ba71d7747a
commit e29be10556
  1. 37
      app/Models/EntryDAO.php

@ -313,17 +313,46 @@ class FreshRSS_EntryDAO extends Minz_ModelPdo {
if ($filter !== '') {
$filter = trim($filter);
$filter = addcslashes($filter, '\\%_');
if (stripos($filter, 'intitle:') === 0) {
$filter = substr($filter, strlen('intitle:'));
$intitle = true;
} else {
$intitle = false;
}
if (stripos($filter, 'inurl:') === 0) {
$filter = substr($filter, strlen('inurl:'));
$inurl = true;
} else {
$inurl = false;
}
if (stripos($filter, 'author:') === 0) {
$filter = substr($filter, strlen('author:'));
$author = true;
} else {
$author = false;
}
$terms = array_unique(explode(' ', $filter));
sort($terms); //Put #tags first
foreach ($terms as $word) {
$word = trim($word);
if (strlen($word) > 0) {
if ($word[0] === '#' && isset($word[1])) {
$search .= 'AND e1.tags LIKE ? ';
if ($intitle) {
$search .= 'AND e1.title LIKE ? ';
$values[] = '%' . $word .'%';
} else {
$search .= 'AND CONCAT(e1.title, UNCOMPRESS(e1.content_bin)) LIKE ? ';
} elseif ($inurl) {
$search .= 'AND CONCAT(e1.link, e1.guid) LIKE ? ';
$values[] = '%' . $word .'%';
} elseif ($author) {
$search .= 'AND e1.author LIKE ? ';
$values[] = '%' . $word .'%';
} else {
if ($word[0] === '#' && isset($word[1])) {
$search .= 'AND e1.tags LIKE ? ';
$values[] = '%' . $word .'%';
} else {
$search .= 'AND CONCAT(e1.title, UNCOMPRESS(e1.content_bin)) LIKE ? ';
$values[] = '%' . $word .'%';
}
}
}
}

Loading…
Cancel
Save