diff options
| author | 2025-06-22 00:36:32 +0200 | |
|---|---|---|
| committer | 2025-06-22 00:36:32 +0200 | |
| commit | 51298cd6bc100b1cc6508abb602a59c01a9e2c04 (patch) | |
| tree | dc3ac061d48242ddb1dd4aaada009f531e2e08a7 /app/Models | |
| parent | bea9ca12adf58896a95959c4a1fbb48f4bbc144b (diff) | |
Exposed the reading modes for extensions through Minz (#7668)
* + Exposed the reading modes for extensions through Minz. Now extensions can add a custom view mode. Graceful fallback to normal view in case the extension was disabled without resetting the view_mode through the uninstall method. In that case the user will be informed via Minz_Request::setBadNotification that the view has been reset to normal.
+ Added translation strings for de, en and en-us for the notification
* + Added missing, generated translations
* Simplify indexAction, performance
* Minor settings htmlspecialchars
* i18n: fr
* Minor wording
* Doc
* Fix i18n
---------
Co-authored-by: Alexandre Alapetite <alexandre@alapetite.fr>
Diffstat (limited to 'app/Models')
| -rw-r--r-- | app/Models/View.php | 4 | ||||
| -rw-r--r-- | app/Models/ViewMode.php | 65 |
2 files changed, 69 insertions, 0 deletions
diff --git a/app/Models/View.php b/app/Models/View.php index dd616b888..11ca3a105 100644 --- a/app/Models/View.php +++ b/app/Models/View.php @@ -132,4 +132,8 @@ class FreshRSS_View extends Minz_View { public string $errorMessage; /** @var array<string,string> */ public array $message; + + // View modes + /** @var array<FreshRSS_ViewMode> */ + public array $viewModes; } diff --git a/app/Models/ViewMode.php b/app/Models/ViewMode.php new file mode 100644 index 000000000..54379b130 --- /dev/null +++ b/app/Models/ViewMode.php @@ -0,0 +1,65 @@ +<?php +declare(strict_types=1); + +/** + * Represents a view mode option for the reading configuration + */ +final class FreshRSS_ViewMode { + private string $id; + private string $name; + private string $controller; + private string $action; + + public function __construct(string $id, string $name, string $controller = 'index', string $action = '') { + $this->id = $id; + $this->name = $name; + $this->controller = $controller; + $this->action = $action ?: $id; + } + + public function id(): string { + return $this->id; + } + + public function name(): string { + return $this->name; + } + + public function controller(): string { + return $this->controller; + } + + public function action(): string { + return $this->action; + } + + /** + * @return array<string,FreshRSS_ViewMode> Mode ID => FreshRSS_ViewMode + */ + public static function getDefaultModes(): array { + return [ + 'normal' => new self(id: 'normal', name: _t('conf.reading.view.normal'), controller: 'index', action: 'normal'), + 'reader' => new self(id: 'reader', name: _t('conf.reading.view.reader'), controller: 'index', action: 'reader'), + 'global' => new self(id: 'global', name: _t('conf.reading.view.global'), controller: 'index', action: 'global'), + ]; + } + + /** + * @return array<string,FreshRSS_ViewMode> Mode ID => FreshRSS_ViewMode + */ + public static function getAllModes(): array { + $modes = self::getDefaultModes(); + + // Allow extensions to add their own view modes + $extensionModes = Minz_ExtensionManager::callHook('view_modes', []); + if (is_array($extensionModes)) { + foreach ($extensionModes as $mode) { + if ($mode instanceof FreshRSS_ViewMode) { + $modes[$mode->id()] = $mode; + } + } + } + + return $modes; + } +} |
