Skip to content
Extraits de code Groupes Projets
Valider f2634f9e rédigé par Thomas Steur's avatar Thomas Steur
Parcourir les fichiers
refs https://github.com/piwik/plugin-QueuedTracking/issues/21 allow any plugin setting to be overwritten in the config file
parent 95ca1edf
Aucune branche associée trouvée
Aucune étiquette associée trouvée
Aucune requête de fusion associée trouvée
......@@ -9,6 +9,7 @@
namespace Piwik\Settings;
use Piwik\Config;
use Piwik\Piwik;
/**
......@@ -58,6 +59,10 @@ class SystemSetting extends Setting
*/
public function isWritableByCurrentUser()
{
if ($this->hasConfigValue()) {
return false;
}
return $this->writableByCurrentUser;
}
......@@ -80,4 +85,34 @@ class SystemSetting extends Setting
{
return 30;
}
public function getValue()
{
$defaultValue = parent::getValue(); // we access value first to make sure permissions are checked
$configValue = $this->getValueFromConfig();
if (isset($configValue)) {
$defaultValue = $configValue;
settype($defaultValue, $this->type);
}
return $defaultValue;
}
private function hasConfigValue()
{
$value = $this->getValueFromConfig();
return isset($value);
}
private function getValueFromConfig()
{
$config = Config::getInstance()->{$this->pluginName};
if (!empty($config) && array_key_exists($this->name, $config)) {
return $config[$this->name];
}
}
}
......@@ -8,7 +8,9 @@
namespace Piwik\Tests\Integration\Settings;
use Piwik\Config;
use Piwik\Db;
use Piwik\Plugin\Settings;
use Piwik\Settings\SystemSetting;
/**
......@@ -19,6 +21,12 @@ use Piwik\Settings\SystemSetting;
class SystemSettingTest extends IntegrationTestCase
{
public function tearDown()
{
Config::getInstance()->MyPluginName = array();
parent::tearDown();
}
public function test_constructor_shouldNotEstablishADatabaseConnection()
{
$this->assertNotDbConnectionCreated();
......@@ -113,6 +121,74 @@ class SystemSettingTest extends IntegrationTestCase
$this->assertEquals('', $setting->getValue());
}
public function test_getSettingValue_fromConfig_IfOneIsConfiguredInsteadOfTheValueFromDatabase()
{
$this->setSuperUser();
$setting = $this->addSystemSetting('myusersetting', 'mytitle');
$setting->setPluginName('MyPluginName');
$setting->setValue('test');
$this->assertEquals('test', $setting->getValue());
Config::getInstance()->MyPluginName = array('myusersetting' => 'mynewvalue');
$value = $setting->getValue();
$this->assertEquals('mynewvalue', $value);
}
public function test_getSettingValue_fromConfig_ShouldConvertToTheSpecifiedType()
{
$this->setSuperUser();
$setting = $this->addSystemSetting('myusersetting', 'mytitle');
$setting->setPluginName('MyPluginName');
Config::getInstance()->MyPluginName = array('myusersetting' => '1');
$this->assertSame('1', $setting->getValue());
$setting->type = Settings::TYPE_BOOL;
$this->assertTrue($setting->getValue());
}
public function test_getSettingValue_fromConfig_isCaseSensitive()
{
$this->setSuperUser();
$setting = $this->addSystemSetting('myUsersetting', 'mytitle');
$setting->setPluginName('MyPluginName');
Config::getInstance()->MyPluginName = array('myusersetting' => '1');
$this->assertNull($setting->getValue());
Config::getInstance()->MyPluginName = array('myUsersetting' => '1');
$this->assertSame('1', $setting->getValue());
}
public function test_getSettingsValue_fromConfig_ShouldSetObjectToNotWritableAsSoonAsAValueIsConfigured()
{
$this->setSuperUser();
$setting = $this->addSystemSetting('myusersetting', 'mytitle');
$setting->setPluginName('MyPluginName');
$this->assertTrue($setting->isWritableByCurrentUser());
Config::getInstance()->MyPluginName = array('myusersetting' => '0');
$this->assertFalse($setting->isWritableByCurrentUser());
}
/**
* @expectedException \Exception
* @expectedExceptionMessage CoreAdminHome_PluginSettingChangeNotAllowed
*/
public function test_setSettingsValue_shouldNotBePossible_AsSoonAsAConfigValueIsConfigured()
{
$this->setSuperUser();
$setting = $this->addSystemSetting('myusersetting', 'mytitle');
$setting->setPluginName('MyPluginName');
Config::getInstance()->MyPluginName = array('myusersetting' => '0');
$setting->setValue('test');
}
/**
* @expectedException \Exception
* @expectedExceptionMessage CoreAdminHome_PluginSettingChangeNotAllowed
......
0% Chargement en cours ou .
You are about to add 0 people to the discussion. Proceed with caution.
Veuillez vous inscrire ou vous pour commenter