/** * Adjust preferences and persist them * * @see Form::onSuccess() */ public function onSuccess() { $this->preferences = new Preferences($this->store ? $this->store->load() : array()); $webPreferences = $this->preferences->get('icingaweb', array()); foreach ($this->getValues() as $key => $value) { if ($value === null || $value === 'autodetect') { if (isset($webPreferences[$key])) { unset($webPreferences[$key]); } } else { $webPreferences[$key] = $value; } } $this->preferences->icingaweb = $webPreferences; Session::getSession()->user->setPreferences($this->preferences); try { if ($this->store && $this->getElement('btn_submit_preferences')->isChecked()) { $this->save(); Notification::success($this->translate('Preferences successfully saved')); } else { Notification::success($this->translate('Preferences successfully saved for the current session')); } } catch (Exception $e) { Logger::error($e); Notification::error($e->getMessage()); } }
/** * Save the given preferences * * @param Preferences $preferences The preferences to save */ public function save(Preferences $preferences) { $this->preferences = $preferences->toArray(); // TODO: Elaborate whether we need to patch the contents // $preferences = $preferences->toArray(); // $this->update(array_diff_assoc($preferences, $this->preferences)); // $this->delete(array_keys(array_diff_key($this->preferences, $preferences))); $this->write(); }
/** * Retrieve the user's timezone * * If the user did not set a timezone, the default timezone set via config.ini is returned * * @return DateTimeZone */ public function getTimeZone() { $tz = $this->preferences->get('timezone'); if ($tz === null) { $tz = date_default_timezone_get(); } return new DateTimeZone($tz); }
/** * @see Form::createElements() */ public function createElements(array $formData) { if (setlocale(LC_ALL, 0) === 'C') { $this->warning($this->translate('Your language setting is not applied because your platform is missing the corresponding locale.' . ' Make sure to install the correct language pack and restart your web server afterwards.'), false); } if (!(bool) Config::app()->get('themes', 'disabled', false)) { $themes = Icinga::app()->getThemes(); if (count($themes) > 1) { $defaultTheme = Config::app()->get('themes', 'default', StyleSheet::DEFAULT_THEME); if (isset($themes[$defaultTheme])) { $themes[$defaultTheme] .= ' (' . $this->translate('default') . ')'; } $this->addElement('select', 'theme', array('label' => $this->translate('Theme', 'Form element label'), 'multiOptions' => $themes, 'value' => $this->preferences->getValue('icingaweb', 'theme', $defaultTheme))); } } $languages = array(); $languages['autodetect'] = sprintf($this->translate('Browser (%s)', 'preferences.form'), $this->getLocale()); foreach (Translator::getAvailableLocaleCodes() as $language) { $languages[$language] = $language; } $tzList = array(); $tzList['autodetect'] = sprintf($this->translate('Browser (%s)', 'preferences.form'), $this->getDefaultTimezone()); foreach (DateTimeZone::listIdentifiers() as $tz) { $tzList[$tz] = $tz; } $this->addElement('select', 'language', array('required' => true, 'label' => $this->translate('Your Current Language'), 'description' => $this->translate('Use the following language to display texts and messages'), 'multiOptions' => $languages, 'value' => substr(setlocale(LC_ALL, 0), 0, 5))); $this->addElement('select', 'timezone', array('required' => true, 'label' => $this->translate('Your Current Timezone'), 'description' => $this->translate('Use the following timezone for dates and times'), 'multiOptions' => $tzList, 'value' => $this->getDefaultTimezone())); if (Auth::getInstance()->hasPermission('application/stacktraces')) { $this->addElement('checkbox', 'show_stacktraces', array('required' => true, 'value' => $this->getDefaultShowStacktraces(), 'label' => $this->translate('Show Stacktraces'), 'description' => $this->translate('Set whether to show an exception\'s stacktrace.'))); } $this->addElement('checkbox', 'show_benchmark', array('required' => true, 'label' => $this->translate('Use benchmark'))); $this->addElement('checkbox', 'auto_refresh', array('required' => false, 'label' => $this->translate('Enable auto refresh'), 'description' => $this->translate('This option allows you to enable or to disable the global page content auto refresh'), 'value' => 1)); if ($this->store) { $this->addElement('submit', 'btn_submit_preferences', array('ignore' => true, 'label' => $this->translate('Save to the Preferences'), 'decorators' => array('ViewHelper'))); } $this->addElement('submit', 'btn_submit_session', array('ignore' => true, 'label' => $this->translate('Save for the current Session'), 'decorators' => array('ViewHelper'))); $this->setAttrib('data-progress-element', 'preferences-progress'); $this->addElement('note', 'preferences-progress', array('decorators' => array('ViewHelper', array('Spinner', array('id' => 'preferences-progress'))))); $this->addDisplayGroup(array('btn_submit_preferences', 'btn_submit_session', 'preferences-progress'), 'submit_buttons', array('decorators' => array('FormElements', array('HtmlTag', array('tag' => 'div', 'class' => 'control-group'))))); }
public function testWhetherGetValueReturnsExpectedValue() { $prefs = new Preferences(array('test' => array('key1' => '1', 'key2' => '2'))); $result = $prefs->getValue('test', 'key2'); $this->assertEquals('2', $result, 'Preferences::getValue() do not return an expected value'); }