From b3dfd3409f661ef27d5916d80a5ffc9c87fbe87a Mon Sep 17 00:00:00 2001
From: Thomas Steur <thomas.steur@gmail.com>
Date: Thu, 31 Oct 2013 19:55:31 +0000
Subject: [PATCH] refs #4126 added possibility to define radio boxes

---
 core/Plugin/Settings.php                      |  2 ++
 .../templates/pluginSettings.twig             | 18 +++++++++++++++++
 plugins/ExampleSettingsPlugin/Settings.php    | 20 +++++++++++++++++--
 3 files changed, 38 insertions(+), 2 deletions(-)

diff --git a/core/Plugin/Settings.php b/core/Plugin/Settings.php
index 233b969207..8b1ad09365 100644
--- a/core/Plugin/Settings.php
+++ b/core/Plugin/Settings.php
@@ -29,6 +29,7 @@ abstract class Settings implements StorageInterface
     const TYPE_BOOL   = 'boolean';
     const TYPE_ARRAY  = 'array';
 
+    const FIELD_RADIO    = 'radio';
     const FIELD_TEXT     = 'text';
     const FIELD_TEXTAREA = 'textarea';
     const FIELD_CHECKBOX = 'checkbox';
@@ -281,6 +282,7 @@ abstract class Settings implements StorageInterface
             static::FIELD_PASSWORD      => static::TYPE_STRING,
             static::FIELD_CHECKBOX      => static::TYPE_BOOL,
             static::FIELD_MULTI_SELECT  => static::TYPE_ARRAY,
+            static::FIELD_RADIO         => static::TYPE_STRING,
             static::FIELD_SINGLE_SELECT => static::TYPE_STRING,
         );
 
diff --git a/plugins/CoreAdminHome/templates/pluginSettings.twig b/plugins/CoreAdminHome/templates/pluginSettings.twig
index 15de08bce7..ac87faa2fa 100644
--- a/plugins/CoreAdminHome/templates/pluginSettings.twig
+++ b/plugins/CoreAdminHome/templates/pluginSettings.twig
@@ -89,6 +89,24 @@
                                     >
                                     {{- settingValue -}}
                                 </textarea>
+                            {% elseif setting.field == 'radio' %}
+
+                                {% for key, value in setting.fieldOptions %}
+
+                                    {{ value }}
+
+                                    <input
+                                        {% for attr, val in setting.fieldAttributes %}
+                                            {{ attr|e('html_attr') }}="{{ val|e('html_attr') }}"
+                                        {% endfor %}
+                                        {% if settingValue==key %}
+                                            checked="checked"
+                                        {% endif %}
+                                        type="radio"
+                                        value="{{ key|e('html_attr') }}"
+                                        name="{{ setting.getKey|e('html_attr') }}" />
+                                {% endfor %}
+
                             {% else %}
 
                                 <input
diff --git a/plugins/ExampleSettingsPlugin/Settings.php b/plugins/ExampleSettingsPlugin/Settings.php
index 44282ddc52..140dc477cd 100644
--- a/plugins/ExampleSettingsPlugin/Settings.php
+++ b/plugins/ExampleSettingsPlugin/Settings.php
@@ -31,6 +31,9 @@ class Settings extends \Piwik\Plugin\Settings
     /** @var UserSetting */
     public $refreshInterval;
 
+    /** @var UserSetting */
+    public $color;
+
     /** @var SystemSetting */
     public $metric;
 
@@ -53,6 +56,9 @@ class Settings extends \Piwik\Plugin\Settings
         // User setting --> textbox converted to int defining a validator and filter
         $this->createRefreshIntervalSetting();
 
+        // User setting --> readio
+        $this->createColorSetting();
+
         // System setting --> allows selection of a single value
         $this->createMetricSetting();
 
@@ -60,10 +66,10 @@ class Settings extends \Piwik\Plugin\Settings
         $this->createBrowsersSetting();
 
         // System setting --> textarea
-         $this->createDescriptionSetting();
+        $this->createDescriptionSetting();
 
         // System setting --> textarea
-         $this->createPasswordSetting();
+        $this->createPasswordSetting();
     }
 
     private function createAutoRefreshSetting()
@@ -95,6 +101,16 @@ class Settings extends \Piwik\Plugin\Settings
         $this->addSetting($this->refreshInterval);
     }
 
+    private function createColorSetting()
+    {
+        $this->color        = new UserSetting('color', 'Color');
+        $this->color->field = static::FIELD_RADIO;
+        $this->color->description  = 'Pick your favourite color';
+        $this->color->fieldOptions = array('red' => 'Red', 'blue' => 'Blue', 'green' => 'Green');
+
+        $this->addSetting($this->color);
+    }
+
     private function createMetricSetting()
     {
         $this->metric        = new SystemSetting('metric', 'Metric to display');
-- 
GitLab