قرینه از
https://github.com/matomo-org/matomo.git
synced 2025-08-21 22:47:43 +00:00

* Add feature flags plugin w/ config implementation and example feature * Make sure FeatureFlags plugin always loaded * Don't use DI for test feature, create new migration / version for the plugin * Add license info to files * Update screenshot tests * Update screenshot tests * Show HTML tag in markup * Update plugins/FeatureFlags/config/config.php Co-authored-by: Michal Kleiner <michal@innocraft.com> * Change Feature class names to NameFeatureFlag * Increase version * Increase version * Fix migration file name * Don't use DI for test feature, create new migration / version for the plugin * remove not needed migration * Make interface easier to use so you don't have to pass objects but just class names. * Move flags to DI and write more tests * Add command + system tests * Fix cs problems * Fix problem with example flag in home controller * Fix CS issues * Tidy up command * Update plugins/FeatureFlags/config/config.php Co-authored-by: Michal Kleiner <michal@innocraft.com> * Remove dependency on DI for feature flag manager * Split command into 3 commands, and rely on plugin manager rather than DI * Use constants for storage implementation * Use correct implementation of manager * Update deletion to not depend on concrete class * Remove plugin from pluginToAlwaysActivate and add plugin.json file * Fix spacing * Remove orphaned test * Remove extra closing bracket * Fix desc of command * Remove plugins.json and plugin base class * Fix config DI * Add plugin to list of always activated plugins * ensure to automatically activate newly added plugins, that are enabled by default * Ensure to always load di config of always activated plugins * Update expected screenshots --------- Co-authored-by: Michal Kleiner <michal@innocraft.com> Co-authored-by: sgiehl <stefan@matomo.org> Co-authored-by: Marc Neudert <marc@innocraft.com>
111 خطوط
2.9 KiB
PHP
111 خطوط
2.9 KiB
PHP
<?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\FeatureFlags\Storage;
|
|
|
|
use Exception;
|
|
use Piwik\Config;
|
|
use Piwik\Plugins\FeatureFlags\FeatureFlagInterface;
|
|
use Piwik\Plugins\FeatureFlags\FeatureFlagStorageInterface;
|
|
|
|
class ConfigFeatureFlagStorage implements FeatureFlagStorageInterface
|
|
{
|
|
private const CONFIG_FEATURE_NAME_SUFFIX = '_feature';
|
|
private const CONFIG_FEATURE_ENABLED_VALUE = 'enabled';
|
|
private const CONFIG_FEATURE_DISABLED_VALUE = 'disabled';
|
|
|
|
/**
|
|
* @var Config
|
|
*/
|
|
private $config;
|
|
|
|
/**
|
|
* @internal
|
|
* @param Config $config
|
|
*/
|
|
public function __construct(Config $config)
|
|
{
|
|
$this->config = $config;
|
|
}
|
|
|
|
/**
|
|
* @internal
|
|
* @param FeatureFlagInterface $feature
|
|
* @return bool|null
|
|
*/
|
|
public function isFeatureActive(FeatureFlagInterface $feature): ?bool
|
|
{
|
|
try {
|
|
$featureFlagsConfig = $this->config->FeatureFlags;
|
|
} catch (Exception $e) {
|
|
return false;
|
|
};
|
|
|
|
$configNameForFeature = $this->getConfigNameForFeature($feature->getName());
|
|
|
|
if (!isset($featureFlagsConfig[$configNameForFeature])) {
|
|
return null;
|
|
}
|
|
|
|
$flagValue = $featureFlagsConfig[$configNameForFeature];
|
|
|
|
return $flagValue === self::CONFIG_FEATURE_ENABLED_VALUE;
|
|
}
|
|
|
|
/**
|
|
* @internal
|
|
* @param FeatureFlagInterface $feature
|
|
* @return void
|
|
*/
|
|
public function disableFeatureFlag(FeatureFlagInterface $feature): void
|
|
{
|
|
if (!isset($this->config->FeatureFlags[$this->getConfigNameForFeature($feature->getName())])) {
|
|
return;
|
|
}
|
|
|
|
$this->config->FeatureFlags[$this->getConfigNameForFeature($feature->getName())] = self::CONFIG_FEATURE_DISABLED_VALUE;
|
|
$this->config->forceSave();
|
|
}
|
|
|
|
/**
|
|
* @internal
|
|
* @param FeatureFlagInterface $feature
|
|
* @return void
|
|
*/
|
|
public function enableFeatureFlag(FeatureFlagInterface $feature): void
|
|
{
|
|
if (!isset($this->config->FeatureFlags)) {
|
|
$this->config->FeatureFlags = [];
|
|
}
|
|
|
|
$this->config->FeatureFlags[$this->getConfigNameForFeature($feature->getName())] = self::CONFIG_FEATURE_ENABLED_VALUE;
|
|
$this->config->forceSave();
|
|
}
|
|
|
|
/**
|
|
* @internal
|
|
* @param string $feature
|
|
* @return void
|
|
*/
|
|
public function deleteFeatureFlag(string $featureName): void
|
|
{
|
|
if (!isset($this->config->FeatureFlags[$this->getConfigNameForFeature($featureName)])) {
|
|
return;
|
|
}
|
|
|
|
unset($this->config->FeatureFlags[$this->getConfigNameForFeature($featureName)]);
|
|
$this->config->forceSave();
|
|
}
|
|
|
|
private function getConfigNameForFeature(string $featureName): string
|
|
{
|
|
return $featureName . self::CONFIG_FEATURE_NAME_SUFFIX;
|
|
}
|
|
}
|