aboutsummaryrefslogtreecommitdiff
path: root/app/Models/ViewMode.php
diff options
context:
space:
mode:
Diffstat (limited to 'app/Models/ViewMode.php')
-rw-r--r--app/Models/ViewMode.php65
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;
+ }
+}