aboutsummaryrefslogtreecommitdiff
path: root/app
diff options
context:
space:
mode:
authorGravatar Alexandre Alapetite <alexandre@alapetite.fr> 2024-12-27 12:03:59 +0100
committerGravatar GitHub <noreply@github.com> 2024-12-27 12:03:59 +0100
commit897e4a3f4a273d50c28157edb67612b2d7fa2e6f (patch)
tree5ea452b4edb58e272522a2932f42128d581ce1d9 /app
parent1d10b3697d5fa04415d36059d5e04ad71aae0b78 (diff)
Search in all feeds (#7144)
* Search in all feeds Search in PRIORITY_ARCHIVED with `&get=A` fix https://github.com/FreshRSS/FreshRSS/discussions/7143 * Fix type * Search in PRIORITY_ARCHIVED with `&get=Z` * More * Fixes * One more fix * Extra features in user queries * Move i18n key * Fix overview * Enlarge query boxes * Revert i18n spelling * i18n: it Thanks @UserRoot-Luca Co-authored-by: UserRoot-Luca <55756898+UserRoot-Luca@users.noreply.github.com> --------- Co-authored-by: UserRoot-Luca <55756898+UserRoot-Luca@users.noreply.github.com>
Diffstat (limited to 'app')
-rw-r--r--app/Controllers/entryController.php8
-rw-r--r--app/Controllers/indexController.php4
-rw-r--r--app/Models/Context.php36
-rw-r--r--app/Models/EntryDAO.php19
-rw-r--r--app/Models/UserQuery.php10
-rw-r--r--app/i18n/cs/conf.php2
-rw-r--r--app/i18n/de/conf.php2
-rw-r--r--app/i18n/el/conf.php2
-rw-r--r--app/i18n/el/sub.php2
-rw-r--r--app/i18n/en-us/conf.php2
-rw-r--r--app/i18n/en-us/sub.php2
-rw-r--r--app/i18n/en/conf.php2
-rw-r--r--app/i18n/en/sub.php2
-rw-r--r--app/i18n/es/conf.php2
-rw-r--r--app/i18n/fa/conf.php2
-rw-r--r--app/i18n/fi/conf.php2
-rw-r--r--app/i18n/fr/conf.php2
-rw-r--r--app/i18n/he/conf.php2
-rw-r--r--app/i18n/he/sub.php2
-rw-r--r--app/i18n/hu/conf.php2
-rw-r--r--app/i18n/id/conf.php2
-rw-r--r--app/i18n/id/sub.php2
-rw-r--r--app/i18n/it/conf.php2
-rw-r--r--app/i18n/ja/conf.php2
-rw-r--r--app/i18n/ko/conf.php2
-rw-r--r--app/i18n/lv/conf.php2
-rw-r--r--app/i18n/nl/conf.php2
-rw-r--r--app/i18n/oc/conf.php2
-rw-r--r--app/i18n/pl/conf.php2
-rw-r--r--app/i18n/pt-br/conf.php2
-rw-r--r--app/i18n/ru/conf.php2
-rw-r--r--app/i18n/sk/conf.php2
-rw-r--r--app/i18n/tr/conf.php2
-rw-r--r--app/i18n/zh-cn/conf.php2
-rw-r--r--app/i18n/zh-tw/conf.php2
-rw-r--r--app/layout/aside_feed.phtml2
-rw-r--r--app/layout/layout.phtml2
-rw-r--r--app/views/helpers/configure/query.phtml2
38 files changed, 120 insertions, 23 deletions
diff --git a/app/Controllers/entryController.php b/app/Controllers/entryController.php
index 2cbd256bc..5637bd101 100644
--- a/app/Controllers/entryController.php
+++ b/app/Controllers/entryController.php
@@ -96,6 +96,14 @@ class FreshRSS_entry_Controller extends FreshRSS_ActionController {
$entryDAO->markReadEntries($id_max, false, FreshRSS_Feed::PRIORITY_MAIN_STREAM, FreshRSS_Feed::PRIORITY_IMPORTANT,
FreshRSS_Context::$search, FreshRSS_Context::$state, $is_read);
break;
+ case 'A':
+ $entryDAO->markReadEntries($id_max, false, FreshRSS_Feed::PRIORITY_CATEGORY, FreshRSS_Feed::PRIORITY_IMPORTANT,
+ FreshRSS_Context::$search, FreshRSS_Context::$state, $is_read);
+ break;
+ case 'Z':
+ $entryDAO->markReadEntries($id_max, false, FreshRSS_Feed::PRIORITY_ARCHIVED, FreshRSS_Feed::PRIORITY_IMPORTANT,
+ FreshRSS_Context::$search, FreshRSS_Context::$state, $is_read);
+ break;
case 'i':
$entryDAO->markReadEntries($id_max, false, FreshRSS_Feed::PRIORITY_IMPORTANT, null,
FreshRSS_Context::$search, FreshRSS_Context::$state, $is_read);
diff --git a/app/Controllers/indexController.php b/app/Controllers/indexController.php
index a977386a3..70bb25a77 100644
--- a/app/Controllers/indexController.php
+++ b/app/Controllers/indexController.php
@@ -205,7 +205,9 @@ class FreshRSS_index_Controller extends FreshRSS_ActionController {
$this->view->excludeMutedFeeds = $type !== 'f'; // Exclude muted feeds except when we focus on a feed
switch ($type) {
- case 'a':
+ case 'a': // All PRIORITY_MAIN_STREAM
+ case 'A': // All except PRIORITY_ARCHIVED
+ case 'Z': // All including PRIORITY_ARCHIVED
$this->view->categories = FreshRSS_Context::categories();
break;
case 'c':
diff --git a/app/Models/Context.php b/app/Models/Context.php
index eeb16f414..6cdda909c 100644
--- a/app/Models/Context.php
+++ b/app/Models/Context.php
@@ -20,7 +20,7 @@ final class FreshRSS_Context {
public static int $total_unread = 0;
public static int $total_important_unread = 0;
- /** @var array{'all':int,'read':int,'unread':int} */
+ /** @var array{all:int,read:int,unread:int} */
public static array $total_starred = [
'all' => 0,
'read' => 0,
@@ -29,15 +29,17 @@ final class FreshRSS_Context {
public static int $get_unread = 0;
- /** @var array{'all':bool,'starred':bool,'important':bool,'feed':int|false,'category':int|false,'tag':int|false,'tags':bool} */
+ /** @var array{all:bool,A:bool,starred:bool,important:bool,feed:int|false,category:int|false,tag:int|false,tags:bool,Z:bool} */
public static array $current_get = [
'all' => false,
+ 'A' => false,
'starred' => false,
'important' => false,
'feed' => false,
'category' => false,
'tag' => false,
'tags' => false,
+ 'Z' => false,
];
public static string $next_get = 'a';
@@ -271,12 +273,14 @@ final class FreshRSS_Context {
* Return the current get as a string or an array.
*
* If $array is true, the first item of the returned value is 'f' or 'c' or 't' and the second is the id.
- * @phpstan-return ($asArray is true ? array{'a'|'c'|'f'|'i'|'s'|'t'|'T',bool|int} : string)
+ * @phpstan-return ($asArray is true ? array{'a'|'A'|'c'|'f'|'i'|'s'|'t'|'T'|'Z',bool|int} : string)
* @return string|array{string,bool|int}
*/
public static function currentGet(bool $asArray = false): string|array {
if (self::$current_get['all']) {
return $asArray ? ['a', true] : 'a';
+ } elseif (self::$current_get['A']) {
+ return $asArray ? ['A', true] : 'A';
} elseif (self::$current_get['important']) {
return $asArray ? ['i', true] : 'i';
} elseif (self::$current_get['starred']) {
@@ -301,6 +305,8 @@ final class FreshRSS_Context {
}
} elseif (self::$current_get['tags']) {
return $asArray ? ['T', true] : 'T';
+ } elseif (self::$current_get['Z']) {
+ return $asArray ? ['Z', true] : 'Z';
}
return '';
}
@@ -312,6 +318,14 @@ final class FreshRSS_Context {
return self::$current_get['all'] != false;
}
+ public static function isAllAndCategories(): bool {
+ return self::$current_get['A'] != false;
+ }
+
+ public static function isAllAndArchived(): bool {
+ return self::$current_get['Z'] != false;
+ }
+
/**
* @return bool true if the current request targets important feeds, false otherwise.
*/
@@ -349,12 +363,14 @@ final class FreshRSS_Context {
return match ($type) {
'a' => self::$current_get['all'],
+ 'A' => self::$current_get['A'],
'i' => self::$current_get['important'],
's' => self::$current_get['starred'],
'f' => self::$current_get['feed'] == $id,
'c' => self::$current_get['category'] == $id,
't' => self::$current_get['tag'] == $id,
'T' => self::$current_get['tags'] || self::$current_get['tag'],
+ 'Z' => self::$current_get['Z'],
default => false,
};
}
@@ -386,13 +402,23 @@ final class FreshRSS_Context {
}
switch ($type) {
- case 'a':
+ case 'a': // All PRIORITY_MAIN_STREAM
self::$current_get['all'] = true;
+ self::$description = FreshRSS_Context::systemConf()->meta_description;
+ self::$get_unread = self::$total_unread;
+ break;
+ case 'A': // All except PRIORITY_ARCHIVED
+ self::$current_get['A'] = true;
+ self::$description = FreshRSS_Context::systemConf()->meta_description;
+ self::$get_unread = self::$total_unread;
+ break;
+ case 'Z': // All including PRIORITY_ARCHIVED
+ self::$current_get['Z'] = true;
self::$name = _t('index.feed.title');
self::$description = FreshRSS_Context::systemConf()->meta_description;
self::$get_unread = self::$total_unread;
break;
- case 'i':
+ case 'i': // Priority important feeds
self::$current_get['important'] = true;
self::$name = _t('index.menu.important');
self::$description = FreshRSS_Context::systemConf()->meta_description;
diff --git a/app/Models/EntryDAO.php b/app/Models/EntryDAO.php
index f9bf57220..525687c90 100644
--- a/app/Models/EntryDAO.php
+++ b/app/Models/EntryDAO.php
@@ -1170,7 +1170,7 @@ SQL;
}
/**
- * @phpstan-param 'a'|'A'|'i'|'s'|'S'|'c'|'f'|'t'|'T'|'ST' $type
+ * @phpstan-param 'a'|'A'|'i'|'s'|'S'|'c'|'f'|'t'|'T'|'ST'|'Z' $type
* @param int $id category/feed/tag ID
* @param 'ASC'|'DESC' $order
* @return array{0:array<int|string>,1:string}
@@ -1185,13 +1185,16 @@ SQL;
$where = '';
$values = [];
switch ($type) {
- case 'a': //All PRIORITY_MAIN_STREAM
+ case 'a': // All PRIORITY_MAIN_STREAM
$where .= 'f.priority >= ' . FreshRSS_Feed::PRIORITY_MAIN_STREAM . ' ';
break;
- case 'A': //All except PRIORITY_ARCHIVED
- $where .= 'f.priority > ' . FreshRSS_Feed::PRIORITY_ARCHIVED . ' ';
+ case 'A': // All except PRIORITY_ARCHIVED
+ $where .= 'f.priority >= ' . FreshRSS_Feed::PRIORITY_CATEGORY . ' ';
+ break;
+ case 'Z': // All including PRIORITY_ARCHIVED
+ $where .= 'f.priority >= ' . FreshRSS_Feed::PRIORITY_ARCHIVED . ' ';
break;
- case 'i': //Priority important feeds
+ case 'i': // Priority important feeds
$where .= 'f.priority >= ' . FreshRSS_Feed::PRIORITY_IMPORTANT . ' ';
break;
case 's': //Starred. Deprecated: use $state instead
@@ -1240,7 +1243,7 @@ SQL;
}
/**
- * @phpstan-param 'a'|'A'|'s'|'S'|'i'|'c'|'f'|'t'|'T'|'ST' $type
+ * @phpstan-param 'a'|'A'|'s'|'S'|'i'|'c'|'f'|'t'|'T'|'ST'|'Z' $type
* @param 'ASC'|'DESC' $order
* @param int $id category/feed/tag ID
* @throws FreshRSS_EntriesGetter_Exception
@@ -1275,7 +1278,7 @@ SQL;
}
/**
- * @phpstan-param 'a'|'A'|'s'|'S'|'i'|'c'|'f'|'t'|'T'|'ST' $type
+ * @phpstan-param 'a'|'A'|'s'|'S'|'i'|'c'|'f'|'t'|'T'|'ST'|'Z' $type
* @param int $id category/feed/tag ID
* @param 'ASC'|'DESC' $order
* @return Traversable<FreshRSS_Entry>
@@ -1341,7 +1344,7 @@ SQL;
}
/**
- * @phpstan-param 'a'|'A'|'s'|'S'|'c'|'f'|'t'|'T'|'ST' $type
+ * @phpstan-param 'a'|'A'|'s'|'S'|'c'|'f'|'t'|'T'|'ST'|'Z' $type
* @param int $id category/feed/tag ID
* @param 'ASC'|'DESC' $order
* @return array<numeric-string>|null
diff --git a/app/Models/UserQuery.php b/app/Models/UserQuery.php
index d3a56bb6a..6933deb1f 100644
--- a/app/Models/UserQuery.php
+++ b/app/Models/UserQuery.php
@@ -126,12 +126,18 @@ class FreshRSS_UserQuery {
$this->get = $get;
if ($this->get === '') {
$this->get_type = 'all';
- } elseif (preg_match('/(?P<type>[acfistT])(_(?P<id>\d+))?/', $get, $matches)) {
+ } elseif (preg_match('/(?P<type>[aAcfistTZ])(_(?P<id>\d+))?/', $get, $matches)) {
$id = intval($matches['id'] ?? '0');
switch ($matches['type']) {
- case 'a':
+ case 'a': // All PRIORITY_MAIN_STREAM
$this->get_type = 'all';
break;
+ case 'A': // All except PRIORITY_ARCHIVED
+ $this->get_type = 'A';
+ break;
+ case 'Z': // All including PRIORITY_ARCHIVED
+ $this->get_type = 'Z';
+ break;
case 'c':
$this->get_type = 'category';
$c = $this->categories[$id] ?? null;
diff --git a/app/i18n/cs/conf.php b/app/i18n/cs/conf.php
index ea87356bd..b4cef925b 100644
--- a/app/i18n/cs/conf.php
+++ b/app/i18n/cs/conf.php
@@ -138,6 +138,8 @@ return array(
'tags' => 'Zobrazit podle štítku',
'type' => 'Typ',
),
+ 'get_A' => 'Show all feeds, also those shown in their category', // TODO
+ 'get_Z' => 'Show all feeds, also archived ones', // TODO
'get_all' => 'Zobrazit všechny články',
'get_all_labels' => 'Zobrazit články s libovolným štítkem',
'get_category' => 'Zobrazit kategorii „%s“',
diff --git a/app/i18n/de/conf.php b/app/i18n/de/conf.php
index 71ed1438e..22d2a3938 100644
--- a/app/i18n/de/conf.php
+++ b/app/i18n/de/conf.php
@@ -138,6 +138,8 @@ return array(
'tags' => 'Nach Labels filtern',
'type' => 'Filter-Typ',
),
+ 'get_A' => 'Show all feeds, also those shown in their category', // TODO
+ 'get_Z' => 'Show all feeds, also archived ones', // TODO
'get_all' => 'Alle Artikel anzeigen',
'get_all_labels' => 'Alle Artikle mit beliebigem Label anzeigen',
'get_category' => 'Kategorie „%s“ anzeigen',
diff --git a/app/i18n/el/conf.php b/app/i18n/el/conf.php
index dfd8e92f4..86477370e 100644
--- a/app/i18n/el/conf.php
+++ b/app/i18n/el/conf.php
@@ -138,6 +138,8 @@ return array(
'tags' => 'Display by label', // TODO
'type' => 'Type', // TODO
),
+ 'get_A' => 'Show all feeds, also those shown in their category', // TODO
+ 'get_Z' => 'Show all feeds, also archived ones', // TODO
'get_all' => 'Display all articles', // TODO
'get_all_labels' => 'Display articles with any label', // TODO
'get_category' => 'Display “%s” category', // TODO
diff --git a/app/i18n/el/sub.php b/app/i18n/el/sub.php
index 42d2607eb..79e64bbb5 100644
--- a/app/i18n/el/sub.php
+++ b/app/i18n/el/sub.php
@@ -217,7 +217,7 @@ return array(
'show_rendered' => 'Show content', // TODO
),
'show' => array(
- 'all' => 'Show all feeds', // TODO
+ 'all' => 'All feeds', // TODO
'error' => 'Show only feeds with errors', // TODO
),
'showing' => array(
diff --git a/app/i18n/en-us/conf.php b/app/i18n/en-us/conf.php
index 6527a2ed6..0288bc0d9 100644
--- a/app/i18n/en-us/conf.php
+++ b/app/i18n/en-us/conf.php
@@ -138,6 +138,8 @@ return array(
'tags' => 'Display by label', // IGNORE
'type' => 'Type', // IGNORE
),
+ 'get_A' => 'Show all feeds, also those shown in their category', // IGNORE
+ 'get_Z' => 'Show all feeds, also archived ones', // IGNORE
'get_all' => 'Display all articles', // IGNORE
'get_all_labels' => 'Display articles with any label', // IGNORE
'get_category' => 'Display “%s” category', // IGNORE
diff --git a/app/i18n/en-us/sub.php b/app/i18n/en-us/sub.php
index c885e5861..a6afee939 100644
--- a/app/i18n/en-us/sub.php
+++ b/app/i18n/en-us/sub.php
@@ -217,7 +217,7 @@ return array(
'show_rendered' => 'Show content', // IGNORE
),
'show' => array(
- 'all' => 'Show all feeds', // IGNORE
+ 'all' => 'All feeds', // IGNORE
'error' => 'Show only feeds with errors', // IGNORE
),
'showing' => array(
diff --git a/app/i18n/en/conf.php b/app/i18n/en/conf.php
index b0114f7d4..da0230a30 100644
--- a/app/i18n/en/conf.php
+++ b/app/i18n/en/conf.php
@@ -138,6 +138,8 @@ return array(
'tags' => 'Display by label',
'type' => 'Type',
),
+ 'get_A' => 'Show all feeds, also those shown in their category', // TODO
+ 'get_Z' => 'Show all feeds, also archived ones', // TODO
'get_all' => 'Display all articles',
'get_all_labels' => 'Display articles with any label',
'get_category' => 'Display “%s” category',
diff --git a/app/i18n/en/sub.php b/app/i18n/en/sub.php
index 640e5bfda..c6e2c24d9 100644
--- a/app/i18n/en/sub.php
+++ b/app/i18n/en/sub.php
@@ -217,7 +217,7 @@ return array(
'show_rendered' => 'Show content',
),
'show' => array(
- 'all' => 'Show all feeds',
+ 'all' => 'All feeds',
'error' => 'Show only feeds with errors',
),
'showing' => array(
diff --git a/app/i18n/es/conf.php b/app/i18n/es/conf.php
index 40d982557..610c7333c 100644
--- a/app/i18n/es/conf.php
+++ b/app/i18n/es/conf.php
@@ -138,6 +138,8 @@ return array(
'tags' => 'Mostrar por etiqueta',
'type' => 'Tipo',
),
+ 'get_A' => 'Show all feeds, also those shown in their category', // TODO
+ 'get_Z' => 'Show all feeds, also archived ones', // TODO
'get_all' => 'Mostrar todos los artículos',
'get_all_labels' => 'Mostrar artículos con cualquier etiqueta',
'get_category' => 'Mostrar la categoría “%s”',
diff --git a/app/i18n/fa/conf.php b/app/i18n/fa/conf.php
index afae6e3df..9a1890c0a 100644
--- a/app/i18n/fa/conf.php
+++ b/app/i18n/fa/conf.php
@@ -138,6 +138,8 @@ return array(
'tags' => ' نمایش بر اساس برچسب',
'type' => ' نوع',
),
+ 'get_A' => 'Show all feeds, also those shown in their category', // TODO
+ 'get_Z' => 'Show all feeds, also archived ones', // TODO
'get_all' => ' نمایش همه مقالات',
'get_all_labels' => 'Display articles with any label', // TODO
'get_category' => ' دسته «%s» را نمایش دهید',
diff --git a/app/i18n/fi/conf.php b/app/i18n/fi/conf.php
index 441526f1a..3a9a12b88 100644
--- a/app/i18n/fi/conf.php
+++ b/app/i18n/fi/conf.php
@@ -138,6 +138,8 @@ return array(
'tags' => 'Näytä merkinnän mukaan',
'type' => 'Laji',
),
+ 'get_A' => 'Show all feeds, also those shown in their category', // TODO
+ 'get_Z' => 'Show all feeds, also archived ones', // TODO
'get_all' => 'Näytä kaikki artikkelit',
'get_all_labels' => 'Näytä artikkelit, joissa on mikä tahansa merkintä',
'get_category' => 'Näytä luokka “%s”',
diff --git a/app/i18n/fr/conf.php b/app/i18n/fr/conf.php
index 79e31dd23..bbf7fd6d1 100644
--- a/app/i18n/fr/conf.php
+++ b/app/i18n/fr/conf.php
@@ -138,6 +138,8 @@ return array(
'tags' => 'Afficher par étiquette',
'type' => 'Type', // IGNORE
),
+ 'get_A' => 'Tous les flux, y compris ceux limités à leur catégorie',
+ 'get_Z' => 'Tous les flux, y compris les archivés',
'get_all' => 'Afficher tous les articles',
'get_all_labels' => 'Afficher les articles avec une étiquette',
'get_category' => 'Afficher la catégorie <em>%s<em>',
diff --git a/app/i18n/he/conf.php b/app/i18n/he/conf.php
index bd63c2d01..704459b97 100644
--- a/app/i18n/he/conf.php
+++ b/app/i18n/he/conf.php
@@ -138,6 +138,8 @@ return array(
'tags' => 'Display by label', // TODO
'type' => 'Type', // TODO
),
+ 'get_A' => 'Show all feeds, also those shown in their category', // TODO
+ 'get_Z' => 'Show all feeds, also archived ones', // TODO
'get_all' => 'הצגת כל המאמרים',
'get_all_labels' => 'Display articles with any label', // TODO
'get_category' => 'הצגת קטגוריה “%s”',
diff --git a/app/i18n/he/sub.php b/app/i18n/he/sub.php
index 049d63729..64d5f5bbe 100644
--- a/app/i18n/he/sub.php
+++ b/app/i18n/he/sub.php
@@ -217,7 +217,7 @@ return array(
'show_rendered' => 'Show content', // TODO
),
'show' => array(
- 'all' => 'Show all feeds', // TODO
+ 'all' => 'All feeds', // TODO
'error' => 'Show only feeds with errors', // TODO
),
'showing' => array(
diff --git a/app/i18n/hu/conf.php b/app/i18n/hu/conf.php
index bdf15aecb..9a9e896a1 100644
--- a/app/i18n/hu/conf.php
+++ b/app/i18n/hu/conf.php
@@ -138,6 +138,8 @@ return array(
'tags' => 'Rendezés címke szerint',
'type' => 'Típus',
),
+ 'get_A' => 'Show all feeds, also those shown in their category', // TODO
+ 'get_Z' => 'Show all feeds, also archived ones', // TODO
'get_all' => 'Minden cikk megjelenítése',
'get_all_labels' => 'Cikkek megjelenítése bármilyen címkével',
'get_category' => '„%s” kategória megjelenítése',
diff --git a/app/i18n/id/conf.php b/app/i18n/id/conf.php
index ba95372d5..f9e7e39d8 100644
--- a/app/i18n/id/conf.php
+++ b/app/i18n/id/conf.php
@@ -138,6 +138,8 @@ return array(
'tags' => 'Tampilkan berdasarkan label',
'type' => 'Tipe',
),
+ 'get_A' => 'Show all feeds, also those shown in their category', // TODO
+ 'get_Z' => 'Show all feeds, also archived ones', // TODO
'get_all' => 'Tampilkan semua artikel',
'get_all_labels' => 'Tampilkan artikel dengan setiap label',
'get_category' => 'Tampilkan kategori "%s"',
diff --git a/app/i18n/id/sub.php b/app/i18n/id/sub.php
index c0194397a..bcc6a86ab 100644
--- a/app/i18n/id/sub.php
+++ b/app/i18n/id/sub.php
@@ -217,7 +217,7 @@ return array(
'show_rendered' => 'Show content', // TODO
),
'show' => array(
- 'all' => 'Show all feeds', // TODO
+ 'all' => 'All feeds', // TODO
'error' => 'Show only feeds with errors', // TODO
),
'showing' => array(
diff --git a/app/i18n/it/conf.php b/app/i18n/it/conf.php
index 1fa9b51c5..dbb6a696e 100644
--- a/app/i18n/it/conf.php
+++ b/app/i18n/it/conf.php
@@ -138,6 +138,8 @@ return array(
'tags' => 'Tag',
'type' => 'Tipo',
),
+ 'get_A' => 'Mostra tutti i feed, anche quelli mostrati nella loro categoria',
+ 'get_Z' => 'Mostra tutti i feed, anche quelli archiviati',
'get_all' => 'Mostra tutti gli articoli',
'get_all_labels' => 'Mostra gli articoli con qualsiasi etichetta',
'get_category' => 'Mostra la categoria “%s” ',
diff --git a/app/i18n/ja/conf.php b/app/i18n/ja/conf.php
index 9d043f58d..1421b8c19 100644
--- a/app/i18n/ja/conf.php
+++ b/app/i18n/ja/conf.php
@@ -138,6 +138,8 @@ return array(
'tags' => 'タグごとに表示する',
'type' => 'タイプ',
),
+ 'get_A' => 'Show all feeds, also those shown in their category', // TODO
+ 'get_Z' => 'Show all feeds, also archived ones', // TODO
'get_all' => 'すべての記事を表示する',
'get_all_labels' => '任意のラベルで記事を表示する',
'get_category' => 'カテゴリ“%s”を表示する',
diff --git a/app/i18n/ko/conf.php b/app/i18n/ko/conf.php
index a51faf522..e26171384 100644
--- a/app/i18n/ko/conf.php
+++ b/app/i18n/ko/conf.php
@@ -138,6 +138,8 @@ return array(
'tags' => '태그별로 표시',
'type' => '유형',
),
+ 'get_A' => 'Show all feeds, also those shown in their category', // TODO
+ 'get_Z' => 'Show all feeds, also archived ones', // TODO
'get_all' => '모든 글 표시',
'get_all_labels' => '라벨이 있는 글 표시',
'get_category' => '“%s” 카테고리 표시',
diff --git a/app/i18n/lv/conf.php b/app/i18n/lv/conf.php
index 7e370db5d..d921d7694 100644
--- a/app/i18n/lv/conf.php
+++ b/app/i18n/lv/conf.php
@@ -138,6 +138,8 @@ return array(
'tags' => 'Rādīt pēc birkas',
'type' => 'Veids',
),
+ 'get_A' => 'Show all feeds, also those shown in their category', // TODO
+ 'get_Z' => 'Show all feeds, also archived ones', // TODO
'get_all' => 'Rādīt visus rakstus',
'get_all_labels' => 'Display articles with any label', // TODO
'get_category' => 'Rādīt kategoriju “%s”',
diff --git a/app/i18n/nl/conf.php b/app/i18n/nl/conf.php
index 5013d08f1..ab680930c 100644
--- a/app/i18n/nl/conf.php
+++ b/app/i18n/nl/conf.php
@@ -138,6 +138,8 @@ return array(
'tags' => 'Weergeven op label',
'type' => 'Type', // IGNORE
),
+ 'get_A' => 'Show all feeds, also those shown in their category', // TODO
+ 'get_Z' => 'Show all feeds, also archived ones', // TODO
'get_all' => 'Toon alle artikelen',
'get_all_labels' => 'Artikelen met elk label tonen',
'get_category' => 'Toon „%s” categorie',
diff --git a/app/i18n/oc/conf.php b/app/i18n/oc/conf.php
index 23663142c..7cc11693d 100644
--- a/app/i18n/oc/conf.php
+++ b/app/i18n/oc/conf.php
@@ -138,6 +138,8 @@ return array(
'tags' => 'Afichatge per etiqueta',
'type' => 'Tipe',
),
+ 'get_A' => 'Show all feeds, also those shown in their category', // TODO
+ 'get_Z' => 'Show all feeds, also archived ones', // TODO
'get_all' => 'Mostrar totes los articles',
'get_all_labels' => 'Display articles with any label', // TODO
'get_category' => 'Mostrar la categoria « %s »',
diff --git a/app/i18n/pl/conf.php b/app/i18n/pl/conf.php
index fe08d0c65..34d9fa773 100644
--- a/app/i18n/pl/conf.php
+++ b/app/i18n/pl/conf.php
@@ -138,6 +138,8 @@ return array(
'tags' => 'Według tagu',
'type' => 'Rodzaj',
),
+ 'get_A' => 'Show all feeds, also those shown in their category', // TODO
+ 'get_Z' => 'Show all feeds, also archived ones', // TODO
'get_all' => 'Wyświetlenie wszystkich wiadomości',
'get_all_labels' => 'Wyświetl wiadomości z dowolnymi etykietami',
'get_category' => 'Wyświetlenie kategorii “%s”',
diff --git a/app/i18n/pt-br/conf.php b/app/i18n/pt-br/conf.php
index b9c5b7e45..ec4c24d9e 100644
--- a/app/i18n/pt-br/conf.php
+++ b/app/i18n/pt-br/conf.php
@@ -138,6 +138,8 @@ return array(
'tags' => 'Exibir por tag',
'type' => 'Tipo',
),
+ 'get_A' => 'Show all feeds, also those shown in their category', // TODO
+ 'get_Z' => 'Show all feeds, also archived ones', // TODO
'get_all' => 'Mostrar todos os artigos',
'get_all_labels' => 'Exibir artigos com qualquer rótulo',
'get_category' => 'Visualizar “%s” categoria',
diff --git a/app/i18n/ru/conf.php b/app/i18n/ru/conf.php
index 80ce407c7..c52f20ac9 100644
--- a/app/i18n/ru/conf.php
+++ b/app/i18n/ru/conf.php
@@ -138,6 +138,8 @@ return array(
'tags' => 'Отображение по метке',
'type' => 'Тип',
),
+ 'get_A' => 'Show all feeds, also those shown in their category', // TODO
+ 'get_Z' => 'Show all feeds, also archived ones', // TODO
'get_all' => 'Показать все статьи',
'get_all_labels' => 'Показать все статьи с любыми метками',
'get_category' => 'Показать категорию “%s”',
diff --git a/app/i18n/sk/conf.php b/app/i18n/sk/conf.php
index c605c3dab..000a943a1 100644
--- a/app/i18n/sk/conf.php
+++ b/app/i18n/sk/conf.php
@@ -138,6 +138,8 @@ return array(
'tags' => 'Zobraziť podľa štítku',
'type' => 'Typ',
),
+ 'get_A' => 'Show all feeds, also those shown in their category', // TODO
+ 'get_Z' => 'Show all feeds, also archived ones', // TODO
'get_all' => 'Zobraziť všetky články',
'get_all_labels' => 'Zobraziť články so všetkými štítkami',
'get_category' => 'Zobraziť kategóriu “%s”',
diff --git a/app/i18n/tr/conf.php b/app/i18n/tr/conf.php
index 7c1d7cf51..68fa16819 100644
--- a/app/i18n/tr/conf.php
+++ b/app/i18n/tr/conf.php
@@ -138,6 +138,8 @@ return array(
'tags' => 'Etikete göre göster',
'type' => 'Tür',
),
+ 'get_A' => 'Show all feeds, also those shown in their category', // TODO
+ 'get_Z' => 'Show all feeds, also archived ones', // TODO
'get_all' => 'Tüm makaleleri göster',
'get_all_labels' => 'Herhangi etikete sahip makaleleri göster ',
'get_category' => '“%s” kategorisini göster',
diff --git a/app/i18n/zh-cn/conf.php b/app/i18n/zh-cn/conf.php
index 8795dacb3..e80136b10 100644
--- a/app/i18n/zh-cn/conf.php
+++ b/app/i18n/zh-cn/conf.php
@@ -138,6 +138,8 @@ return array(
'tags' => '按标签显示',
'type' => '类型',
),
+ 'get_A' => 'Show all feeds, also those shown in their category', // TODO
+ 'get_Z' => 'Show all feeds, also archived ones', // TODO
'get_all' => '显示所有文章',
'get_all_labels' => '显示所有打了标签的文章',
'get_category' => '显示分类“%s”',
diff --git a/app/i18n/zh-tw/conf.php b/app/i18n/zh-tw/conf.php
index 61bf61d7a..4b1a6f4af 100644
--- a/app/i18n/zh-tw/conf.php
+++ b/app/i18n/zh-tw/conf.php
@@ -138,6 +138,8 @@ return array(
'tags' => '按標籤顯示',
'type' => '類型',
),
+ 'get_A' => 'Show all feeds, also those shown in their category', // TODO
+ 'get_Z' => 'Show all feeds, also archived ones', // TODO
'get_all' => '顯示所有文章',
'get_all_labels' => '顯示任何標籤的文章',
'get_category' => '顯示分類 “%s”',
diff --git a/app/layout/aside_feed.phtml b/app/layout/aside_feed.phtml
index 18a1a9939..166d3954d 100644
--- a/app/layout/aside_feed.phtml
+++ b/app/layout/aside_feed.phtml
@@ -29,7 +29,7 @@
<form id="mark-read-aside" method="post">
<input type="hidden" name="_csrf" value="<?= FreshRSS_Auth::csrfToken() ?>" />
<ul id="sidebar" class="tree scrollbar-thin">
- <li class="tree-folder category all<?= FreshRSS_Context::isCurrentGet('a') ? ' active' : '' ?>">
+ <li class="tree-folder category all<?= FreshRSS_Context::isCurrentGet('a') || FreshRSS_Context::isCurrentGet('A') || FreshRSS_Context::isCurrentGet('Z') ? ' active' : '' ?>">
<a class="tree-folder-title" data-unread="<?= format_number(FreshRSS_Context::$total_unread) ?>" href="<?= _url('index', $actual_view) . $state_filter_manual ?>">
<?= _i('all') ?><span class="title" data-unread="<?= format_number(FreshRSS_Context::$total_unread) ?>"><?= _t('index.menu.main_stream') ?></span>
</a>
diff --git a/app/layout/layout.phtml b/app/layout/layout.phtml
index 685d2d48f..217239f01 100644
--- a/app/layout/layout.phtml
+++ b/app/layout/layout.phtml
@@ -49,7 +49,7 @@
}
?>
<link rel="alternate" type="application/rss+xml" title="<?= $this->rss_title ?>" href="<?= Minz_Url::display($url_rss) ?>" />
-<?php } if (FreshRSS_Context::isAll() || FreshRSS_Context::isCategory() || FreshRSS_Context::isFeed()) {
+<?php } if (FreshRSS_Context::isAll() || FreshRSS_Context::isAllAndCategories() || FreshRSS_Context::isAllAndArchived() || FreshRSS_Context::isCategory() || FreshRSS_Context::isFeed()) {
$opml_rss = $url_base;
$opml_rss['a'] = 'opml';
$opml_rss['params']['user'] = Minz_User::name() ?? '';
diff --git a/app/views/helpers/configure/query.phtml b/app/views/helpers/configure/query.phtml
index 97ef0c480..f0f339276 100644
--- a/app/views/helpers/configure/query.phtml
+++ b/app/views/helpers/configure/query.phtml
@@ -121,6 +121,8 @@
<label class="group-name" for="query_get"><?= _t('conf.query.filter.type') ?></label>
<div class="group-controls">
<select name="query[get]" class="w100" id="query_get" size="10">
+ <option value="Z" <?= 'Z' === $this->query->getGet() ? 'selected="selected"' : '' ?>><?= _t('conf.query.get_Z') ?></option>
+ <option value="A" <?= 'A' === $this->query->getGet() ? 'selected="selected"' : '' ?>><?= _t('conf.query.get_A') ?></option>
<option value="a" <?= in_array($this->query->getGet(), ['', 'a'], true) ? 'selected="selected"' : '' ?>><?= _t('index.feed.title') ?></option>
<option value="i" <?= 'i' === $this->query->getGet() ? 'selected="selected"' : '' ?>><?= _t('index.menu.important') ?></option>
<option value="s" <?= 's' === $this->query->getGet() ? 'selected="selected"' : '' ?>><?= _t('index.feed.title_fav') ?></option>