Beispiel #1
0
 /**
  * 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());
     }
 }
Beispiel #2
0
 /**
  * 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();
 }
Beispiel #3
0
 /**
  * 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);
 }
Beispiel #4
0
 /**
  * @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')))));
 }
Beispiel #5
0
 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');
 }