diff options
| author | 2024-12-03 12:59:45 +0100 | |
|---|---|---|
| committer | 2024-12-03 12:59:45 +0100 | |
| commit | 2c7e5b829fb60e2b62771e918b91c1f86aedb2f0 (patch) | |
| tree | c475f95e78e8b7c0e917aea00fa0aae2f3eb26b1 /app | |
| parent | b84cbce9056989f9936240809cbe156c2e6b4759 (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')
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') ?>" |
