diff options
Diffstat (limited to 'app/Models/ViewMode.php')
| -rw-r--r-- | app/Models/ViewMode.php | 65 |
1 files changed, 65 insertions, 0 deletions
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; + } +} |
