From fe249a18be42e9969265b0e99cb3755ab80b560e Mon Sep 17 00:00:00 2001 From: Thomas Gelf Date: Thu, 13 Jul 2017 15:23:28 +0200 Subject: [PATCH] Settings: use ipl, clean up, fix array handling --- application/controllers/ConfigController.php | 24 +++++---------- application/forms/SettingsForm.php | 4 +-- .../Dashboard/Dashlet/SettingsDashlet.php | 30 +++++++++++++++++++ .../Dashboard/InfrastructureDashboard.php | 1 + library/Director/Settings.php | 19 ++++++++++-- 5 files changed, 57 insertions(+), 21 deletions(-) create mode 100644 library/Director/Dashboard/Dashlet/SettingsDashlet.php diff --git a/application/controllers/ConfigController.php b/application/controllers/ConfigController.php index 04bef9de..de668a04 100644 --- a/application/controllers/ConfigController.php +++ b/application/controllers/ConfigController.php @@ -3,6 +3,7 @@ namespace Icinga\Module\Director\Controllers; use Icinga\Module\Director\ConfigDiff; +use Icinga\Module\Director\Forms\SettingsForm; use Icinga\Module\Director\IcingaConfig\IcingaConfig; use Icinga\Module\Director\Settings; use Icinga\Module\Director\Util; @@ -144,14 +145,13 @@ class ConfigController extends ActionController { $this->assertPermission('director/admin'); - $this->overviewTabs()->activate('settings'); - $this->view->title = $this->translate('Settings'); - $this->view->form = $this - ->loadForm('Settings') + $this->addSingleTab($this->translate('Settings')) + ->addTitle($this->translate('Global Director Settings')); + $this->content()->add( + SettingsForm::load() ->setSettings(new Settings($this->db())) - ->handleRequest(); - - $this->setViewScript('object/form'); + ->handleRequest() + ); } // Show all files for a given config @@ -346,15 +346,7 @@ class ConfigController extends ActionController ) ); } - if ($this->hasPermission('director/admin')) { - $tabs->add( - 'settings', - array( - 'label' => $this->translate('Settings'), - 'url' => 'director/config/settings' - ) - ); - } + return $this->view->tabs; } diff --git a/application/forms/SettingsForm.php b/application/forms/SettingsForm.php index f1e401b4..c6b8152e 100644 --- a/application/forms/SettingsForm.php +++ b/application/forms/SettingsForm.php @@ -4,9 +4,9 @@ namespace Icinga\Module\Director\Forms; use Exception; use Icinga\Module\Director\Settings; -use Icinga\Module\Director\Web\Form\QuickForm; +use Icinga\Module\Director\Web\Form\DirectorForm; -class SettingsForm extends QuickForm +class SettingsForm extends DirectorForm { /** @var Settings */ protected $settings; diff --git a/library/Director/Dashboard/Dashlet/SettingsDashlet.php b/library/Director/Dashboard/Dashlet/SettingsDashlet.php new file mode 100644 index 00000000..716e5656 --- /dev/null +++ b/library/Director/Dashboard/Dashlet/SettingsDashlet.php @@ -0,0 +1,30 @@ +translate('Director Settings'); + } + + public function getSummary() + { + return $this->translate( + 'Tweak some global Director settings' + ); + } + + public function getUrl() + { + return 'director/config/settings'; + } + + public function listRequiredPermissions() + { + return array('director/admin'); + } +} diff --git a/library/Director/Dashboard/InfrastructureDashboard.php b/library/Director/Dashboard/InfrastructureDashboard.php index dfcd016b..ecfcecc3 100644 --- a/library/Director/Dashboard/InfrastructureDashboard.php +++ b/library/Director/Dashboard/InfrastructureDashboard.php @@ -10,6 +10,7 @@ class InfrastructureDashboard extends Dashboard 'ApiUserObject', 'EndpointObject', 'ZoneObject', + 'Settings', ); public function getTitle() diff --git a/library/Director/Settings.php b/library/Director/Settings.php index 99b5ae54..c061735b 100644 --- a/library/Director/Settings.php +++ b/library/Director/Settings.php @@ -10,7 +10,7 @@ class Settings protected $cache; - protected $defaults = array( + protected $defaults = [ 'default_global_zone' => 'director-global', 'magic_apply_for' => '_director_apply_for', 'config_format' => 'v2', @@ -22,10 +22,16 @@ class Settings 'deployment_path_v1' => null, 'activation_script_v1' => null, 'self-service/agent_name' => 'fqdn', - 'self-service/transform_hostname' => '0' + 'self-service/transform_hostname' => '0', + 'self-service/global_zones' => ['director_global'], // 'experimental_features' => null, // 'allow' // 'master_zone' => null, - ); + ]; + + protected $jsonEncode = [ + 'self-service/global_zones', + 'self-service/installer_hashes', + ]; public function __construct(Db $connection) { @@ -47,6 +53,9 @@ class Settings if (null === ($value = $this->getSetting($key))) { return $default; } else { + if (in_array($key, $this->jsonEncode)) { + $value = json_decode($value); + } return $value; } } @@ -85,6 +94,10 @@ class Settings return $this; } + if (in_array($name, $this->jsonEncode)) { + $value = json_encode(array_values($value)); + } + if ($this->getSetting($name) === $value) { return $this; }