Skip to content

Commit 5ea4e7b

Browse files
committed
Move session handling to ScheduleController
Instead of handling the session in `TimezonePicker`.
1 parent c00af67 commit 5ea4e7b

File tree

2 files changed

+44
-45
lines changed

2 files changed

+44
-45
lines changed

application/controllers/ScheduleController.php

Lines changed: 44 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -16,6 +16,7 @@
1616
use Icinga\Module\Notifications\Widget\Detail\ScheduleDetail;
1717
use Icinga\Module\Notifications\Widget\RecipientSuggestions;
1818
use Icinga\Module\Notifications\Widget\TimezoneWarning;
19+
use Icinga\Web\Session;
1920
use ipl\Html\Form;
2021
use ipl\Html\Html;
2122
use ipl\Stdlib\Filter;
@@ -66,7 +67,10 @@ public function indexAction(): void
6667
$this->addContent(new ScheduleDetail(
6768
$schedule,
6869
$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+
)),
7074
));
7175
}
7276

@@ -121,7 +125,7 @@ public function addRotationAction(): void
121125
{
122126
$scheduleId = (int) $this->params->getRequired('schedule');
123127
$scheduleTimezone = $this->getScheduleTimezone($scheduleId);
124-
$displayTimezone = (new TimezonePicker($scheduleTimezone))->getDisplayTimezone();
128+
$displayTimezone = $this->getDisplayTimezoneFromSession($scheduleTimezone);
125129
$this->setTitle($this->translate('Add Rotation'));
126130

127131
if ($displayTimezone !== $scheduleTimezone) {
@@ -160,7 +164,7 @@ public function editRotationAction(): void
160164
$id = (int) $this->params->getRequired('id');
161165
$scheduleId = (int) $this->params->getRequired('schedule');
162166
$scheduleTimezone = $this->getScheduleTimezone($scheduleId);
163-
$displayTimezone = (new TimezonePicker($scheduleTimezone))->getDisplayTimezone();
167+
$displayTimezone = $this->getDisplayTimezoneFromSession($scheduleTimezone);
164168
$this->setTitle($this->translate('Edit Rotation'));
165169

166170
if ($displayTimezone !== $scheduleTimezone) {
@@ -254,17 +258,45 @@ protected function getScheduleTimezone(int $scheduleId): string
254258
*/
255259
protected function createTimezonePicker(string $scheduleTimezone, int $scheduleId): TimezonePicker
256260
{
257-
return (new TimezonePicker($scheduleTimezone))
261+
$defaultTimezoneParam = TimezonePicker::DEFAULT_TIMEZONE_PARAM;
262+
return (new TimezonePicker())
258263
->populate([
259-
TimezonePicker::DEFAULT_TIMEZONE_PARAM => $this->params->get(TimezonePicker::DEFAULT_TIMEZONE_PARAM)
264+
$defaultTimezoneParam => $this->params->get($defaultTimezoneParam)
265+
?? $this->getDisplayTimezoneFromSession($scheduleTimezone)
260266
])
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+
)
268276
->handleRequest($this->getServerRequest());
269277
}
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+
}
270302
}

library/Notifications/Web/Control/TimezonePicker.php

Lines changed: 0 additions & 33 deletions
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,6 @@
66

77
use DateTime;
88
use DateTimeZone;
9-
use Icinga\Web\Session;
109
use IntlTimeZone;
1110
use ipl\Html\Form;
1211
use ipl\I18n\Translation;
@@ -29,36 +28,6 @@ class TimezonePicker extends Form
2928
'name' => 'timezone-picker-form'
3029
];
3130

32-
protected string $defaultTimezone;
33-
34-
public function __construct(string $defaultTimezone)
35-
{
36-
$this->defaultTimezone = $defaultTimezone;
37-
}
38-
39-
/**
40-
* Get the chosen display timezone
41-
*
42-
* @return string
43-
*/
44-
public function getDisplayTimezone(): string
45-
{
46-
return $this->getPopulatedValue(static::DEFAULT_TIMEZONE_PARAM)
47-
?? Session::getSession()->getNamespace('notifications')
48-
->get('schedule.display_timezone', $this->defaultTimezone);
49-
}
50-
51-
/**
52-
* On success store the display timezone in the session
53-
*
54-
* @return void
55-
*/
56-
protected function onSuccess(): void
57-
{
58-
Session::getSession()->getNamespace('notifications')
59-
->set('schedule.display_timezone', $this->getValue(static::DEFAULT_TIMEZONE_PARAM));
60-
}
61-
6231
public function assemble(): void
6332
{
6433
$this->addElement($this->createUidElement());
@@ -83,7 +52,5 @@ public function assemble(): void
8352
'options' => $validTz
8453
]
8554
);
86-
$select = $this->getElement(static::DEFAULT_TIMEZONE_PARAM);
87-
$select->setValue($this->getDisplayTimezone());
8855
}
8956
}

0 commit comments

Comments
 (0)