summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorGravatar Alexandre Alapetite <alexandre@alapetite.fr> 2018-01-01 20:49:18 +0100
committerGravatar GitHub <noreply@github.com> 2018-01-01 20:49:18 +0100
commita756878219f0c67674849c1bc1b881303d394ee7 (patch)
tree4c17b3e0574fa8b6ebd6d96bed4f883960401723
parent8c2113f9e6eb86b630a4e861513229d7abf219b8 (diff)
parent97d4250bd308175b72785f784d5b15e41ed7b04f (diff)
Merge pull request #1714 from kevinpapst/hook-readingmodes
Added extension hook for reading modes
-rw-r--r--app/Models/ReadingMode.php136
-rw-r--r--app/layout/nav_menu.phtml27
-rw-r--r--lib/Minz/ExtensionManager.php4
3 files changed, 153 insertions, 14 deletions
diff --git a/app/Models/ReadingMode.php b/app/Models/ReadingMode.php
new file mode 100644
index 000000000..1e97e228a
--- /dev/null
+++ b/app/Models/ReadingMode.php
@@ -0,0 +1,136 @@
+<?php
+
+/**
+ * Manage the reading modes in FreshRSS.
+ */
+class FreshRSS_ReadingMode {
+
+ /**
+ * @var string
+ */
+ protected $name;
+ /**
+ * @var string
+ */
+ protected $title;
+ /**
+ * @var string[]
+ */
+ protected $urlParams;
+ /**
+ * @var bool
+ */
+ protected $isActive = false;
+
+ /**
+ * ReadingMode constructor.
+ * @param string $name
+ * @param string $title
+ * @param string[] $urlParams
+ * @param bool $active
+ */
+ public function __construct($name, $title, $urlParams, $active) {
+ $this->name = $name;
+ $this->title = $title;
+ $this->urlParams = $urlParams;
+ $this->isActive = $active;
+ }
+
+ /**
+ * @return string
+ */
+ public function getName() {
+ return $this->name;
+ }
+
+ /**
+ * @param string $name
+ * @return FreshRSS_ReadingMode
+ */
+ public function setName($name) {
+ $this->name = $name;
+ return $this;
+ }
+
+ /**
+ * @return string
+ */
+ public function getTitle() {
+ return $this->title;
+ }
+
+ /**
+ * @param string $title
+ * @return FreshRSS_ReadingMode
+ */
+ public function setTitle($title) {
+ $this->title = $title;
+ return $this;
+ }
+
+ /**
+ * @return string
+ */
+ public function getUrlParams() {
+ return $this->urlParams;
+ }
+
+ /**
+ * @param string $urlParams
+ * @return FreshRSS_ReadingMode
+ */
+ public function setUrlParams($urlParams) {
+ $this->urlParams = $urlParams;
+ return $this;
+ }
+
+ /**
+ * @return bool
+ */
+ public function isActive() {
+ return $this->isActive;
+ }
+
+ /**
+ * @param bool $isActive
+ * @return FreshRSS_ReadingMode
+ */
+ public function setIsActive($isActive) {
+ $this->isActive = $isActive;
+ return $this;
+ }
+
+ /**
+ * Returns the built-in reading modes.
+ * return ReadingMode[]
+ */
+ public static function getReadingModes() {
+ $actualView = Minz_Request::actionName();
+ $defaultCtrl = Minz_Request::defaultControllerName();
+ $isDefaultCtrl = Minz_Request::controllerName() === $defaultCtrl;
+ $urlOutput = Minz_Request::currentRequest();
+
+ $readingModes = array(
+ new FreshRSS_ReadingMode(
+ _i("view-normal"),
+ _t('index.menu.normal_view'),
+ array_merge($urlOutput, array('c' => $defaultCtrl, 'a' => 'normal')),
+ ($isDefaultCtrl && $actualView === 'normal')
+ ),
+ new FreshRSS_ReadingMode(
+ _i("view-global"),
+ _t('index.menu.global_view'),
+ array_merge($urlOutput, array('c' => $defaultCtrl, 'a' => 'global')),
+ ($isDefaultCtrl && $actualView === 'global')
+ ),
+ new FreshRSS_ReadingMode(
+ _i("view-reader"),
+ _t('index.menu.reader_view'),
+ array_merge($urlOutput, array('c' => $defaultCtrl, 'a' => 'reader')),
+ ($isDefaultCtrl && $actualView === 'reader')
+ ),
+ );
+
+ return $readingModes;
+ }
+}
diff --git a/app/layout/nav_menu.phtml b/app/layout/nav_menu.phtml
index 2bc693e5d..7632b944c 100644
--- a/app/layout/nav_menu.phtml
+++ b/app/layout/nav_menu.phtml
@@ -131,20 +131,19 @@
<?php $url_output = Minz_Request::currentRequest(); ?>
<div class="stick" id="nav_menu_views">
- <?php $url_output['a'] = 'normal'; ?>
- <a class="view_normal btn <?php echo $actual_view == 'normal'? 'active' : ''; ?>" title="<?php echo _t('index.menu.normal_view'); ?>" href="<?php echo Minz_Url::display($url_output); ?>">
- <?php echo _i("view-normal"); ?>
- </a>
-
- <?php $url_output['a'] = 'global'; ?>
- <a class="view_global btn <?php echo $actual_view == 'global'? 'active' : ''; ?>" title="<?php echo _t('index.menu.global_view'); ?>" href="<?php echo Minz_Url::display($url_output); ?>">
- <?php echo _i("view-global"); ?>
- </a>
-
- <?php $url_output['a'] = 'reader'; ?>
- <a class="view_reader btn <?php echo $actual_view == 'reader'? 'active' : ''; ?>" title="<?php echo _t('index.menu.reader_view'); ?>" href="<?php echo Minz_Url::display($url_output); ?>">
- <?php echo _i("view-reader"); ?>
- </a>
+ <?php
+ $readingModes = FreshRSS_ReadingMode::getReadingModes();
+ $readingModes = Minz_ExtensionManager::callHook('nav_reading_modes', $readingModes);
+
+ /** @var FreshRSS_ReadingMode $mode */
+ foreach ($readingModes as $mode) {
+ ?>
+ <a class="view_normal btn <?php if ($mode->isActive()) { echo 'active'; } ?>" title="<?php echo $mode->getTitle(); ?>" href="<?php echo Minz_Url::display($mode->getUrlParams()); ?>">
+ <?php echo $mode->getName(); ?>
+ </a>
+ <?php
+ }
+ ?>
<?php
$url_output['a'] = 'rss';
diff --git a/lib/Minz/ExtensionManager.php b/lib/Minz/ExtensionManager.php
index 02a99701f..10c49a8b6 100644
--- a/lib/Minz/ExtensionManager.php
+++ b/lib/Minz/ExtensionManager.php
@@ -31,6 +31,10 @@ class Minz_ExtensionManager {
'list' => array(),
'signature' => 'NoneToNone',
),
+ 'nav_reading_modes' => array( // function($readingModes = array) -> array | null
+ 'list' => array(),
+ 'signature' => 'OneToOne',
+ ),
);
private static $ext_to_hooks = array();