aboutsummaryrefslogtreecommitdiff
path: root/app
diff options
context:
space:
mode:
authorGravatar Alexandre Alapetite <alexandre@alapetite.fr> 2024-12-03 12:59:45 +0100
committerGravatar GitHub <noreply@github.com> 2024-12-03 12:59:45 +0100
commit2c7e5b829fb60e2b62771e918b91c1f86aedb2f0 (patch)
treec475f95e78e8b7c0e917aea00fa0aae2f3eb26b1 /app
parentb84cbce9056989f9936240809cbe156c2e6b4759 (diff)
New button to delete errored feeds from a category (#7030)
* New button to delete errored feeds from a category fix https://github.com/FreshRSS/FreshRSS/issues/7025 fix https://github.com/FreshRSS/FreshRSS/issues/7026 * Remove English TODO * in error state * Feeds with errors
Diffstat (limited to 'app')
-rw-r--r--app/Controllers/categoryController.php5
-rw-r--r--app/Models/FeedDAO.php12
-rw-r--r--app/i18n/cs/gen.php2
-rw-r--r--app/i18n/de/gen.php2
-rw-r--r--app/i18n/el/gen.php2
-rw-r--r--app/i18n/el/sub.php2
-rw-r--r--app/i18n/en-us/gen.php2
-rw-r--r--app/i18n/en-us/sub.php2
-rw-r--r--app/i18n/en/gen.php2
-rw-r--r--app/i18n/en/sub.php2
-rw-r--r--app/i18n/es/gen.php2
-rw-r--r--app/i18n/fa/gen.php2
-rw-r--r--app/i18n/fi/gen.php2
-rw-r--r--app/i18n/fr/gen.php2
-rw-r--r--app/i18n/he/gen.php2
-rw-r--r--app/i18n/hu/gen.php2
-rw-r--r--app/i18n/id/gen.php2
-rw-r--r--app/i18n/id/sub.php2
-rw-r--r--app/i18n/it/gen.php2
-rw-r--r--app/i18n/ja/gen.php2
-rw-r--r--app/i18n/ko/gen.php2
-rw-r--r--app/i18n/lv/gen.php2
-rw-r--r--app/i18n/nl/gen.php2
-rw-r--r--app/i18n/oc/gen.php2
-rw-r--r--app/i18n/pl/gen.php2
-rw-r--r--app/i18n/pt-br/gen.php2
-rw-r--r--app/i18n/ru/gen.php2
-rw-r--r--app/i18n/sk/gen.php2
-rw-r--r--app/i18n/tr/gen.php2
-rw-r--r--app/i18n/zh-cn/gen.php2
-rw-r--r--app/i18n/zh-tw/gen.php2
-rw-r--r--app/views/helpers/category/update.phtml8
32 files changed, 74 insertions, 9 deletions
diff --git a/app/Controllers/categoryController.php b/app/Controllers/categoryController.php
index 181c4d811..8b42e372a 100644
--- a/app/Controllers/categoryController.php
+++ b/app/Controllers/categoryController.php
@@ -229,11 +229,12 @@ class FreshRSS_category_Controller extends FreshRSS_ActionController {
}
$muted = Minz_Request::paramTernary('muted');
+ $errored = Minz_Request::paramTernary('errored');
// List feeds to remove then related user queries.
- $feeds = $feedDAO->listByCategory($id, $muted);
+ $feeds = $feedDAO->listByCategory($id, $muted, $errored);
- if ($feedDAO->deleteFeedByCategory($id, $muted)) {
+ if ($feedDAO->deleteFeedByCategory($id, $muted, $errored)) {
// TODO: Delete old favicons
// Remove related queries
diff --git a/app/Models/FeedDAO.php b/app/Models/FeedDAO.php
index bb4209eca..fa52838ca 100644
--- a/app/Models/FeedDAO.php
+++ b/app/Models/FeedDAO.php
@@ -267,12 +267,16 @@ class FreshRSS_FeedDAO extends Minz_ModelPdo {
/**
* @param bool|null $muted to include only muted feeds
+ * @param bool|null $errored to include only errored feeds
*/
- public function deleteFeedByCategory(int $id, ?bool $muted = null): int|false {
+ public function deleteFeedByCategory(int $id, ?bool $muted = null, ?bool $errored = null): int|false {
$sql = 'DELETE FROM `_feed` WHERE category=?';
if ($muted) {
$sql .= ' AND ttl < 0';
}
+ if ($errored) {
+ $sql .= ' AND error <> 0';
+ }
$stm = $this->pdo->prepare($sql);
$values = [$id];
@@ -406,13 +410,17 @@ SQL;
/**
* @param bool|null $muted to include only muted feeds
+ * @param bool|null $errored to include only errored feeds
* @return array<int,FreshRSS_Feed>
*/
- public function listByCategory(int $cat, ?bool $muted = null): array {
+ public function listByCategory(int $cat, ?bool $muted = null, ?bool $errored = null): array {
$sql = 'SELECT * FROM `_feed` WHERE category=:category';
if ($muted) {
$sql .= ' AND ttl < 0';
}
+ if ($errored) {
+ $sql .= ' AND error <> 0';
+ }
$res = $this->fetchAssoc($sql, [':category' => $cat]);
if ($res == null) {
return [];
diff --git a/app/i18n/cs/gen.php b/app/i18n/cs/gen.php
index e573ad26b..b566f5f11 100644
--- a/app/i18n/cs/gen.php
+++ b/app/i18n/cs/gen.php
@@ -18,6 +18,8 @@ return array(
'back_to_rss_feeds' => '← Jít zpět na vaše kanály RSS',
'cancel' => 'Zrušit',
'create' => 'Vytvořit',
+ 'delete_all_feeds' => 'Delete all feeds', // TODO
+ 'delete_errored_feeds' => 'Delete feeds with errors', // TODO
'delete_muted_feeds' => 'Odstranění ztlumených zdrojů',
'demote' => 'Snížit úroveň',
'disable' => 'Zakázat',
diff --git a/app/i18n/de/gen.php b/app/i18n/de/gen.php
index 4be073108..92579601b 100644
--- a/app/i18n/de/gen.php
+++ b/app/i18n/de/gen.php
@@ -18,6 +18,8 @@ return array(
'back_to_rss_feeds' => '← Zurück zu Ihren RSS-Feeds gehen',
'cancel' => 'Abbrechen',
'create' => 'Erstellen',
+ 'delete_all_feeds' => 'Delete all feeds', // TODO
+ 'delete_errored_feeds' => 'Delete feeds with errors', // TODO
'delete_muted_feeds' => 'Lösche stumm gestellte Feeds',
'demote' => 'Zurückstufen',
'disable' => 'Deaktivieren',
diff --git a/app/i18n/el/gen.php b/app/i18n/el/gen.php
index bd33bfd2d..6dddcad38 100644
--- a/app/i18n/el/gen.php
+++ b/app/i18n/el/gen.php
@@ -18,6 +18,8 @@ return array(
'back_to_rss_feeds' => '← Go back to your RSS feeds', // TODO
'cancel' => 'Cancel', // TODO
'create' => 'Create', // TODO
+ 'delete_all_feeds' => 'Delete all feeds', // TODO
+ 'delete_errored_feeds' => 'Delete feeds with errors', // TODO
'delete_muted_feeds' => 'Delete muted feeds', // TODO
'demote' => 'Demote', // TODO
'disable' => 'Disable', // TODO
diff --git a/app/i18n/el/sub.php b/app/i18n/el/sub.php
index 89da23a88..9d277fd07 100644
--- a/app/i18n/el/sub.php
+++ b/app/i18n/el/sub.php
@@ -193,7 +193,7 @@ return array(
),
'method_help' => 'The POST payload has automatic support for <code>application/x-www-form-urlencoded</code> and <code>application/json</code>', // TODO
'method_postparams' => 'Payload for POST', // TODO
- 'moved_category_deleted' => 'When you delete a category, its feeds are automatically classified under <em>%s</em>.', // TODO
+ 'moved_category_deleted' => 'When you remove a category, its feeds are automatically classified under <em>%s</em>.', // TODO
'mute' => array(
'_' => 'mute', // TODO
'state_is_muted' => 'This feed is muted', // TODO
diff --git a/app/i18n/en-us/gen.php b/app/i18n/en-us/gen.php
index eb27424bd..035c6ad73 100644
--- a/app/i18n/en-us/gen.php
+++ b/app/i18n/en-us/gen.php
@@ -18,6 +18,8 @@ return array(
'back_to_rss_feeds' => '← Go back to your RSS feeds', // IGNORE
'cancel' => 'Cancel', // IGNORE
'create' => 'Create', // IGNORE
+ 'delete_all_feeds' => 'Delete all feeds', // IGNORE
+ 'delete_errored_feeds' => 'Delete feeds with errors', // IGNORE
'delete_muted_feeds' => 'Delete muted feeds', // IGNORE
'demote' => 'Demote', // IGNORE
'disable' => 'Disable', // IGNORE
diff --git a/app/i18n/en-us/sub.php b/app/i18n/en-us/sub.php
index 4a579a6cc..da5eea492 100644
--- a/app/i18n/en-us/sub.php
+++ b/app/i18n/en-us/sub.php
@@ -193,7 +193,7 @@ return array(
),
'method_help' => 'The POST payload has automatic support for <code>application/x-www-form-urlencoded</code> and <code>application/json</code>', // IGNORE
'method_postparams' => 'Payload for POST', // IGNORE
- 'moved_category_deleted' => 'When you delete a category, its feeds are automatically classified under <em>%s</em>.', // IGNORE
+ 'moved_category_deleted' => 'When you remove a category, its feeds are automatically classified under <em>%s</em>.', // IGNORE
'mute' => array(
'_' => 'mute', // IGNORE
'state_is_muted' => 'This feed is muted', // IGNORE
diff --git a/app/i18n/en/gen.php b/app/i18n/en/gen.php
index 883a9f439..c564b5280 100644
--- a/app/i18n/en/gen.php
+++ b/app/i18n/en/gen.php
@@ -18,6 +18,8 @@ return array(
'back_to_rss_feeds' => '← Go back to your RSS feeds',
'cancel' => 'Cancel',
'create' => 'Create',
+ 'delete_all_feeds' => 'Delete all feeds',
+ 'delete_errored_feeds' => 'Delete feeds with errors',
'delete_muted_feeds' => 'Delete muted feeds',
'demote' => 'Demote',
'disable' => 'Disable',
diff --git a/app/i18n/en/sub.php b/app/i18n/en/sub.php
index 3b41318e5..ddd720381 100644
--- a/app/i18n/en/sub.php
+++ b/app/i18n/en/sub.php
@@ -193,7 +193,7 @@ return array(
),
'method_help' => 'The POST payload has automatic support for <code>application/x-www-form-urlencoded</code> and <code>application/json</code>',
'method_postparams' => 'Payload for POST',
- 'moved_category_deleted' => 'When you delete a category, its feeds are automatically classified under <em>%s</em>.',
+ 'moved_category_deleted' => 'When you remove a category, its feeds are automatically classified under <em>%s</em>.',
'mute' => array(
'_' => 'mute',
'state_is_muted' => 'This feed is muted',
diff --git a/app/i18n/es/gen.php b/app/i18n/es/gen.php
index 7da8b0c00..936abc1ff 100644
--- a/app/i18n/es/gen.php
+++ b/app/i18n/es/gen.php
@@ -18,6 +18,8 @@ return array(
'back_to_rss_feeds' => '← regresar a tus fuentes RSS',
'cancel' => 'Cancelar',
'create' => 'Crear',
+ 'delete_all_feeds' => 'Delete all feeds', // TODO
+ 'delete_errored_feeds' => 'Delete feeds with errors', // TODO
'delete_muted_feeds' => 'Eliminar fuentes silenciadas',
'demote' => 'Degradar',
'disable' => 'Desactivar',
diff --git a/app/i18n/fa/gen.php b/app/i18n/fa/gen.php
index 104f0f2f4..12f1f809d 100644
--- a/app/i18n/fa/gen.php
+++ b/app/i18n/fa/gen.php
@@ -18,6 +18,8 @@ return array(
'back_to_rss_feeds' => '← به فیدهای RSS خود برگردید',
'cancel' => ' لغو',
'create' => ' ایجاد کنید',
+ 'delete_all_feeds' => 'Delete all feeds', // TODO
+ 'delete_errored_feeds' => 'Delete feeds with errors', // TODO
'delete_muted_feeds' => ' فیدهای خاموش را حذف کنید',
'demote' => ' تنزل دادن',
'disable' => ' غیر فعال کردن',
diff --git a/app/i18n/fi/gen.php b/app/i18n/fi/gen.php
index 001e84e52..c07b9b084 100644
--- a/app/i18n/fi/gen.php
+++ b/app/i18n/fi/gen.php
@@ -18,6 +18,8 @@ return array(
'back_to_rss_feeds' => '← Palaa RSS-syötteisiin',
'cancel' => 'Peruuta',
'create' => 'Luo',
+ 'delete_all_feeds' => 'Delete all feeds', // TODO
+ 'delete_errored_feeds' => 'Delete feeds with errors', // TODO
'delete_muted_feeds' => 'Poista vaimennetut syötteet',
'demote' => 'Laske tärkeyttä',
'disable' => 'Poista käytöstä',
diff --git a/app/i18n/fr/gen.php b/app/i18n/fr/gen.php
index 8cfab2050..feb179b8c 100644
--- a/app/i18n/fr/gen.php
+++ b/app/i18n/fr/gen.php
@@ -18,6 +18,8 @@ return array(
'back_to_rss_feeds' => '← Retour à vos flux RSS',
'cancel' => 'Annuler',
'create' => 'Créer',
+ 'delete_all_feeds' => 'Supprimer tous les flux',
+ 'delete_errored_feeds' => 'Supprimer les flux en erreur',
'delete_muted_feeds' => 'Supprimer les flux désactivés',
'demote' => 'Rétrograder',
'disable' => 'Désactiver',
diff --git a/app/i18n/he/gen.php b/app/i18n/he/gen.php
index f2513ef6d..b86817389 100644
--- a/app/i18n/he/gen.php
+++ b/app/i18n/he/gen.php
@@ -18,6 +18,8 @@ return array(
'back_to_rss_feeds' => '← חזרה להזנות הRSS שלך',
'cancel' => 'ביטול',
'create' => 'יצירה',
+ 'delete_all_feeds' => 'Delete all feeds', // TODO
+ 'delete_errored_feeds' => 'Delete feeds with errors', // TODO
'delete_muted_feeds' => 'Delete muted feeds', // TODO
'demote' => 'Demote', // TODO
'disable' => 'Disable', // TODO
diff --git a/app/i18n/hu/gen.php b/app/i18n/hu/gen.php
index 08bc88e37..beca2be85 100644
--- a/app/i18n/hu/gen.php
+++ b/app/i18n/hu/gen.php
@@ -18,6 +18,8 @@ return array(
'back_to_rss_feeds' => '← Vissza az RSS hírforrásokhoz',
'cancel' => 'Mégsem',
'create' => 'Létrehoz',
+ 'delete_all_feeds' => 'Delete all feeds', // TODO
+ 'delete_errored_feeds' => 'Delete feeds with errors', // TODO
'delete_muted_feeds' => 'Némított hírforrások törlése',
'demote' => 'Lefokoz',
'disable' => 'Kikapcsol',
diff --git a/app/i18n/id/gen.php b/app/i18n/id/gen.php
index 5b8d4f75e..33865da04 100644
--- a/app/i18n/id/gen.php
+++ b/app/i18n/id/gen.php
@@ -18,6 +18,8 @@ return array(
'back_to_rss_feeds' => '← Go back to your RSS feeds', // TODO
'cancel' => 'Cancel', // TODO
'create' => 'Create', // TODO
+ 'delete_all_feeds' => 'Delete all feeds', // TODO
+ 'delete_errored_feeds' => 'Delete feeds with errors', // TODO
'delete_muted_feeds' => 'Delete muted feeds', // TODO
'demote' => 'Demote', // TODO
'disable' => 'Disable', // TODO
diff --git a/app/i18n/id/sub.php b/app/i18n/id/sub.php
index de1b171c7..023978fc7 100644
--- a/app/i18n/id/sub.php
+++ b/app/i18n/id/sub.php
@@ -193,7 +193,7 @@ return array(
),
'method_help' => 'The POST payload has automatic support for <code>application/x-www-form-urlencoded</code> and <code>application/json</code>', // TODO
'method_postparams' => 'Payload for POST', // TODO
- 'moved_category_deleted' => 'When you delete a category, its feeds are automatically classified under <em>%s</em>.', // TODO
+ 'moved_category_deleted' => 'When you remove a category, its feeds are automatically classified under <em>%s</em>.', // TODO
'mute' => array(
'_' => 'mute', // TODO
'state_is_muted' => 'This feed is muted', // TODO
diff --git a/app/i18n/it/gen.php b/app/i18n/it/gen.php
index eb22cc2be..d00abd9b1 100644
--- a/app/i18n/it/gen.php
+++ b/app/i18n/it/gen.php
@@ -18,6 +18,8 @@ return array(
'back_to_rss_feeds' => '← Indietro',
'cancel' => 'Annulla',
'create' => 'Crea',
+ 'delete_all_feeds' => 'Delete all feeds', // TODO
+ 'delete_errored_feeds' => 'Delete feeds with errors', // TODO
'delete_muted_feeds' => 'Cancella i feed mutati',
'demote' => 'Retrocedi',
'disable' => 'Disabilita',
diff --git a/app/i18n/ja/gen.php b/app/i18n/ja/gen.php
index 417c620ca..62a83e028 100644
--- a/app/i18n/ja/gen.php
+++ b/app/i18n/ja/gen.php
@@ -18,6 +18,8 @@ return array(
'back_to_rss_feeds' => '← RSSフィードに戻る',
'cancel' => 'キャンセル',
'create' => '作成',
+ 'delete_all_feeds' => 'Delete all feeds', // TODO
+ 'delete_errored_feeds' => 'Delete feeds with errors', // TODO
'delete_muted_feeds' => 'ミュートにしているフィードを削除する',
'demote' => '寄付',
'disable' => '無効',
diff --git a/app/i18n/ko/gen.php b/app/i18n/ko/gen.php
index 6251de616..c912c7bf2 100644
--- a/app/i18n/ko/gen.php
+++ b/app/i18n/ko/gen.php
@@ -18,6 +18,8 @@ return array(
'back_to_rss_feeds' => '← RSS 피드로 돌아가기',
'cancel' => '취소',
'create' => '생성',
+ 'delete_all_feeds' => 'Delete all feeds', // TODO
+ 'delete_errored_feeds' => 'Delete feeds with errors', // TODO
'delete_muted_feeds' => '음소거된 피드 삭제',
'demote' => '목록 수준 내리기',
'disable' => '비활성화',
diff --git a/app/i18n/lv/gen.php b/app/i18n/lv/gen.php
index a10e98269..912fca308 100644
--- a/app/i18n/lv/gen.php
+++ b/app/i18n/lv/gen.php
@@ -18,6 +18,8 @@ return array(
'back_to_rss_feeds' => '← Atgriezieties pie RSS barotnēm',
'cancel' => 'Atcelt',
'create' => 'Uztaisīt',
+ 'delete_all_feeds' => 'Delete all feeds', // TODO
+ 'delete_errored_feeds' => 'Delete feeds with errors', // TODO
'delete_muted_feeds' => 'Izdzēst izslēgtās barotnes',
'demote' => 'Pazemināt amatu',
'disable' => 'Izslēgt',
diff --git a/app/i18n/nl/gen.php b/app/i18n/nl/gen.php
index 791800109..af8a836dc 100644
--- a/app/i18n/nl/gen.php
+++ b/app/i18n/nl/gen.php
@@ -18,6 +18,8 @@ return array(
'back_to_rss_feeds' => '← Ga terug naar je RSS feeds',
'cancel' => 'Annuleren',
'create' => 'Opslaan',
+ 'delete_all_feeds' => 'Delete all feeds', // TODO
+ 'delete_errored_feeds' => 'Delete feeds with errors', // TODO
'delete_muted_feeds' => 'Gedempte feeds verwijderen',
'demote' => 'Degraderen',
'disable' => 'Uitzetten',
diff --git a/app/i18n/oc/gen.php b/app/i18n/oc/gen.php
index 2cb17d8ee..c47f1070e 100644
--- a/app/i18n/oc/gen.php
+++ b/app/i18n/oc/gen.php
@@ -18,6 +18,8 @@ return array(
'back_to_rss_feeds' => '← Tornar a vòstres fluxes RSS',
'cancel' => 'Anullar',
'create' => 'Crear',
+ 'delete_all_feeds' => 'Delete all feeds', // TODO
+ 'delete_errored_feeds' => 'Delete feeds with errors', // TODO
'delete_muted_feeds' => 'Suprimir los flux muts',
'demote' => 'Retrogradar',
'disable' => 'Desactivar',
diff --git a/app/i18n/pl/gen.php b/app/i18n/pl/gen.php
index 690f2eceb..3034e57e1 100644
--- a/app/i18n/pl/gen.php
+++ b/app/i18n/pl/gen.php
@@ -18,6 +18,8 @@ return array(
'back_to_rss_feeds' => '← Wróć do subskrybowanych kanałów RSS',
'cancel' => 'Anuluj',
'create' => 'Stwórz',
+ 'delete_all_feeds' => 'Delete all feeds', // TODO
+ 'delete_errored_feeds' => 'Delete feeds with errors', // TODO
'delete_muted_feeds' => 'Usuń wyciszone kanały',
'demote' => 'Zdegraduj',
'disable' => 'Wyłącz',
diff --git a/app/i18n/pt-br/gen.php b/app/i18n/pt-br/gen.php
index 0e2ea1d57..0009f7328 100644
--- a/app/i18n/pt-br/gen.php
+++ b/app/i18n/pt-br/gen.php
@@ -18,6 +18,8 @@ return array(
'back_to_rss_feeds' => '← Volte para o seu feeds RSS',
'cancel' => 'Cancelar',
'create' => 'Criar',
+ 'delete_all_feeds' => 'Delete all feeds', // TODO
+ 'delete_errored_feeds' => 'Delete feeds with errors', // TODO
'delete_muted_feeds' => 'Excluir feeds silenciados',
'demote' => 'Despromover',
'disable' => 'Desabilitar',
diff --git a/app/i18n/ru/gen.php b/app/i18n/ru/gen.php
index 1adcf571c..89b727767 100644
--- a/app/i18n/ru/gen.php
+++ b/app/i18n/ru/gen.php
@@ -18,6 +18,8 @@ return array(
'back_to_rss_feeds' => '← Вернуться к вашим RSS-лентам',
'cancel' => 'Отменить',
'create' => 'Создать',
+ 'delete_all_feeds' => 'Delete all feeds', // TODO
+ 'delete_errored_feeds' => 'Delete feeds with errors', // TODO
'delete_muted_feeds' => 'Удалить заглушенные ленты',
'demote' => 'Понизить',
'disable' => 'Отключить',
diff --git a/app/i18n/sk/gen.php b/app/i18n/sk/gen.php
index 512cfd4fb..1143ab7b5 100644
--- a/app/i18n/sk/gen.php
+++ b/app/i18n/sk/gen.php
@@ -18,6 +18,8 @@ return array(
'back_to_rss_feeds' => '← Späť na vaše RSS kanály',
'cancel' => 'Zrušiť',
'create' => 'Vytvoriť',
+ 'delete_all_feeds' => 'Delete all feeds', // TODO
+ 'delete_errored_feeds' => 'Delete feeds with errors', // TODO
'delete_muted_feeds' => 'Vymazať stíšené kanály',
'demote' => 'Degradovať',
'disable' => 'Zakázať',
diff --git a/app/i18n/tr/gen.php b/app/i18n/tr/gen.php
index 577913256..13df9d12a 100644
--- a/app/i18n/tr/gen.php
+++ b/app/i18n/tr/gen.php
@@ -18,6 +18,8 @@ return array(
'back_to_rss_feeds' => '← RSS akışlarınız için geri gidin',
'cancel' => 'İptal',
'create' => 'Oluştur',
+ 'delete_all_feeds' => 'Delete all feeds', // TODO
+ 'delete_errored_feeds' => 'Delete feeds with errors', // TODO
'delete_muted_feeds' => 'Sessize alınmış akışları sil',
'demote' => 'Yöneticilikten al',
'disable' => 'Pasif',
diff --git a/app/i18n/zh-cn/gen.php b/app/i18n/zh-cn/gen.php
index af3e65720..8a3ec6376 100644
--- a/app/i18n/zh-cn/gen.php
+++ b/app/i18n/zh-cn/gen.php
@@ -18,6 +18,8 @@ return array(
'back_to_rss_feeds' => '← 返回订阅源',
'cancel' => '取消',
'create' => '创建',
+ 'delete_all_feeds' => 'Delete all feeds', // TODO
+ 'delete_errored_feeds' => 'Delete feeds with errors', // TODO
'delete_muted_feeds' => '删除已暂停的订阅源',
'demote' => '撤销管理员',
'disable' => '禁用',
diff --git a/app/i18n/zh-tw/gen.php b/app/i18n/zh-tw/gen.php
index 4ea4c0715..c40987138 100644
--- a/app/i18n/zh-tw/gen.php
+++ b/app/i18n/zh-tw/gen.php
@@ -18,6 +18,8 @@ return array(
'back_to_rss_feeds' => '← 返回訂閱源',
'cancel' => '取消',
'create' => '創建',
+ 'delete_all_feeds' => 'Delete all feeds', // TODO
+ 'delete_errored_feeds' => 'Delete feeds with errors', // TODO
'delete_muted_feeds' => '刪除已暫停的訂閱源',
'demote' => '撤銷管理員',
'disable' => '禁用',
diff --git a/app/views/helpers/category/update.phtml b/app/views/helpers/category/update.phtml
index 64f795d74..8d97a6eec 100644
--- a/app/views/helpers/category/update.phtml
+++ b/app/views/helpers/category/update.phtml
@@ -251,8 +251,14 @@
<div class="group-controls">
<button type="submit" class="btn btn-attention confirm"
data-str-confirm="<?= _t('gen.js.confirm_action_feed_cat') ?>"
+ formaction="<?= _url('category', 'empty', 'id', $this->category->id(), 'errored', 1) ?>"
+ formmethod="post"><?= _t('gen.action.delete_errored_feeds') ?></button>
+
+ <button type="submit" class="btn btn-attention confirm"
+ data-str-confirm="<?= _t('gen.js.confirm_action_feed_cat') ?>"
formaction="<?= _url('category', 'empty', 'id', $this->category->id()) ?>"
- formmethod="post"><?= _t('gen.action.empty') ?></button>
+ formmethod="post"><?= _t('gen.action.delete_all_feeds') ?></button>
+
<?php if (!$this->category->isDefault()): ?>
<button type="submit" class="btn btn-attention confirm"
data-str-confirm="<?= _t('gen.js.confirm_action_feed_cat') ?>"