Просмотр исходного кода

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
Alexandre Alapetite 12 лет назад
Родитель
Сommit
e29be10556
1 измененных файлов с 33 добавлено и 4 удалено
  1. 33 4
      app/Models/EntryDAO.php

+ 33 - 4
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 .'%';
+						}
 					}
 				}
 			}