diff options
Diffstat (limited to 'app/Models/Context.php')
| -rw-r--r-- | app/Models/Context.php | 54 |
1 files changed, 38 insertions, 16 deletions
diff --git a/app/Models/Context.php b/app/Models/Context.php index 2d22290bc..37a2064c6 100644 --- a/app/Models/Context.php +++ b/app/Models/Context.php @@ -10,11 +10,11 @@ final class FreshRSS_Context { /** * @var array<int,FreshRSS_Category> */ - public static array $categories = []; + private static array $categories = []; /** * @var array<int,FreshRSS_Tag> */ - public static array $tags = []; + private static array $tags = []; public static string $name = ''; public static string $description = ''; public static int $total_unread = 0; @@ -47,6 +47,7 @@ final class FreshRSS_Context { */ public static string $order = 'DESC'; public static int $number = 0; + public static int $offset = 0; public static FreshRSS_BooleanSearch $search; public static string $first_id = ''; public static string $next_id = ''; @@ -173,10 +174,33 @@ final class FreshRSS_Context { FreshRSS_Context::$user_conf = null; } + /** @return array<int,FreshRSS_Category> */ + public static function categories(): array { + if (empty(self::$categories)) { + $catDAO = FreshRSS_Factory::createCategoryDao(); + self::$categories = $catDAO->listSortedCategories(true, false); + } + return self::$categories; + } + + /** @return array<int,FreshRSS_Feed> */ + public static function feeds(): array { + return FreshRSS_Category::findFeeds(self::categories()); + } + + /** @return array<int,FreshRSS_Tag> */ + public static function labels(bool $precounts = false): array { + if (empty(self::$tags) || $precounts) { + $tagDAO = FreshRSS_Factory::createTagDao(); + self::$tags = $tagDAO->listTags($precounts) ?: []; + } + return self::$tags; + } + /** * This action updates the Context object by using request parameters. * - * Parameters are: + * HTTP GET request parameters are: * - state (default: conf->default_view) * - search (default: empty string) * - order (default: conf->sort_order) @@ -187,18 +211,15 @@ final class FreshRSS_Context { * @throws Minz_ConfigurationNamespaceException * @throws Minz_PDOConnectionException */ - public static function updateUsingRequest(): void { - if (empty(self::$categories)) { - $catDAO = FreshRSS_Factory::createCategoryDao(); - self::$categories = $catDAO->listSortedCategories(); + public static function updateUsingRequest(bool $computeStatistics): void { + if ($computeStatistics && self::$total_unread === 0) { + // Update number of read / unread variables. + $entryDAO = FreshRSS_Factory::createEntryDao(); + self::$total_starred = $entryDAO->countUnreadReadFavorites(); + self::$total_unread = FreshRSS_Category::countUnread(self::categories(), FreshRSS_Feed::PRIORITY_MAIN_STREAM); + self::$total_important_unread = FreshRSS_Category::countUnread(self::categories(), FreshRSS_Feed::PRIORITY_IMPORTANT); } - // Update number of read / unread variables. - $entryDAO = FreshRSS_Factory::createEntryDao(); - self::$total_starred = $entryDAO->countUnreadReadFavorites(); - self::$total_unread = FreshRSS_CategoryDAO::countUnread(self::$categories, FreshRSS_Feed::PRIORITY_MAIN_STREAM); - self::$total_important_unread = FreshRSS_CategoryDAO::countUnread(self::$categories, FreshRSS_Feed::PRIORITY_IMPORTANT); - self::_get(Minz_Request::paramString('get') ?: 'a'); self::$state = Minz_Request::paramInt('state') ?: FreshRSS_Context::userConf()->default_state; @@ -224,6 +245,7 @@ final class FreshRSS_Context { FreshRSS_Context::userConf()->max_posts_per_rss, FreshRSS_Context::userConf()->posts_per_page); } + self::$offset = Minz_Request::paramInt('offset'); self::$first_id = Minz_Request::paramString('next'); self::$sinceHours = Minz_Request::paramInt('hours'); } @@ -394,7 +416,7 @@ final class FreshRSS_Context { break; case 'f': // We try to find the corresponding feed. When allowing robots, always retrieve the full feed including description - $feed = FreshRSS_Context::systemConf()->allow_robots ? null : FreshRSS_CategoryDAO::findFeed(self::$categories, $id); + $feed = FreshRSS_Context::systemConf()->allow_robots ? null : FreshRSS_Category::findFeed(self::$categories, $id); if ($feed === null) { $feedDAO = FreshRSS_Factory::createFeedDao(); $feed = $feedDAO->searchById($id); @@ -417,7 +439,7 @@ final class FreshRSS_Context { if ($cat === null) { throw new FreshRSS_Context_Exception('Invalid category: ' . $id); } - //self::$categories[$id] = $cat; + self::$categories[$id] = $cat; } else { $cat = self::$categories[$id]; } @@ -433,7 +455,7 @@ final class FreshRSS_Context { if ($tag === null) { throw new FreshRSS_Context_Exception('Invalid tag: ' . $id); } - //self::$tags[$id] = $tag; + self::$tags[$id] = $tag; } else { $tag = self::$tags[$id]; } |
