|
16 | 16 | use Icinga\Module\Notifications\Widget\Detail\ScheduleDetail; |
17 | 17 | use Icinga\Module\Notifications\Widget\RecipientSuggestions; |
18 | 18 | use Icinga\Module\Notifications\Widget\TimezoneWarning; |
| 19 | +use Icinga\Web\Session; |
19 | 20 | use ipl\Html\Form; |
20 | 21 | use ipl\Html\Html; |
21 | 22 | use ipl\Stdlib\Filter; |
@@ -66,7 +67,10 @@ public function indexAction(): void |
66 | 67 | $this->addContent(new ScheduleDetail( |
67 | 68 | $schedule, |
68 | 69 | $scheduleControls, |
69 | | - new DateTime('today', new DateTimeZone($timezonePicker->getDisplayTimezone())) |
| 70 | + new DateTime('today', new DateTimeZone( |
| 71 | + $timezonePicker->getValue(TimezonePicker::DEFAULT_TIMEZONE_PARAM) |
| 72 | + ?? $this->getDisplayTimezoneFromSession($schedule->timezone) |
| 73 | + )), |
70 | 74 | )); |
71 | 75 | } |
72 | 76 |
|
@@ -121,7 +125,7 @@ public function addRotationAction(): void |
121 | 125 | { |
122 | 126 | $scheduleId = (int) $this->params->getRequired('schedule'); |
123 | 127 | $scheduleTimezone = $this->getScheduleTimezone($scheduleId); |
124 | | - $displayTimezone = (new TimezonePicker($scheduleTimezone))->getDisplayTimezone(); |
| 128 | + $displayTimezone = $this->getDisplayTimezoneFromSession($scheduleTimezone); |
125 | 129 | $this->setTitle($this->translate('Add Rotation')); |
126 | 130 |
|
127 | 131 | if ($displayTimezone !== $scheduleTimezone) { |
@@ -160,7 +164,7 @@ public function editRotationAction(): void |
160 | 164 | $id = (int) $this->params->getRequired('id'); |
161 | 165 | $scheduleId = (int) $this->params->getRequired('schedule'); |
162 | 166 | $scheduleTimezone = $this->getScheduleTimezone($scheduleId); |
163 | | - $displayTimezone = (new TimezonePicker($scheduleTimezone))->getDisplayTimezone(); |
| 167 | + $displayTimezone = $this->getDisplayTimezoneFromSession($scheduleTimezone); |
164 | 168 | $this->setTitle($this->translate('Edit Rotation')); |
165 | 169 |
|
166 | 170 | if ($displayTimezone !== $scheduleTimezone) { |
@@ -254,17 +258,45 @@ protected function getScheduleTimezone(int $scheduleId): string |
254 | 258 | */ |
255 | 259 | protected function createTimezonePicker(string $scheduleTimezone, int $scheduleId): TimezonePicker |
256 | 260 | { |
257 | | - return (new TimezonePicker($scheduleTimezone)) |
| 261 | + $defaultTimezoneParam = TimezonePicker::DEFAULT_TIMEZONE_PARAM; |
| 262 | + return (new TimezonePicker()) |
258 | 263 | ->populate([ |
259 | | - TimezonePicker::DEFAULT_TIMEZONE_PARAM => $this->params->get(TimezonePicker::DEFAULT_TIMEZONE_PARAM) |
| 264 | + $defaultTimezoneParam => $this->params->get($defaultTimezoneParam) |
| 265 | + ?? $this->getDisplayTimezoneFromSession($scheduleTimezone) |
260 | 266 | ]) |
261 | | - ->on(TimezonePicker::ON_SUBMIT, function (TimezonePicker $timezonePicker) use ($scheduleId) { |
262 | | - $this->redirectNow( |
263 | | - Links::schedule($scheduleId)->with([ |
264 | | - TimezonePicker::DEFAULT_TIMEZONE_PARAM => $timezonePicker->getDisplayTimezone() |
265 | | - ]) |
266 | | - ); |
267 | | - }) |
| 267 | + ->on( |
| 268 | + TimezonePicker::ON_SUBMIT, |
| 269 | + function (TimezonePicker $timezonePicker) use ($defaultTimezoneParam, $scheduleId, $scheduleTimezone) { |
| 270 | + $this->writeDisplayTimezoneToSession($timezonePicker->getValue($defaultTimezoneParam)); |
| 271 | + $this->redirectNow(Links::schedule($scheduleId)->with([ |
| 272 | + $defaultTimezoneParam => $timezonePicker->getValue($defaultTimezoneParam) |
| 273 | + ])); |
| 274 | + } |
| 275 | + ) |
268 | 276 | ->handleRequest($this->getServerRequest()); |
269 | 277 | } |
| 278 | + |
| 279 | + /** |
| 280 | + * Get the display timezone from the session |
| 281 | + * |
| 282 | + * @param string|null $defaultTimezone |
| 283 | + * |
| 284 | + * @return string |
| 285 | + */ |
| 286 | + protected function getDisplayTimezoneFromSession(?string $defaultTimezone = null): string |
| 287 | + { |
| 288 | + return Session::getSession()->getNamespace('notifications')->get('schedule.display_timezone', $defaultTimezone); |
| 289 | + } |
| 290 | + |
| 291 | + /** |
| 292 | + * Write the display timezone to the session |
| 293 | + * |
| 294 | + * @param string $displayTimezone |
| 295 | + * |
| 296 | + * @return void |
| 297 | + */ |
| 298 | + protected function writeDisplayTimezoneToSession(string $displayTimezone): void |
| 299 | + { |
| 300 | + Session::getSession()->getNamespace('notifications')->set('schedule.display_timezone', $displayTimezone); |
| 301 | + } |
270 | 302 | } |
0 commit comments