diff options
Diffstat (limited to 'plugins')
-rw-r--r-- | plugins/CoreAdminHome/Controller.php | 7 | ||||
-rw-r--r-- | plugins/CoreAdminHome/javascripts/pluginSettings.js | 9 | ||||
-rw-r--r-- | plugins/CoreAdminHome/templates/pluginSettings.twig | 43 | ||||
-rw-r--r-- | plugins/ExampleSettingsPlugin/Settings.php | 49 |
4 files changed, 84 insertions, 24 deletions
diff --git a/plugins/CoreAdminHome/Controller.php b/plugins/CoreAdminHome/Controller.php index 21aeaa4cc8..2e5cf517b5 100644 --- a/plugins/CoreAdminHome/Controller.php +++ b/plugins/CoreAdminHome/Controller.php @@ -99,12 +99,12 @@ class Controller extends \Piwik\Plugin\ControllerAdmin { Piwik::checkUserIsNotAnonymous(); - $view = new View('@CoreAdminHome/pluginSettings'); - $settings = SettingsManager::getPluginSettingsForCurrentUser(); ksort($settings); + + $view = new View('@CoreAdminHome/pluginSettings'); $view->pluginSettings = $settings; - $view->nonce = Nonce::getNonce(static::SET_PLUGIN_SETTINGS_NONCE); + $view->nonce = Nonce::getNonce(static::SET_PLUGIN_SETTINGS_NONCE); $this->setBasicVariablesView($view); @@ -152,6 +152,7 @@ class Controller extends \Piwik\Plugin\ControllerAdmin } } catch (Exception $e) { + // TODO escape message echo json_encode(array('result' => 'error', 'message' => $e->getMessage())); return; } diff --git a/plugins/CoreAdminHome/javascripts/pluginSettings.js b/plugins/CoreAdminHome/javascripts/pluginSettings.js index 1146fb918f..084ef0cd38 100644 --- a/plugins/CoreAdminHome/javascripts/pluginSettings.js +++ b/plugins/CoreAdminHome/javascripts/pluginSettings.js @@ -47,7 +47,14 @@ $(document).ready(function () { $pluginSection = $(pluginSection); var pluginName = $pluginSection.attr('data-pluginname'); - var serialized = $('input, textarea, select', $pluginSection).serializeArray(); + var serialized = $('input, textarea, select:not([multiple])', $pluginSection).serializeArray(); + + // by default, it does not generate an array + var $multiSelects = $('select[multiple]', $pluginSection); + $multiSelects.each(function (index, multiSelect) { + var name = $(multiSelect).attr('name'); + serialized.push({name: name, value: $(multiSelect).val()}); + }); // by default, values of unchecked checkboxes are not send var $uncheckedNodes = $('input[type=checkbox]:not(:checked)', $pluginSection); diff --git a/plugins/CoreAdminHome/templates/pluginSettings.twig b/plugins/CoreAdminHome/templates/pluginSettings.twig index 4737acfb5b..f6d724b418 100644 --- a/plugins/CoreAdminHome/templates/pluginSettings.twig +++ b/plugins/CoreAdminHome/templates/pluginSettings.twig @@ -24,7 +24,7 @@ </p> {% endif %} - <table class="adminTable" style='width:820px;' id="pluginSettings" data-pluginname="{{ pluginName }}"> + <table class="adminTable" style='width:820px;' id="pluginSettings" data-pluginname="{{ pluginName|e('html_attr') }}"> {% for setting in settings.getSettingsForCurrentUser %} {% set settingValue = settings.getSettingValue(setting) %} @@ -61,36 +61,40 @@ {% for key, value in setting.fieldOptions %} <option value='{{ key }}' - {% if settingValue==key %} selected='selected' {% endif %}> + {% if settingValue is iterable and key in settingValue %} + selected='selected' + {% elseif settingValue==key %} + selected='selected' + {% endif %}> {{ value }} </option> {% endfor %} </select> {% elseif setting.field == 'textarea' %} - <textarea + <textarea style="width: 176px;" {% for attr, val in setting.fieldAttributes %} {{ attr|e('html_attr') }}="{{ val|e('html_attr') }}" {% endfor %} name="{{ setting.getKey|e('html_attr') }}" > - {{ settingValue }} + {{- settingValue -}} </textarea> {% else %} <input - {% for attr, val in setting.fieldAttributes %} - {{ attr|e('html_attr') }}="{{ val|e('html_attr') }}" - {% endfor %} - {% if setting.field == 'checkbox' %} - value="1" - {% endif %} - {% if setting.field == 'checkbox' and settingValue %} - checked="checked" - {% endif %} - type="{{ setting.field|e('html_attr') }}" - name="{{ setting.getKey|e('html_attr') }}" - value="{{ settingValue|e('html_attr') }}" + {% for attr, val in setting.fieldAttributes %} + {{ attr|e('html_attr') }}="{{ val|e('html_attr') }}" + {% endfor %} + {% if setting.field == 'checkbox' %} + value="1" + {% endif %} + {% if setting.field == 'checkbox' and settingValue %} + checked="checked" + {% endif %} + type="{{ setting.field|e('html_attr') }}" + name="{{ setting.getKey|e('html_attr') }}" + value="{{ settingValue|e('html_attr') }}" > {% endif %} @@ -98,7 +102,12 @@ {% if setting.defaultValue and setting.field != 'checkbox' %} <br/> <span class='form-description'> - {{ 'General_Default'|translate }} {{ setting.defaultValue }} + {{ 'General_Default'|translate }} + {% if setting.defaultValue is iterable %} + {{ setting.defaultValue|join(', ')|truncate(50) }} + {% else %} + {{ setting.defaultValue|truncate(50) }} + {% endif %} </span> {% endif %} diff --git a/plugins/ExampleSettingsPlugin/Settings.php b/plugins/ExampleSettingsPlugin/Settings.php index 400b74184d..89afa86b37 100644 --- a/plugins/ExampleSettingsPlugin/Settings.php +++ b/plugins/ExampleSettingsPlugin/Settings.php @@ -32,8 +32,17 @@ class Settings extends PluginSettings // User setting --> textbox converted to int defining a validator and filter $this->addSetting($this->getRefreshIntervalSetting()); - // System setting --> allows selection of a value + // System setting --> allows selection of a single value $this->addSetting($this->getMetricSetting()); + + // System setting --> allows selection of multiple values + $this->addSetting($this->getBrowsersSetting()); + + // System setting --> textarea + $this->addSetting($this->getDescriptionSetting()); + + // System setting --> textarea + $this->addSetting($this->getPasswordSetting()); } public function isAutoRefreshEnabled() @@ -93,10 +102,44 @@ class Settings extends PluginSettings $metric->type = static::TYPE_STRING; $metric->field = static::FIELD_SINGLE_SELECT; $metric->fieldOptions = array('nb_visits' => 'Visits', 'nb_actions' => 'Actions', 'visitors' => 'Visitors'); - $metric->introduction = 'Only super users can change this setting.'; - $metric->description = Piwik::translate('LiveTab_MetricDescription'); + $metric->introduction = 'Only super users can change the following settings:'; + $metric->description = 'Choose the metric that should be displayed in the browser tab'; $metric->defaultValue = 'nb_visits'; return $metric; } + + private function getBrowsersSetting() + { + $browsers = new SystemSetting('browsers', 'Supported Browsers'); + $browsers->type = static::TYPE_ARRAY; + $browsers->field = static::FIELD_MULTI_SELECT; + $browsers->fieldOptions = array('firefox' => 'Firefox', 'chromium' => 'Chromium', 'safari' => 'safari'); + $browsers->description = 'The value will be only displayed in the following browsers'; + $browsers->defaultValue = array('firefox', 'chromium', 'safari'); + + return $browsers; + } + + private function getDescriptionSetting() + { + $description = new SystemSetting('description', 'Description for value'); + $description->field = static::FIELD_TEXTAREA; + $description->description = 'This description will be displayed next to the value'; + $description->defaultValue = "This is the value: \nAnother line"; + + return $description; + } + + private function getPasswordSetting() + { + $description = new SystemSetting('password', 'API password'); + $description->field = static::FIELD_PASSWORD; + $description->description = 'Password for the 3rd API where we fetch the value'; + $description->filter = function ($value) { + return sha1($value . 'salt'); + }; + + return $description; + } } |