Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
12 changes: 12 additions & 0 deletions ApiReference.php
Original file line number Diff line number Diff line change
Expand Up @@ -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();
}
}
70 changes: 70 additions & 0 deletions Configuration.php
Original file line number Diff line number Diff line change
@@ -0,0 +1,70 @@
<?php

/**
* Matomo - free/libre analytics platform
*
* @link https://matomo.org
* @license https://www.gnu.org/licenses/gpl-3.0.html GPL v3 or later
*/

namespace Piwik\Plugins\ApiReference;

use Piwik\Config;

class Configuration
{
public const DEFAULT_ENABLE_SPEC_GENERATION = 1;
public const KEY_ENABLE_SPEC_GENERATION = 'enable_spec_generation_task';

public function install()
{
$config = $this->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();
}
}
11 changes: 8 additions & 3 deletions Tasks.php
Original file line number Diff line number Diff line change
Expand Up @@ -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;
Expand All @@ -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()
Expand Down Expand Up @@ -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();
}
}
83 changes: 83 additions & 0 deletions tests/Unit/ConfigurationTest.php
Original file line number Diff line number Diff line change
@@ -0,0 +1,83 @@
<?php

/**
* Matomo - free/libre analytics platform
*
* @link https://matomo.org
* @license https://www.gnu.org/licenses/gpl-3.0.html GPL v3 or later
*/

declare(strict_types=1);

namespace Piwik\Plugins\ApiReference\tests\Unit;

require_once PIWIK_INCLUDE_PATH . '/plugins/ApiReference/vendor/autoload.php';

use PHPUnit\Framework\TestCase;
use Piwik\Config;
use Piwik\Plugins\ApiReference\Configuration;

/**
* @group ApiReference
* @group ApiReference_Unit
* @group ApiReference_ConfigurationTest
*/
class ConfigurationTest extends TestCase
{
/**
* @var mixed
*/
private $originalConfig;

protected function setUp(): void
{
parent::setUp();

$this->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);
}
}
Loading