diff --git a/application/forms/Config/LoggingForm.php b/application/forms/Config/LoggingForm.php index b61667fbb..8bb03dfa5 100644 --- a/application/forms/Config/LoggingForm.php +++ b/application/forms/Config/LoggingForm.php @@ -31,12 +31,9 @@ namespace Icinga\Form\Config; use Zend_Config; -use Zend_Form_Element_Text; -use Icinga\Application\Config; -use Icinga\Application\Icinga; use Icinga\Web\Form; +use Icinga\Application\Icinga; use Icinga\Web\Form\Validator\WritablePathValidator; -use Icinga\Web\Form\Decorator\ConditionalHidden; /** * Form class for setting the application wide logging configuration @@ -44,58 +41,13 @@ use Icinga\Web\Form\Decorator\ConditionalHidden; class LoggingForm extends Form { /** - * Base directory to use instead of the one provided by Icinga::app (used for testing) + * Return the default logging directory for type "stream" * - * @var null + * @return string */ - private $baseDir = null; - - /** - * Set a different base directory to use for default paths instead of the one provided by Icinga::app() - * - * @param string $dir The new directory to use - */ - public function setBaseDir($dir) + protected function getDefaultLogDir() { - $this->baseDir = $dir; - } - - /** - * Return the applications base directory or the value from a previous setBaseDir call - * - * This is used to determine the default logging paths in a manner that allows to set a different path - * during testing - * - * @return string - */ - public function getBaseDir() - { - if ($this->baseDir) { - return $this->baseDir; - } - return realpath(Icinga::app()->getApplicationDir() . '/../'); - } - - /** - * Return true if the debug log path textfield should be displayed - * - * This is the case if the "logging_use_debug" field is autosubmitted - * and true or if it is not submitted, but the configuration for debug - * logging is set to true - * - * @param Zend_Config $config The debug section of the config.ini - * - * @return bool Whether to display the debug path field or not - */ - private function shouldDisplayDebugLog(Zend_Config $config) - { - $debugParam = $this->getRequest()->getParam('logging_debug_enable', null); - if ($debugParam !== null) { - return intval($debugParam) === 1; - } else { - return intval($config->get('enable', 0)) === 1; - } - + return realpath(Icinga::app()->getApplicationDir() . '/../var/log/icingaweb.log'); } /** @@ -108,108 +60,121 @@ class LoggingForm extends Form $this->setName('form_config_logging'); $config = $this->getConfiguration(); - $logging = $config->logging; - - if ($logging === null) { - $logging = new Zend_Config(array()); - } - $debug = $logging->debug; - if ($debug === null) { - $debug = new Zend_Config(array()); + if (($loggingConfig = $config->logging) === null) { + $loggingConfig = new Zend_Config(array()); } - $txtLogPath = new Zend_Form_Element_Text( + $this->addElement( + 'checkbox', + 'logging_enable', + array( + 'required' => true, + 'label' => t('Logging Enabled'), + 'helptext' => t('Check this to enable logging.'), + 'value' => $loggingConfig->enable ? 1 : 0 + ) + ); + $this->addElement( + 'select', + 'logging_level', array( - 'name' => 'logging_app_target', - 'label' => 'Application Log Path', - 'helptext' => 'The logfile to write the icingaweb debug logs to.' - . 'The webserver must be able to write at this location', 'required' => true, - 'value' => $logging->get('target', $this->getBaseDir() . '/var/log/icingaweb.log') + 'label' => t('Logging Level'), + 'helptext' => t('The maximum loglevel to emit.'), + 'value' => intval($loggingConfig->get('level', 0)), + 'multiOptions' => array( + 0 => t('Error'), + 1 => t('Warning'), + 2 => t('Information'), + 3 => t('Debug') + ) ) ); - $txtLogPath->addValidator(new WritablePathValidator()); - $this->addElement($txtLogPath); - $this->addElement( - 'checkbox', - 'logging_app_verbose', + 'select', + 'logging_type', array( - 'label' => 'Verbose Logging', - 'required' => true, - 'helptext' => 'Check to write more verbose output to the icinga log file', - 'value' => intval($logging->get('verbose', 0)) === 1 + 'required' => true, + 'label' => t('Logging Type'), + 'helptext' => t('The type of logging to utilize.'), + 'value' => $loggingConfig->get('type', 'stream'), + 'multiOptions' => array( + 'stream' => t('File'), + 'syslog' => 'Syslog' + ) ) ); + $this->enableAutoSubmit(array('logging_type')); - $this->addElement( - 'checkbox', - 'logging_debug_enable', - array( - 'label' => 'Use Debug Log', - 'required' => true, - 'helptext' => 'Check to write a seperate debug log (Warning: This file can grow very big)', - 'value' => $this->shouldDisplayDebugLog($debug) - ) - ); + switch ($this->getRequest()->getParam('logging_type', $loggingConfig->get('type', 'stream'))) + { + case 'stream': + $this->addElement( + 'text', + 'logging_target', + array( + 'required' => true, + 'label' => t('Filepath'), + 'helptext' => t('The logfile to write messages to.'), + 'value' => $loggingConfig->target ? $loggingConfig->target : $this->getDefaultLogDir(), + 'validators' => array(new WritablePathValidator()) + ) + ); + break; + case 'syslog': + $this->addElement( + 'text', + 'logging_application', + array( + 'required' => true, + 'label' => t('Application Prefix'), + 'helptext' => t('The name of the application by which to prefix syslog messages.'), + 'value' => $loggingConfig->get('application', 'icingaweb') + ) + ); + $this->addElement( + 'select', + 'logging_facility', + array( + 'required' => true, + 'label' => t('Facility'), + 'helptext' => t('The Syslog facility to utilize.'), + 'value' => $loggingConfig->get('facility', 'LOG_USER'), + 'multiOptions' => array( + 'LOG_USER' + ) + ) + ); + break; + } - $textLoggingDebugPath = new Zend_Form_Element_Text( - array( - 'name' => 'logging_debug_target', - 'label' => 'Debug Log Path', - 'required' => $this->shouldDisplayDebugLog($debug), - 'condition' => $this->shouldDisplayDebugLog($debug), - 'value' => $debug->get('target', $this->getBaseDir() . '/var/log/icingaweb2.debug.log'), - 'helptext' => 'Set the path to the debug log' - ) - ); - $textLoggingDebugPath->addValidator(new WritablePathValidator()); - - $decorator = new ConditionalHidden(); - $this->addElement($textLoggingDebugPath); - $textLoggingDebugPath->addDecorator($decorator); - - $this->enableAutoSubmit(array('logging_debug_enable')); - - $this->addElement( - 'button', - 'btn_submit', - array( - 'type' => 'submit', - 'escape' => false, - 'value' => '1', - 'class' => 'btn btn-cta btn-common', - 'label' => ' Save Changes' - ) - ); + $this->setSubmitLabel('{{SAVE_ICON}} Save Changes'); } /** - * Return a Zend_Config object containing the state defined in this form + * Return a Zend_Config object containing the state defined in this form * - * @return Zend_Config The config defined in this form + * @return Zend_Config The config defined in this form */ public function getConfig() { - $config = $this->getConfiguration(); - if ($config->logging === null) { - $config->logging = new Zend_Config(array(), true); - } - if ($config->logging->debug === null) { - $config->logging->debug = new Zend_Config(array(), true); - } - $values = $this->getValues(); - $cfg = $config->toArray(); + $cfg = $this->getConfiguration()->toArray(); - $cfg['logging']['enable'] = 1; - $cfg['logging']['type'] = 'stream'; - $cfg['logging']['verbose'] = $values['logging_app_verbose']; - $cfg['logging']['target'] = $values['logging_app_target']; + $cfg['logging']['enable'] = $values['logging_enable'] == 1; + $cfg['logging']['level'] = $values['logging_level']; + + switch ($values['logging_type']) + { + case 'stream': + $cfg['logging']['target'] = $values['logging_target']; + break; + case 'syslog': + $cfg['logging']['application'] = $values['logging_application']; + $cfg['logging']['facility'] = $values['logging_facility']; + break; + } - $cfg['logging']['debug']['enable'] = intval($values['logging_debug_enable']); - $cfg['logging']['debug']['type'] = 'stream'; - $cfg['logging']['debug']['target'] = $values['logging_debug_target']; return new Zend_Config($cfg); } }