diff options
| author | 2025-11-04 12:49:21 +0100 | |
|---|---|---|
| committer | 2025-11-04 12:49:21 +0100 | |
| commit | b6c63d223931382aae84dc6d394cdd1bb58121bc (patch) | |
| tree | f512ea0f11873f89740cb7692442d11b26d59ee3 /app | |
| parent | 7d4854a0a4f5665db599f18c34035786465639f3 (diff) | |
Better transitions between groups of articles (#8174)
fix https://github.com/FreshRSS/FreshRSS/issues/7520
fix https://github.com/FreshRSS/FreshRSS/issues/8168
fix https://github.com/FreshRSS/FreshRSS/discussions/8172
Diffstat (limited to 'app')
35 files changed, 387 insertions, 83 deletions
diff --git a/app/Controllers/indexController.php b/app/Controllers/indexController.php index 8043e8f79..9005dff93 100644 --- a/app/Controllers/indexController.php +++ b/app/Controllers/indexController.php @@ -31,6 +31,44 @@ class FreshRSS_index_Controller extends FreshRSS_ActionController { } /** + * @return '.future'|'.today'|'.yesterday'|'' + */ + private static function dayRelative(int $timestamp, bool $mayBeFuture): string { + static $today = null; + if (!is_int($today)) { + $today = strtotime('today') ?: 0; + } + if ($today <= 0) { + return ''; + } elseif ($mayBeFuture && ($timestamp >= $today + 86400)) { + return '.future'; + } elseif ($timestamp >= $today) { + return '.today'; + } elseif ($timestamp >= $today - 86400) { + return '.yesterday'; + } + return ''; + } + + /** + * Content for displaying a transition between entries when sorting by specific criteria. + * @param 'id'|'c.name'|'date'|'f.name'|'link'|'title'|'rand'|'lastUserModified'|'length' $sort + */ + public static function transition(FreshRSS_Entry $entry, string $sort): string { + return match ($sort) { + 'id' => _t('index.feed.received' . self::dayRelative($entry->dateAdded(raw: true), mayBeFuture: false)) . + ' — ' . timestamptodate($entry->dateAdded(raw: true), hour: false), + 'date' => _t('index.feed.published' . self::dayRelative($entry->date(raw: true), mayBeFuture: true)) . + ' — ' . timestamptodate($entry->date(raw: true), hour: false), + 'lastUserModified' => _t('index.feed.userModified' . self::dayRelative($entry->lastUserModified(), mayBeFuture: false)) . + ' — ' . timestamptodate($entry->lastUserModified(), hour: false), + 'c.name' => $entry->feed()?->category()?->name() ?? '', + 'f.name' => $entry->feed()?->name() ?? '', + default => '', + }; + } + + /** * This action displays the normal view of FreshRSS. */ public function normalAction(): void { @@ -297,10 +335,11 @@ class FreshRSS_index_Controller extends FreshRSS_ActionController { } $continuation_values[] = $pagingEntry === null ? 0 : match (FreshRSS_Context::$sort) { - 'c.name' => $pagingEntry->feed()?->category()?->name() ?? '', - 'date' => $pagingEntry->date(true), + 'c.name' => $pagingEntry->feed()?->categoryId() === FreshRSS_CategoryDAO::DEFAULTCATEGORYID ? + FreshRSS_CategoryDAO::DEFAULT_CATEGORY_NAME : $pagingEntry->feed()?->category()?->name() ?? '', + 'date' => $pagingEntry->date(raw: true), 'f.name' => $pagingEntry->feed()?->name() ?? '', - 'link' => $pagingEntry->link(true), + 'link' => $pagingEntry->link(raw: true), 'title' => $pagingEntry->title(), 'lastUserModified' => $pagingEntry->lastUserModified(), 'length' => $pagingEntry->sqlContentLength() ?? 0, diff --git a/app/Models/CategoryDAO.php b/app/Models/CategoryDAO.php index e2fc825ac..e03f69016 100644 --- a/app/Models/CategoryDAO.php +++ b/app/Models/CategoryDAO.php @@ -4,6 +4,7 @@ declare(strict_types=1); class FreshRSS_CategoryDAO extends Minz_ModelPdo { public const DEFAULTCATEGORYID = 1; + public const DEFAULT_CATEGORY_NAME = 'Uncategorized'; public function sqlResetSequence(): bool { return true; // Nothing to do for MySQL @@ -14,7 +15,7 @@ class FreshRSS_CategoryDAO extends Minz_ModelPdo { $stm = $this->pdo->prepare('UPDATE `_category` SET name = :name WHERE id = :id'); if ($stm !== false) { $stm->bindValue(':id', self::DEFAULTCATEGORYID, PDO::PARAM_INT); - $stm->bindValue(':name', 'Uncategorized'); + $stm->bindValue(':name', self::DEFAULT_CATEGORY_NAME); } return $stm !== false && $stm->execute(); } diff --git a/app/Models/Context.php b/app/Models/Context.php index 8cd78c779..be4a06cc8 100644 --- a/app/Models/Context.php +++ b/app/Models/Context.php @@ -232,10 +232,10 @@ final class FreshRSS_Context { self::$total_important_unread = FreshRSS_Category::countUnread(self::categories(), FreshRSS_Feed::PRIORITY_IMPORTANT); } - self::_get(Minz_Request::paramString('get') ?: 'a'); + self::_get(Minz_Request::paramString('get', plaintext: true) ?: 'a'); self::$state = Minz_Request::paramInt('state') ?: FreshRSS_Context::userConf()->default_state; - $state_forced_by_user = Minz_Request::paramString('state', true) !== ''; + $state_forced_by_user = Minz_Request::paramString('state', plaintext: true) !== ''; if (!$state_forced_by_user) { if (FreshRSS_Context::userConf()->show_fav_unread && (self::isCurrentGet('s') || self::isCurrentGet('T') || self::isTag())) { self::$state = FreshRSS_Entry::STATE_NOT_READ | FreshRSS_Entry::STATE_READ; @@ -249,9 +249,9 @@ final class FreshRSS_Context { } self::$search = new FreshRSS_BooleanSearch(Minz_Request::paramString('search')); - $order = Minz_Request::paramString('order', true) ?: FreshRSS_Context::userConf()->sort_order; + $order = Minz_Request::paramString('order', plaintext: true) ?: FreshRSS_Context::userConf()->sort_order; self::$order = in_array($order, ['ASC', 'DESC'], true) ? $order : 'DESC'; - $sort = Minz_Request::paramString('sort', true) ?: FreshRSS_Context::userConf()->sort; + $sort = Minz_Request::paramString('sort', plaintext: true) ?: FreshRSS_Context::userConf()->sort; self::$sort = in_array($sort, ['id', 'c.name', 'date', 'f.name', 'link', 'title', 'rand', 'lastUserModified', 'length'], true) ? $sort : 'id'; self::$number = Minz_Request::paramInt('nb') ?: FreshRSS_Context::userConf()->posts_per_page; if (self::$number > FreshRSS_Context::userConf()->max_posts_per_rss) { @@ -260,9 +260,9 @@ final class FreshRSS_Context { FreshRSS_Context::userConf()->posts_per_page); } self::$offset = Minz_Request::paramInt('offset'); - $id_max = Minz_Request::paramString('idMax', true); + $id_max = Minz_Request::paramString('idMax', plaintext: true); self::$id_max = ctype_digit($id_max) ? $id_max : '0'; - $continuation_id = Minz_Request::paramString('cid', true); + $continuation_id = Minz_Request::paramString('cid', plaintext: true); self::$continuation_id = ctype_digit($continuation_id) ? $continuation_id : '0'; self::$sinceHours = Minz_Request::paramInt('hours'); } diff --git a/app/Models/Days.php b/app/Models/Days.php deleted file mode 100644 index c445c6355..000000000 --- a/app/Models/Days.php +++ /dev/null @@ -1,8 +0,0 @@ -<?php -declare(strict_types=1); - -class FreshRSS_Days { - public const TODAY = 0; - public const YESTERDAY = 1; - public const BEFORE_YESTERDAY = 2; -} diff --git a/app/Models/Entry.php b/app/Models/Entry.php index 62d4019d8..3cf6382dd 100644 --- a/app/Models/Entry.php +++ b/app/Models/Entry.php @@ -873,23 +873,6 @@ HTML; $feed->applyFilterActions($this); } - public function isDay(int $day, int $today): bool { - $date = $this->dateAdded(true); - switch ($day) { - case FreshRSS_Days::TODAY: - $tomorrow = $today + 86400; - return $date >= $today && $date < $tomorrow; - case FreshRSS_Days::YESTERDAY: - $yesterday = $today - 86400; - return $date >= $yesterday && $date < $today; - case FreshRSS_Days::BEFORE_YESTERDAY: - $yesterday = $today - 86400; - return $date < $yesterday; - default: - return false; - } - } - /** * @param string $url Overridden URL. Will default to the entry URL. * @throws Minz_Exception diff --git a/app/i18n/cs/index.php b/app/i18n/cs/index.php index 18b7fd655..0a5689157 100644 --- a/app/i18n/cs/index.php +++ b/app/i18n/cs/index.php @@ -36,8 +36,14 @@ return array( ), 'feed' => array( 'empty' => 'Nejsou žádné články k zobrazení.', + 'published' => array( + '_' => 'Published', // TODO + 'future' => 'Published in the future', // TODO + 'today' => 'Published today', // TODO + 'yesterday' => 'Published yesterday', // TODO + ), 'received' => array( - 'before_yesterday' => 'Received before yesterday', // TODO + '_' => 'Received', // TODO 'today' => 'Received today', // TODO 'yesterday' => 'Received yesterday', // TODO ), @@ -45,6 +51,11 @@ return array( 'title' => 'Hlavní kanál', 'title_fav' => 'Oblíbené', 'title_global' => 'Zobrazení přehledu', + 'userModified' => array( + '_' => 'Modified by user', // TODO + 'today' => 'Modified by user today', // TODO + 'yesterday' => 'Modified by user yesterday', // TODO + ), ), 'log' => array( '_' => 'Protokoly', diff --git a/app/i18n/de/index.php b/app/i18n/de/index.php index 41c192f71..4ce5f864e 100644 --- a/app/i18n/de/index.php +++ b/app/i18n/de/index.php @@ -36,8 +36,14 @@ return array( ), 'feed' => array( 'empty' => 'Es gibt keinen Artikel zum Anzeigen.', + 'published' => array( + '_' => 'Published', // TODO + 'future' => 'Published in the future', // TODO + 'today' => 'Published today', // TODO + 'yesterday' => 'Published yesterday', // TODO + ), 'received' => array( - 'before_yesterday' => 'Vor gestern empfangen', + '_' => 'Received', // TODO 'today' => 'Heute empfangen', 'yesterday' => 'Gestern empfangen', ), @@ -45,6 +51,11 @@ return array( 'title' => 'Haupt-Feeds', 'title_fav' => 'Favoriten', 'title_global' => 'Globale Ansicht', + 'userModified' => array( + '_' => 'Modified by user', // TODO + 'today' => 'Modified by user today', // TODO + 'yesterday' => 'Modified by user yesterday', // TODO + ), ), 'log' => array( '_' => 'Protokolle', diff --git a/app/i18n/el/index.php b/app/i18n/el/index.php index 251eb9353..0134d40ea 100644 --- a/app/i18n/el/index.php +++ b/app/i18n/el/index.php @@ -36,8 +36,14 @@ return array( ), 'feed' => array( 'empty' => 'There are no articles to show.', // TODO + 'published' => array( + '_' => 'Published', // TODO + 'future' => 'Published in the future', // TODO + 'today' => 'Published today', // TODO + 'yesterday' => 'Published yesterday', // TODO + ), 'received' => array( - 'before_yesterday' => 'Received before yesterday', // TODO + '_' => 'Received', // TODO 'today' => 'Received today', // TODO 'yesterday' => 'Received yesterday', // TODO ), @@ -45,6 +51,11 @@ return array( 'title' => 'Main stream', // TODO 'title_fav' => 'Favourites', // TODO 'title_global' => 'Global view', // TODO + 'userModified' => array( + '_' => 'Modified by user', // TODO + 'today' => 'Modified by user today', // TODO + 'yesterday' => 'Modified by user yesterday', // TODO + ), ), 'log' => array( '_' => 'Logs', // TODO diff --git a/app/i18n/en-US/index.php b/app/i18n/en-US/index.php index d112d143e..7d05d4f21 100644 --- a/app/i18n/en-US/index.php +++ b/app/i18n/en-US/index.php @@ -36,8 +36,14 @@ return array( ), 'feed' => array( 'empty' => 'There are no articles to show.', // IGNORE + 'published' => array( + '_' => 'Published', // IGNORE + 'future' => 'Published in the future', // IGNORE + 'today' => 'Published today', // IGNORE + 'yesterday' => 'Published yesterday', // IGNORE + ), 'received' => array( - 'before_yesterday' => 'Received before yesterday', // IGNORE + '_' => 'Received', // IGNORE 'today' => 'Received today', // IGNORE 'yesterday' => 'Received yesterday', // IGNORE ), @@ -45,6 +51,11 @@ return array( 'title' => 'Main stream', // IGNORE 'title_fav' => 'Favorites', 'title_global' => 'Global view', // IGNORE + 'userModified' => array( + '_' => 'Modified by user', // IGNORE + 'today' => 'Modified by user today', // IGNORE + 'yesterday' => 'Modified by user yesterday', // IGNORE + ), ), 'log' => array( '_' => 'Logs', // IGNORE diff --git a/app/i18n/en/index.php b/app/i18n/en/index.php index d0a39a7a5..fed6491f7 100644 --- a/app/i18n/en/index.php +++ b/app/i18n/en/index.php @@ -36,8 +36,14 @@ return array( ), 'feed' => array( 'empty' => 'There are no articles to show.', + 'published' => array( + '_' => 'Published', + 'future' => 'Published in the future', + 'today' => 'Published today', + 'yesterday' => 'Published yesterday', + ), 'received' => array( - 'before_yesterday' => 'Received before yesterday', + '_' => 'Received', 'today' => 'Received today', 'yesterday' => 'Received yesterday', ), @@ -45,6 +51,11 @@ return array( 'title' => 'Main stream', 'title_fav' => 'Favourites', 'title_global' => 'Global view', + 'userModified' => array( + '_' => 'Modified by user', + 'today' => 'Modified by user today', + 'yesterday' => 'Modified by user yesterday', + ), ), 'log' => array( '_' => 'Logs', diff --git a/app/i18n/es/index.php b/app/i18n/es/index.php index 73a5e3e39..1a0c04cd1 100644 --- a/app/i18n/es/index.php +++ b/app/i18n/es/index.php @@ -36,8 +36,14 @@ return array( ), 'feed' => array( 'empty' => 'No hay artículos a mostrar.', + 'published' => array( + '_' => 'Published', // TODO + 'future' => 'Published in the future', // TODO + 'today' => 'Published today', // TODO + 'yesterday' => 'Published yesterday', // TODO + ), 'received' => array( - 'before_yesterday' => 'Received before yesterday', // TODO + '_' => 'Received', // TODO 'today' => 'Received today', // TODO 'yesterday' => 'Received yesterday', // TODO ), @@ -45,6 +51,11 @@ return array( 'title' => 'Salida Principal', 'title_fav' => 'Favoritos', 'title_global' => 'Vista global', + 'userModified' => array( + '_' => 'Modified by user', // TODO + 'today' => 'Modified by user today', // TODO + 'yesterday' => 'Modified by user yesterday', // TODO + ), ), 'log' => array( '_' => 'Registros', diff --git a/app/i18n/fa/index.php b/app/i18n/fa/index.php index 65f331a5f..1ad29523b 100644 --- a/app/i18n/fa/index.php +++ b/app/i18n/fa/index.php @@ -36,8 +36,14 @@ return array( ), 'feed' => array( 'empty' => ' هیچ مقاله ای برای نمایش وجود ندارد.', + 'published' => array( + '_' => 'Published', // TODO + 'future' => 'Published in the future', // TODO + 'today' => 'Published today', // TODO + 'yesterday' => 'Published yesterday', // TODO + ), 'received' => array( - 'before_yesterday' => 'پیش از دیروز دریافت شد', + '_' => 'Received', // TODO 'today' => 'امروز دریافت شد', 'yesterday' => 'دیروز دریافت شد', ), @@ -45,6 +51,11 @@ return array( 'title' => ' جریان اصلی', 'title_fav' => ' موارد دلخواه', 'title_global' => ' نمای جهانی', + 'userModified' => array( + '_' => 'Modified by user', // TODO + 'today' => 'Modified by user today', // TODO + 'yesterday' => 'Modified by user yesterday', // TODO + ), ), 'log' => array( '_' => ' سیاهههای مربوط', diff --git a/app/i18n/fi/index.php b/app/i18n/fi/index.php index 311d13077..f09b5ffc5 100644 --- a/app/i18n/fi/index.php +++ b/app/i18n/fi/index.php @@ -36,8 +36,14 @@ return array( ), 'feed' => array( 'empty' => 'Näytettäviä artikkeleita ei ole.', + 'published' => array( + '_' => 'Published', // TODO + 'future' => 'Published in the future', // TODO + 'today' => 'Published today', // TODO + 'yesterday' => 'Published yesterday', // TODO + ), 'received' => array( - 'before_yesterday' => 'Saapuneet aikaisemmin kuin eilen', + '_' => 'Received', // TODO 'today' => 'Saapuneet tänään', 'yesterday' => 'Saapuneet eilen', ), @@ -45,6 +51,11 @@ return array( 'title' => 'Pääsyötevirta', 'title_fav' => 'Suosikit', 'title_global' => 'Yleisnäkymä', + 'userModified' => array( + '_' => 'Modified by user', // TODO + 'today' => 'Modified by user today', // TODO + 'yesterday' => 'Modified by user yesterday', // TODO + ), ), 'log' => array( '_' => 'Lokit', diff --git a/app/i18n/fr/index.php b/app/i18n/fr/index.php index f51a09ba6..83faedddb 100644 --- a/app/i18n/fr/index.php +++ b/app/i18n/fr/index.php @@ -36,8 +36,14 @@ return array( ), 'feed' => array( 'empty' => 'Il n’y a aucun article à afficher.', + 'published' => array( + '_' => 'Publié', + 'future' => 'Publié dans le futur', + 'today' => 'Publié aujourd’hui', + 'yesterday' => 'Publié hier', + ), 'received' => array( - 'before_yesterday' => 'Reçu avant avant-hier', + '_' => 'Reçu', 'today' => 'Reçu aujourd’hui', 'yesterday' => 'Reçu hier', ), @@ -45,6 +51,11 @@ return array( 'title' => 'Flux principal', 'title_fav' => 'Favoris', 'title_global' => 'Vue globale', + 'userModified' => array( + '_' => 'Modifié par l’utilisateur', + 'today' => 'Modifié par l’utilisateur aujourd’hui', + 'yesterday' => 'Modifié par l’utilisateur hier', + ), ), 'log' => array( '_' => 'Logs', // IGNORE diff --git a/app/i18n/he/index.php b/app/i18n/he/index.php index d52319cba..ed7aa038d 100644 --- a/app/i18n/he/index.php +++ b/app/i18n/he/index.php @@ -36,8 +36,14 @@ return array( ), 'feed' => array( 'empty' => 'אין מאמר להצגה.', + 'published' => array( + '_' => 'Published', // TODO + 'future' => 'Published in the future', // TODO + 'today' => 'Published today', // TODO + 'yesterday' => 'Published yesterday', // TODO + ), 'received' => array( - 'before_yesterday' => 'Received before yesterday', // TODO + '_' => 'Received', // TODO 'today' => 'Received today', // TODO 'yesterday' => 'Received yesterday', // TODO ), @@ -45,6 +51,11 @@ return array( 'title' => 'הזנה ראשית', 'title_fav' => 'מועדפים', 'title_global' => 'תצוגה גלובלית', + 'userModified' => array( + '_' => 'Modified by user', // TODO + 'today' => 'Modified by user today', // TODO + 'yesterday' => 'Modified by user yesterday', // TODO + ), ), 'log' => array( '_' => 'לוגים', diff --git a/app/i18n/hu/index.php b/app/i18n/hu/index.php index 2345f1249..3e4e1c71f 100644 --- a/app/i18n/hu/index.php +++ b/app/i18n/hu/index.php @@ -36,8 +36,14 @@ return array( ), 'feed' => array( 'empty' => 'Nincs megjeleníthető cikk.', + 'published' => array( + '_' => 'Published', // TODO + 'future' => 'Published in the future', // TODO + 'today' => 'Published today', // TODO + 'yesterday' => 'Published yesterday', // TODO + ), 'received' => array( - 'before_yesterday' => 'Tegnapelőtt fogadva', + '_' => 'Received', // TODO 'today' => 'Ma fogadva', 'yesterday' => 'Tegnap fogadva', ), @@ -45,6 +51,11 @@ return array( 'title' => 'Minden cikk', 'title_fav' => 'Kedvencek', 'title_global' => 'Globális nézet', + 'userModified' => array( + '_' => 'Modified by user', // TODO + 'today' => 'Modified by user today', // TODO + 'yesterday' => 'Modified by user yesterday', // TODO + ), ), 'log' => array( '_' => 'Log-ok', diff --git a/app/i18n/id/index.php b/app/i18n/id/index.php index c06292759..bcca45c0c 100644 --- a/app/i18n/id/index.php +++ b/app/i18n/id/index.php @@ -36,8 +36,14 @@ return array( ), 'feed' => array( 'empty' => 'Tidak ada artikel untuk diperlihatkan.', + 'published' => array( + '_' => 'Published', // TODO + 'future' => 'Published in the future', // TODO + 'today' => 'Published today', // TODO + 'yesterday' => 'Published yesterday', // TODO + ), 'received' => array( - 'before_yesterday' => 'Diterima sebelum kemarin', + '_' => 'Received', // TODO 'today' => 'Diterima hari ini', 'yesterday' => 'Diterima kemarin', ), @@ -45,6 +51,11 @@ return array( 'title' => 'Bagian Utama', 'title_fav' => 'Favorit', 'title_global' => 'Tampilan Global', + 'userModified' => array( + '_' => 'Modified by user', // TODO + 'today' => 'Modified by user today', // TODO + 'yesterday' => 'Modified by user yesterday', // TODO + ), ), 'log' => array( '_' => 'Log', diff --git a/app/i18n/it/index.php b/app/i18n/it/index.php index 1c9a3b2f1..e12baec60 100644 --- a/app/i18n/it/index.php +++ b/app/i18n/it/index.php @@ -36,8 +36,14 @@ return array( ), 'feed' => array( 'empty' => 'Non ci sono articoli da mostrare.', + 'published' => array( + '_' => 'Published', // TODO + 'future' => 'Published in the future', // TODO + 'today' => 'Published today', // TODO + 'yesterday' => 'Published yesterday', // TODO + ), 'received' => array( - 'before_yesterday' => 'Ricevuto prima di ieri', + '_' => 'Received', // TODO 'today' => 'Ricevuto oggi', 'yesterday' => 'Ricevuto ieri', ), @@ -45,6 +51,11 @@ return array( 'title' => 'Flusso principale', 'title_fav' => 'Preferiti', 'title_global' => 'Vista globale per categorie', + 'userModified' => array( + '_' => 'Modified by user', // TODO + 'today' => 'Modified by user today', // TODO + 'yesterday' => 'Modified by user yesterday', // TODO + ), ), 'log' => array( '_' => 'Log', diff --git a/app/i18n/ja/index.php b/app/i18n/ja/index.php index a0879d7b8..a44283c72 100644 --- a/app/i18n/ja/index.php +++ b/app/i18n/ja/index.php @@ -36,8 +36,14 @@ return array( ), 'feed' => array( 'empty' => '表示できる記事がありません', + 'published' => array( + '_' => 'Published', // TODO + 'future' => 'Published in the future', // TODO + 'today' => 'Published today', // TODO + 'yesterday' => 'Published yesterday', // TODO + ), 'received' => array( - 'before_yesterday' => '一昨日以前', + '_' => 'Received', // TODO 'today' => '今日', 'yesterday' => '昨日', ), @@ -45,6 +51,11 @@ return array( 'title' => 'メイン', 'title_fav' => 'お気に入り', 'title_global' => 'グローバルビュー', + 'userModified' => array( + '_' => 'Modified by user', // TODO + 'today' => 'Modified by user today', // TODO + 'yesterday' => 'Modified by user yesterday', // TODO + ), ), 'log' => array( '_' => 'ログ', diff --git a/app/i18n/ko/index.php b/app/i18n/ko/index.php index bce49f545..f9b272b58 100644 --- a/app/i18n/ko/index.php +++ b/app/i18n/ko/index.php @@ -36,8 +36,14 @@ return array( ), 'feed' => array( 'empty' => '글이 없습니다.', + 'published' => array( + '_' => 'Published', // TODO + 'future' => 'Published in the future', // TODO + 'today' => 'Published today', // TODO + 'yesterday' => 'Published yesterday', // TODO + ), 'received' => array( - 'before_yesterday' => 'Received before yesterday', // TODO + '_' => 'Received', // TODO 'today' => 'Received today', // TODO 'yesterday' => 'Received yesterday', // TODO ), @@ -45,6 +51,11 @@ return array( 'title' => '메인 스트림', 'title_fav' => '즐겨찾기', 'title_global' => '전체 모드', + 'userModified' => array( + '_' => 'Modified by user', // TODO + 'today' => 'Modified by user today', // TODO + 'yesterday' => 'Modified by user yesterday', // TODO + ), ), 'log' => array( '_' => '로그', diff --git a/app/i18n/lv/index.php b/app/i18n/lv/index.php index db22eda5b..fcc506ecb 100644 --- a/app/i18n/lv/index.php +++ b/app/i18n/lv/index.php @@ -36,8 +36,14 @@ return array( ), 'feed' => array( 'empty' => 'Nav neviena raksta, ko parādīt.', + 'published' => array( + '_' => 'Published', // TODO + 'future' => 'Published in the future', // TODO + 'today' => 'Published today', // TODO + 'yesterday' => 'Published yesterday', // TODO + ), 'received' => array( - 'before_yesterday' => 'Received before yesterday', // TODO + '_' => 'Received', // TODO 'today' => 'Received today', // TODO 'yesterday' => 'Received yesterday', // TODO ), @@ -45,6 +51,11 @@ return array( 'title' => 'Galvenā plūsma', 'title_fav' => 'Mīļākie', 'title_global' => 'Globālais skats', + 'userModified' => array( + '_' => 'Modified by user', // TODO + 'today' => 'Modified by user today', // TODO + 'yesterday' => 'Modified by user yesterday', // TODO + ), ), 'log' => array( '_' => 'Žurnāli', diff --git a/app/i18n/nl/index.php b/app/i18n/nl/index.php index 2993a43b6..8c6561c7b 100644 --- a/app/i18n/nl/index.php +++ b/app/i18n/nl/index.php @@ -36,8 +36,14 @@ return array( ), 'feed' => array( 'empty' => 'Er is geen artikel om te laten zien.', + 'published' => array( + '_' => 'Published', // TODO + 'future' => 'Published in the future', // TODO + 'today' => 'Published today', // TODO + 'yesterday' => 'Published yesterday', // TODO + ), 'received' => array( - 'before_yesterday' => 'Ontvangen vóór gisteren', + '_' => 'Received', // TODO 'today' => 'Vandaag ontvangen', 'yesterday' => 'Gisteren ontvangen', ), @@ -45,6 +51,11 @@ return array( 'title' => 'Overzicht', 'title_fav' => 'Favorieten', 'title_global' => 'Globale weergave', + 'userModified' => array( + '_' => 'Modified by user', // TODO + 'today' => 'Modified by user today', // TODO + 'yesterday' => 'Modified by user yesterday', // TODO + ), ), 'log' => array( '_' => 'Log bestanden', diff --git a/app/i18n/oc/index.php b/app/i18n/oc/index.php index 8f28b6ca6..56d71543e 100644 --- a/app/i18n/oc/index.php +++ b/app/i18n/oc/index.php @@ -36,8 +36,14 @@ return array( ), 'feed' => array( 'empty' => 'I a pas cap de flux de mostrar.', + 'published' => array( + '_' => 'Published', // TODO + 'future' => 'Published in the future', // TODO + 'today' => 'Published today', // TODO + 'yesterday' => 'Published yesterday', // TODO + ), 'received' => array( - 'before_yesterday' => 'Received before yesterday', // TODO + '_' => 'Received', // TODO 'today' => 'Received today', // TODO 'yesterday' => 'Received yesterday', // TODO ), @@ -45,6 +51,11 @@ return array( 'title' => 'Flux màger', 'title_fav' => 'Favorits', 'title_global' => 'Vista generala', + 'userModified' => array( + '_' => 'Modified by user', // TODO + 'today' => 'Modified by user today', // TODO + 'yesterday' => 'Modified by user yesterday', // TODO + ), ), 'log' => array( '_' => 'Jornals d’audit', // IGNORE diff --git a/app/i18n/pl/index.php b/app/i18n/pl/index.php index 869edb00b..ddf9cb3c8 100644 --- a/app/i18n/pl/index.php +++ b/app/i18n/pl/index.php @@ -36,8 +36,14 @@ return array( ), 'feed' => array( 'empty' => 'Brak wiadomości do wyświetlenia.', + 'published' => array( + '_' => 'Published', // TODO + 'future' => 'Published in the future', // TODO + 'today' => 'Published today', // TODO + 'yesterday' => 'Published yesterday', // TODO + ), 'received' => array( - 'before_yesterday' => 'Otrzymane przedwczoraj', + '_' => 'Received', // TODO 'today' => 'Otrzymane dzisiaj', 'yesterday' => 'Otrzymane wczoraj', ), @@ -45,6 +51,11 @@ return array( 'title' => 'Kanał główny', 'title_fav' => 'Ulubione', 'title_global' => 'Widok globalny', + 'userModified' => array( + '_' => 'Modified by user', // TODO + 'today' => 'Modified by user today', // TODO + 'yesterday' => 'Modified by user yesterday', // TODO + ), ), 'log' => array( '_' => 'Dziennik', diff --git a/app/i18n/pt-BR/index.php b/app/i18n/pt-BR/index.php index 787dea15d..e8d3e6b11 100644 --- a/app/i18n/pt-BR/index.php +++ b/app/i18n/pt-BR/index.php @@ -36,8 +36,14 @@ return array( ), 'feed' => array( 'empty' => 'Não há nenhum artigo para mostrar.', + 'published' => array( + '_' => 'Published', // TODO + 'future' => 'Published in the future', // TODO + 'today' => 'Published today', // TODO + 'yesterday' => 'Published yesterday', // TODO + ), 'received' => array( - 'before_yesterday' => 'Received before yesterday', // TODO + '_' => 'Received', // TODO 'today' => 'Received today', // TODO 'yesterday' => 'Received yesterday', // TODO ), @@ -45,6 +51,11 @@ return array( 'title' => 'Stream principal', 'title_fav' => 'Favoritos', 'title_global' => 'Visualização Global', + 'userModified' => array( + '_' => 'Modified by user', // TODO + 'today' => 'Modified by user today', // TODO + 'yesterday' => 'Modified by user yesterday', // TODO + ), ), 'log' => array( '_' => 'Logs', // IGNORE diff --git a/app/i18n/pt-PT/index.php b/app/i18n/pt-PT/index.php index 127bef26f..e2746eebe 100644 --- a/app/i18n/pt-PT/index.php +++ b/app/i18n/pt-PT/index.php @@ -36,8 +36,14 @@ return array( ), 'feed' => array( 'empty' => 'Não há nenhum artigo para mostrar.', + 'published' => array( + '_' => 'Published', // TODO + 'future' => 'Published in the future', // TODO + 'today' => 'Published today', // TODO + 'yesterday' => 'Published yesterday', // TODO + ), 'received' => array( - 'before_yesterday' => 'Received before yesterday', // TODO + '_' => 'Received', // TODO 'today' => 'Received today', // TODO 'yesterday' => 'Received yesterday', // TODO ), @@ -45,6 +51,11 @@ return array( 'title' => 'Stream principal', 'title_fav' => 'Favoritos', 'title_global' => 'Visualização Global', + 'userModified' => array( + '_' => 'Modified by user', // TODO + 'today' => 'Modified by user today', // TODO + 'yesterday' => 'Modified by user yesterday', // TODO + ), ), 'log' => array( '_' => 'Logs', // IGNORE diff --git a/app/i18n/ru/index.php b/app/i18n/ru/index.php index c60c9820a..3da44b000 100644 --- a/app/i18n/ru/index.php +++ b/app/i18n/ru/index.php @@ -36,8 +36,14 @@ return array( ), 'feed' => array( 'empty' => 'Нет статей для отображения.', + 'published' => array( + '_' => 'Published', // TODO + 'future' => 'Published in the future', // TODO + 'today' => 'Published today', // TODO + 'yesterday' => 'Published yesterday', // TODO + ), 'received' => array( - 'before_yesterday' => 'Получено раньше, чем вчера', + '_' => 'Received', // TODO 'today' => 'Получено сегодня', 'yesterday' => 'Получено вчера', ), @@ -45,6 +51,11 @@ return array( 'title' => 'Основной поток', 'title_fav' => 'Избранное', 'title_global' => 'Глобальный вид', + 'userModified' => array( + '_' => 'Modified by user', // TODO + 'today' => 'Modified by user today', // TODO + 'yesterday' => 'Modified by user yesterday', // TODO + ), ), 'log' => array( '_' => 'Журнал', diff --git a/app/i18n/sk/index.php b/app/i18n/sk/index.php index d4aa174b1..da3236938 100644 --- a/app/i18n/sk/index.php +++ b/app/i18n/sk/index.php @@ -36,8 +36,14 @@ return array( ), 'feed' => array( 'empty' => 'Žiadne články.', + 'published' => array( + '_' => 'Published', // TODO + 'future' => 'Published in the future', // TODO + 'today' => 'Published today', // TODO + 'yesterday' => 'Published yesterday', // TODO + ), 'received' => array( - 'before_yesterday' => 'Received before yesterday', // TODO + '_' => 'Received', // TODO 'today' => 'Received today', // TODO 'yesterday' => 'Received yesterday', // TODO ), @@ -45,6 +51,11 @@ return array( 'title' => 'Všetky kanály', 'title_fav' => 'Obľúbené', 'title_global' => 'Prehľad', + 'userModified' => array( + '_' => 'Modified by user', // TODO + 'today' => 'Modified by user today', // TODO + 'yesterday' => 'Modified by user yesterday', // TODO + ), ), 'log' => array( '_' => 'Záznamy', diff --git a/app/i18n/tr/index.php b/app/i18n/tr/index.php index 50b81b517..ea1ba9e15 100644 --- a/app/i18n/tr/index.php +++ b/app/i18n/tr/index.php @@ -36,8 +36,14 @@ return array( ), 'feed' => array( 'empty' => 'Gösterilecek makale yok.', + 'published' => array( + '_' => 'Published', // TODO + 'future' => 'Published in the future', // TODO + 'today' => 'Published today', // TODO + 'yesterday' => 'Published yesterday', // TODO + ), 'received' => array( - 'before_yesterday' => 'Dünden önceki gün alınanlar', + '_' => 'Received', // TODO 'today' => 'Bugün alınanlar', 'yesterday' => 'Dün alınanlar', ), @@ -45,6 +51,11 @@ return array( 'title' => 'Ana akış', 'title_fav' => 'Favoriler', 'title_global' => 'Genel görünüm', + 'userModified' => array( + '_' => 'Modified by user', // TODO + 'today' => 'Modified by user today', // TODO + 'yesterday' => 'Modified by user yesterday', // TODO + ), ), 'log' => array( '_' => 'Günlükler', diff --git a/app/i18n/uk/index.php b/app/i18n/uk/index.php index 0922444a6..03f5fc459 100644 --- a/app/i18n/uk/index.php +++ b/app/i18n/uk/index.php @@ -36,8 +36,14 @@ return array( ), 'feed' => array( 'empty' => 'Нема статей для показу.', + 'published' => array( + '_' => 'Published', // TODO + 'future' => 'Published in the future', // TODO + 'today' => 'Published today', // TODO + 'yesterday' => 'Published yesterday', // TODO + ), 'received' => array( - 'before_yesterday' => 'Отримано раніше за вчора', + '_' => 'Received', // TODO 'today' => 'Отримано сьогодні', 'yesterday' => 'Отримано вчора', ), @@ -45,6 +51,11 @@ return array( 'title' => 'Головний потік', 'title_fav' => 'Вподобані', 'title_global' => 'Глобальний показ', + 'userModified' => array( + '_' => 'Modified by user', // TODO + 'today' => 'Modified by user today', // TODO + 'yesterday' => 'Modified by user yesterday', // TODO + ), ), 'log' => array( '_' => 'Журнали', diff --git a/app/i18n/zh-CN/index.php b/app/i18n/zh-CN/index.php index ae134e954..ec48038fa 100644 --- a/app/i18n/zh-CN/index.php +++ b/app/i18n/zh-CN/index.php @@ -36,8 +36,14 @@ return array( ), 'feed' => array( 'empty' => '没有文章可以显示。', + 'published' => array( + '_' => 'Published', // TODO + 'future' => 'Published in the future', // TODO + 'today' => 'Published today', // TODO + 'yesterday' => 'Published yesterday', // TODO + ), 'received' => array( - 'before_yesterday' => 'Received before yesterday', // TODO + '_' => 'Received', // TODO 'today' => 'Received today', // TODO 'yesterday' => 'Received yesterday', // TODO ), @@ -45,6 +51,11 @@ return array( 'title' => '首页', 'title_fav' => '收藏', 'title_global' => '全局视图', + 'userModified' => array( + '_' => 'Modified by user', // TODO + 'today' => 'Modified by user today', // TODO + 'yesterday' => 'Modified by user yesterday', // TODO + ), ), 'log' => array( '_' => '日志', diff --git a/app/i18n/zh-TW/index.php b/app/i18n/zh-TW/index.php index 45bf17c1b..f62519ec3 100644 --- a/app/i18n/zh-TW/index.php +++ b/app/i18n/zh-TW/index.php @@ -36,8 +36,14 @@ return array( ), 'feed' => array( 'empty' => '暫時沒有文章可顯示。', + 'published' => array( + '_' => 'Published', // TODO + 'future' => 'Published in the future', // TODO + 'today' => 'Published today', // TODO + 'yesterday' => 'Published yesterday', // TODO + ), 'received' => array( - 'before_yesterday' => 'Received before yesterday', // TODO + '_' => 'Received', // TODO 'today' => 'Received today', // TODO 'yesterday' => 'Received yesterday', // TODO ), @@ -45,6 +51,11 @@ return array( 'title' => '首頁', 'title_fav' => '收藏', 'title_global' => '全局視圖', + 'userModified' => array( + '_' => 'Modified by user', // TODO + 'today' => 'Modified by user today', // TODO + 'yesterday' => 'Modified by user yesterday', // TODO + ), ), 'log' => array( '_' => '日誌', diff --git a/app/views/index/normal.phtml b/app/views/index/normal.phtml index cc54d10fd..9f2bbdbcc 100644 --- a/app/views/index/normal.phtml +++ b/app/views/index/normal.phtml @@ -8,9 +8,7 @@ if (!Minz_Request::paramBoolean('ajax')) { call_user_func($this->callbackBeforeEntries, $this); -$display_today = FreshRSS_Context::$sort === 'id'; -$display_yesterday = $display_today; -$display_others = $display_today; +$last_transition = ''; $useKeepUnreadImportant = !FreshRSS_Context::isImportant() && !FreshRSS_Context::isFeed(); $today = @strtotime('today'); @@ -59,26 +57,19 @@ $today = @strtotime('today'); // We most likely already have the feed object in cache, otherwise make a request $this->feed = FreshRSS_Category::findFeed($this->categories, $this->entry->feedId()) ?? $this->entry->feed() ?? FreshRSS_Feed::default(); + $this->entry->_feed($this->feed); - if ($display_today && $this->entry->isDay(FreshRSS_Days::TODAY, $today)) { - ?><div class="day" id="day_today"><?= _t('index.feed.received.today') ?> - <span class="date"> — <?= timestamptodate(time(), false) ?></span> + if ($last_transition !== ($transition = FreshRSS_index_Controller::transition($this->entry, FreshRSS_Context::$sort))) { + $last_transition = $transition; + ?><div class="transition"> + <span class="transition-value"> + <?php if (FreshRSS_Context::$sort === 'f.name' && FreshRSS_Context::userConf()->show_favicons): ?> + <img class="favicon" src="<?= $this->feed->favicon() ?>" alt="✇" loading="lazy" /> + <?php endif;?> + <?= $transition ?> + </span> <span class="name"><?= FreshRSS_Context::$name ?></span> </div><?php - $display_today = false; - } - if ($display_yesterday && $this->entry->isDay(FreshRSS_Days::YESTERDAY, $today)) { - ?><div class="day" id="day_yesterday"><?= _t('index.feed.received.yesterday') ?> - <span class="date"> — <?= timestamptodate(time() - 86400, false) ?></span> - <span class="name"><?= FreshRSS_Context::$name ?></span> - </div><?php - $display_yesterday = false; - } - if ($display_others && $this->entry->isDay(FreshRSS_Days::BEFORE_YESTERDAY, $today)) { - ?><div class="day" id="day_before_yesterday"><?= _t('index.feed.received.before_yesterday') ?> - <span class="name"><?= FreshRSS_Context::$name ?></span> - </div><?php - $display_others = false; } ?><div class="flux<?= !$this->entry->isRead() ? ' not_read' : '' ?><?= $this->entry->isFavorite() ? ' favorite' : '' diff --git a/app/views/index/reader.phtml b/app/views/index/reader.phtml index 49321f9f5..d76af2dc7 100644 --- a/app/views/index/reader.phtml +++ b/app/views/index/reader.phtml @@ -31,6 +31,7 @@ $useKeepUnreadImportant = !FreshRSS_Context::isImportant() && !FreshRSS_Context: //We most likely already have the feed object in cache, otherwise make a request $this->feed = FreshRSS_Category::findFeed($this->categories, $this->entry->feedId()) ?? $this->entry->feed() ?? FreshRSS_Feed::default(); + $this->entry->_feed($this->feed); ?><div class="flux<?= !$this->entry->isRead() ? ' not_read' : '' ?><?= $this->entry->isFavorite() ? ' favorite' : '' ?><?= $useKeepUnreadImportant && ($this->feed->priority() >= FreshRSS_Feed::PRIORITY_IMPORTANT) ? ' keep_unread ' : '' diff --git a/app/views/stats/idle.phtml b/app/views/stats/idle.phtml index b01e246fd..4e2a4eed7 100644 --- a/app/views/stats/idle.phtml +++ b/app/views/stats/idle.phtml @@ -41,7 +41,7 @@ <li class="item feed<?= $error_class, $empty_class, $mute_class ?>" title="<?= $error_title, $empty_title ?>"> <a class="configure open-slider" href="<?= _url('stats', 'feed', 'id', $feedInPeriod['id'], 'sub', 'idle') ?>" title="<?= _t('gen.action.manage') ?>"><?= _i('configure') ?></a><?php if (FreshRSS_Context::userConf()->show_favicons): ?><img class="favicon" src="<?= $feedInPeriod['favicon'] ?>" alt="✇" loading="lazy" /><?php - endif; ?><span title="<?= timestamptodate((int)($feedInPeriod['last_date']), false) ?>"><?= $feedInPeriod['name'] ?> + endif; ?><span title="<?= timestamptodate((int)($feedInPeriod['last_date']), hour: false) ?>"><?= $feedInPeriod['name'] ?> (<?= _t('admin.stats.number_entries', $feedInPeriod['nb_articles']) ?>)</span> </li> <?php } ?> |
