aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--README.fr.md46
-rw-r--r--README.md46
-rw-r--r--app/Controllers/searchController.php184
-rw-r--r--app/Models/BooleanSearch.php28
-rw-r--r--app/Models/View.php4
-rw-r--r--app/i18n/cs/gen.php27
-rw-r--r--app/i18n/de/gen.php27
-rw-r--r--app/i18n/el/gen.php27
-rw-r--r--app/i18n/en-US/gen.php27
-rw-r--r--app/i18n/en/gen.php27
-rw-r--r--app/i18n/es/gen.php27
-rw-r--r--app/i18n/fa/gen.php27
-rw-r--r--app/i18n/fi/gen.php27
-rw-r--r--app/i18n/fr/gen.php27
-rw-r--r--app/i18n/he/gen.php27
-rw-r--r--app/i18n/hu/gen.php27
-rw-r--r--app/i18n/id/gen.php27
-rw-r--r--app/i18n/it/gen.php27
-rw-r--r--app/i18n/ja/gen.php27
-rw-r--r--app/i18n/ko/gen.php27
-rw-r--r--app/i18n/lv/gen.php27
-rw-r--r--app/i18n/nl/gen.php27
-rw-r--r--app/i18n/oc/gen.php27
-rw-r--r--app/i18n/pl/gen.php27
-rw-r--r--app/i18n/pt-BR/gen.php27
-rw-r--r--app/i18n/pt-PT/gen.php27
-rw-r--r--app/i18n/ru/gen.php27
-rw-r--r--app/i18n/sk/gen.php27
-rw-r--r--app/i18n/tr/gen.php27
-rw-r--r--app/i18n/uk/gen.php27
-rw-r--r--app/i18n/zh-CN/gen.php27
-rw-r--r--app/i18n/zh-TW/gen.php27
-rw-r--r--app/layout/aside_subscription.phtml3
-rw-r--r--app/layout/nav_menu.phtml2
-rw-r--r--app/views/search/index.phtml200
-rw-r--r--docs/en/users/10_filter.md2
-rw-r--r--docs/fr/users/03_Main_view.md2
-rw-r--r--lib/Minz/Request.php12
-rw-r--r--tests/app/Models/SearchTest.php64
39 files changed, 1264 insertions, 58 deletions
diff --git a/README.fr.md b/README.fr.md
index 6e9142a86..7e96a0685 100644
--- a/README.fr.md
+++ b/README.fr.md
@@ -226,33 +226,33 @@ Voir le [dépôt dédié à ces extensions](https://github.com/FreshRSS/Extensio
| Langage | Progression | |
| - | - | - |
-| Čeština (cs) | ■■■■■■■■・・ 88% | [contribuer](https://github.com/search?q=repo%3AFreshRSS%2FFreshRSS+path%3Aapp%2Fi18n%2Fcs+%2F%28TODO%7CDIRTY%29%24%2F) |
-| Deutsch (de) | ■■■■■■■■■・ 98% | [contribuer](https://github.com/search?q=repo%3AFreshRSS%2FFreshRSS+path%3Aapp%2Fi18n%2Fde+%2F%28TODO%7CDIRTY%29%24%2F) |
+| Čeština (cs) | ■■■■■■■■・・ 86% | [contribuer](https://github.com/search?q=repo%3AFreshRSS%2FFreshRSS+path%3Aapp%2Fi18n%2Fcs+%2F%28TODO%7CDIRTY%29%24%2F) |
+| Deutsch (de) | ■■■■■■■■■・ 96% | [contribuer](https://github.com/search?q=repo%3AFreshRSS%2FFreshRSS+path%3Aapp%2Fi18n%2Fde+%2F%28TODO%7CDIRTY%29%24%2F) |
| Ελληνικά (el) | ■■・・・・・・・・ 22% | [contribuer](https://github.com/search?q=repo%3AFreshRSS%2FFreshRSS+path%3Aapp%2Fi18n%2Fel+%2F%28TODO%7CDIRTY%29%24%2F) |
| English (en) | ■■■■■■■■■■ 100% | [contribuer](https://github.com/search?q=repo%3AFreshRSS%2FFreshRSS+path%3Aapp%2Fi18n%2Fen+%2F%28TODO%7CDIRTY%29%24%2F) |
| English (United States) (en-US) | ■■■■■■■■■■ 100% | [contribuer](https://github.com/search?q=repo%3AFreshRSS%2FFreshRSS+path%3Aapp%2Fi18n%2Fen-US+%2F%28TODO%7CDIRTY%29%24%2F) |
-| Español (es) | ■■■■■■■■■・ 91% | [contribuer](https://github.com/search?q=repo%3AFreshRSS%2FFreshRSS+path%3Aapp%2Fi18n%2Fes+%2F%28TODO%7CDIRTY%29%24%2F) |
-| فارسی (fa) | ■■■■■■■■■・ 97% | [contribuer](https://github.com/search?q=repo%3AFreshRSS%2FFreshRSS+path%3Aapp%2Fi18n%2Ffa+%2F%28TODO%7CDIRTY%29%24%2F) |
-| Suomi (fi) | ■■■■■■■■■・ 99% | [contribuer](https://github.com/search?q=repo%3AFreshRSS%2FFreshRSS+path%3Aapp%2Fi18n%2Ffi+%2F%28TODO%7CDIRTY%29%24%2F) |
+| Español (es) | ■■■■■■■■・・ 89% | [contribuer](https://github.com/search?q=repo%3AFreshRSS%2FFreshRSS+path%3Aapp%2Fi18n%2Fes+%2F%28TODO%7CDIRTY%29%24%2F) |
+| فارسی (fa) | ■■■■■■■■■・ 95% | [contribuer](https://github.com/search?q=repo%3AFreshRSS%2FFreshRSS+path%3Aapp%2Fi18n%2Ffa+%2F%28TODO%7CDIRTY%29%24%2F) |
+| Suomi (fi) | ■■■■■■■■■・ 97% | [contribuer](https://github.com/search?q=repo%3AFreshRSS%2FFreshRSS+path%3Aapp%2Fi18n%2Ffi+%2F%28TODO%7CDIRTY%29%24%2F) |
| Français (fr) | ■■■■■■■■■■ 100% | [contribuer](https://github.com/search?q=repo%3AFreshRSS%2FFreshRSS+path%3Aapp%2Fi18n%2Ffr+%2F%28TODO%7CDIRTY%29%24%2F) |
-| עברית (he) | ■■■■・・・・・・ 45% | [contribuer](https://github.com/search?q=repo%3AFreshRSS%2FFreshRSS+path%3Aapp%2Fi18n%2Fhe+%2F%28TODO%7CDIRTY%29%24%2F) |
-| Magyar (hu) | ■■■■■■■■■・ 98% | [contribuer](https://github.com/search?q=repo%3AFreshRSS%2FFreshRSS+path%3Aapp%2Fi18n%2Fhu+%2F%28TODO%7CDIRTY%29%24%2F) |
-| Bahasa Indonesia (id) | ■■■■■■■■■・ 96% | [contribuer](https://github.com/search?q=repo%3AFreshRSS%2FFreshRSS+path%3Aapp%2Fi18n%2Fid+%2F%28TODO%7CDIRTY%29%24%2F) |
-| Italiano (it) | ■■■■■■■■■・ 99% | [contribuer](https://github.com/search?q=repo%3AFreshRSS%2FFreshRSS+path%3Aapp%2Fi18n%2Fit+%2F%28TODO%7CDIRTY%29%24%2F) |
-| 日本語 (ja) | ■■■■■■■■■・ 94% | [contribuer](https://github.com/search?q=repo%3AFreshRSS%2FFreshRSS+path%3Aapp%2Fi18n%2Fja+%2F%28TODO%7CDIRTY%29%24%2F) |
-| 한국어 (ko) | ■■■■■■■■・・ 88% | [contribuer](https://github.com/search?q=repo%3AFreshRSS%2FFreshRSS+path%3Aapp%2Fi18n%2Fko+%2F%28TODO%7CDIRTY%29%24%2F) |
-| Latviešu (lv) | ■■■■■■■■・・ 82% | [contribuer](https://github.com/search?q=repo%3AFreshRSS%2FFreshRSS+path%3Aapp%2Fi18n%2Flv+%2F%28TODO%7CDIRTY%29%24%2F) |
-| Nederlands (nl) | ■■■■■■■■■・ 99% | [contribuer](https://github.com/search?q=repo%3AFreshRSS%2FFreshRSS+path%3Aapp%2Fi18n%2Fnl+%2F%28TODO%7CDIRTY%29%24%2F) |
-| Occitan (oc) | ■■■■■■■■・・ 80% | [contribuer](https://github.com/search?q=repo%3AFreshRSS%2FFreshRSS+path%3Aapp%2Fi18n%2Foc+%2F%28TODO%7CDIRTY%29%24%2F) |
-| Polski (pl) | ■■■■■■■■■・ 99% | [contribuer](https://github.com/search?q=repo%3AFreshRSS%2FFreshRSS+path%3Aapp%2Fi18n%2Fpl+%2F%28TODO%7CDIRTY%29%24%2F) |
-| Português (Brasil) (pt-BR) | ■■■■■■■■・・ 87% | [contribuer](https://github.com/search?q=repo%3AFreshRSS%2FFreshRSS+path%3Aapp%2Fi18n%2Fpt-BR+%2F%28TODO%7CDIRTY%29%24%2F) |
-| Português (Portugal) (pt-PT) | ■■■■■■■■・・ 87% | [contribuer](https://github.com/search?q=repo%3AFreshRSS%2FFreshRSS+path%3Aapp%2Fi18n%2Fpt-PT+%2F%28TODO%7CDIRTY%29%24%2F) |
-| Русский (ru) | ■■■■■■■■・・ 88% | [contribuer](https://github.com/search?q=repo%3AFreshRSS%2FFreshRSS+path%3Aapp%2Fi18n%2Fru+%2F%28TODO%7CDIRTY%29%24%2F) |
-| Slovenčina (sk) | ■■■■■■■■・・ 87% | [contribuer](https://github.com/search?q=repo%3AFreshRSS%2FFreshRSS+path%3Aapp%2Fi18n%2Fsk+%2F%28TODO%7CDIRTY%29%24%2F) |
-| Türkçe (tr) | ■■■■■■■■■・ 95% | [contribuer](https://github.com/search?q=repo%3AFreshRSS%2FFreshRSS+path%3Aapp%2Fi18n%2Ftr+%2F%28TODO%7CDIRTY%29%24%2F) |
-| Українська (uk) | ■■■■■■■■■・ 98% | [contribuer](https://github.com/search?q=repo%3AFreshRSS%2FFreshRSS+path%3Aapp%2Fi18n%2Fuk+%2F%28TODO%7CDIRTY%29%24%2F) |
-| 简体中文 (zh-CN) | ■■■■■■■■・・ 89% | [contribuer](https://github.com/search?q=repo%3AFreshRSS%2FFreshRSS+path%3Aapp%2Fi18n%2Fzh-CN+%2F%28TODO%7CDIRTY%29%24%2F) |
-| 正體中文 (zh-TW) | ■■■■■■■■・・ 88% | [contribuer](https://github.com/search?q=repo%3AFreshRSS%2FFreshRSS+path%3Aapp%2Fi18n%2Fzh-TW+%2F%28TODO%7CDIRTY%29%24%2F) |
+| עברית (he) | ■■■■・・・・・・ 44% | [contribuer](https://github.com/search?q=repo%3AFreshRSS%2FFreshRSS+path%3Aapp%2Fi18n%2Fhe+%2F%28TODO%7CDIRTY%29%24%2F) |
+| Magyar (hu) | ■■■■■■■■■・ 96% | [contribuer](https://github.com/search?q=repo%3AFreshRSS%2FFreshRSS+path%3Aapp%2Fi18n%2Fhu+%2F%28TODO%7CDIRTY%29%24%2F) |
+| Bahasa Indonesia (id) | ■■■■■■■■■・ 94% | [contribuer](https://github.com/search?q=repo%3AFreshRSS%2FFreshRSS+path%3Aapp%2Fi18n%2Fid+%2F%28TODO%7CDIRTY%29%24%2F) |
+| Italiano (it) | ■■■■■■■■■・ 97% | [contribuer](https://github.com/search?q=repo%3AFreshRSS%2FFreshRSS+path%3Aapp%2Fi18n%2Fit+%2F%28TODO%7CDIRTY%29%24%2F) |
+| 日本語 (ja) | ■■■■■■■■■・ 92% | [contribuer](https://github.com/search?q=repo%3AFreshRSS%2FFreshRSS+path%3Aapp%2Fi18n%2Fja+%2F%28TODO%7CDIRTY%29%24%2F) |
+| 한국어 (ko) | ■■■■■■■■・・ 86% | [contribuer](https://github.com/search?q=repo%3AFreshRSS%2FFreshRSS+path%3Aapp%2Fi18n%2Fko+%2F%28TODO%7CDIRTY%29%24%2F) |
+| Latviešu (lv) | ■■■■■■■■・・ 80% | [contribuer](https://github.com/search?q=repo%3AFreshRSS%2FFreshRSS+path%3Aapp%2Fi18n%2Flv+%2F%28TODO%7CDIRTY%29%24%2F) |
+| Nederlands (nl) | ■■■■■■■■■・ 96% | [contribuer](https://github.com/search?q=repo%3AFreshRSS%2FFreshRSS+path%3Aapp%2Fi18n%2Fnl+%2F%28TODO%7CDIRTY%29%24%2F) |
+| Occitan (oc) | ■■■■■■■・・・ 78% | [contribuer](https://github.com/search?q=repo%3AFreshRSS%2FFreshRSS+path%3Aapp%2Fi18n%2Foc+%2F%28TODO%7CDIRTY%29%24%2F) |
+| Polski (pl) | ■■■■■■■■■・ 97% | [contribuer](https://github.com/search?q=repo%3AFreshRSS%2FFreshRSS+path%3Aapp%2Fi18n%2Fpl+%2F%28TODO%7CDIRTY%29%24%2F) |
+| Português (Brasil) (pt-BR) | ■■■■■■■■・・ 85% | [contribuer](https://github.com/search?q=repo%3AFreshRSS%2FFreshRSS+path%3Aapp%2Fi18n%2Fpt-BR+%2F%28TODO%7CDIRTY%29%24%2F) |
+| Português (Portugal) (pt-PT) | ■■■■■■■■・・ 85% | [contribuer](https://github.com/search?q=repo%3AFreshRSS%2FFreshRSS+path%3Aapp%2Fi18n%2Fpt-PT+%2F%28TODO%7CDIRTY%29%24%2F) |
+| Русский (ru) | ■■■■■■■■・・ 86% | [contribuer](https://github.com/search?q=repo%3AFreshRSS%2FFreshRSS+path%3Aapp%2Fi18n%2Fru+%2F%28TODO%7CDIRTY%29%24%2F) |
+| Slovenčina (sk) | ■■■■■■■■・・ 86% | [contribuer](https://github.com/search?q=repo%3AFreshRSS%2FFreshRSS+path%3Aapp%2Fi18n%2Fsk+%2F%28TODO%7CDIRTY%29%24%2F) |
+| Türkçe (tr) | ■■■■■■■■■・ 93% | [contribuer](https://github.com/search?q=repo%3AFreshRSS%2FFreshRSS+path%3Aapp%2Fi18n%2Ftr+%2F%28TODO%7CDIRTY%29%24%2F) |
+| Українська (uk) | ■■■■■■■■■・ 96% | [contribuer](https://github.com/search?q=repo%3AFreshRSS%2FFreshRSS+path%3Aapp%2Fi18n%2Fuk+%2F%28TODO%7CDIRTY%29%24%2F) |
+| 简体中文 (zh-CN) | ■■■■■■■■・・ 87% | [contribuer](https://github.com/search?q=repo%3AFreshRSS%2FFreshRSS+path%3Aapp%2Fi18n%2Fzh-CN+%2F%28TODO%7CDIRTY%29%24%2F) |
+| 正體中文 (zh-TW) | ■■■■■■■■・・ 86% | [contribuer](https://github.com/search?q=repo%3AFreshRSS%2FFreshRSS+path%3Aapp%2Fi18n%2Fzh-TW+%2F%28TODO%7CDIRTY%29%24%2F) |
</translations>
diff --git a/README.md b/README.md
index 4e8233bf5..ca7405dd1 100644
--- a/README.md
+++ b/README.md
@@ -122,33 +122,33 @@ See the [repository dedicated to those extensions](https://github.com/FreshRSS/E
| Language | Progress | |
| - | - | - |
-| Čeština (cs) | ■■■■■■■■・・ 88% | [contribute](https://github.com/search?q=repo%3AFreshRSS%2FFreshRSS+path%3Aapp%2Fi18n%2Fcs+%2F%28TODO%7CDIRTY%29%24%2F) |
-| Deutsch (de) | ■■■■■■■■■・ 98% | [contribute](https://github.com/search?q=repo%3AFreshRSS%2FFreshRSS+path%3Aapp%2Fi18n%2Fde+%2F%28TODO%7CDIRTY%29%24%2F) |
+| Čeština (cs) | ■■■■■■■■・・ 86% | [contribute](https://github.com/search?q=repo%3AFreshRSS%2FFreshRSS+path%3Aapp%2Fi18n%2Fcs+%2F%28TODO%7CDIRTY%29%24%2F) |
+| Deutsch (de) | ■■■■■■■■■・ 96% | [contribute](https://github.com/search?q=repo%3AFreshRSS%2FFreshRSS+path%3Aapp%2Fi18n%2Fde+%2F%28TODO%7CDIRTY%29%24%2F) |
| Ελληνικά (el) | ■■・・・・・・・・ 22% | [contribute](https://github.com/search?q=repo%3AFreshRSS%2FFreshRSS+path%3Aapp%2Fi18n%2Fel+%2F%28TODO%7CDIRTY%29%24%2F) |
| English (en) | ■■■■■■■■■■ 100% | [contribute](https://github.com/search?q=repo%3AFreshRSS%2FFreshRSS+path%3Aapp%2Fi18n%2Fen+%2F%28TODO%7CDIRTY%29%24%2F) |
| English (United States) (en-US) | ■■■■■■■■■■ 100% | [contribute](https://github.com/search?q=repo%3AFreshRSS%2FFreshRSS+path%3Aapp%2Fi18n%2Fen-US+%2F%28TODO%7CDIRTY%29%24%2F) |
-| Español (es) | ■■■■■■■■■・ 91% | [contribute](https://github.com/search?q=repo%3AFreshRSS%2FFreshRSS+path%3Aapp%2Fi18n%2Fes+%2F%28TODO%7CDIRTY%29%24%2F) |
-| فارسی (fa) | ■■■■■■■■■・ 97% | [contribute](https://github.com/search?q=repo%3AFreshRSS%2FFreshRSS+path%3Aapp%2Fi18n%2Ffa+%2F%28TODO%7CDIRTY%29%24%2F) |
-| Suomi (fi) | ■■■■■■■■■・ 99% | [contribute](https://github.com/search?q=repo%3AFreshRSS%2FFreshRSS+path%3Aapp%2Fi18n%2Ffi+%2F%28TODO%7CDIRTY%29%24%2F) |
+| Español (es) | ■■■■■■■■・・ 89% | [contribute](https://github.com/search?q=repo%3AFreshRSS%2FFreshRSS+path%3Aapp%2Fi18n%2Fes+%2F%28TODO%7CDIRTY%29%24%2F) |
+| فارسی (fa) | ■■■■■■■■■・ 95% | [contribute](https://github.com/search?q=repo%3AFreshRSS%2FFreshRSS+path%3Aapp%2Fi18n%2Ffa+%2F%28TODO%7CDIRTY%29%24%2F) |
+| Suomi (fi) | ■■■■■■■■■・ 97% | [contribute](https://github.com/search?q=repo%3AFreshRSS%2FFreshRSS+path%3Aapp%2Fi18n%2Ffi+%2F%28TODO%7CDIRTY%29%24%2F) |
| Français (fr) | ■■■■■■■■■■ 100% | [contribute](https://github.com/search?q=repo%3AFreshRSS%2FFreshRSS+path%3Aapp%2Fi18n%2Ffr+%2F%28TODO%7CDIRTY%29%24%2F) |
-| עברית (he) | ■■■■・・・・・・ 45% | [contribute](https://github.com/search?q=repo%3AFreshRSS%2FFreshRSS+path%3Aapp%2Fi18n%2Fhe+%2F%28TODO%7CDIRTY%29%24%2F) |
-| Magyar (hu) | ■■■■■■■■■・ 98% | [contribute](https://github.com/search?q=repo%3AFreshRSS%2FFreshRSS+path%3Aapp%2Fi18n%2Fhu+%2F%28TODO%7CDIRTY%29%24%2F) |
-| Bahasa Indonesia (id) | ■■■■■■■■■・ 96% | [contribute](https://github.com/search?q=repo%3AFreshRSS%2FFreshRSS+path%3Aapp%2Fi18n%2Fid+%2F%28TODO%7CDIRTY%29%24%2F) |
-| Italiano (it) | ■■■■■■■■■・ 99% | [contribute](https://github.com/search?q=repo%3AFreshRSS%2FFreshRSS+path%3Aapp%2Fi18n%2Fit+%2F%28TODO%7CDIRTY%29%24%2F) |
-| 日本語 (ja) | ■■■■■■■■■・ 94% | [contribute](https://github.com/search?q=repo%3AFreshRSS%2FFreshRSS+path%3Aapp%2Fi18n%2Fja+%2F%28TODO%7CDIRTY%29%24%2F) |
-| 한국어 (ko) | ■■■■■■■■・・ 88% | [contribute](https://github.com/search?q=repo%3AFreshRSS%2FFreshRSS+path%3Aapp%2Fi18n%2Fko+%2F%28TODO%7CDIRTY%29%24%2F) |
-| Latviešu (lv) | ■■■■■■■■・・ 82% | [contribute](https://github.com/search?q=repo%3AFreshRSS%2FFreshRSS+path%3Aapp%2Fi18n%2Flv+%2F%28TODO%7CDIRTY%29%24%2F) |
-| Nederlands (nl) | ■■■■■■■■■・ 99% | [contribute](https://github.com/search?q=repo%3AFreshRSS%2FFreshRSS+path%3Aapp%2Fi18n%2Fnl+%2F%28TODO%7CDIRTY%29%24%2F) |
-| Occitan (oc) | ■■■■■■■■・・ 80% | [contribute](https://github.com/search?q=repo%3AFreshRSS%2FFreshRSS+path%3Aapp%2Fi18n%2Foc+%2F%28TODO%7CDIRTY%29%24%2F) |
-| Polski (pl) | ■■■■■■■■■・ 99% | [contribute](https://github.com/search?q=repo%3AFreshRSS%2FFreshRSS+path%3Aapp%2Fi18n%2Fpl+%2F%28TODO%7CDIRTY%29%24%2F) |
-| Português (Brasil) (pt-BR) | ■■■■■■■■・・ 87% | [contribute](https://github.com/search?q=repo%3AFreshRSS%2FFreshRSS+path%3Aapp%2Fi18n%2Fpt-BR+%2F%28TODO%7CDIRTY%29%24%2F) |
-| Português (Portugal) (pt-PT) | ■■■■■■■■・・ 87% | [contribute](https://github.com/search?q=repo%3AFreshRSS%2FFreshRSS+path%3Aapp%2Fi18n%2Fpt-PT+%2F%28TODO%7CDIRTY%29%24%2F) |
-| Русский (ru) | ■■■■■■■■・・ 88% | [contribute](https://github.com/search?q=repo%3AFreshRSS%2FFreshRSS+path%3Aapp%2Fi18n%2Fru+%2F%28TODO%7CDIRTY%29%24%2F) |
-| Slovenčina (sk) | ■■■■■■■■・・ 87% | [contribute](https://github.com/search?q=repo%3AFreshRSS%2FFreshRSS+path%3Aapp%2Fi18n%2Fsk+%2F%28TODO%7CDIRTY%29%24%2F) |
-| Türkçe (tr) | ■■■■■■■■■・ 95% | [contribute](https://github.com/search?q=repo%3AFreshRSS%2FFreshRSS+path%3Aapp%2Fi18n%2Ftr+%2F%28TODO%7CDIRTY%29%24%2F) |
-| Українська (uk) | ■■■■■■■■■・ 98% | [contribute](https://github.com/search?q=repo%3AFreshRSS%2FFreshRSS+path%3Aapp%2Fi18n%2Fuk+%2F%28TODO%7CDIRTY%29%24%2F) |
-| 简体中文 (zh-CN) | ■■■■■■■■・・ 89% | [contribute](https://github.com/search?q=repo%3AFreshRSS%2FFreshRSS+path%3Aapp%2Fi18n%2Fzh-CN+%2F%28TODO%7CDIRTY%29%24%2F) |
-| 正體中文 (zh-TW) | ■■■■■■■■・・ 88% | [contribute](https://github.com/search?q=repo%3AFreshRSS%2FFreshRSS+path%3Aapp%2Fi18n%2Fzh-TW+%2F%28TODO%7CDIRTY%29%24%2F) |
+| עברית (he) | ■■■■・・・・・・ 44% | [contribute](https://github.com/search?q=repo%3AFreshRSS%2FFreshRSS+path%3Aapp%2Fi18n%2Fhe+%2F%28TODO%7CDIRTY%29%24%2F) |
+| Magyar (hu) | ■■■■■■■■■・ 96% | [contribute](https://github.com/search?q=repo%3AFreshRSS%2FFreshRSS+path%3Aapp%2Fi18n%2Fhu+%2F%28TODO%7CDIRTY%29%24%2F) |
+| Bahasa Indonesia (id) | ■■■■■■■■■・ 94% | [contribute](https://github.com/search?q=repo%3AFreshRSS%2FFreshRSS+path%3Aapp%2Fi18n%2Fid+%2F%28TODO%7CDIRTY%29%24%2F) |
+| Italiano (it) | ■■■■■■■■■・ 97% | [contribute](https://github.com/search?q=repo%3AFreshRSS%2FFreshRSS+path%3Aapp%2Fi18n%2Fit+%2F%28TODO%7CDIRTY%29%24%2F) |
+| 日本語 (ja) | ■■■■■■■■■・ 92% | [contribute](https://github.com/search?q=repo%3AFreshRSS%2FFreshRSS+path%3Aapp%2Fi18n%2Fja+%2F%28TODO%7CDIRTY%29%24%2F) |
+| 한국어 (ko) | ■■■■■■■■・・ 86% | [contribute](https://github.com/search?q=repo%3AFreshRSS%2FFreshRSS+path%3Aapp%2Fi18n%2Fko+%2F%28TODO%7CDIRTY%29%24%2F) |
+| Latviešu (lv) | ■■■■■■■■・・ 80% | [contribute](https://github.com/search?q=repo%3AFreshRSS%2FFreshRSS+path%3Aapp%2Fi18n%2Flv+%2F%28TODO%7CDIRTY%29%24%2F) |
+| Nederlands (nl) | ■■■■■■■■■・ 96% | [contribute](https://github.com/search?q=repo%3AFreshRSS%2FFreshRSS+path%3Aapp%2Fi18n%2Fnl+%2F%28TODO%7CDIRTY%29%24%2F) |
+| Occitan (oc) | ■■■■■■■・・・ 78% | [contribute](https://github.com/search?q=repo%3AFreshRSS%2FFreshRSS+path%3Aapp%2Fi18n%2Foc+%2F%28TODO%7CDIRTY%29%24%2F) |
+| Polski (pl) | ■■■■■■■■■・ 97% | [contribute](https://github.com/search?q=repo%3AFreshRSS%2FFreshRSS+path%3Aapp%2Fi18n%2Fpl+%2F%28TODO%7CDIRTY%29%24%2F) |
+| Português (Brasil) (pt-BR) | ■■■■■■■■・・ 85% | [contribute](https://github.com/search?q=repo%3AFreshRSS%2FFreshRSS+path%3Aapp%2Fi18n%2Fpt-BR+%2F%28TODO%7CDIRTY%29%24%2F) |
+| Português (Portugal) (pt-PT) | ■■■■■■■■・・ 85% | [contribute](https://github.com/search?q=repo%3AFreshRSS%2FFreshRSS+path%3Aapp%2Fi18n%2Fpt-PT+%2F%28TODO%7CDIRTY%29%24%2F) |
+| Русский (ru) | ■■■■■■■■・・ 86% | [contribute](https://github.com/search?q=repo%3AFreshRSS%2FFreshRSS+path%3Aapp%2Fi18n%2Fru+%2F%28TODO%7CDIRTY%29%24%2F) |
+| Slovenčina (sk) | ■■■■■■■■・・ 86% | [contribute](https://github.com/search?q=repo%3AFreshRSS%2FFreshRSS+path%3Aapp%2Fi18n%2Fsk+%2F%28TODO%7CDIRTY%29%24%2F) |
+| Türkçe (tr) | ■■■■■■■■■・ 93% | [contribute](https://github.com/search?q=repo%3AFreshRSS%2FFreshRSS+path%3Aapp%2Fi18n%2Ftr+%2F%28TODO%7CDIRTY%29%24%2F) |
+| Українська (uk) | ■■■■■■■■■・ 96% | [contribute](https://github.com/search?q=repo%3AFreshRSS%2FFreshRSS+path%3Aapp%2Fi18n%2Fuk+%2F%28TODO%7CDIRTY%29%24%2F) |
+| 简体中文 (zh-CN) | ■■■■■■■■・・ 87% | [contribute](https://github.com/search?q=repo%3AFreshRSS%2FFreshRSS+path%3Aapp%2Fi18n%2Fzh-CN+%2F%28TODO%7CDIRTY%29%24%2F) |
+| 正體中文 (zh-TW) | ■■■■■■■■・・ 86% | [contribute](https://github.com/search?q=repo%3AFreshRSS%2FFreshRSS+path%3Aapp%2Fi18n%2Fzh-TW+%2F%28TODO%7CDIRTY%29%24%2F) |
</translations>
diff --git a/app/Controllers/searchController.php b/app/Controllers/searchController.php
new file mode 100644
index 000000000..19ec04606
--- /dev/null
+++ b/app/Controllers/searchController.php
@@ -0,0 +1,184 @@
+<?php
+declare(strict_types=1);
+
+/**
+ * Controller to handle advanced search actions.
+ */
+class FreshRSS_search_Controller extends FreshRSS_ActionController {
+
+ #[\Override]
+ public function firstAction(): void {
+ if (!FreshRSS_Auth::hasAccess()) {
+ Minz_Error::error(403);
+ }
+ }
+
+ /**
+ * Display the advanced search form.
+ */
+ public function indexAction(): void {
+ FreshRSS_View::prependTitle(_t('gen.menu.advanced_search') . ' · ');
+
+ // Get categories and feeds for dropdowns
+ $catDAO = FreshRSS_Factory::createCategoryDao();
+ $this->view->categories = $catDAO->listCategories(true, true);
+
+ $feedDAO = FreshRSS_Factory::createFeedDao();
+ $this->view->feeds = $feedDAO->listFeeds();
+
+ // Get labels
+ $tagDAO = FreshRSS_Factory::createTagDao();
+ $this->view->labels = $tagDAO->listTags(true);
+
+ // Get user queries
+ $this->view->queries = [];
+ foreach (FreshRSS_Context::userConf()->queries as $key => $query) {
+ $this->view->queries[intval($key)] = new FreshRSS_UserQuery($query, FreshRSS_Context::categories(), FreshRSS_Context::labels());
+ }
+ }
+
+ /**
+ * Build an OR-separated clause from newline delimited values.
+ */
+ private static function buildOrClause(string $rawValue, string $prefix = ''): string {
+ $lines = preg_split('/[\r\n]+/', $rawValue);
+ if ($lines === false) {
+ $lines = [$rawValue];
+ }
+
+ $terms = [];
+ foreach ($lines as $line) {
+ $line = trim($line, " \n\r\t\v\0\"'"); // Also trim existing quotes
+ if ($line === '') {
+ continue;
+ }
+ $quoted = preg_match('/\s/', $line) === 1 ? "'$line'" : $line;
+ $terms[] = $prefix . $quoted;
+ }
+
+ if (empty($terms)) {
+ return '';
+ }
+ if (count($terms) === 1) {
+ return $terms[0];
+ }
+ return '(' . implode(' OR ', $terms) . ')';
+ }
+
+ /**
+ * Process the advanced search form submission.
+ */
+ public function submitAction(): void {
+ if (!Minz_Request::isPost()) {
+ Minz_Request::forward(['c' => 'search', 'a' => 'index'], true);
+ return;
+ }
+
+ // Build the search query from form parameters
+ $searchTerms = [];
+
+ $freeTextClause = self::buildOrClause(Minz_Request::paramString('free_text'));
+ if ($freeTextClause !== '') {
+ $searchTerms[] = $freeTextClause;
+ }
+
+ $titleClause = self::buildOrClause(Minz_Request::paramString('title'), 'intitle:');
+ if ($titleClause !== '') {
+ $searchTerms[] = $titleClause;
+ }
+
+ $contentClause = self::buildOrClause(Minz_Request::paramString('content'), 'intext:');
+ if ($contentClause !== '') {
+ $searchTerms[] = $contentClause;
+ }
+
+ $urlClause = self::buildOrClause(Minz_Request::paramString('url'), 'inurl:');
+ if ($urlClause !== '') {
+ $searchTerms[] = $urlClause;
+ }
+
+ $authorClause = self::buildOrClause(Minz_Request::paramString('authors'), 'author:');
+ if ($authorClause !== '') {
+ $searchTerms[] = $authorClause;
+ }
+
+ $tagsClause = self::buildOrClause(Minz_Request::paramString('tags'), '#');
+ if ($tagsClause !== '') {
+ $searchTerms[] = $tagsClause;
+ }
+
+ // Received date
+ $dateFrom = trim(Minz_Request::paramString('date_from'));
+ $dateTo = trim(Minz_Request::paramString('date_to'));
+ $dateNumber = Minz_Request::paramInt('date_number');
+ $dateUnit = trim(Minz_Request::paramString('date_unit'));
+
+ if ($dateNumber > 0 && $dateUnit !== '') {
+ // Convert to ISO 8601 duration format: P1D, P1W, P1M, PT1H, etc.
+ // Time units (H, M, S) require a T separator
+ $prefix = ($dateUnit === 'H' || $dateUnit === 'M' || $dateUnit === 'S') ? 'PT' : 'P';
+ $searchTerms[] = "date:{$prefix}{$dateNumber}{$dateUnit}";
+ } elseif ($dateFrom !== '' || $dateTo !== '') {
+ if ($dateFrom !== '' && $dateTo !== '') {
+ $searchTerms[] = "date:$dateFrom/$dateTo";
+ } elseif ($dateFrom !== '') {
+ $searchTerms[] = "date:$dateFrom/";
+ } elseif ($dateTo !== '') {
+ $searchTerms[] = "date:/$dateTo";
+ }
+ }
+
+ // Publication date
+ $pubDateFrom = trim(Minz_Request::paramString('pubdate_from'));
+ $pubDateTo = trim(Minz_Request::paramString('pubdate_to'));
+ $pubDateNumber = Minz_Request::paramInt('pubdate_number');
+ $pubDateUnit = trim(Minz_Request::paramString('pubdate_unit'));
+
+ if ($pubDateNumber > 0 && $pubDateUnit !== '') {
+ // Convert to ISO 8601 duration format: P1D, P1W, P1M, PT1H, etc.
+ // Time units (H, M, S) require a T separator
+ $prefix = ($pubDateUnit === 'H' || $pubDateUnit === 'M' || $pubDateUnit === 'S') ? 'PT' : 'P';
+ $searchTerms[] = "pubdate:{$prefix}{$pubDateNumber}{$pubDateUnit}";
+ } elseif ($pubDateFrom !== '' || $pubDateTo !== '') {
+ if ($pubDateFrom !== '' && $pubDateTo !== '') {
+ $searchTerms[] = "pubdate:$pubDateFrom/$pubDateTo";
+ } elseif ($pubDateFrom !== '') {
+ $searchTerms[] = "pubdate:$pubDateFrom/";
+ } elseif ($pubDateTo !== '') {
+ $searchTerms[] = "pubdate:/$pubDateTo";
+ }
+ }
+
+ $feedIds = Minz_Request::paramArrayInt('feed_ids');
+ if (!empty($feedIds)) {
+ $searchTerms[] = 'f:' . implode(',', $feedIds);
+ }
+
+ $categoryIds = Minz_Request::paramArrayInt('category_ids');
+ if (!empty($categoryIds)) {
+ $searchTerms[] = 'c:' . implode(',', $categoryIds);
+ }
+
+ $labelIds = Minz_Request::paramArrayInt('label_ids');
+ if (!empty($labelIds)) {
+ $searchTerms[] = 'L:' . implode(',', $labelIds);
+ }
+
+ $userQueryIds = Minz_Request::paramArrayInt('user_query_ids');
+ if (!empty($userQueryIds)) {
+ $searchTerms[] = 'S:' . implode(',', $userQueryIds);
+ }
+
+ // Combine all search terms
+ $searchQuery = implode(' ', $searchTerms);
+
+ // Redirect to the main view with the search query
+ Minz_Request::forward([
+ 'c' => 'index',
+ 'a' => 'index',
+ 'params' => [
+ 'search' => $searchQuery,
+ ],
+ ], redirect: true);
+ }
+}
diff --git a/app/Models/BooleanSearch.php b/app/Models/BooleanSearch.php
index 1832bd419..7b3cc0e12 100644
--- a/app/Models/BooleanSearch.php
+++ b/app/Models/BooleanSearch.php
@@ -102,7 +102,7 @@ class FreshRSS_BooleanSearch implements \Stringable {
private function parseUserQueryIds(string $input, bool $allowUserQueries = true): string {
$all_matches = [];
- if (preg_match_all('/\bS:(?P<search>\d+)/', $input, $matchesFound)) {
+ if (preg_match_all('/\bS:(?P<search>[0-9,]+)/', $input, $matchesFound)) {
$all_matches[] = $matchesFound;
}
@@ -119,16 +119,26 @@ class FreshRSS_BooleanSearch implements \Stringable {
continue;
}
for ($i = count($matches['search']) - 1; $i >= 0; $i--) {
- // Index starting from 1
- $id = (int)(trim($matches['search'][$i])) - 1;
- if (!empty($queries[$id])) {
- $fromS[] = $matches[0][$i];
- if ($allowUserQueries) {
- $toS[] = '(' . self::escapeLiteralParentheses($queries[$id]) . ')';
- } else {
- $toS[] = '';
+ $ids = explode(',', $matches['search'][$i]);
+ $ids = array_map('intval', $ids);
+
+ $matchedQueries = [];
+ foreach ($ids as $id) {
+ if (!empty($queries[$id])) {
+ $matchedQueries[] = $queries[$id];
}
}
+ if (empty($matchedQueries)) {
+ continue;
+ }
+
+ $fromS[] = $matches[0][$i];
+ if ($allowUserQueries) {
+ $escapedQueries = array_map(fn(string $query): string => self::escapeLiteralParentheses($query), $matchedQueries);
+ $toS[] = '(' . implode(') OR (', $escapedQueries) . ')';
+ } else {
+ $toS[] = '';
+ }
}
}
diff --git a/app/Models/View.php b/app/Models/View.php
index 104afb3c0..cf5c30e15 100644
--- a/app/Models/View.php
+++ b/app/Models/View.php
@@ -30,6 +30,10 @@ class FreshRSS_View extends Minz_View {
public array $tagsForEntries;
public bool $excludeMutedFeeds;
+ // Search
+ /** @var array<int,FreshRSS_Tag> where the key is the label ID */
+ public array $labels;
+
// Subscriptions
public bool $displaySlider = false;
public bool $load_ok;
diff --git a/app/i18n/cs/gen.php b/app/i18n/cs/gen.php
index fe68fd80d..e61682441 100644
--- a/app/i18n/cs/gen.php
+++ b/app/i18n/cs/gen.php
@@ -189,6 +189,7 @@ return array(
'about' => 'O aplikaci',
'account' => 'Účet',
'admin' => 'Administrace',
+ 'advanced_search' => 'Advanced Search', // TODO
'archiving' => 'Archivace',
'authentication' => 'Ověřování',
'check_install' => 'Kontrola instalace',
@@ -221,6 +222,32 @@ return array(
'language' => 'Language', // IGNORE
'translated' => 'Progress', // IGNORE
),
+ 'search' => array(
+ 'advanced_search_help' => 'This form helps construct search queries, but manual queries are even more powerful.', // TODO
+ 'authors' => 'Authors', // TODO
+ 'categories' => 'Categories', // TODO
+ 'content' => 'Content', // TODO
+ 'date_from' => 'From', // TODO
+ 'date_past' => 'In the past', // TODO
+ 'date_published' => 'Publication Date', // TODO
+ 'date_range' => 'Date Range', // TODO
+ 'date_received' => 'Received Date', // TODO
+ 'date_to' => 'To', // TODO
+ 'feeds' => 'Feeds', // TODO
+ 'free_text' => 'Free Text', // TODO
+ 'free_text_help' => 'Search both in title and content', // TODO
+ 'full_documentation' => 'View <a href="https://freshrss.github.io/FreshRSS/en/users/10_filter.html#with-the-search-field" target="_blank">full search documentation</a>', // TODO
+ 'labels' => 'My Labels', // TODO
+ 'multiple_help' => 'Select one or more (hold <kbd>Ctrl</kbd> or <kbd>Cmd</kbd>)', // TODO
+ 'sources' => 'Sources', // TODO
+ 'tags' => 'Article Tags', // TODO
+ 'text' => 'Text Search', // TODO
+ 'text_help' => 'Multiple lines are combined by a logical <i>or</i>. Also supports <a href="https://freshrss.github.io/FreshRSS/en/users/10_filter.html#regex" target="_blank">regular expressions</a>.', // TODO
+ 'text_placeholder' => 'Keyword', // TODO
+ 'title' => 'Title', // TODO
+ 'url' => 'URL', // TODO
+ 'user_queries' => 'User Queries', // TODO
+ ),
'share' => array(
'Known' => 'Známé základní stránky',
'archiveIS' => 'archive.is', // IGNORE
diff --git a/app/i18n/de/gen.php b/app/i18n/de/gen.php
index 3170b7bde..6ed055259 100644
--- a/app/i18n/de/gen.php
+++ b/app/i18n/de/gen.php
@@ -189,6 +189,7 @@ return array(
'about' => 'Info',
'account' => 'Account', // IGNORE
'admin' => 'Administration', // IGNORE
+ 'advanced_search' => 'Advanced Search', // TODO
'archiving' => 'Archivierung',
'authentication' => 'Authentifizierung',
'check_install' => 'Installationsüberprüfung',
@@ -221,6 +222,32 @@ return array(
'language' => 'Language', // IGNORE
'translated' => 'Progress', // IGNORE
),
+ 'search' => array(
+ 'advanced_search_help' => 'This form helps construct search queries, but manual queries are even more powerful.', // TODO
+ 'authors' => 'Authors', // TODO
+ 'categories' => 'Categories', // TODO
+ 'content' => 'Content', // TODO
+ 'date_from' => 'From', // TODO
+ 'date_past' => 'In the past', // TODO
+ 'date_published' => 'Publication Date', // TODO
+ 'date_range' => 'Date Range', // TODO
+ 'date_received' => 'Received Date', // TODO
+ 'date_to' => 'To', // TODO
+ 'feeds' => 'Feeds', // TODO
+ 'free_text' => 'Free Text', // TODO
+ 'free_text_help' => 'Search both in title and content', // TODO
+ 'full_documentation' => 'View <a href="https://freshrss.github.io/FreshRSS/en/users/10_filter.html#with-the-search-field" target="_blank">full search documentation</a>', // TODO
+ 'labels' => 'My Labels', // TODO
+ 'multiple_help' => 'Select one or more (hold <kbd>Ctrl</kbd> or <kbd>Cmd</kbd>)', // TODO
+ 'sources' => 'Sources', // TODO
+ 'tags' => 'Article Tags', // TODO
+ 'text' => 'Text Search', // TODO
+ 'text_help' => 'Multiple lines are combined by a logical <i>or</i>. Also supports <a href="https://freshrss.github.io/FreshRSS/en/users/10_filter.html#regex" target="_blank">regular expressions</a>.', // TODO
+ 'text_placeholder' => 'Keyword', // TODO
+ 'title' => 'Title', // TODO
+ 'url' => 'URL', // TODO
+ 'user_queries' => 'User Queries', // TODO
+ ),
'share' => array(
'Known' => 'Known-Seite (https://withknown.com)',
'archiveIS' => 'archive.is', // IGNORE
diff --git a/app/i18n/el/gen.php b/app/i18n/el/gen.php
index 9719e6a4f..cee4a0aea 100644
--- a/app/i18n/el/gen.php
+++ b/app/i18n/el/gen.php
@@ -189,6 +189,7 @@ return array(
'about' => 'About', // TODO
'account' => 'Account', // TODO
'admin' => 'Administration', // TODO
+ 'advanced_search' => 'Advanced Search', // TODO
'archiving' => 'Archiving', // TODO
'authentication' => 'Authentication', // TODO
'check_install' => 'Installation check', // TODO
@@ -221,6 +222,32 @@ return array(
'language' => 'Language', // IGNORE
'translated' => 'Progress', // IGNORE
),
+ 'search' => array(
+ 'advanced_search_help' => 'This form helps construct search queries, but manual queries are even more powerful.', // TODO
+ 'authors' => 'Authors', // TODO
+ 'categories' => 'Categories', // TODO
+ 'content' => 'Content', // TODO
+ 'date_from' => 'From', // TODO
+ 'date_past' => 'In the past', // TODO
+ 'date_published' => 'Publication Date', // TODO
+ 'date_range' => 'Date Range', // TODO
+ 'date_received' => 'Received Date', // TODO
+ 'date_to' => 'To', // TODO
+ 'feeds' => 'Feeds', // TODO
+ 'free_text' => 'Free Text', // TODO
+ 'free_text_help' => 'Search both in title and content', // TODO
+ 'full_documentation' => 'View <a href="https://freshrss.github.io/FreshRSS/en/users/10_filter.html#with-the-search-field" target="_blank">full search documentation</a>', // TODO
+ 'labels' => 'My Labels', // TODO
+ 'multiple_help' => 'Select one or more (hold <kbd>Ctrl</kbd> or <kbd>Cmd</kbd>)', // TODO
+ 'sources' => 'Sources', // TODO
+ 'tags' => 'Article Tags', // TODO
+ 'text' => 'Text Search', // TODO
+ 'text_help' => 'Multiple lines are combined by a logical <i>or</i>. Also supports <a href="https://freshrss.github.io/FreshRSS/en/users/10_filter.html#regex" target="_blank">regular expressions</a>.', // TODO
+ 'text_placeholder' => 'Keyword', // TODO
+ 'title' => 'Title', // TODO
+ 'url' => 'URL', // TODO
+ 'user_queries' => 'User Queries', // TODO
+ ),
'share' => array(
'Known' => 'Known based sites', // TODO
'archiveIS' => 'archive.is', // IGNORE
diff --git a/app/i18n/en-US/gen.php b/app/i18n/en-US/gen.php
index ce4c8a6fc..840241926 100644
--- a/app/i18n/en-US/gen.php
+++ b/app/i18n/en-US/gen.php
@@ -189,6 +189,7 @@ return array(
'about' => 'About', // IGNORE
'account' => 'Account', // IGNORE
'admin' => 'Administration', // IGNORE
+ 'advanced_search' => 'Advanced Search', // IGNORE
'archiving' => 'Archiving', // IGNORE
'authentication' => 'Authentication', // IGNORE
'check_install' => 'Installation check', // IGNORE
@@ -221,6 +222,32 @@ return array(
'language' => 'Language', // IGNORE
'translated' => 'Progress', // IGNORE
),
+ 'search' => array(
+ 'advanced_search_help' => 'This form helps construct search queries, but manual queries are even more powerful.', // IGNORE
+ 'authors' => 'Authors', // IGNORE
+ 'categories' => 'Categories', // IGNORE
+ 'content' => 'Content', // IGNORE
+ 'date_from' => 'From', // IGNORE
+ 'date_past' => 'In the past', // IGNORE
+ 'date_published' => 'Publication Date', // IGNORE
+ 'date_range' => 'Date Range', // IGNORE
+ 'date_received' => 'Received Date', // IGNORE
+ 'date_to' => 'To', // IGNORE
+ 'feeds' => 'Feeds', // IGNORE
+ 'free_text' => 'Free Text', // IGNORE
+ 'free_text_help' => 'Search both in title and content', // IGNORE
+ 'full_documentation' => 'View <a href="https://freshrss.github.io/FreshRSS/en/users/10_filter.html#with-the-search-field" target="_blank">full search documentation</a>', // IGNORE
+ 'labels' => 'My Labels', // IGNORE
+ 'multiple_help' => 'Select one or more (hold <kbd>Ctrl</kbd> or <kbd>Cmd</kbd>)', // IGNORE
+ 'sources' => 'Sources', // IGNORE
+ 'tags' => 'Article Tags', // IGNORE
+ 'text' => 'Text Search', // IGNORE
+ 'text_help' => 'Multiple lines are combined by a logical <i>or</i>. Also supports <a href="https://freshrss.github.io/FreshRSS/en/users/10_filter.html#regex" target="_blank">regular expressions</a>.', // IGNORE
+ 'text_placeholder' => 'Keyword', // IGNORE
+ 'title' => 'Title', // IGNORE
+ 'url' => 'URL', // IGNORE
+ 'user_queries' => 'User Queries', // IGNORE
+ ),
'share' => array(
'Known' => 'Known based sites', // IGNORE
'archiveIS' => 'archive.is', // IGNORE
diff --git a/app/i18n/en/gen.php b/app/i18n/en/gen.php
index 68e096416..2f888f7ee 100644
--- a/app/i18n/en/gen.php
+++ b/app/i18n/en/gen.php
@@ -189,6 +189,7 @@ return array(
'about' => 'About',
'account' => 'Account',
'admin' => 'Administration',
+ 'advanced_search' => 'Advanced Search',
'archiving' => 'Archiving',
'authentication' => 'Authentication',
'check_install' => 'Installation check',
@@ -221,6 +222,32 @@ return array(
'language' => 'Language',
'translated' => 'Progress',
),
+ 'search' => array(
+ 'advanced_search_help' => 'This form helps construct search queries, but manual queries are even more powerful.',
+ 'authors' => 'Authors',
+ 'categories' => 'Categories',
+ 'content' => 'Content',
+ 'date_from' => 'From',
+ 'date_past' => 'In the past',
+ 'date_published' => 'Publication Date',
+ 'date_range' => 'Date Range',
+ 'date_received' => 'Received Date',
+ 'date_to' => 'To',
+ 'feeds' => 'Feeds',
+ 'free_text' => 'Free Text',
+ 'free_text_help' => 'Search both in title and content',
+ 'full_documentation' => 'View <a href="https://freshrss.github.io/FreshRSS/en/users/10_filter.html#with-the-search-field" target="_blank">full search documentation</a>',
+ 'labels' => 'My Labels',
+ 'multiple_help' => 'Select one or more (hold <kbd>Ctrl</kbd> or <kbd>Cmd</kbd>)',
+ 'sources' => 'Sources',
+ 'tags' => 'Article Tags',
+ 'text' => 'Text Search',
+ 'text_help' => 'Multiple lines are combined by a logical <i>or</i>. Also supports <a href="https://freshrss.github.io/FreshRSS/en/users/10_filter.html#regex" target="_blank">regular expressions</a>.',
+ 'text_placeholder' => 'Keyword',
+ 'title' => 'Title',
+ 'url' => 'URL',
+ 'user_queries' => 'User Queries',
+ ),
'share' => array(
'Known' => 'Known based sites',
'archiveIS' => 'archive.is',
diff --git a/app/i18n/es/gen.php b/app/i18n/es/gen.php
index bd320df0a..ec8ce0cc8 100644
--- a/app/i18n/es/gen.php
+++ b/app/i18n/es/gen.php
@@ -189,6 +189,7 @@ return array(
'about' => 'Acerca de',
'account' => 'Cuenta',
'admin' => 'Administración',
+ 'advanced_search' => 'Advanced Search', // TODO
'archiving' => 'Archivo',
'authentication' => 'Identificación',
'check_install' => 'Verificación de instalación',
@@ -221,6 +222,32 @@ return array(
'language' => 'Language', // IGNORE
'translated' => 'Progress', // IGNORE
),
+ 'search' => array(
+ 'advanced_search_help' => 'This form helps construct search queries, but manual queries are even more powerful.', // TODO
+ 'authors' => 'Authors', // TODO
+ 'categories' => 'Categories', // TODO
+ 'content' => 'Content', // TODO
+ 'date_from' => 'From', // TODO
+ 'date_past' => 'In the past', // TODO
+ 'date_published' => 'Publication Date', // TODO
+ 'date_range' => 'Date Range', // TODO
+ 'date_received' => 'Received Date', // TODO
+ 'date_to' => 'To', // TODO
+ 'feeds' => 'Feeds', // TODO
+ 'free_text' => 'Free Text', // TODO
+ 'free_text_help' => 'Search both in title and content', // TODO
+ 'full_documentation' => 'View <a href="https://freshrss.github.io/FreshRSS/en/users/10_filter.html#with-the-search-field" target="_blank">full search documentation</a>', // TODO
+ 'labels' => 'My Labels', // TODO
+ 'multiple_help' => 'Select one or more (hold <kbd>Ctrl</kbd> or <kbd>Cmd</kbd>)', // TODO
+ 'sources' => 'Sources', // TODO
+ 'tags' => 'Article Tags', // TODO
+ 'text' => 'Text Search', // TODO
+ 'text_help' => 'Multiple lines are combined by a logical <i>or</i>. Also supports <a href="https://freshrss.github.io/FreshRSS/en/users/10_filter.html#regex" target="_blank">regular expressions</a>.', // TODO
+ 'text_placeholder' => 'Keyword', // TODO
+ 'title' => 'Title', // TODO
+ 'url' => 'URL', // TODO
+ 'user_queries' => 'User Queries', // TODO
+ ),
'share' => array(
'Known' => 'Sitios basados en conocidos',
'archiveIS' => 'archive.is', // IGNORE
diff --git a/app/i18n/fa/gen.php b/app/i18n/fa/gen.php
index 34f05a62d..9674748ac 100644
--- a/app/i18n/fa/gen.php
+++ b/app/i18n/fa/gen.php
@@ -189,6 +189,7 @@ return array(
'about' => ' در مورد',
'account' => ' حساب',
'admin' => ' اداره',
+ 'advanced_search' => 'Advanced Search', // TODO
'archiving' => ' آرشیو',
'authentication' => ' احراز هویت',
'check_install' => ' بررسی نصب',
@@ -221,6 +222,32 @@ return array(
'language' => 'Language', // IGNORE
'translated' => 'Progress', // IGNORE
),
+ 'search' => array(
+ 'advanced_search_help' => 'This form helps construct search queries, but manual queries are even more powerful.', // TODO
+ 'authors' => 'Authors', // TODO
+ 'categories' => 'Categories', // TODO
+ 'content' => 'Content', // TODO
+ 'date_from' => 'From', // TODO
+ 'date_past' => 'In the past', // TODO
+ 'date_published' => 'Publication Date', // TODO
+ 'date_range' => 'Date Range', // TODO
+ 'date_received' => 'Received Date', // TODO
+ 'date_to' => 'To', // TODO
+ 'feeds' => 'Feeds', // TODO
+ 'free_text' => 'Free Text', // TODO
+ 'free_text_help' => 'Search both in title and content', // TODO
+ 'full_documentation' => 'View <a href="https://freshrss.github.io/FreshRSS/en/users/10_filter.html#with-the-search-field" target="_blank">full search documentation</a>', // TODO
+ 'labels' => 'My Labels', // TODO
+ 'multiple_help' => 'Select one or more (hold <kbd>Ctrl</kbd> or <kbd>Cmd</kbd>)', // TODO
+ 'sources' => 'Sources', // TODO
+ 'tags' => 'Article Tags', // TODO
+ 'text' => 'Text Search', // TODO
+ 'text_help' => 'Multiple lines are combined by a logical <i>or</i>. Also supports <a href="https://freshrss.github.io/FreshRSS/en/users/10_filter.html#regex" target="_blank">regular expressions</a>.', // TODO
+ 'text_placeholder' => 'Keyword', // TODO
+ 'title' => 'Title', // TODO
+ 'url' => 'URL', // TODO
+ 'user_queries' => 'User Queries', // TODO
+ ),
'share' => array(
'Known' => ' سایت های مبتنی بر شناخته شده',
'archiveIS' => 'archive.is', // IGNORE
diff --git a/app/i18n/fi/gen.php b/app/i18n/fi/gen.php
index cdbe380e6..cad2587f1 100644
--- a/app/i18n/fi/gen.php
+++ b/app/i18n/fi/gen.php
@@ -189,6 +189,7 @@ return array(
'about' => 'Tietoja',
'account' => 'Tili',
'admin' => 'Hallinta',
+ 'advanced_search' => 'Advanced Search', // TODO
'archiving' => 'Arkistointi',
'authentication' => 'Todentaminen',
'check_install' => 'Asennuksen tarkistus',
@@ -221,6 +222,32 @@ return array(
'language' => 'Language', // IGNORE
'translated' => 'Progress', // IGNORE
),
+ 'search' => array(
+ 'advanced_search_help' => 'This form helps construct search queries, but manual queries are even more powerful.', // TODO
+ 'authors' => 'Authors', // TODO
+ 'categories' => 'Categories', // TODO
+ 'content' => 'Content', // TODO
+ 'date_from' => 'From', // TODO
+ 'date_past' => 'In the past', // TODO
+ 'date_published' => 'Publication Date', // TODO
+ 'date_range' => 'Date Range', // TODO
+ 'date_received' => 'Received Date', // TODO
+ 'date_to' => 'To', // TODO
+ 'feeds' => 'Feeds', // TODO
+ 'free_text' => 'Free Text', // TODO
+ 'free_text_help' => 'Search both in title and content', // TODO
+ 'full_documentation' => 'View <a href="https://freshrss.github.io/FreshRSS/en/users/10_filter.html#with-the-search-field" target="_blank">full search documentation</a>', // TODO
+ 'labels' => 'My Labels', // TODO
+ 'multiple_help' => 'Select one or more (hold <kbd>Ctrl</kbd> or <kbd>Cmd</kbd>)', // TODO
+ 'sources' => 'Sources', // TODO
+ 'tags' => 'Article Tags', // TODO
+ 'text' => 'Text Search', // TODO
+ 'text_help' => 'Multiple lines are combined by a logical <i>or</i>. Also supports <a href="https://freshrss.github.io/FreshRSS/en/users/10_filter.html#regex" target="_blank">regular expressions</a>.', // TODO
+ 'text_placeholder' => 'Keyword', // TODO
+ 'title' => 'Title', // TODO
+ 'url' => 'URL', // TODO
+ 'user_queries' => 'User Queries', // TODO
+ ),
'share' => array(
'Known' => 'Known-sivustot',
'archiveIS' => 'archive.is', // IGNORE
diff --git a/app/i18n/fr/gen.php b/app/i18n/fr/gen.php
index 60df9d64a..caaa3291a 100644
--- a/app/i18n/fr/gen.php
+++ b/app/i18n/fr/gen.php
@@ -189,6 +189,7 @@ return array(
'about' => 'À propos',
'account' => 'Compte',
'admin' => 'Administration', // IGNORE
+ 'advanced_search' => 'Recherche avancée',
'archiving' => 'Archivage',
'authentication' => 'Authentification',
'check_install' => 'Vérification de l’installation',
@@ -221,6 +222,32 @@ return array(
'language' => 'Langage',
'translated' => 'Progression',
),
+ 'search' => array(
+ 'advanced_search_help' => 'Ce formulaire aide à construire des requêtes de recherche, mais les requêtes manuelles sont encore plus puissantes.',
+ 'authors' => 'Auteurs',
+ 'categories' => 'Catégories',
+ 'content' => 'Contenu',
+ 'date_from' => 'Depuis',
+ 'date_past' => 'Dans le passé',
+ 'date_published' => 'Date de publication',
+ 'date_range' => 'Plage de dates',
+ 'date_received' => 'Date de réception',
+ 'date_to' => 'À',
+ 'feeds' => 'Flux',
+ 'free_text' => 'Texte libre',
+ 'free_text_help' => 'Rechercher dans le titre et le contenu',
+ 'full_documentation' => 'Voir la <a href="https://freshrss.github.io/FreshRSS/fr/users/03_Main_view.html#gr%C3%A2ce-au-champ-de-recherche" target="_blank">documentation complète de recherche</a>',
+ 'labels' => 'Mes étiquettes',
+ 'multiple_help' => 'Sélectionnez un ou plusieurs (maintenez <kbd>Ctrl</kbd> ou <kbd>Cmd</kbd>)',
+ 'sources' => 'Sources', // IGNORE
+ 'tags' => 'Tags d’articles',
+ 'text' => 'Recherche de texte',
+ 'text_help' => 'Les lignes multiples sont combinées par un <i>ou</i> logique. Supporte aussi les <a href="https://freshrss.github.io/FreshRSS/fr/users/03_Main_view.html#regex" target="_blank">expressions régulières</a>.',
+ 'text_placeholder' => 'Mot-clef',
+ 'title' => 'Titre',
+ 'url' => 'URL', // IGNORE
+ 'user_queries' => 'Requêtes utilisateur',
+ ),
'share' => array(
'Known' => 'Sites basés sur Known',
'archiveIS' => 'archive.is', // IGNORE
diff --git a/app/i18n/he/gen.php b/app/i18n/he/gen.php
index 68b2cbaf8..1c91e60c9 100644
--- a/app/i18n/he/gen.php
+++ b/app/i18n/he/gen.php
@@ -189,6 +189,7 @@ return array(
'about' => 'אודות',
'account' => 'Account', // TODO
'admin' => 'ניהול',
+ 'advanced_search' => 'Advanced Search', // TODO
'archiving' => 'ארכוב',
'authentication' => 'Authentication', // TODO
'check_install' => 'Installation check', // TODO
@@ -221,6 +222,32 @@ return array(
'language' => 'Language', // IGNORE
'translated' => 'Progress', // IGNORE
),
+ 'search' => array(
+ 'advanced_search_help' => 'This form helps construct search queries, but manual queries are even more powerful.', // TODO
+ 'authors' => 'Authors', // TODO
+ 'categories' => 'Categories', // TODO
+ 'content' => 'Content', // TODO
+ 'date_from' => 'From', // TODO
+ 'date_past' => 'In the past', // TODO
+ 'date_published' => 'Publication Date', // TODO
+ 'date_range' => 'Date Range', // TODO
+ 'date_received' => 'Received Date', // TODO
+ 'date_to' => 'To', // TODO
+ 'feeds' => 'Feeds', // TODO
+ 'free_text' => 'Free Text', // TODO
+ 'free_text_help' => 'Search both in title and content', // TODO
+ 'full_documentation' => 'View <a href="https://freshrss.github.io/FreshRSS/en/users/10_filter.html#with-the-search-field" target="_blank">full search documentation</a>', // TODO
+ 'labels' => 'My Labels', // TODO
+ 'multiple_help' => 'Select one or more (hold <kbd>Ctrl</kbd> or <kbd>Cmd</kbd>)', // TODO
+ 'sources' => 'Sources', // TODO
+ 'tags' => 'Article Tags', // TODO
+ 'text' => 'Text Search', // TODO
+ 'text_help' => 'Multiple lines are combined by a logical <i>or</i>. Also supports <a href="https://freshrss.github.io/FreshRSS/en/users/10_filter.html#regex" target="_blank">regular expressions</a>.', // TODO
+ 'text_placeholder' => 'Keyword', // TODO
+ 'title' => 'Title', // TODO
+ 'url' => 'URL', // TODO
+ 'user_queries' => 'User Queries', // TODO
+ ),
'share' => array(
'Known' => 'Known based sites', // TODO
'archiveIS' => 'archive.is', // IGNORE
diff --git a/app/i18n/hu/gen.php b/app/i18n/hu/gen.php
index c0cc355da..56388733f 100644
--- a/app/i18n/hu/gen.php
+++ b/app/i18n/hu/gen.php
@@ -189,6 +189,7 @@ return array(
'about' => 'Névjegy',
'account' => 'Fiók',
'admin' => 'Adminisztráció',
+ 'advanced_search' => 'Advanced Search', // TODO
'archiving' => 'Archiválás',
'authentication' => 'Hitelesítés',
'check_install' => 'Telepítés ellenőrzése',
@@ -221,6 +222,32 @@ return array(
'language' => 'Language', // IGNORE
'translated' => 'Progress', // IGNORE
),
+ 'search' => array(
+ 'advanced_search_help' => 'This form helps construct search queries, but manual queries are even more powerful.', // TODO
+ 'authors' => 'Authors', // TODO
+ 'categories' => 'Categories', // TODO
+ 'content' => 'Content', // TODO
+ 'date_from' => 'From', // TODO
+ 'date_past' => 'In the past', // TODO
+ 'date_published' => 'Publication Date', // TODO
+ 'date_range' => 'Date Range', // TODO
+ 'date_received' => 'Received Date', // TODO
+ 'date_to' => 'To', // TODO
+ 'feeds' => 'Feeds', // TODO
+ 'free_text' => 'Free Text', // TODO
+ 'free_text_help' => 'Search both in title and content', // TODO
+ 'full_documentation' => 'View <a href="https://freshrss.github.io/FreshRSS/en/users/10_filter.html#with-the-search-field" target="_blank">full search documentation</a>', // TODO
+ 'labels' => 'My Labels', // TODO
+ 'multiple_help' => 'Select one or more (hold <kbd>Ctrl</kbd> or <kbd>Cmd</kbd>)', // TODO
+ 'sources' => 'Sources', // TODO
+ 'tags' => 'Article Tags', // TODO
+ 'text' => 'Text Search', // TODO
+ 'text_help' => 'Multiple lines are combined by a logical <i>or</i>. Also supports <a href="https://freshrss.github.io/FreshRSS/en/users/10_filter.html#regex" target="_blank">regular expressions</a>.', // TODO
+ 'text_placeholder' => 'Keyword', // TODO
+ 'title' => 'Title', // TODO
+ 'url' => 'URL', // TODO
+ 'user_queries' => 'User Queries', // TODO
+ ),
'share' => array(
'Known' => 'Ismert weboldalak',
'archiveIS' => 'archive.is', // IGNORE
diff --git a/app/i18n/id/gen.php b/app/i18n/id/gen.php
index a8f63a93d..11b55044a 100644
--- a/app/i18n/id/gen.php
+++ b/app/i18n/id/gen.php
@@ -189,6 +189,7 @@ return array(
'about' => 'Tentang',
'account' => 'Akun',
'admin' => 'Administrasi',
+ 'advanced_search' => 'Advanced Search', // TODO
'archiving' => 'Pengarsipan',
'authentication' => 'Autentikasi',
'check_install' => 'Pemeriksaan pemasangan',
@@ -221,6 +222,32 @@ return array(
'language' => 'Language', // IGNORE
'translated' => 'Progress', // IGNORE
),
+ 'search' => array(
+ 'advanced_search_help' => 'This form helps construct search queries, but manual queries are even more powerful.', // TODO
+ 'authors' => 'Authors', // TODO
+ 'categories' => 'Categories', // TODO
+ 'content' => 'Content', // TODO
+ 'date_from' => 'From', // TODO
+ 'date_past' => 'In the past', // TODO
+ 'date_published' => 'Publication Date', // TODO
+ 'date_range' => 'Date Range', // TODO
+ 'date_received' => 'Received Date', // TODO
+ 'date_to' => 'To', // TODO
+ 'feeds' => 'Feeds', // TODO
+ 'free_text' => 'Free Text', // TODO
+ 'free_text_help' => 'Search both in title and content', // TODO
+ 'full_documentation' => 'View <a href="https://freshrss.github.io/FreshRSS/en/users/10_filter.html#with-the-search-field" target="_blank">full search documentation</a>', // TODO
+ 'labels' => 'My Labels', // TODO
+ 'multiple_help' => 'Select one or more (hold <kbd>Ctrl</kbd> or <kbd>Cmd</kbd>)', // TODO
+ 'sources' => 'Sources', // TODO
+ 'tags' => 'Article Tags', // TODO
+ 'text' => 'Text Search', // TODO
+ 'text_help' => 'Multiple lines are combined by a logical <i>or</i>. Also supports <a href="https://freshrss.github.io/FreshRSS/en/users/10_filter.html#regex" target="_blank">regular expressions</a>.', // TODO
+ 'text_placeholder' => 'Keyword', // TODO
+ 'title' => 'Title', // TODO
+ 'url' => 'URL', // TODO
+ 'user_queries' => 'User Queries', // TODO
+ ),
'share' => array(
'Known' => 'Situs berbasis Known',
'archiveIS' => 'archive.is', // IGNORE
diff --git a/app/i18n/it/gen.php b/app/i18n/it/gen.php
index 063797fd3..eca46db04 100644
--- a/app/i18n/it/gen.php
+++ b/app/i18n/it/gen.php
@@ -189,6 +189,7 @@ return array(
'about' => 'Informazioni',
'account' => 'Profilo',
'admin' => 'Amministrazione',
+ 'advanced_search' => 'Advanced Search', // TODO
'archiving' => 'Archiviazione',
'authentication' => 'Autenticazione',
'check_install' => 'Installazione',
@@ -221,6 +222,32 @@ return array(
'language' => 'Language', // IGNORE
'translated' => 'Progress', // IGNORE
),
+ 'search' => array(
+ 'advanced_search_help' => 'This form helps construct search queries, but manual queries are even more powerful.', // TODO
+ 'authors' => 'Authors', // TODO
+ 'categories' => 'Categories', // TODO
+ 'content' => 'Content', // TODO
+ 'date_from' => 'From', // TODO
+ 'date_past' => 'In the past', // TODO
+ 'date_published' => 'Publication Date', // TODO
+ 'date_range' => 'Date Range', // TODO
+ 'date_received' => 'Received Date', // TODO
+ 'date_to' => 'To', // TODO
+ 'feeds' => 'Feeds', // TODO
+ 'free_text' => 'Free Text', // TODO
+ 'free_text_help' => 'Search both in title and content', // TODO
+ 'full_documentation' => 'View <a href="https://freshrss.github.io/FreshRSS/en/users/10_filter.html#with-the-search-field" target="_blank">full search documentation</a>', // TODO
+ 'labels' => 'My Labels', // TODO
+ 'multiple_help' => 'Select one or more (hold <kbd>Ctrl</kbd> or <kbd>Cmd</kbd>)', // TODO
+ 'sources' => 'Sources', // TODO
+ 'tags' => 'Article Tags', // TODO
+ 'text' => 'Text Search', // TODO
+ 'text_help' => 'Multiple lines are combined by a logical <i>or</i>. Also supports <a href="https://freshrss.github.io/FreshRSS/en/users/10_filter.html#regex" target="_blank">regular expressions</a>.', // TODO
+ 'text_placeholder' => 'Keyword', // TODO
+ 'title' => 'Title', // TODO
+ 'url' => 'URL', // TODO
+ 'user_queries' => 'User Queries', // TODO
+ ),
'share' => array(
'Known' => 'Siti basati su Known',
'archiveIS' => 'archive.is', // IGNORE
diff --git a/app/i18n/ja/gen.php b/app/i18n/ja/gen.php
index 5d67cb97a..a8d9dd1c6 100644
--- a/app/i18n/ja/gen.php
+++ b/app/i18n/ja/gen.php
@@ -189,6 +189,7 @@ return array(
'about' => 'FreshRSSについて',
'account' => 'アカウント',
'admin' => '管理者',
+ 'advanced_search' => 'Advanced Search', // TODO
'archiving' => 'アーカイブ',
'authentication' => '認証',
'check_install' => 'インストール時のチェック',
@@ -221,6 +222,32 @@ return array(
'language' => 'Language', // IGNORE
'translated' => 'Progress', // IGNORE
),
+ 'search' => array(
+ 'advanced_search_help' => 'This form helps construct search queries, but manual queries are even more powerful.', // TODO
+ 'authors' => 'Authors', // TODO
+ 'categories' => 'Categories', // TODO
+ 'content' => 'Content', // TODO
+ 'date_from' => 'From', // TODO
+ 'date_past' => 'In the past', // TODO
+ 'date_published' => 'Publication Date', // TODO
+ 'date_range' => 'Date Range', // TODO
+ 'date_received' => 'Received Date', // TODO
+ 'date_to' => 'To', // TODO
+ 'feeds' => 'Feeds', // TODO
+ 'free_text' => 'Free Text', // TODO
+ 'free_text_help' => 'Search both in title and content', // TODO
+ 'full_documentation' => 'View <a href="https://freshrss.github.io/FreshRSS/en/users/10_filter.html#with-the-search-field" target="_blank">full search documentation</a>', // TODO
+ 'labels' => 'My Labels', // TODO
+ 'multiple_help' => 'Select one or more (hold <kbd>Ctrl</kbd> or <kbd>Cmd</kbd>)', // TODO
+ 'sources' => 'Sources', // TODO
+ 'tags' => 'Article Tags', // TODO
+ 'text' => 'Text Search', // TODO
+ 'text_help' => 'Multiple lines are combined by a logical <i>or</i>. Also supports <a href="https://freshrss.github.io/FreshRSS/en/users/10_filter.html#regex" target="_blank">regular expressions</a>.', // TODO
+ 'text_placeholder' => 'Keyword', // TODO
+ 'title' => 'Title', // TODO
+ 'url' => 'URL', // TODO
+ 'user_queries' => 'User Queries', // TODO
+ ),
'share' => array(
'Known' => 'よく使われるサイト',
'archiveIS' => 'archive.is', // IGNORE
diff --git a/app/i18n/ko/gen.php b/app/i18n/ko/gen.php
index 66a29d19d..d12422dc8 100644
--- a/app/i18n/ko/gen.php
+++ b/app/i18n/ko/gen.php
@@ -189,6 +189,7 @@ return array(
'about' => '정보',
'account' => '계정',
'admin' => '관리',
+ 'advanced_search' => 'Advanced Search', // TODO
'archiving' => '보관',
'authentication' => '인증',
'check_install' => '설치 요구사항 확인',
@@ -221,6 +222,32 @@ return array(
'language' => 'Language', // IGNORE
'translated' => 'Progress', // IGNORE
),
+ 'search' => array(
+ 'advanced_search_help' => 'This form helps construct search queries, but manual queries are even more powerful.', // TODO
+ 'authors' => 'Authors', // TODO
+ 'categories' => 'Categories', // TODO
+ 'content' => 'Content', // TODO
+ 'date_from' => 'From', // TODO
+ 'date_past' => 'In the past', // TODO
+ 'date_published' => 'Publication Date', // TODO
+ 'date_range' => 'Date Range', // TODO
+ 'date_received' => 'Received Date', // TODO
+ 'date_to' => 'To', // TODO
+ 'feeds' => 'Feeds', // TODO
+ 'free_text' => 'Free Text', // TODO
+ 'free_text_help' => 'Search both in title and content', // TODO
+ 'full_documentation' => 'View <a href="https://freshrss.github.io/FreshRSS/en/users/10_filter.html#with-the-search-field" target="_blank">full search documentation</a>', // TODO
+ 'labels' => 'My Labels', // TODO
+ 'multiple_help' => 'Select one or more (hold <kbd>Ctrl</kbd> or <kbd>Cmd</kbd>)', // TODO
+ 'sources' => 'Sources', // TODO
+ 'tags' => 'Article Tags', // TODO
+ 'text' => 'Text Search', // TODO
+ 'text_help' => 'Multiple lines are combined by a logical <i>or</i>. Also supports <a href="https://freshrss.github.io/FreshRSS/en/users/10_filter.html#regex" target="_blank">regular expressions</a>.', // TODO
+ 'text_placeholder' => 'Keyword', // TODO
+ 'title' => 'Title', // TODO
+ 'url' => 'URL', // TODO
+ 'user_queries' => 'User Queries', // TODO
+ ),
'share' => array(
'Known' => 'Known based sites', // IGNORE
'archiveIS' => 'archive.is', // IGNORE
diff --git a/app/i18n/lv/gen.php b/app/i18n/lv/gen.php
index 7d3ae82bb..a94610be0 100644
--- a/app/i18n/lv/gen.php
+++ b/app/i18n/lv/gen.php
@@ -189,6 +189,7 @@ return array(
'about' => 'Par',
'account' => 'Konts',
'admin' => 'Administrācija',
+ 'advanced_search' => 'Advanced Search', // TODO
'archiving' => 'Arhivēšana',
'authentication' => 'Autentifikācija',
'check_install' => 'Uzstādīšanas pārbaude',
@@ -221,6 +222,32 @@ return array(
'language' => 'Language', // IGNORE
'translated' => 'Progress', // IGNORE
),
+ 'search' => array(
+ 'advanced_search_help' => 'This form helps construct search queries, but manual queries are even more powerful.', // TODO
+ 'authors' => 'Authors', // TODO
+ 'categories' => 'Categories', // TODO
+ 'content' => 'Content', // TODO
+ 'date_from' => 'From', // TODO
+ 'date_past' => 'In the past', // TODO
+ 'date_published' => 'Publication Date', // TODO
+ 'date_range' => 'Date Range', // TODO
+ 'date_received' => 'Received Date', // TODO
+ 'date_to' => 'To', // TODO
+ 'feeds' => 'Feeds', // TODO
+ 'free_text' => 'Free Text', // TODO
+ 'free_text_help' => 'Search both in title and content', // TODO
+ 'full_documentation' => 'View <a href="https://freshrss.github.io/FreshRSS/en/users/10_filter.html#with-the-search-field" target="_blank">full search documentation</a>', // TODO
+ 'labels' => 'My Labels', // TODO
+ 'multiple_help' => 'Select one or more (hold <kbd>Ctrl</kbd> or <kbd>Cmd</kbd>)', // TODO
+ 'sources' => 'Sources', // TODO
+ 'tags' => 'Article Tags', // TODO
+ 'text' => 'Text Search', // TODO
+ 'text_help' => 'Multiple lines are combined by a logical <i>or</i>. Also supports <a href="https://freshrss.github.io/FreshRSS/en/users/10_filter.html#regex" target="_blank">regular expressions</a>.', // TODO
+ 'text_placeholder' => 'Keyword', // TODO
+ 'title' => 'Title', // TODO
+ 'url' => 'URL', // TODO
+ 'user_queries' => 'User Queries', // TODO
+ ),
'share' => array(
'Known' => 'Zināmas vietnes',
'archiveIS' => 'archive.is', // IGNORE
diff --git a/app/i18n/nl/gen.php b/app/i18n/nl/gen.php
index c5cc37474..02aa06a5c 100644
--- a/app/i18n/nl/gen.php
+++ b/app/i18n/nl/gen.php
@@ -189,6 +189,7 @@ return array(
'about' => 'Over',
'account' => 'Account', // IGNORE
'admin' => 'Administratie',
+ 'advanced_search' => 'Advanced Search', // TODO
'archiving' => 'Archiveren',
'authentication' => 'Authenticatie',
'check_install' => 'Installatiecontrole',
@@ -221,6 +222,32 @@ return array(
'language' => 'Language', // IGNORE
'translated' => 'Progress', // IGNORE
),
+ 'search' => array(
+ 'advanced_search_help' => 'This form helps construct search queries, but manual queries are even more powerful.', // TODO
+ 'authors' => 'Authors', // TODO
+ 'categories' => 'Categories', // TODO
+ 'content' => 'Content', // TODO
+ 'date_from' => 'From', // TODO
+ 'date_past' => 'In the past', // TODO
+ 'date_published' => 'Publication Date', // TODO
+ 'date_range' => 'Date Range', // TODO
+ 'date_received' => 'Received Date', // TODO
+ 'date_to' => 'To', // TODO
+ 'feeds' => 'Feeds', // TODO
+ 'free_text' => 'Free Text', // TODO
+ 'free_text_help' => 'Search both in title and content', // TODO
+ 'full_documentation' => 'View <a href="https://freshrss.github.io/FreshRSS/en/users/10_filter.html#with-the-search-field" target="_blank">full search documentation</a>', // TODO
+ 'labels' => 'My Labels', // TODO
+ 'multiple_help' => 'Select one or more (hold <kbd>Ctrl</kbd> or <kbd>Cmd</kbd>)', // TODO
+ 'sources' => 'Sources', // TODO
+ 'tags' => 'Article Tags', // TODO
+ 'text' => 'Text Search', // TODO
+ 'text_help' => 'Multiple lines are combined by a logical <i>or</i>. Also supports <a href="https://freshrss.github.io/FreshRSS/en/users/10_filter.html#regex" target="_blank">regular expressions</a>.', // TODO
+ 'text_placeholder' => 'Keyword', // TODO
+ 'title' => 'Title', // TODO
+ 'url' => 'URL', // TODO
+ 'user_queries' => 'User Queries', // TODO
+ ),
'share' => array(
'Known' => 'Known-gebaseerde sites',
'archiveIS' => 'archive.is', // IGNORE
diff --git a/app/i18n/oc/gen.php b/app/i18n/oc/gen.php
index aeb7714fc..b1382dac7 100644
--- a/app/i18n/oc/gen.php
+++ b/app/i18n/oc/gen.php
@@ -189,6 +189,7 @@ return array(
'about' => 'A prepaus',
'account' => 'Compte',
'admin' => 'Administracion', // IGNORE
+ 'advanced_search' => 'Advanced Search', // TODO
'archiving' => 'Archivar',
'authentication' => 'Autentificacion',
'check_install' => 'Verificacion de l’installacion',
@@ -221,6 +222,32 @@ return array(
'language' => 'Language', // IGNORE
'translated' => 'Progress', // IGNORE
),
+ 'search' => array(
+ 'advanced_search_help' => 'This form helps construct search queries, but manual queries are even more powerful.', // TODO
+ 'authors' => 'Authors', // TODO
+ 'categories' => 'Categories', // TODO
+ 'content' => 'Content', // TODO
+ 'date_from' => 'From', // TODO
+ 'date_past' => 'In the past', // TODO
+ 'date_published' => 'Publication Date', // TODO
+ 'date_range' => 'Date Range', // TODO
+ 'date_received' => 'Received Date', // TODO
+ 'date_to' => 'To', // TODO
+ 'feeds' => 'Feeds', // TODO
+ 'free_text' => 'Free Text', // TODO
+ 'free_text_help' => 'Search both in title and content', // TODO
+ 'full_documentation' => 'View <a href="https://freshrss.github.io/FreshRSS/en/users/10_filter.html#with-the-search-field" target="_blank">full search documentation</a>', // TODO
+ 'labels' => 'My Labels', // TODO
+ 'multiple_help' => 'Select one or more (hold <kbd>Ctrl</kbd> or <kbd>Cmd</kbd>)', // TODO
+ 'sources' => 'Sources', // TODO
+ 'tags' => 'Article Tags', // TODO
+ 'text' => 'Text Search', // TODO
+ 'text_help' => 'Multiple lines are combined by a logical <i>or</i>. Also supports <a href="https://freshrss.github.io/FreshRSS/en/users/10_filter.html#regex" target="_blank">regular expressions</a>.', // TODO
+ 'text_placeholder' => 'Keyword', // TODO
+ 'title' => 'Title', // TODO
+ 'url' => 'URL', // TODO
+ 'user_queries' => 'User Queries', // TODO
+ ),
'share' => array(
'Known' => 'Sites basats sus Known',
'archiveIS' => 'archive.is', // IGNORE
diff --git a/app/i18n/pl/gen.php b/app/i18n/pl/gen.php
index e5c864469..1423295b6 100644
--- a/app/i18n/pl/gen.php
+++ b/app/i18n/pl/gen.php
@@ -189,6 +189,7 @@ return array(
'about' => 'O serwisie',
'account' => 'Konto',
'admin' => 'Administracja',
+ 'advanced_search' => 'Advanced Search', // TODO
'archiving' => 'Archiwizacja',
'authentication' => 'Uwierzytelnianie',
'check_install' => 'Sprawdzenie instalacji',
@@ -221,6 +222,32 @@ return array(
'language' => 'Language', // IGNORE
'translated' => 'Progress', // IGNORE
),
+ 'search' => array(
+ 'advanced_search_help' => 'This form helps construct search queries, but manual queries are even more powerful.', // TODO
+ 'authors' => 'Authors', // TODO
+ 'categories' => 'Categories', // TODO
+ 'content' => 'Content', // TODO
+ 'date_from' => 'From', // TODO
+ 'date_past' => 'In the past', // TODO
+ 'date_published' => 'Publication Date', // TODO
+ 'date_range' => 'Date Range', // TODO
+ 'date_received' => 'Received Date', // TODO
+ 'date_to' => 'To', // TODO
+ 'feeds' => 'Feeds', // TODO
+ 'free_text' => 'Free Text', // TODO
+ 'free_text_help' => 'Search both in title and content', // TODO
+ 'full_documentation' => 'View <a href="https://freshrss.github.io/FreshRSS/en/users/10_filter.html#with-the-search-field" target="_blank">full search documentation</a>', // TODO
+ 'labels' => 'My Labels', // TODO
+ 'multiple_help' => 'Select one or more (hold <kbd>Ctrl</kbd> or <kbd>Cmd</kbd>)', // TODO
+ 'sources' => 'Sources', // TODO
+ 'tags' => 'Article Tags', // TODO
+ 'text' => 'Text Search', // TODO
+ 'text_help' => 'Multiple lines are combined by a logical <i>or</i>. Also supports <a href="https://freshrss.github.io/FreshRSS/en/users/10_filter.html#regex" target="_blank">regular expressions</a>.', // TODO
+ 'text_placeholder' => 'Keyword', // TODO
+ 'title' => 'Title', // TODO
+ 'url' => 'URL', // TODO
+ 'user_queries' => 'User Queries', // TODO
+ ),
'share' => array(
'Known' => 'Strony bazujące na usłudze Known',
'archiveIS' => 'archive.is', // IGNORE
diff --git a/app/i18n/pt-BR/gen.php b/app/i18n/pt-BR/gen.php
index 598364066..664b543b1 100644
--- a/app/i18n/pt-BR/gen.php
+++ b/app/i18n/pt-BR/gen.php
@@ -189,6 +189,7 @@ return array(
'about' => 'Sobre',
'account' => 'Conta',
'admin' => 'Administração',
+ 'advanced_search' => 'Advanced Search', // TODO
'archiving' => 'Arquivar',
'authentication' => 'Autenticação',
'check_install' => 'Verificação de instalação',
@@ -221,6 +222,32 @@ return array(
'language' => 'Language', // IGNORE
'translated' => 'Progress', // IGNORE
),
+ 'search' => array(
+ 'advanced_search_help' => 'This form helps construct search queries, but manual queries are even more powerful.', // TODO
+ 'authors' => 'Authors', // TODO
+ 'categories' => 'Categories', // TODO
+ 'content' => 'Content', // TODO
+ 'date_from' => 'From', // TODO
+ 'date_past' => 'In the past', // TODO
+ 'date_published' => 'Publication Date', // TODO
+ 'date_range' => 'Date Range', // TODO
+ 'date_received' => 'Received Date', // TODO
+ 'date_to' => 'To', // TODO
+ 'feeds' => 'Feeds', // TODO
+ 'free_text' => 'Free Text', // TODO
+ 'free_text_help' => 'Search both in title and content', // TODO
+ 'full_documentation' => 'View <a href="https://freshrss.github.io/FreshRSS/en/users/10_filter.html#with-the-search-field" target="_blank">full search documentation</a>', // TODO
+ 'labels' => 'My Labels', // TODO
+ 'multiple_help' => 'Select one or more (hold <kbd>Ctrl</kbd> or <kbd>Cmd</kbd>)', // TODO
+ 'sources' => 'Sources', // TODO
+ 'tags' => 'Article Tags', // TODO
+ 'text' => 'Text Search', // TODO
+ 'text_help' => 'Multiple lines are combined by a logical <i>or</i>. Also supports <a href="https://freshrss.github.io/FreshRSS/en/users/10_filter.html#regex" target="_blank">regular expressions</a>.', // TODO
+ 'text_placeholder' => 'Keyword', // TODO
+ 'title' => 'Title', // TODO
+ 'url' => 'URL', // TODO
+ 'user_queries' => 'User Queries', // TODO
+ ),
'share' => array(
'Known' => 'Sites no Known',
'archiveIS' => 'archive.is', // IGNORE
diff --git a/app/i18n/pt-PT/gen.php b/app/i18n/pt-PT/gen.php
index 4cc34a15e..a4d0cf5fd 100644
--- a/app/i18n/pt-PT/gen.php
+++ b/app/i18n/pt-PT/gen.php
@@ -189,6 +189,7 @@ return array(
'about' => 'Sobre',
'account' => 'Conta',
'admin' => 'Administração',
+ 'advanced_search' => 'Advanced Search', // TODO
'archiving' => 'Arquivar',
'authentication' => 'Autenticação',
'check_install' => 'Verificação de instalação',
@@ -221,6 +222,32 @@ return array(
'language' => 'Language', // IGNORE
'translated' => 'Progress', // IGNORE
),
+ 'search' => array(
+ 'advanced_search_help' => 'This form helps construct search queries, but manual queries are even more powerful.', // TODO
+ 'authors' => 'Authors', // TODO
+ 'categories' => 'Categories', // TODO
+ 'content' => 'Content', // TODO
+ 'date_from' => 'From', // TODO
+ 'date_past' => 'In the past', // TODO
+ 'date_published' => 'Publication Date', // TODO
+ 'date_range' => 'Date Range', // TODO
+ 'date_received' => 'Received Date', // TODO
+ 'date_to' => 'To', // TODO
+ 'feeds' => 'Feeds', // TODO
+ 'free_text' => 'Free Text', // TODO
+ 'free_text_help' => 'Search both in title and content', // TODO
+ 'full_documentation' => 'View <a href="https://freshrss.github.io/FreshRSS/en/users/10_filter.html#with-the-search-field" target="_blank">full search documentation</a>', // TODO
+ 'labels' => 'My Labels', // TODO
+ 'multiple_help' => 'Select one or more (hold <kbd>Ctrl</kbd> or <kbd>Cmd</kbd>)', // TODO
+ 'sources' => 'Sources', // TODO
+ 'tags' => 'Article Tags', // TODO
+ 'text' => 'Text Search', // TODO
+ 'text_help' => 'Multiple lines are combined by a logical <i>or</i>. Also supports <a href="https://freshrss.github.io/FreshRSS/en/users/10_filter.html#regex" target="_blank">regular expressions</a>.', // TODO
+ 'text_placeholder' => 'Keyword', // TODO
+ 'title' => 'Title', // TODO
+ 'url' => 'URL', // TODO
+ 'user_queries' => 'User Queries', // TODO
+ ),
'share' => array(
'Known' => 'Sites no Known',
'archiveIS' => 'archive.is', // IGNORE
diff --git a/app/i18n/ru/gen.php b/app/i18n/ru/gen.php
index 399f0b8ac..42aec9283 100644
--- a/app/i18n/ru/gen.php
+++ b/app/i18n/ru/gen.php
@@ -189,6 +189,7 @@ return array(
'about' => 'О проекте',
'account' => 'Аккаунт',
'admin' => 'Администрирование',
+ 'advanced_search' => 'Advanced Search', // TODO
'archiving' => 'Архивирование',
'authentication' => 'Аутентификация',
'check_install' => 'Проверка установки',
@@ -221,6 +222,32 @@ return array(
'language' => 'Language', // IGNORE
'translated' => 'Progress', // IGNORE
),
+ 'search' => array(
+ 'advanced_search_help' => 'This form helps construct search queries, but manual queries are even more powerful.', // TODO
+ 'authors' => 'Authors', // TODO
+ 'categories' => 'Categories', // TODO
+ 'content' => 'Content', // TODO
+ 'date_from' => 'From', // TODO
+ 'date_past' => 'In the past', // TODO
+ 'date_published' => 'Publication Date', // TODO
+ 'date_range' => 'Date Range', // TODO
+ 'date_received' => 'Received Date', // TODO
+ 'date_to' => 'To', // TODO
+ 'feeds' => 'Feeds', // TODO
+ 'free_text' => 'Free Text', // TODO
+ 'free_text_help' => 'Search both in title and content', // TODO
+ 'full_documentation' => 'View <a href="https://freshrss.github.io/FreshRSS/en/users/10_filter.html#with-the-search-field" target="_blank">full search documentation</a>', // TODO
+ 'labels' => 'My Labels', // TODO
+ 'multiple_help' => 'Select one or more (hold <kbd>Ctrl</kbd> or <kbd>Cmd</kbd>)', // TODO
+ 'sources' => 'Sources', // TODO
+ 'tags' => 'Article Tags', // TODO
+ 'text' => 'Text Search', // TODO
+ 'text_help' => 'Multiple lines are combined by a logical <i>or</i>. Also supports <a href="https://freshrss.github.io/FreshRSS/en/users/10_filter.html#regex" target="_blank">regular expressions</a>.', // TODO
+ 'text_placeholder' => 'Keyword', // TODO
+ 'title' => 'Title', // TODO
+ 'url' => 'URL', // TODO
+ 'user_queries' => 'User Queries', // TODO
+ ),
'share' => array(
'Known' => 'Сайты на Known',
'archiveIS' => 'archive.is', // IGNORE
diff --git a/app/i18n/sk/gen.php b/app/i18n/sk/gen.php
index a240ec81d..569763a18 100644
--- a/app/i18n/sk/gen.php
+++ b/app/i18n/sk/gen.php
@@ -189,6 +189,7 @@ return array(
'about' => 'O FreshRSS',
'account' => 'Konto',
'admin' => 'Administrácia',
+ 'advanced_search' => 'Advanced Search', // TODO
'archiving' => 'Archivácia',
'authentication' => 'Prihlásenie',
'check_install' => 'Kontrola inštalácie',
@@ -221,6 +222,32 @@ return array(
'language' => 'Language', // IGNORE
'translated' => 'Progress', // IGNORE
),
+ 'search' => array(
+ 'advanced_search_help' => 'This form helps construct search queries, but manual queries are even more powerful.', // TODO
+ 'authors' => 'Authors', // TODO
+ 'categories' => 'Categories', // TODO
+ 'content' => 'Content', // TODO
+ 'date_from' => 'From', // TODO
+ 'date_past' => 'In the past', // TODO
+ 'date_published' => 'Publication Date', // TODO
+ 'date_range' => 'Date Range', // TODO
+ 'date_received' => 'Received Date', // TODO
+ 'date_to' => 'To', // TODO
+ 'feeds' => 'Feeds', // TODO
+ 'free_text' => 'Free Text', // TODO
+ 'free_text_help' => 'Search both in title and content', // TODO
+ 'full_documentation' => 'View <a href="https://freshrss.github.io/FreshRSS/en/users/10_filter.html#with-the-search-field" target="_blank">full search documentation</a>', // TODO
+ 'labels' => 'My Labels', // TODO
+ 'multiple_help' => 'Select one or more (hold <kbd>Ctrl</kbd> or <kbd>Cmd</kbd>)', // TODO
+ 'sources' => 'Sources', // TODO
+ 'tags' => 'Article Tags', // TODO
+ 'text' => 'Text Search', // TODO
+ 'text_help' => 'Multiple lines are combined by a logical <i>or</i>. Also supports <a href="https://freshrss.github.io/FreshRSS/en/users/10_filter.html#regex" target="_blank">regular expressions</a>.', // TODO
+ 'text_placeholder' => 'Keyword', // TODO
+ 'title' => 'Title', // TODO
+ 'url' => 'URL', // TODO
+ 'user_queries' => 'User Queries', // TODO
+ ),
'share' => array(
'Known' => 'Stránky založené na Known',
'archiveIS' => 'archive.is', // IGNORE
diff --git a/app/i18n/tr/gen.php b/app/i18n/tr/gen.php
index 9dfa52a81..13714a004 100644
--- a/app/i18n/tr/gen.php
+++ b/app/i18n/tr/gen.php
@@ -189,6 +189,7 @@ return array(
'about' => 'Hakkında',
'account' => 'Hesap',
'admin' => 'Yönetim',
+ 'advanced_search' => 'Advanced Search', // TODO
'archiving' => 'Arşivleme',
'authentication' => 'Kimlik doğrulama',
'check_install' => 'Kurulum kontrolü',
@@ -221,6 +222,32 @@ return array(
'language' => 'Language', // IGNORE
'translated' => 'Progress', // IGNORE
),
+ 'search' => array(
+ 'advanced_search_help' => 'This form helps construct search queries, but manual queries are even more powerful.', // TODO
+ 'authors' => 'Authors', // TODO
+ 'categories' => 'Categories', // TODO
+ 'content' => 'Content', // TODO
+ 'date_from' => 'From', // TODO
+ 'date_past' => 'In the past', // TODO
+ 'date_published' => 'Publication Date', // TODO
+ 'date_range' => 'Date Range', // TODO
+ 'date_received' => 'Received Date', // TODO
+ 'date_to' => 'To', // TODO
+ 'feeds' => 'Feeds', // TODO
+ 'free_text' => 'Free Text', // TODO
+ 'free_text_help' => 'Search both in title and content', // TODO
+ 'full_documentation' => 'View <a href="https://freshrss.github.io/FreshRSS/en/users/10_filter.html#with-the-search-field" target="_blank">full search documentation</a>', // TODO
+ 'labels' => 'My Labels', // TODO
+ 'multiple_help' => 'Select one or more (hold <kbd>Ctrl</kbd> or <kbd>Cmd</kbd>)', // TODO
+ 'sources' => 'Sources', // TODO
+ 'tags' => 'Article Tags', // TODO
+ 'text' => 'Text Search', // TODO
+ 'text_help' => 'Multiple lines are combined by a logical <i>or</i>. Also supports <a href="https://freshrss.github.io/FreshRSS/en/users/10_filter.html#regex" target="_blank">regular expressions</a>.', // TODO
+ 'text_placeholder' => 'Keyword', // TODO
+ 'title' => 'Title', // TODO
+ 'url' => 'URL', // TODO
+ 'user_queries' => 'User Queries', // TODO
+ ),
'share' => array(
'Known' => 'Bilinen tabanlı siteler',
'archiveIS' => 'archive.is', // IGNORE
diff --git a/app/i18n/uk/gen.php b/app/i18n/uk/gen.php
index 32466778c..bc7f29d37 100644
--- a/app/i18n/uk/gen.php
+++ b/app/i18n/uk/gen.php
@@ -189,6 +189,7 @@ return array(
'about' => 'Про програму',
'account' => 'Обліковий запис',
'admin' => 'Адміністрування',
+ 'advanced_search' => 'Advanced Search', // TODO
'archiving' => 'Архівування',
'authentication' => 'Вхід',
'check_install' => 'Перевірка встановлення',
@@ -221,6 +222,32 @@ return array(
'language' => 'Language', // TODO
'translated' => 'Progress', // TODO
),
+ 'search' => array(
+ 'advanced_search_help' => 'This form helps construct search queries, but manual queries are even more powerful.', // TODO
+ 'authors' => 'Authors', // TODO
+ 'categories' => 'Categories', // TODO
+ 'content' => 'Content', // TODO
+ 'date_from' => 'From', // TODO
+ 'date_past' => 'In the past', // TODO
+ 'date_published' => 'Publication Date', // TODO
+ 'date_range' => 'Date Range', // TODO
+ 'date_received' => 'Received Date', // TODO
+ 'date_to' => 'To', // TODO
+ 'feeds' => 'Feeds', // TODO
+ 'free_text' => 'Free Text', // TODO
+ 'free_text_help' => 'Search both in title and content', // TODO
+ 'full_documentation' => 'View <a href="https://freshrss.github.io/FreshRSS/en/users/10_filter.html#with-the-search-field" target="_blank">full search documentation</a>', // TODO
+ 'labels' => 'My Labels', // TODO
+ 'multiple_help' => 'Select one or more (hold <kbd>Ctrl</kbd> or <kbd>Cmd</kbd>)', // TODO
+ 'sources' => 'Sources', // TODO
+ 'tags' => 'Article Tags', // TODO
+ 'text' => 'Text Search', // TODO
+ 'text_help' => 'Multiple lines are combined by a logical <i>or</i>. Also supports <a href="https://freshrss.github.io/FreshRSS/en/users/10_filter.html#regex" target="_blank">regular expressions</a>.', // TODO
+ 'text_placeholder' => 'Keyword', // TODO
+ 'title' => 'Title', // TODO
+ 'url' => 'URL', // TODO
+ 'user_queries' => 'User Queries', // TODO
+ ),
'share' => array(
'Known' => 'Сайти на Known',
'archiveIS' => 'archive.is', // IGNORE
diff --git a/app/i18n/zh-CN/gen.php b/app/i18n/zh-CN/gen.php
index 032bfb682..56f3292d8 100644
--- a/app/i18n/zh-CN/gen.php
+++ b/app/i18n/zh-CN/gen.php
@@ -189,6 +189,7 @@ return array(
'about' => '关于',
'account' => '账户',
'admin' => '管理',
+ 'advanced_search' => 'Advanced Search', // TODO
'archiving' => '归档',
'authentication' => '认证',
'check_install' => '环境检查',
@@ -221,6 +222,32 @@ return array(
'language' => 'Language', // IGNORE
'translated' => 'Progress', // IGNORE
),
+ 'search' => array(
+ 'advanced_search_help' => 'This form helps construct search queries, but manual queries are even more powerful.', // TODO
+ 'authors' => 'Authors', // TODO
+ 'categories' => 'Categories', // TODO
+ 'content' => 'Content', // TODO
+ 'date_from' => 'From', // TODO
+ 'date_past' => 'In the past', // TODO
+ 'date_published' => 'Publication Date', // TODO
+ 'date_range' => 'Date Range', // TODO
+ 'date_received' => 'Received Date', // TODO
+ 'date_to' => 'To', // TODO
+ 'feeds' => 'Feeds', // TODO
+ 'free_text' => 'Free Text', // TODO
+ 'free_text_help' => 'Search both in title and content', // TODO
+ 'full_documentation' => 'View <a href="https://freshrss.github.io/FreshRSS/en/users/10_filter.html#with-the-search-field" target="_blank">full search documentation</a>', // TODO
+ 'labels' => 'My Labels', // TODO
+ 'multiple_help' => 'Select one or more (hold <kbd>Ctrl</kbd> or <kbd>Cmd</kbd>)', // TODO
+ 'sources' => 'Sources', // TODO
+ 'tags' => 'Article Tags', // TODO
+ 'text' => 'Text Search', // TODO
+ 'text_help' => 'Multiple lines are combined by a logical <i>or</i>. Also supports <a href="https://freshrss.github.io/FreshRSS/en/users/10_filter.html#regex" target="_blank">regular expressions</a>.', // TODO
+ 'text_placeholder' => 'Keyword', // TODO
+ 'title' => 'Title', // TODO
+ 'url' => 'URL', // TODO
+ 'user_queries' => 'User Queries', // TODO
+ ),
'share' => array(
'Known' => '基于 Known 的站点',
'archiveIS' => 'archive.is', // IGNORE
diff --git a/app/i18n/zh-TW/gen.php b/app/i18n/zh-TW/gen.php
index d7216765a..2f68c6bd8 100644
--- a/app/i18n/zh-TW/gen.php
+++ b/app/i18n/zh-TW/gen.php
@@ -189,6 +189,7 @@ return array(
'about' => '關於',
'account' => '帳號',
'admin' => '管理',
+ 'advanced_search' => 'Advanced Search', // TODO
'archiving' => '歸檔',
'authentication' => '認證',
'check_install' => '環境檢查',
@@ -221,6 +222,32 @@ return array(
'language' => 'Language', // IGNORE
'translated' => 'Progress', // IGNORE
),
+ 'search' => array(
+ 'advanced_search_help' => 'This form helps construct search queries, but manual queries are even more powerful.', // TODO
+ 'authors' => 'Authors', // TODO
+ 'categories' => 'Categories', // TODO
+ 'content' => 'Content', // TODO
+ 'date_from' => 'From', // TODO
+ 'date_past' => 'In the past', // TODO
+ 'date_published' => 'Publication Date', // TODO
+ 'date_range' => 'Date Range', // TODO
+ 'date_received' => 'Received Date', // TODO
+ 'date_to' => 'To', // TODO
+ 'feeds' => 'Feeds', // TODO
+ 'free_text' => 'Free Text', // TODO
+ 'free_text_help' => 'Search both in title and content', // TODO
+ 'full_documentation' => 'View <a href="https://freshrss.github.io/FreshRSS/en/users/10_filter.html#with-the-search-field" target="_blank">full search documentation</a>', // TODO
+ 'labels' => 'My Labels', // TODO
+ 'multiple_help' => 'Select one or more (hold <kbd>Ctrl</kbd> or <kbd>Cmd</kbd>)', // TODO
+ 'sources' => 'Sources', // TODO
+ 'tags' => 'Article Tags', // TODO
+ 'text' => 'Text Search', // TODO
+ 'text_help' => 'Multiple lines are combined by a logical <i>or</i>. Also supports <a href="https://freshrss.github.io/FreshRSS/en/users/10_filter.html#regex" target="_blank">regular expressions</a>.', // TODO
+ 'text_placeholder' => 'Keyword', // TODO
+ 'title' => 'Title', // TODO
+ 'url' => 'URL', // TODO
+ 'user_queries' => 'User Queries', // TODO
+ ),
'share' => array(
'Known' => '基於 Known 的站點',
'archiveIS' => 'archive.is', // IGNORE
diff --git a/app/layout/aside_subscription.phtml b/app/layout/aside_subscription.phtml
index be414ff03..f7ed09213 100644
--- a/app/layout/aside_subscription.phtml
+++ b/app/layout/aside_subscription.phtml
@@ -9,6 +9,9 @@
<li class="item">
<a href="<?= _url('index', 'index') ?>"><?= _t('gen.action.back_to_rss_feeds') ?></a>
</li>
+ <li class="item<?= Minz_Request::controllerName() === 'search' ? ' active' : '' ?>">
+ <a href="<?= _url('search', 'index') ?>"><?= _t('gen.menu.advanced_search') ?></a>
+ </li>
</ul>
</li>
<li class="item nav-section">
diff --git a/app/layout/nav_menu.phtml b/app/layout/nav_menu.phtml
index 0c6fc7dd2..f29d0ae00 100644
--- a/app/layout/nav_menu.phtml
+++ b/app/layout/nav_menu.phtml
@@ -57,7 +57,7 @@
value="<?= htmlspecialchars(htmlspecialchars_decode(FreshRSS_Context::$search->getRawInput(), ENT_QUOTES), ENT_COMPAT, 'UTF-8'); ?>"
placeholder="<?= _t('gen.menu.search') ?>" title="<?= _t('gen.menu.search') ?>" /><button class="btn" type="submit" title="<?= _t('index.menu.search_short') ?>"><?= _i('search') ?></button>
</div>
- <p class="help"><?= _i('help') ?> <?= _t('gen.menu.search_help') ?></a></p>
+ <p class="help"><?= _i('help') ?> <a href="<?= _url('search', 'index') ?>"><?= _t('gen.menu.advanced_search') ?></a></p>
</form>
</span>
</li>
diff --git a/app/views/search/index.phtml b/app/views/search/index.phtml
new file mode 100644
index 000000000..1d9222f23
--- /dev/null
+++ b/app/views/search/index.phtml
@@ -0,0 +1,200 @@
+<?php
+ declare(strict_types=1);
+ /** @var FreshRSS_View $this */
+ $this->partial('aside_subscription');
+?>
+<main class="post">
+ <h1><?= _t('gen.menu.advanced_search') ?></h1>
+ <p class="help"><?= _i('help') ?> <?= _t('gen.search.advanced_search_help') ?></p>
+ <p><?= _t('gen.search.full_documentation') ?></p>
+
+ <form method="post" action="<?= _url('search', 'submit') ?>">
+ <input type="hidden" name="_csrf" value="<?= FreshRSS_Auth::csrfToken() ?>" />
+
+ <fieldset>
+ <legend><?= _t('gen.search.text') ?></legend>
+ <p class="help"><?= _i('help') ?> <?= _t('gen.search.text_help') ?></p>
+
+ <div class="form-group">
+ <label class="group-name" for="free_text"><?= _t('gen.search.free_text') ?></label>
+ <div class="group-controls">
+ <textarea id="free_text" name="free_text" rows="2" placeholder="<?= _t('gen.search.text_placeholder') ?>"></textarea>
+ <p class="help"><?= _i('help') ?> <?= _t('gen.search.free_text_help') ?></p>
+ </div>
+ </div>
+
+ <div class="form-group">
+ <label class="group-name" for="title"><?= _t('gen.search.title') ?></label>
+ <div class="group-controls">
+ <textarea id="title" name="title" rows="2" placeholder="<?= _t('gen.search.text_placeholder') ?>"></textarea>
+ </div>
+ </div>
+
+ <div class="form-group">
+ <label class="group-name" for="content"><?= _t('gen.search.content') ?></label>
+ <div class="group-controls">
+ <textarea id="content" name="content" rows="2" placeholder="<?= _t('gen.search.text_placeholder') ?>"></textarea>
+ </div>
+ </div>
+
+ <div class="form-group">
+ <label class="group-name" for="url"><?= _t('gen.search.url') ?></label>
+ <div class="group-controls">
+ <textarea id="url" name="url" rows="2" placeholder="<?= _t('gen.search.text_placeholder') ?>"></textarea>
+ </div>
+ </div>
+
+ <div class="form-group">
+ <label class="group-name" for="authors"><?= _t('gen.search.authors') ?></label>
+ <div class="group-controls">
+ <textarea id="authors" name="authors" rows="2" placeholder="<?= _t('gen.search.text_placeholder') ?>"></textarea>
+ </div>
+ </div>
+
+ <div class="form-group">
+ <label class="group-name" for="tags"><?= _t('gen.search.tags') ?></label>
+ <div class="group-controls">
+ <textarea id="tags" name="tags" rows="2" placeholder="<?= _t('gen.search.text_placeholder') ?>"></textarea>
+ </div>
+ </div>
+ </fieldset>
+
+ <fieldset>
+ <legend><?= _t('gen.search.date_past') ?></legend>
+
+ <div class="form-group">
+ <label class="group-name"><?= _t('gen.search.date_received') ?></label>
+ <div class="group-controls">
+ <div>
+ <label for="date_number"><?= _t('gen.search.date_past') ?>
+ <input id="date_number" name="date_number" type="number" min="1" placeholder="1" />
+ <select id="date_unit" name="date_unit">
+ <option value="H"><?= _t('gen.period.hours') ?></option>
+ <option value="D"><?= _t('gen.period.days') ?></option>
+ <option value="W"><?= _t('gen.period.weeks') ?></option>
+ <option value="M"><?= _t('gen.period.months') ?></option>
+ <option value="Y"><?= _t('gen.period.years') ?></option>
+ </select>
+ </label>
+ </div>
+ </div>
+ </div>
+
+ <div class="form-group">
+ <label class="group-name"><?= _t('gen.search.date_published') ?></label>
+ <div class="group-controls">
+ <div>
+ <label for="pubdate_number"><?= _t('gen.search.date_past') ?>
+ <input id="pubdate_number" name="pubdate_number" type="number" min="1" placeholder="1" />
+ <select id="pubdate_unit" name="pubdate_unit">
+ <option value="H"><?= _t('gen.period.hours') ?></option>
+ <option value="D"><?= _t('gen.period.days') ?></option>
+ <option value="W"><?= _t('gen.period.weeks') ?></option>
+ <option value="M"><?= _t('gen.period.months') ?></option>
+ <option value="Y"><?= _t('gen.period.years') ?></option>
+ </select>
+ </label>
+ </div>
+ </div>
+ </div>
+ </fieldset>
+
+ <fieldset>
+ <legend><?= _t('gen.search.date_range') ?></legend>
+
+ <div class="form-group">
+ <label class="group-name"><?= _t('gen.search.date_received') ?></label>
+ <div class="group-controls">
+ <div>
+ <label for="date_from"><?= _t('gen.search.date_from') ?>
+ <input id="date_from" name="date_from" type="date" />
+ </label>
+ <label for="date_to"><?= _t('gen.search.date_to') ?>
+ <input id="date_to" name="date_to" type="date" />
+ </label>
+ </div>
+ </div>
+ </div>
+
+ <div class="form-group">
+ <label class="group-name"><?= _t('gen.search.date_published') ?></label>
+ <div class="group-controls">
+ <div>
+ <label for="pubdate_from"><?= _t('gen.search.date_from') ?>
+ <input id="pubdate_from" name="pubdate_from" type="date" />
+ </label>
+ <label for="pubdate_to"><?= _t('gen.search.date_to') ?>
+ <input id="pubdate_to" name="pubdate_to" type="date" />
+ </label>
+ </div>
+ </div>
+ </div>
+ </fieldset>
+
+ <fieldset>
+ <legend><?= _t('gen.search.sources') ?></legend>
+
+ <div class="form-group">
+ <label class="group-name" for="feed_ids"><?= _t('gen.search.feeds') ?></label>
+ <div class="group-controls">
+ <select name="feed_ids[]" id="feed_ids" size="<?= min(8, count($this->feeds) + 1) ?>" multiple="multiple">
+ <?php foreach ($this->feeds as $feed): ?>
+ <option value="<?= $feed->id() ?>"><?= $feed->name() ?></option>
+ <?php endforeach; ?>
+ </select>
+ </div>
+ </div>
+
+ <div class="form-group">
+ <label class="group-name" for="category_ids"><?= _t('gen.search.categories') ?></label>
+ <div class="group-controls">
+ <select name="category_ids[]" id="category_ids" size="<?= min(8, count($this->categories) + 1) ?>" multiple="multiple">
+ <?php foreach ($this->categories as $category): ?>
+ <option value="<?= $category->id() ?>"><?= $category->name() ?></option>
+ <?php endforeach; ?>
+ </select>
+ <p class="help"><?= _i('help') ?> <?= _t('gen.search.multiple_help') ?></p>
+ </div>
+ </div>
+ </fieldset>
+
+ <fieldset>
+ <legend><?= _t('gen.search.labels') ?></legend>
+
+ <div class="form-group">
+ <label class="group-name" for="label_ids"><?= _t('gen.search.labels') ?></label>
+ <div class="group-controls">
+ <select name="label_ids[]" id="label_ids" size="<?= min(8, count($this->labels) + 1) ?>" multiple="multiple">
+ <?php foreach ($this->labels as $label): ?>
+ <option value="<?= $label->id() ?>"><?= $label->name() ?></option>
+ <?php endforeach; ?>
+ </select>
+ <p class="help"><?= _i('help') ?> <?= _t('gen.search.multiple_help') ?></p>
+ </div>
+ </div>
+ </fieldset>
+
+ <fieldset>
+ <legend><?= _t('gen.search.user_queries') ?></legend>
+
+ <div class="form-group">
+ <label class="group-name" for="user_query_ids"><?= _t('gen.search.user_queries') ?></label>
+ <div class="group-controls">
+ <select name="user_query_ids[]" id="user_query_ids" size="<?= min(8, count($this->queries) + 1) ?>" multiple="multiple">
+ <?php foreach ($this->queries as $key => $query): ?>
+ <option value="<?= $key ?>"><?= $query->getName() ?></option>
+ <?php endforeach; ?>
+ </select>
+ <p class="help"><?= _i('help') ?> <?= _t('gen.search.multiple_help') ?></p>
+ </div>
+ </div>
+ </fieldset>
+
+ <div class="form-group form-actions">
+ <div class="group-controls">
+ <button type="submit" class="btn btn-important"><?= _t('gen.action.submit') ?></button>
+ <button type="reset" class="btn"><?= _t('gen.action.cancel') ?></button>
+ </div>
+ </div>
+ </form>
+</main>
diff --git a/docs/en/users/10_filter.md b/docs/en/users/10_filter.md
index 42e44339b..d6c8ea05e 100644
--- a/docs/en/users/10_filter.md
+++ b/docs/en/users/10_filter.md
@@ -95,7 +95,7 @@ You can use the search field to further refine results:
* by custom label name `label:label`, `label:"my label"` or any label name from a list (*or*): `labels:"my label,my other label"`
* by several label names (*and*): `label:"my label" label:"my other label"`
* by entry (article) ID: `e:1639310674957894` or multiple entry IDs (*or*): `e:1639310674957894,1639310674957893`
-* by user query (saved search) name: `search:myQuery`, `search:"My query"` or saved search ID: `S:3`
+* by user query (saved search) name: `search:myQuery`, `search:"My query"` or saved search ID: `S:3` or multiple search IDs: `S:1,2`
* internally, those references are replaced by the corresponding user query in the search expression
Be careful not to enter a space between the operator and the search value.
diff --git a/docs/fr/users/03_Main_view.md b/docs/fr/users/03_Main_view.md
index 67f03ee93..13d33bbf9 100644
--- a/docs/fr/users/03_Main_view.md
+++ b/docs/fr/users/03_Main_view.md
@@ -254,7 +254,7 @@ Il est possible d’utiliser le champ de recherche pour raffiner les résultats
* par nom d’étiquette : `label:étiquette`, `label:"mon étiquette"` ou d’une étiquette parmi une liste (*ou*) : `labels:"mon étiquette,mon autre étiquette"`
* par plusieurs noms d’étiquettes (*et*) : `label:"mon étiquette" label:"mon autre étiquette"`
* par ID d’article (entrée) : `e:1639310674957894` ou de plusieurs articles (*ou*) : `e:1639310674957894,1639310674957893`
-* par nom de filtre utilisateur (recherche enregistrée) : `search:maRecherche`, `search:"Ma recherche"` ou par ID de recherche : `S:3`
+* par nom de filtre utilisateur (recherche enregistrée) : `search:maRecherche`, `search:"Ma recherche"` ou par ID de recherche : `S:3`, ou multiple IDs : `S:1,2`
* en interne, ces références sont remplacées par le filtre utilisateur correspondant dans l’expression de recherche
Attention à ne pas introduire d’espace entre l’opérateur et la valeur
diff --git a/lib/Minz/Request.php b/lib/Minz/Request.php
index 4bf6fa45c..c938afd7c 100644
--- a/lib/Minz/Request.php
+++ b/lib/Minz/Request.php
@@ -99,6 +99,18 @@ class Minz_Request {
return $plaintext ? $result : Minz_Helper::htmlspecialchars_utf8($result);
}
+ /**
+ * @return list<int>
+ */
+ public static function paramArrayInt(string $key): array {
+ if (empty(self::$params[$key]) || !is_array(self::$params[$key])) {
+ return [];
+ }
+ $result = array_filter(self::$params[$key], 'is_numeric');
+ $result = array_map('intval', $result);
+ return array_values($result);
+ }
+
public static function paramTernary(string $key): ?bool {
if (isset(self::$params[$key])) {
$p = self::$params[$key];
diff --git a/tests/app/Models/SearchTest.php b/tests/app/Models/SearchTest.php
index 4c66880db..19279fa65 100644
--- a/tests/app/Models/SearchTest.php
+++ b/tests/app/Models/SearchTest.php
@@ -225,6 +225,70 @@ final class SearchTest extends \PHPUnit\Framework\TestCase {
}
/**
+ * @param list<array{search:string}> $queries
+ * @param array{0:string,1:list<string|int>} $expectedResult
+ */
+ #[DataProvider('provideSavedQueryIdExpansion')]
+ public static function test__construct_whenInputContainsSavedQueryIds_expandsSavedSearches(array $queries, string $input, array $expectedResult): void {
+ $previousUserConf = FreshRSS_Context::hasUserConf() ? FreshRSS_Context::userConf() : null;
+ $newUserConf = $previousUserConf instanceof FreshRSS_UserConfiguration ? clone $previousUserConf : clone FreshRSS_UserConfiguration::default();
+ $newUserConf->queries = $queries;
+ FreshRSS_Context::$user_conf = $newUserConf;
+
+ try {
+ $search = new FreshRSS_BooleanSearch($input);
+ [$actualValues, $actualSql] = FreshRSS_EntryDAOPGSQL::sqlBooleanSearch('e.', $search);
+ self::assertSame($expectedResult[0], trim($actualSql));
+ self::assertSame($expectedResult[1], $actualValues);
+ } finally {
+ FreshRSS_Context::$user_conf = $previousUserConf;
+ }
+ }
+
+ /**
+ * @return array<string,array{0:list<array{search:string}>,1:string,2:array{0:string,1:list<string|int>}}>
+ */
+ public static function provideSavedQueryIdExpansion(): array {
+ return [
+ 'expanded single group' => [
+ [
+ ['search' => 'author:Alice'],
+ ['search' => 'intitle:World'],
+ ],
+ 'S:0,1',
+ [
+ '((e.author LIKE ? )) OR ((e.title LIKE ? ))',
+ ['%Alice%', '%World%'],
+ ],
+ ],
+ 'separate groups with OR' => [
+ [
+ ['search' => 'author:Alice'],
+ ['search' => 'intitle:World'],
+ ['search' => 'inurl:Example'],
+ ['search' => 'author:Bob'],
+ ],
+ 'S:0,1 OR S:2,3',
+ [
+ '((e.author LIKE ? )) OR ((e.title LIKE ? )) OR ((e.link LIKE ? )) OR ((e.author LIKE ? ))',
+ ['%Alice%', '%World%', '%Example%', '%Bob%'],
+ ],
+ ],
+ 'mixed with other clauses' => [
+ [
+ ['search' => 'author:Alice'],
+ ['search' => 'intitle:World'],
+ ],
+ 'intitle:Hello S:0,1 date:2025-10',
+ [
+ '((e.title LIKE ? )) AND ((e.author LIKE ? )) OR ((e.title LIKE ? )) AND ((e.id >= ? AND e.id <= ? ))',
+ ['%Hello%', '%Alice%', '%World%', strtotime('2025-10-01') . '000000', (strtotime('2025-11-01') - 1) . '000000'],
+ ],
+ ],
+ ];
+ }
+
+ /**
* @param array<string>|null $author_value
* @param array<string> $intitle_value
* @param array<string>|null $inurl_value