Skip to content

Commit d3d1eab

Browse files
RotationConfigForm: Add end of day time option to multi day mode
1 parent 4efa60e commit d3d1eab

File tree

1 file changed

+32
-6
lines changed

1 file changed

+32
-6
lines changed

application/forms/RotationConfigForm.php

Lines changed: 32 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -48,6 +48,8 @@ class RotationConfigForm extends CompatForm
4848
*/
4949
public const EXPERIMENTAL_OVERRIDES = false;
5050

51+
protected const DAY_END = 'dayEnd';
52+
5153
/** @var ?int The ID of the affected schedule */
5254
protected $scheduleId;
5355

@@ -895,14 +897,15 @@ protected function assembleMultiDayOptions(FieldsetElement $options): DateTime
895897
$toDays[$i] = sprintf('%s (%s)', $day, $this->translate('Next week'));
896898
}
897899

898-
$options->addElement('select', 'to_day', [
900+
$options->addElement('select', 'to_day_ignored', [
899901
'class' => 'autosubmit',
900902
'required' => true,
903+
'ignore' => true,
901904
'options' => $toDays,
902-
'value' => 7,
905+
'value' => $options->getPopulatedValue('to_day', 7),
903906
'label' => $this->translate('To', 'notifications.rotation')
904907
]);
905-
$to = $options->getElement('to_day');
908+
$to = $options->getElement('to_day_ignored');
906909

907910
$options->addElement('number', 'interval', [
908911
'required' => true,
@@ -920,19 +923,42 @@ protected function assembleMultiDayOptions(FieldsetElement $options): DateTime
920923
]);
921924
$options->registerElement($fromAt);
922925

923-
if ($selectedFromDay === (int) $to->getValue()) {
926+
$timeOptionsFirstKey = array_key_first($timeOptions);
927+
$selectedToDay = (int) $to->getValue();
928+
if ($selectedFromDay === $selectedToDay) {
924929
$selectedFromAt = $fromAt->getValue();
925930
$keyIndex = array_search($selectedFromAt, array_keys($timeOptions));
926931
$timeOptions = array_slice($timeOptions, 0, $keyIndex + 1, true);
932+
} else {
933+
$timeOptions[self::DAY_END] = sprintf(
934+
'%s (%s)',
935+
$timeOptions[$timeOptionsFirstKey],
936+
$this->translate('End of day')
937+
);
927938
}
928939

929-
$toAt = $options->createElement('select', 'to_at', [
940+
$toAt = $options->createElement('select', 'to_at_ignored', [
930941
'class' => 'autosubmit',
931942
'required' => true,
932-
'options' => $timeOptions
943+
'ignore' => true,
944+
'options' => $timeOptions,
945+
'value' => $options->getPopulatedValue('to_at'),
933946
]);
934947
$options->registerElement($toAt);
935948

949+
$selectedToAt = $toAt->getValue();
950+
951+
if ($selectedToAt === self::DAY_END) {
952+
++$selectedToDay;
953+
$selectedToAt = $timeOptionsFirstKey;
954+
}
955+
956+
$options->clearPopulatedValue('to_day');
957+
$options->clearPopulatedValue('to_at');
958+
959+
$options->addElement('hidden', 'to_day', ['value' => $selectedToDay]);
960+
$options->addElement('hidden', 'to_at', ['value' => $selectedToAt]);
961+
936962
$from->prependWrapper(
937963
(new HtmlDocument())->addHtml(
938964
$from,

0 commit comments

Comments
 (0)