Skip to content

Commit

Permalink
refs #4126 added some tests, fixed some bugs and moved some methods w…
Browse files Browse the repository at this point in the history
…here they belong to not have a circular dependency
  • Loading branch information
tsteur committed Oct 24, 2013
1 parent 979e289 commit d467c9a
Show file tree
Hide file tree
Showing 3 changed files with 608 additions and 37 deletions.
60 changes: 51 additions & 9 deletions core/Plugin/Settings.php
Expand Up @@ -85,9 +85,9 @@ public function getIntroduction()
*/
public function getSettingsForCurrentUser()
{
return array_values(array_filter($this->getSettings(), function (Setting $setting) {
return array_filter($this->getSettings(), function (Setting $setting) {
return $setting->canBeDisplayedForCurrentUser();
}));
});
}

/**
Expand All @@ -113,6 +113,8 @@ public function save()
*/
public function removeAllPluginSettings()
{
Piwik::checkUserIsSuperUser();

Option::delete($this->getOptionKey());
}

Expand Down Expand Up @@ -159,7 +161,7 @@ public function setSettingValue(Setting $setting, $value)

if ($setting->filter && $setting->filter instanceof \Closure) {
$value = call_user_func($setting->filter, $value, $setting);
} else {
} elseif (isset($setting->type)) {
settype($value, $setting->type);
}

Expand All @@ -174,6 +176,8 @@ public function setSettingValue(Setting $setting, $value)
*/
public function removeSettingValue(Setting $setting)
{
$this->checkHasEnoughPermission($setting);

$key = $setting->getKey();

if (array_key_exists($key, $this->settingsValues)) {
Expand All @@ -200,9 +204,12 @@ protected function addSetting(Setting $setting)
}

if (!is_null($setting->field) && is_null($setting->type)) {
$setting->type = $setting->getDefaultType($setting->field);
$setting->type = $this->getDefaultType($setting->field);
} elseif (!is_null($setting->type) && is_null($setting->field)) {
$setting->field = $setting->getDefaultField($setting->type);
$setting->field = $this->getDefaultField($setting->type);
} elseif (is_null($setting->field) && is_null($setting->type)) {
$setting->type = static::TYPE_STRING;
$setting->field = static::FIELD_TEXT;
}

if (is_null($setting->validate) && !is_null($setting->fieldOptions)) {
Expand Down Expand Up @@ -250,10 +257,7 @@ private function checkIsValidSetting($name)
throw new \Exception(sprintf('The setting %s does not exist', $name));
}

if (!$setting->canBeDisplayedForCurrentUser()) {
$errorMsg = Piwik::translate('PluginSettingChangeNotAllowed', array($name, $this->pluginName));
throw new \Exception($errorMsg);
}
$this->checkHasEnoughPermission($setting);
}

/**
Expand All @@ -267,4 +271,42 @@ private function getSetting($name)
}
}

private function getDefaultType($field)
{
$defaultTypes = array(
static::FIELD_TEXT => static::TYPE_STRING,
static::FIELD_TEXTAREA => static::TYPE_STRING,
static::FIELD_PASSWORD => static::TYPE_STRING,
static::FIELD_CHECKBOX => static::TYPE_BOOL,
static::FIELD_MULTI_SELECT => static::TYPE_ARRAY,
static::FIELD_SINGLE_SELECT => static::TYPE_STRING,
);

return $defaultTypes[$field];
}

private function getDefaultField($type)
{
$defaultFields = array(
static::TYPE_INT => static::FIELD_TEXT,
static::TYPE_FLOAT => static::FIELD_TEXT,
static::TYPE_STRING => static::FIELD_TEXT,
static::TYPE_BOOL => static::FIELD_CHECKBOX,
static::TYPE_ARRAY => static::FIELD_MULTI_SELECT,
);

return $defaultFields[$type];
}

/**
* @param $setting
* @throws \Exception
*/
private function checkHasEnoughPermission(Setting $setting)
{
if (!$setting->canBeDisplayedForCurrentUser()) {
$errorMsg = Piwik::translate('CoreAdminHome_PluginSettingChangeNotAllowed', array($setting->getName(), $this->pluginName));
throw new \Exception($errorMsg);
}
}
}
30 changes: 2 additions & 28 deletions core/Settings/Setting.php
Expand Up @@ -27,14 +27,14 @@ abstract class Setting
*
* @var string
*/
public $type = Settings::TYPE_STRING;
public $type = null;

/**
* Defines which field type should be displayed on the setting page.
*
* @var string
*/
public $field = Settings::FIELD_TEXT;
public $field = null;

/**
* An array of field attributes that will be added as HTML attributes to the HTML form field.
Expand Down Expand Up @@ -161,30 +161,4 @@ public function getKey()
return $this->key;
}

public function getDefaultType($field)
{
$defaultTypes = array(
Settings::FIELD_TEXT => Settings::TYPE_STRING,
Settings::FIELD_TEXTAREA => Settings::TYPE_STRING,
Settings::FIELD_PASSWORD => Settings::TYPE_STRING,
Settings::FIELD_CHECKBOX => Settings::TYPE_BOOL,
Settings::FIELD_MULTI_SELECT => Settings::TYPE_ARRAY,
Settings::FIELD_SINGLE_SELECT => Settings::TYPE_STRING,
);

return $defaultTypes[$field];
}

public function getDefaultField($type)
{
$defaultFields = array(
Settings::TYPE_INT => Settings::FIELD_TEXT,
Settings::TYPE_FLOAT => Settings::FIELD_TEXT,
Settings::TYPE_STRING => Settings::FIELD_TEXT,
Settings::TYPE_BOOL => Settings::FIELD_CHECKBOX,
Settings::TYPE_ARRAY => Settings::FIELD_MULTI_SELECT,
);

return $defaultFields[$type];
}
}

0 comments on commit d467c9a

Please sign in to comment.