public function pubSubHubbubEnabled() {
diff --git a/app/Models/FilterAction.php b/app/Models/FilterAction.php
new file mode 100644
index 000000000..23a45d14e
--- /dev/null
+++ b/app/Models/FilterAction.php
@@ -0,0 +1,45 @@
+booleanSearch = $booleanSearch;
+ $this->_actions($actions);
+ }
+
+ public function booleanSearch() {
+ return $this->booleanSearch;
+ }
+
+ public function actions() {
+ return $this->actions;
+ }
+
+ public function _actions($actions) {
+ if (is_array($actions)) {
+ $this->actions = array_unique($actions);
+ } else {
+ $this->actions = null;
+ }
+ }
+
+ public function toJSON() {
+ if (is_array($this->actions) && $this->booleanSearch != null) {
+ return array(
+ 'search' => $this->booleanSearch->getRawInput(),
+ 'actions' => $this->actions,
+ );
+ }
+ return '';
+ }
+
+ public static function fromJSON($json) {
+ if (!empty($json['search']) && !empty($json['actions']) && is_array($json['actions'])) {
+ return new FreshRSS_FilterAction(new FreshRSS_BooleanSearch($json['search']), $json['actions']);
+ }
+ return null;
+ }
+}
diff --git a/app/i18n/cz/sub.php b/app/i18n/cz/sub.php
index 5b5634fed..2e81c928d 100644
--- a/app/i18n/cz/sub.php
+++ b/app/i18n/cz/sub.php
@@ -33,6 +33,10 @@ return array(
'description' => 'Popis',
'empty' => 'Kanál je prázdný. Ověřte prosím zda je ještě autorem udržován.',
'error' => 'Vyskytl se problém s kanálem. Ověřte že je vždy dostupný, prosím, a poté jej aktualizujte.',
+ 'filteractions' => array(
+ '_' => 'Filter actions', //TODO - Translation
+ 'help' => 'Write one search filter per line.', //TODO - Translation
+ ),
'informations' => 'Informace',
'keep_history' => 'Zachovat tento minimální počet článků',
'moved_category_deleted' => 'Po smazání kategorie budou v ní obsažené kanály automaticky přesunuty do %s.',
diff --git a/app/i18n/de/sub.php b/app/i18n/de/sub.php
index 27e893177..bd050671e 100644
--- a/app/i18n/de/sub.php
+++ b/app/i18n/de/sub.php
@@ -33,6 +33,10 @@ return array(
'description' => 'Beschreibung',
'empty' => 'Dieser Feed ist leer. Bitte stellen Sie sicher, dass er noch gepflegt wird.',
'error' => 'Dieser Feed ist auf ein Problem gestoßen. Bitte stellen Sie sicher, dass er immer lesbar ist und aktualisieren Sie ihn dann.',
+ 'filteractions' => array(
+ '_' => 'Filter actions', //TODO - Translation
+ 'help' => 'Write one search filter per line.', //TODO - Translation
+ ),
'informations' => 'Information',
'keep_history' => 'Minimale Anzahl an Artikeln, die behalten wird',
'moved_category_deleted' => 'Wenn Sie eine Kategorie entfernen, werden deren Feeds automatisch in die Kategorie %s eingefügt.',
diff --git a/app/i18n/en/sub.php b/app/i18n/en/sub.php
index 4efd81ba4..f11eb9b99 100644
--- a/app/i18n/en/sub.php
+++ b/app/i18n/en/sub.php
@@ -33,6 +33,10 @@ return array(
'description' => 'Description',
'empty' => 'This feed is empty. Please verify that it is still maintained.',
'error' => 'This feed has encountered a problem. Please verify that it is always reachable then update it.',
+ 'filteractions' => array(
+ '_' => 'Filter actions',
+ 'help' => 'Write one search filter per line.',
+ ),
'informations' => 'Information',
'keep_history' => 'Minimum number of articles to keep',
'moved_category_deleted' => 'When you delete a category, its feeds are automatically classified under %s.',
diff --git a/app/i18n/es/sub.php b/app/i18n/es/sub.php
index 854984891..c0526106f 100755
--- a/app/i18n/es/sub.php
+++ b/app/i18n/es/sub.php
@@ -33,6 +33,10 @@ return array(
'description' => 'Descripción',
'empty' => 'La fuente está vacía. Por favor, verifica que siga activa.',
'error' => 'Hay un problema con esta fuente. Por favor, veritica que esté disponible y prueba de nuevo.',
+ 'filteractions' => array(
+ '_' => 'Filter actions', //TODO - Translation
+ 'help' => 'Write one search filter per line.', //TODO - Translation
+ ),
'informations' => 'Información',
'keep_history' => 'Número mínimo de artículos a conservar',
'moved_category_deleted' => 'Al borrar una categoría todas sus fuentes pasan automáticamente a la categoría %s.',
diff --git a/app/i18n/fr/sub.php b/app/i18n/fr/sub.php
index d9964ac6e..b71019faa 100644
--- a/app/i18n/fr/sub.php
+++ b/app/i18n/fr/sub.php
@@ -33,6 +33,10 @@ return array(
'description' => 'Description',
'empty' => 'Ce flux est vide. Veuillez vérifier qu’il est toujours maintenu.',
'error' => 'Ce flux a rencontré un problème. Veuillez vérifier qu’il est toujours accessible puis actualisez-le.',
+ 'filteractions' => array(
+ '_' => 'Filtres d’action',
+ 'help' => 'Écrivez une recherche par ligne.',
+ ),
'informations' => 'Informations',
'keep_history' => 'Nombre minimum d’articles à conserver',
'moved_category_deleted' => 'Lors de la suppression d’une catégorie, ses flux seront automatiquement classés dans %s.',
diff --git a/app/i18n/he/sub.php b/app/i18n/he/sub.php
index 6d824e349..bb2025bc3 100644
--- a/app/i18n/he/sub.php
+++ b/app/i18n/he/sub.php
@@ -33,6 +33,10 @@ return array(
'description' => 'תיאור',
'empty' => 'הזנה זו ריקה. אנא ודאו שהיא עדיין מתוחזקת.',
'error' => 'הזנה זו נתקלה בשגיאה, אנא ודאו שהיא תקינה ואז נסו שנית.',
+ 'filteractions' => array(
+ '_' => 'Filter actions', //TODO - Translation
+ 'help' => 'Write one search filter per line.', //TODO - Translation
+ ),
'informations' => 'מידע',
'keep_history' => 'מסםר מינימלי של מאמרים לשמור',
'moved_category_deleted' => 'כאשר הקטגוריה נמחקת ההזנות שבתוכה אוטומטית מקוטלגות תחת %s.',
diff --git a/app/i18n/it/sub.php b/app/i18n/it/sub.php
index ff7fa6f1d..bf279e059 100644
--- a/app/i18n/it/sub.php
+++ b/app/i18n/it/sub.php
@@ -33,6 +33,10 @@ return array(
'description' => 'Descrizione',
'empty' => 'Questo feed non contiene articoli. Per favore verifica il sito direttamente.',
'error' => 'Questo feed ha generato un errore. Per favore verifica se ancora disponibile.',
+ 'filteractions' => array(
+ '_' => 'Filter actions', //TODO - Translation
+ 'help' => 'Write one search filter per line.', //TODO - Translation
+ ),
'informations' => 'Informazioni',
'keep_history' => 'Numero minimo di articoli da mantenere',
'moved_category_deleted' => 'Cancellando una categoria i feed al suo interno verranno classificati automaticamente come %s.',
diff --git a/app/i18n/kr/sub.php b/app/i18n/kr/sub.php
index 9edd85818..151775c1c 100644
--- a/app/i18n/kr/sub.php
+++ b/app/i18n/kr/sub.php
@@ -33,6 +33,10 @@ return array(
'description' => '설명',
'empty' => '이 피드는 비어있습니다. 피드가 계속 운영되고 있는지 확인하세요.',
'error' => '이 피드에 문제가 발생했습니다. 이 피드에 접근 권한이 있는지 확인하세요.',
+ 'filteractions' => array(
+ '_' => 'Filter actions', //TODO - Translation
+ 'help' => 'Write one search filter per line.', //TODO - Translation
+ ),
'informations' => '정보',
'keep_history' => '최소 유지 글 개수',
'moved_category_deleted' => '카테고리를 삭제하면, 해당 카테고리 아래에 있던 피드들은 자동적으로 %s 아래로 분류됩니다.',
diff --git a/app/i18n/nl/sub.php b/app/i18n/nl/sub.php
index 1d6c9f806..8ba9c020d 100644
--- a/app/i18n/nl/sub.php
+++ b/app/i18n/nl/sub.php
@@ -33,6 +33,10 @@ return array(
'description' => 'Omschrijving',
'empty' => 'Deze feed is leeg. Controleer of deze nog actueel is.',
'error' => 'Deze feed heeft problemen. Verifieer a.u.b het doeladres en actualiseer het.',
+ 'filteractions' => array(
+ '_' => 'Filter actions', //TODO - Translation
+ 'help' => 'Write one search filter per line.', //TODO - Translation
+ ),
'informations' => 'Informatie',
'keep_history' => 'Minimum aantal artikelen om te houden',
'moved_category_deleted' => 'Als u een categorie verwijderd, worden de feeds automatisch geclassificeerd onder %s.',
diff --git a/app/i18n/oc/sub.php b/app/i18n/oc/sub.php
index fc5a0cc1f..51ee0d43f 100644
--- a/app/i18n/oc/sub.php
+++ b/app/i18n/oc/sub.php
@@ -32,6 +32,10 @@ return array(
'description' => 'Descripcion',
'empty' => 'Aqueste flux es void. Assegurats-vos qu’es totjorn mantengut.',
'error' => 'Aqueste flux a rescontrat un problèma. Volgatz verificar que siá totjorn accessible puèi actualizatz-lo.',
+ 'filteractions' => array(
+ '_' => 'Filter actions', //TODO - Translation
+ 'help' => 'Write one search filter per line.', //TODO - Translation
+ ),
'informations' => 'Informacions',
'keep_history' => 'Nombre minimum d’articles de servar',
'moved_category_deleted' => 'Quand escafatz una categoria, sos fluxes son automaticament classats dins %s.',
diff --git a/app/i18n/pt-br/sub.php b/app/i18n/pt-br/sub.php
index 58b2fc1f9..fc26e89e7 100644
--- a/app/i18n/pt-br/sub.php
+++ b/app/i18n/pt-br/sub.php
@@ -33,6 +33,10 @@ return array(
'description' => 'Descrição',
'empty' => 'Este feed está vazio. Por favor verifique ele ainda é mantido.',
'error' => 'Este feed encontra-se com problema. Por favor verifique se ele ainda está disponível e atualize-o.',
+ 'filteractions' => array(
+ '_' => 'Filter actions', //TODO - Translation
+ 'help' => 'Write one search filter per line.', //TODO - Translation
+ ),
'informations' => 'Informações',
'keep_history' => 'Número mínimo de artigos para manter',
'moved_category_deleted' => 'Quando você deleta uma categoria, seus feeds são automaticamente classificados como %s.',
diff --git a/app/i18n/ru/sub.php b/app/i18n/ru/sub.php
index 62f8a8e3a..e125d549e 100644
--- a/app/i18n/ru/sub.php
+++ b/app/i18n/ru/sub.php
@@ -33,6 +33,10 @@ return array(
'description' => 'Description', //TODO - Translation
'empty' => 'This feed is empty. Please verify that it is still maintained.', //TODO - Translation
'error' => 'This feed has encountered a problem. Please verify that it is always reachable then actualize it.', //TODO - Translation
+ 'filteractions' => array(
+ '_' => 'Filter actions', //TODO - Translation
+ 'help' => 'Write one search filter per line.', //TODO - Translation
+ ),
'informations' => 'Information', //TODO - Translation
'keep_history' => 'Minimum number of articles to keep', //TODO - Translation
'moved_category_deleted' => 'When you delete a category, its feeds are automatically classified under %s.', //TODO - Translation
diff --git a/app/i18n/tr/sub.php b/app/i18n/tr/sub.php
index 7f29633be..9f4945c0a 100644
--- a/app/i18n/tr/sub.php
+++ b/app/i18n/tr/sub.php
@@ -33,6 +33,10 @@ return array(
'description' => 'Tanım',
'empty' => 'Bu akış boş. Lütfen akışın aktif olduğuna emin olun.',
'error' => 'Bu akışda bir hatayla karşılaşıldı. Lütfen akışın sürekli ulaşılabilir olduğuna emin olun.',
+ 'filteractions' => array(
+ '_' => 'Filter actions', //TODO - Translation
+ 'help' => 'Write one search filter per line.', //TODO - Translation
+ ),
'informations' => 'Bilgi',
'keep_history' => 'En az tutulacak makale sayısı',
'moved_category_deleted' => 'Bir kategoriyi silerseniz, içerisindeki akışlar %s içerisine yerleşir.',
diff --git a/app/i18n/zh-cn/sub.php b/app/i18n/zh-cn/sub.php
index f84d08cdf..90f9fd942 100644
--- a/app/i18n/zh-cn/sub.php
+++ b/app/i18n/zh-cn/sub.php
@@ -33,6 +33,10 @@ return array(
'description' => '描述',
'empty' => '此源为空。请确认它是否正常更新。',
'error' => '此源遇到一些问题。请在确认是否能正常访问后重试。',
+ 'filteractions' => array(
+ '_' => 'Filter actions', //TODO - Translation
+ 'help' => 'Write one search filter per line.', //TODO - Translation
+ ),
'informations' => '信息',
'keep_history' => '至少保存的文章数',
'moved_category_deleted' => '删除分类时,其中的 RSS 源会自动归类到 %s',
diff --git a/app/views/helpers/feed/update.phtml b/app/views/helpers/feed/update.phtml
index bc90ba456..be8034c0d 100644
--- a/app/views/helpers/feed/update.phtml
+++ b/app/views/helpers/feed/update.phtml
@@ -234,6 +234,19 @@
+
+
+