aboutsummaryrefslogtreecommitdiffstatshomepage
diff options
context:
space:
mode:
-rw-r--r--docs/en/developers/03_Backend/05_Extensions.md3
-rw-r--r--lib/Minz/Configuration.php9
-rw-r--r--lib/Minz/Extension.php73
3 files changed, 85 insertions, 0 deletions
diff --git a/docs/en/developers/03_Backend/05_Extensions.md b/docs/en/developers/03_Backend/05_Extensions.md
index ba3f10e4f..62eaa5410 100644
--- a/docs/en/developers/03_Backend/05_Extensions.md
+++ b/docs/en/developers/03_Backend/05_Extensions.md
@@ -300,6 +300,9 @@ The `Minz_Extension` abstract class defines another set of methods that should n
* the `registerViews` method registers the extension views in FreshRSS.
* the `registerTranslates` method registers the extension translation files in FreshRSS.
* the `registerHook` method registers hook actions in different part of the application.
+* the `getUserConfiguration` method retrieves the extension configuration for the current user.
+* the `setUserConfiguration` method stores the extension configuration for the current user.
+* the `removeUserConfiguration` method removes the extension configuration for the current user.
> Note that if you modify the later set of methods, you might break the extension system. Thus making FreshRSS unusable. So it's highly recommended to let those unmodified.
diff --git a/lib/Minz/Configuration.php b/lib/Minz/Configuration.php
index 3cf356a2b..7c60c7567 100644
--- a/lib/Minz/Configuration.php
+++ b/lib/Minz/Configuration.php
@@ -141,6 +141,15 @@ class Minz_Configuration {
}
/**
+ * Check if a parameter is defined in the configuration
+ *
+ * @return bool
+ */
+ public function hasParam(string $key) {
+ return isset($this->data[$key]);
+ }
+
+ /**
* Return the value of the given param.
*
* @param $key the name of the param.
diff --git a/lib/Minz/Extension.php b/lib/Minz/Extension.php
index 6b13f5a4e..e463c03c4 100644
--- a/lib/Minz/Extension.php
+++ b/lib/Minz/Extension.php
@@ -11,6 +11,7 @@ abstract class Minz_Extension {
private $description;
private $version;
private $type;
+ private $config_key = 'extensions';
public static $authorized_types = array(
'system',
@@ -195,4 +196,76 @@ abstract class Minz_Extension {
public function registerHook($hook_name, $hook_function) {
Minz_ExtensionManager::addHook($hook_name, $hook_function, $this);
}
+
+ /**
+ * @return bool
+ */
+ private function isUserConfigurationEnabled() {
+ if (!class_exists('FreshRSS_Context', false)) {
+ return false;
+ }
+ if (null === FreshRSS_Context::$user_conf) {
+ return false;
+ }
+ return true;
+ }
+
+ /**
+ * @return bool
+ */
+ private function isExtensionConfigured() {
+ if (!FreshRSS_Context::$user_conf->hasParam($this->config_key)) {
+ return false;
+ }
+
+ $extensions = FreshRSS_Context::$user_conf->{$this->config_key};
+ return array_key_exists($this->getName(), $extensions);
+ }
+
+ /**
+ * @return array
+ */
+ public function getUserConfiguration() {
+ if (!$this->isUserConfigurationEnabled()) {
+ return [];
+ }
+ if (!$this->isExtensionConfigured()) {
+ return [];
+ }
+
+ return FreshRSS_Context::$user_conf->{$this->config_key}[$this->getName()];
+ }
+
+ public function setUserConfiguration(array $configuration) {
+ if (!$this->isUserConfigurationEnabled()) {
+ return;
+ }
+ if ($this->isExtensionConfigured()) {
+ $extensions = FreshRSS_Context::$user_conf->{$this->config_key};
+ } else {
+ $extensions = [];
+ }
+ $extensions[$this->getName()] = $configuration;
+
+ FreshRSS_Context::$user_conf->{$this->config_key} = $extensions;
+ FreshRSS_Context::$user_conf->save();
+ }
+
+ public function removeUserConfiguration(){
+ if (!$this->isUserConfigurationEnabled()) {
+ return;
+ }
+ if (!$this->isExtensionConfigured()) {
+ return;
+ }
+
+ $extensions = FreshRSS_Context::$user_conf->{$this->config_key};
+ unset($extensions[$this->getName()]);
+ if (empty($extensions)) {
+ $extensions = null;
+ }
+
+ FreshRSS_Context::$user_conf->{$this->config_key} = $extensions;
+ FreshRSS_Context::$user_conf->save();
+ }
}