diff options
| author | 2023-05-11 12:53:32 +0200 | |
|---|---|---|
| committer | 2023-05-11 12:53:32 +0200 | |
| commit | fe7d9bbcd68660a59b813346c236b61b25a51c80 (patch) | |
| tree | 95be837c2838659a3ea72974c9f9b18b1ee634ca /app | |
| parent | 2343f0ded14ac6970575c23e4de34e536241b623 (diff) | |
Typed view model classes (#5380)
* Typed view model classes
* Add ability to provide a typed view model class to a controller
* Use `::class` instead of string for referring to classes
* Examplified with `stats` and `javascript` controllers / views (more to do)
* Also useful for extensions (my usecase today), which did not have the ability to define own view model attributes before.
* Typo
Diffstat (limited to 'app')
| -rw-r--r-- | app/Controllers/javascriptController.php | 7 | ||||
| -rw-r--r-- | app/Controllers/statsController.php | 7 | ||||
| -rw-r--r-- | app/FreshRSS.php | 2 | ||||
| -rw-r--r-- | app/Models/View.php | 44 | ||||
| -rw-r--r-- | app/Models/ViewJavascript.php | 16 | ||||
| -rw-r--r-- | app/Models/ViewStats.php | 55 | ||||
| -rw-r--r-- | app/views/javascript/actualize.phtml | 2 | ||||
| -rw-r--r-- | app/views/javascript/nbUnreadsPerFeed.phtml | 3 | ||||
| -rw-r--r-- | app/views/javascript/nonce.phtml | 2 | ||||
| -rw-r--r-- | app/views/stats/idle.phtml | 2 | ||||
| -rw-r--r-- | app/views/stats/index.phtml | 2 | ||||
| -rw-r--r-- | app/views/stats/repartition.phtml | 2 |
12 files changed, 93 insertions, 51 deletions
diff --git a/app/Controllers/javascriptController.php b/app/Controllers/javascriptController.php index ce25d03c9..d3f73b2f9 100644 --- a/app/Controllers/javascriptController.php +++ b/app/Controllers/javascriptController.php @@ -2,6 +2,13 @@ class FreshRSS_javascript_Controller extends FreshRSS_ActionController { + /** @var FreshRSS_ViewJavascript */ + protected $view; + + public function __construct() { + parent::__construct(FreshRSS_ViewJavascript::class); + } + public function firstAction(): void { $this->view->_layout(null); } diff --git a/app/Controllers/statsController.php b/app/Controllers/statsController.php index 79facbbf6..d9c4fe5f4 100644 --- a/app/Controllers/statsController.php +++ b/app/Controllers/statsController.php @@ -5,6 +5,13 @@ */ class FreshRSS_stats_Controller extends FreshRSS_ActionController { + /** @var FreshRSS_ViewStats */ + protected $view; + + public function __construct() { + parent::__construct(FreshRSS_ViewStats::class); + } + /** * This action is called before every other action in that class. It is * the common boilerplate for every action. It is triggered by the diff --git a/app/FreshRSS.php b/app/FreshRSS.php index 2e7ef6faa..12390b626 100644 --- a/app/FreshRSS.php +++ b/app/FreshRSS.php @@ -23,7 +23,7 @@ class FreshRSS extends Minz_FrontController { Minz_Session::init('FreshRSS'); } - Minz_ActionController::$viewType = 'FreshRSS_View'; + Minz_ActionController::$defaultViewType = FreshRSS_View::class; FreshRSS_Context::initSystem(); if (FreshRSS_Context::$system_conf == null) { diff --git a/app/Models/View.php b/app/Models/View.php index 3c56afa0e..cfa06da62 100644 --- a/app/Models/View.php +++ b/app/Models/View.php @@ -109,10 +109,6 @@ class FreshRSS_View extends Minz_View { // Form login /** @var int */ public $cookie_days; - /** @var string */ - public $nonce; - /** @var string */ - public $salt1; // Registration /** @var bool */ @@ -174,44 +170,4 @@ class FreshRSS_View extends Minz_View { /** @var array<string,string> */ public $message; - // Statistics - /** @var float */ - public $average; - /** @var float */ - public $averageDayOfWeek; - /** @var float */ - public $averageHour; - /** @var float */ - public $averageMonth; - /** @var array<string> */ - public $days; - /** @var array<string,array<int,int|string>> */ - public $entryByCategory; - /** @var array<int,int> */ - public $entryCount; - /** @var array<string,array<int,int|string>> */ - public $feedByCategory; - /** @var array<int, string> */ - public $hours24Labels; - /** @var array<string,array<int,array<string,int|string>>> */ - public $idleFeeds; - /** @var array<int,string> */ - public $last30DaysLabel; - /** @var array<int,string> */ - public $last30DaysLabels; - /** @var array<string,string> */ - public $months; - /** @var array{'total':int,'count_unreads':int,'count_reads':int,'count_favorites':int}|false */ - public $repartition; - /** @var array{'main_stream':array{'total':int,'count_unreads':int,'count_reads':int,'count_favorites':int}|false,'all_feeds':array{'total':int,'count_unreads':int,'count_reads':int,'count_favorites':int}|false} */ - public $repartitions; - /** @var array<int,int> */ - public $repartitionDayOfWeek; - /** @var array<string,int>|array<int,int> */ - public $repartitionHour; - /** @var array<int,int> */ - public $repartitionMonth; - /** @var array<array{'id':int,'name':string,'category':string,'count':int}> */ - public $topFeed; - } diff --git a/app/Models/ViewJavascript.php b/app/Models/ViewJavascript.php new file mode 100644 index 000000000..f14810572 --- /dev/null +++ b/app/Models/ViewJavascript.php @@ -0,0 +1,16 @@ +<?php + +final class FreshRSS_ViewJavascript extends FreshRSS_View { + + /** @var array<FreshRSS_Category> */ + public $categories; + /** @var array<FreshRSS_Feed> */ + public $feeds; + /** @var array<FreshRSS_Tag> */ + public $tags; + + /** @var string */ + public $nonce; + /** @var string */ + public $salt1; +} diff --git a/app/Models/ViewStats.php b/app/Models/ViewStats.php new file mode 100644 index 000000000..03e0bc00d --- /dev/null +++ b/app/Models/ViewStats.php @@ -0,0 +1,55 @@ +<?php + +final class FreshRSS_ViewStats extends FreshRSS_View { + + /** @var FreshRSS_Category|null */ + public $default_category; + /** @var array<FreshRSS_Category> */ + public $categories; + /** @var FreshRSS_Feed|null */ + public $feed; + /** @var array<FreshRSS_Feed> */ + public $feeds; + /** @var bool */ + public $displaySlider; + + /** @var float */ + public $average; + /** @var float */ + public $averageDayOfWeek; + /** @var float */ + public $averageHour; + /** @var float */ + public $averageMonth; + /** @var array<string> */ + public $days; + /** @var array<string,array<int,int|string>> */ + public $entryByCategory; + /** @var array<int,int> */ + public $entryCount; + /** @var array<string,array<int,int|string>> */ + public $feedByCategory; + /** @var array<int, string> */ + public $hours24Labels; + /** @var array<string,array<int,array<string,int|string>>> */ + public $idleFeeds; + /** @var array<int,string> */ + public $last30DaysLabel; + /** @var array<int,string> */ + public $last30DaysLabels; + /** @var array<string,string> */ + public $months; + /** @var array{'total':int,'count_unreads':int,'count_reads':int,'count_favorites':int}|false */ + public $repartition; + /** @var array{'main_stream':array{'total':int,'count_unreads':int,'count_reads':int,'count_favorites':int}|false,'all_feeds':array{'total':int,'count_unreads':int,'count_reads':int,'count_favorites':int}|false} */ + public $repartitions; + /** @var array<int,int> */ + public $repartitionDayOfWeek; + /** @var array<string,int>|array<int,int> */ + public $repartitionHour; + /** @var array<int,int> */ + public $repartitionMonth; + /** @var array<array{'id':int,'name':string,'category':string,'count':int}> */ + public $topFeed; + +} diff --git a/app/views/javascript/actualize.phtml b/app/views/javascript/actualize.phtml index 73890dd40..1a8af6e49 100644 --- a/app/views/javascript/actualize.phtml +++ b/app/views/javascript/actualize.phtml @@ -1,5 +1,5 @@ <?php -/** @var FreshRSS_View $this */ +/** @var FreshRSS_ViewJavascript $this */ $categories = []; foreach ($this->categories as $category) { diff --git a/app/views/javascript/nbUnreadsPerFeed.phtml b/app/views/javascript/nbUnreadsPerFeed.phtml index 261f2a179..4864b429a 100644 --- a/app/views/javascript/nbUnreadsPerFeed.phtml +++ b/app/views/javascript/nbUnreadsPerFeed.phtml @@ -1,5 +1,6 @@ -<?php /** @var FreshRSS_View $this */ ?> <?php +/** @var FreshRSS_ViewJavascript $this */ + $result = array( 'feeds' => array(), 'tags' => array(), diff --git a/app/views/javascript/nonce.phtml b/app/views/javascript/nonce.phtml index f565baa85..df1389f15 100644 --- a/app/views/javascript/nonce.phtml +++ b/app/views/javascript/nonce.phtml @@ -1,3 +1,3 @@ -<?php /** @var FreshRSS_View $this */ ?> <?php +/** @var FreshRSS_ViewJavascript $this */ echo json_encode(array('salt1' => $this->salt1, 'nonce' => $this->nonce)); diff --git a/app/views/stats/idle.phtml b/app/views/stats/idle.phtml index d94256860..37cc92144 100644 --- a/app/views/stats/idle.phtml +++ b/app/views/stats/idle.phtml @@ -1,5 +1,5 @@ <?php - /** @var FreshRSS_View $this */ + /** @var FreshRSS_ViewStats $this */ $this->partial('aside_subscription'); ?> diff --git a/app/views/stats/index.phtml b/app/views/stats/index.phtml index a9958ee54..f4c87315f 100644 --- a/app/views/stats/index.phtml +++ b/app/views/stats/index.phtml @@ -1,5 +1,5 @@ <?php - /** @var FreshRSS_View $this */ + /** @var FreshRSS_ViewStats $this */ $this->partial('aside_subscription'); ?> diff --git a/app/views/stats/repartition.phtml b/app/views/stats/repartition.phtml index 400cdd7fa..80e3c1a6a 100644 --- a/app/views/stats/repartition.phtml +++ b/app/views/stats/repartition.phtml @@ -1,5 +1,5 @@ <?php - /** @var FreshRSS_View $this */ + /** @var FreshRSS_ViewStats $this */ $this->partial('aside_subscription'); ?> |
