diff --git a/ApiReference.php b/ApiReference.php index 6559037..79dabd5 100644 --- a/ApiReference.php +++ b/ApiReference.php @@ -43,4 +43,16 @@ public function getClientSideTranslationKeys(&$translationKeys): void $translationKeys[] = 'ApiReference_UserAuthenticationManageTokens'; $translationKeys[] = 'ApiReference_UserAuthenticationUsingTokenAuth'; } + + public function install() + { + $config = new Configuration(); + $config->install(); + } + + public function uninstall() + { + $config = new Configuration(); + $config->uninstall(); + } } diff --git a/Configuration.php b/Configuration.php new file mode 100644 index 0000000..7c94f15 --- /dev/null +++ b/Configuration.php @@ -0,0 +1,70 @@ +getConfig(); + + $apiReferenceConfig = $config->ApiReference; + if (empty($apiReferenceConfig)) { + $apiReferenceConfig = array(); + } + + // we make sure to set a value only if none has been configured yet, eg in common config. + if (!array_key_exists(self::KEY_ENABLE_SPEC_GENERATION, $apiReferenceConfig)) { + $apiReferenceConfig[self::KEY_ENABLE_SPEC_GENERATION] = self::DEFAULT_ENABLE_SPEC_GENERATION; + } + + $config->ApiReference = $apiReferenceConfig; + $config->forceSave(); + } + + public function uninstall() + { + $config = $this->getConfig(); + $config->ApiReference = array(); + $config->forceSave(); + } + + + public function specGenerationEnabled() + { + $value = $this->getConfigValue(self::KEY_ENABLE_SPEC_GENERATION, self::DEFAULT_ENABLE_SPEC_GENERATION); + + if ($value === false || $value === '' || $value === null) { + $value = self::DEFAULT_ENABLE_SPEC_GENERATION; + } + + return (bool) $value; + } + + private function getConfigValue($name, $default) + { + $config = $this->getConfig(); + $attribution = $config->ApiReference; + if (isset($attribution[$name])) { + return $attribution[$name]; + } + return $default; + } + + private function getConfig() + { + return Config::getInstance(); + } +} diff --git a/Tasks.php b/Tasks.php index b4e1a6d..199c159 100644 --- a/Tasks.php +++ b/Tasks.php @@ -11,7 +11,6 @@ namespace Piwik\Plugins\ApiReference; -use Piwik\Config; use Piwik\Log\LoggerInterface; use Piwik\Plugins\ApiReference\Generation\PluginListProvider; use Piwik\Plugins\ApiReference\Generation\SpecGenerationService; @@ -32,15 +31,21 @@ class Tasks extends \Piwik\Plugin\Tasks * @var PluginListProvider */ private $pluginListProvider; + /** + * @var Configuration + */ + private $config; public function __construct( SpecGenerationService $specGenerationService, LoggerInterface $logger, - ?PluginListProvider $pluginListProvider = null + ?PluginListProvider $pluginListProvider = null, + ?Configuration $config = null ) { $this->specGenerationService = $specGenerationService; $this->logger = $logger; $this->pluginListProvider = $pluginListProvider ?? new PluginListProvider(); + $this->config = $config ?? new Configuration(); } public function schedule() @@ -77,6 +82,6 @@ public function generateConfiguredPluginSpecs(): void private function isSpecGenerationEnabled(): bool { - return (bool) (Config::getInstance()->ApiReference['enable_spec_generation_task'] ?? 0); + return $this->config->specGenerationEnabled(); } } diff --git a/tests/Unit/ConfigurationTest.php b/tests/Unit/ConfigurationTest.php new file mode 100644 index 0000000..4a99add --- /dev/null +++ b/tests/Unit/ConfigurationTest.php @@ -0,0 +1,83 @@ +originalConfig = Config::getInstance()->ApiReference ?? null; + } + + protected function tearDown(): void + { + Config::getInstance()->ApiReference = $this->originalConfig; + + parent::tearDown(); + } + + public function testInstallSetsDefaultWhenConfigKeyIsMissing(): void + { + Config::getInstance()->ApiReference = []; + + $configuration = new Configuration(); + $configuration->install(); + + $this->assertSame( + Configuration::DEFAULT_ENABLE_SPEC_GENERATION, + Config::getInstance()->ApiReference[Configuration::KEY_ENABLE_SPEC_GENERATION] + ); + } + + public function testInstallPreservesExplicitDisabledValue(): void + { + Config::getInstance()->ApiReference = [ + Configuration::KEY_ENABLE_SPEC_GENERATION => 0, + ]; + + $configuration = new Configuration(); + $configuration->install(); + + $this->assertSame(0, Config::getInstance()->ApiReference[Configuration::KEY_ENABLE_SPEC_GENERATION]); + } + + public function testUninstallClearsApiReferenceConfig(): void + { + Config::getInstance()->ApiReference = [ + Configuration::KEY_ENABLE_SPEC_GENERATION => 1, + 'another_key' => 'value', + ]; + + $configuration = new Configuration(); + $configuration->uninstall(); + + $this->assertSame([], Config::getInstance()->ApiReference); + } +}