diff --git a/application/controllers/ConfigController.php b/application/controllers/ConfigController.php index 88ea60639..b2d0a7b2e 100644 --- a/application/controllers/ConfigController.php +++ b/application/controllers/ConfigController.php @@ -86,9 +86,12 @@ class ConfigController extends BaseConfigController if ($form->isSubmittedAndValid()) { $cfg = IcingaConfig::app()->getConfigFile(); $writer = new PreservingIniWriter( - array('config' => $form->getConfig(),'filename' => $cfg) + array( + 'config' => $form->getConfig(), + 'filename' => $cfg + ) ); - print_r($writer->render());die(); + $writer->write(); } $this->view->form = $form; } diff --git a/application/forms/Config/GeneralForm.php b/application/forms/Config/GeneralForm.php index 4a416b48d..bb9858b87 100644 --- a/application/forms/Config/GeneralForm.php +++ b/application/forms/Config/GeneralForm.php @@ -27,41 +27,17 @@ // {{{ICINGA_LICENSE_HEADER}}} namespace Icinga\Form\Config; -/** - * [global] -environment = development -timezone = "Europe/Berlin" -indexModule = monitoring -indexController = dashboard -moduleFolder = "/etc/icinga2-web/enabledModules" -dateFormat = "d/m/Y" -timeFormat = "g:i A" -[logging] -; General log -enable = 1 -type = stream -verbose = 1 -target = /tmp/icinga2.log - -; For development and debug purposes: Logs additional (non critical) events to a -; seperate log -debug.enable = 1 -debug.type = stream -debug.target = /tmp/icinga2.debug.log - -; Use ini store to store preferences on local disk -[preferences] -type=ini - - */ use \Icinga\Application\Config as IcingaConfig; -use Icinga\Application\Icinga; +use \Icinga\Application\Icinga; use \Icinga\Web\Form; -use \Zend_Form_Element_Radio; +use \Icinga\Web\Form\Decorator\ConditionalHidden; +use \Icinga\Web\Form\Element\Note; + use \DateTimeZone; use \Zend_Config; -use Icinga\Web\Form\Element\Note; +use \Zend_Form_Element_Text; + /** * Configuration form for general, application-wide settings @@ -231,6 +207,56 @@ class GeneralForm extends Form ))); } + public function addUserPreferencesDialog(Zend_Config $cfg) + { + $backend = $cfg->get('type', 'ini'); + if ($this->getRequest()->get('preferences_type', null) !== null) { + $backend = $this->getRequest()->get('preferences_type'); + } + $this->addElement( + 'select', + 'preferences_type', + array( + 'label' => 'User preference storage type', + 'required' => true, + 'value' => $backend, + 'multiOptions' => array( + 'ini' => 'File system (ini files)', + 'db' => 'Database' + ) + ) + ); + + $txtPreferencesIniPath = new Zend_Form_Element_Text( + array( + 'name' => 'preferences_ini_path', + 'label' => 'Path to store user preference files', + 'required' => $backend === 'ini', + 'condition' => $backend === 'ini', + 'value' => $cfg->get('configPath') + ) + ); + + $txtPreferencesDbResource = new Zend_Form_Element_Text( + array( + 'name' => 'preferences_db_resource', + 'label' => 'Database connection (TODO: Make select field)', + 'required' => $backend === 'db', + 'condition' => $backend === 'db', + 'value' => $cfg->get('resource') + ) + ); + + $this->addElement($txtPreferencesIniPath); + $this->addElement($txtPreferencesDbResource); + + $txtPreferencesIniPath->addDecorator(new ConditionalHidden()); + $txtPreferencesDbResource->addDecorator(new ConditionalHidden()); + $this->enableAutoSubmit(array( + 'preferences_type' + )); + } + /** * Create the general form, using the provided configuration * @@ -245,11 +271,17 @@ class GeneralForm extends Form if ($global === null) { $global = new Zend_Config(array()); } + $preferences = $this->config->preferences; + if ($preferences === null) { + $preferences = new Zend_Config(array()); + } $this->addDevelopmentCheckbox($global); $this->addTimezoneSelection($global); $this->addModuleSettings($global); $this->addDateFormatSettings($global); + $this->addUserPreferencesDialog($preferences); + $this->setSubmitLabel('Save changes'); } @@ -259,10 +291,12 @@ class GeneralForm extends Form if ($this->config === null) { $this->config = new Zend_Config(array()); } - $global = $this->config->global; - if ($global === null) { + if ($this->config->global === null) { $this->config->global = new Zend_Config(array()); } + if ($this->config->preferences === null) { + $this->config->preferences = new Zend_Config(array()); + } $values = $this->getValues(); $cfg = clone $this->config; @@ -272,6 +306,13 @@ class GeneralForm extends Form $cfg->global->dateFormat = $values['date_format']; $cfg->global->timeFormat = $values['time_format']; + $cfg->preferences->type = $values['preferences_type']; + if ($cfg->preferences->type === 'ini') { + $cfg->preferences->configPath = $values['preferences_ini_path']; + } elseif ($cfg->preferences->type === 'db') { + $cfg->preferences->resource = $values['preferences_db_resource']; + } + return $cfg; } diff --git a/application/forms/Config/LoggingForm.php b/application/forms/Config/LoggingForm.php index 952ae1c61..107e75ff2 100644 --- a/application/forms/Config/LoggingForm.php +++ b/application/forms/Config/LoggingForm.php @@ -135,7 +135,6 @@ class LoggingForm extends Form return; } - $this->addDecorator(new ConditionalHidden()); $this->addElement( 'text', @@ -195,7 +194,7 @@ class LoggingForm extends Form 'label' => 'Debug log path', 'required' => true, 'condition' => $this->shouldDisplayDebugLog($debug), - 'value' => $debug->get('target', '/var/log/icingaweb.debug.log') + 'value' => $debug->get('target') ) ); $loggingPathNote = new Note( @@ -205,10 +204,13 @@ class LoggingForm extends Form 'condition' => $this->shouldDisplayDebugLog($debug) ) ); - + $decorator = new ConditionalHidden(); $this->addElement($textLoggingDebugPath); $this->addElement($loggingPathNote); + $textLoggingDebugPath->addDecorator($decorator); + $loggingPathNote->addDecorator($decorator); + $this->enableAutoSubmit(array('logging_use_debug', 'logging_enable')); $this->setSubmitLabel('Save changes'); diff --git a/library/Icinga/Web/Form.php b/library/Icinga/Web/Form.php index 93873e4fd..593977d40 100644 --- a/library/Icinga/Web/Form.php +++ b/library/Icinga/Web/Form.php @@ -25,13 +25,14 @@ namespace Icinga\Web; +use \Icinga\Web\Form\Decorator\ConditionalHidden; use \Zend_Controller_Request_Abstract; use \Zend_Form_Element_Submit; use \Zend_Form_Element_Reset; use \Zend_View_Interface; use \Zend_Form; -use Icinga\Exception\ProgrammingError; -use Icinga\Web\Form\InvalidCSRFTokenException; +use \Icinga\Exception\ProgrammingError; +use \Icinga\Web\Form\InvalidCSRFTokenException; /** * Base class for forms providing CSRF protection, confirmation logic and auto submission @@ -179,6 +180,7 @@ abstract class Form extends Zend_Form */ public function buildForm() { + if ($this->created === false) { $this->initCsrfToken(); $this->create(); diff --git a/library/Icinga/Web/Form/Element/Note.php b/library/Icinga/Web/Form/Element/Note.php index 77ec2a785..3d8af596b 100644 --- a/library/Icinga/Web/Form/Element/Note.php +++ b/library/Icinga/Web/Form/Element/Note.php @@ -40,4 +40,9 @@ class Note extends Zend_Form_Element_Xhtml * @var string */ public $helper = 'formNote'; + + public function isValid($value) + { + return true; + } }