summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMichiK <michik+github@michik.net>2017-12-03 04:05:02 +0100
committermsquare <msquare@notrademark.de>2019-06-04 21:24:59 +0200
commit142871f852c717319608de43d954180f17e5ed66 (patch)
tree8aee37e9dc1f3291af5e2b2bdb9f5506310711cc
parentead56a89fef63745d0e9d3a0b44ef198792c2784 (diff)
Add a config option for maximum signup in advance
We now have `signup_advance_hours` in the configuration that only allows signup for shifts so many hours in the future. A notice is displayed in the shift view for shifts in the far future, together with an info notice on when signup for that shift will be possible. In addition, we now have a new shift state `NOT_YET` for this purpose so we do not have to abuse `SHIFT_ENDED` anymore for `signup_requires_arrival` as well.
-rw-r--r--config/config.default.php4
-rw-r--r--includes/model/ShiftSignupState.php5
-rw-r--r--includes/model/Shifts_model.php4
-rw-r--r--includes/view/ShiftCalendarShiftRenderer.php5
-rw-r--r--includes/view/Shifts_view.php7
-rw-r--r--resources/lang/de_DE.UTF-8/LC_MESSAGES/default.po6
6 files changed, 31 insertions, 0 deletions
diff --git a/config/config.default.php b/config/config.default.php
index 38d88acc..693b0d19 100644
--- a/config/config.default.php
+++ b/config/config.default.php
@@ -88,6 +88,10 @@ return [
// Whether newly-registered user should automatically be marked as arrived
'autoarrive' => false,
+ // Only allow shift signup this number of hours in advance
+ // Setting this to 0 disables the feature
+ 'signup_advance_hours' => 0,
+
// Number of hours that an angel has to sign out own shifts
'last_unsubscribe' => 3,
diff --git a/includes/model/ShiftSignupState.php b/includes/model/ShiftSignupState.php
index 8d588de3..a2618cf1 100644
--- a/includes/model/ShiftSignupState.php
+++ b/includes/model/ShiftSignupState.php
@@ -39,6 +39,11 @@ class ShiftSignupState
const SHIFT_ENDED = 'SHIFT_ENDED';
/**
+ * Shift is not available yet
+ */
+ const NOT_YET = 'NOT_YET';
+
+ /**
* User is already signed up
*/
const SIGNED_UP = 'SIGNED_UP';
diff --git a/includes/model/Shifts_model.php b/includes/model/Shifts_model.php
index 6f422c32..6bb17cf2 100644
--- a/includes/model/Shifts_model.php
+++ b/includes/model/Shifts_model.php
@@ -325,6 +325,10 @@ function Shift_signup_allowed_angel(
return new ShiftSignupState(ShiftSignupState::NOT_ARRIVED, $free_entries);
}
+ if (config('signup_advance_hours') && $shift['start'] > time() + config('signup_advance_hours') * 3600) {
+ return new ShiftSignupState(ShiftSignupState::NOT_YET, $free_entries);
+ }
+
if (empty($user_shifts)) {
$user_shifts = Shifts_by_user($user->id);
}
diff --git a/includes/view/ShiftCalendarShiftRenderer.php b/includes/view/ShiftCalendarShiftRenderer.php
index 3f427ea0..ac206ad0 100644
--- a/includes/view/ShiftCalendarShiftRenderer.php
+++ b/includes/view/ShiftCalendarShiftRenderer.php
@@ -74,6 +74,7 @@ class ShiftCalendarShiftRenderer
return 'primary';
case ShiftSignupState::NOT_ARRIVED:
+ case ShiftSignupState::NOT_YET:
case ShiftSignupState::SHIFT_ENDED:
return 'default';
@@ -203,6 +204,10 @@ class ShiftCalendarShiftRenderer
$entry_list[] = $inner_text . ' (' . __('please arrive for signup') . ')';
break;
+ case ShiftSignupState::NOT_YET:
+ $entry_list[] = $inner_text . '(' . _('not yet') . ')';
+ break;
+
case ShiftSignupState::ANGELTYPE:
if ($angeltype['restricted'] == 1) {
// User has to be confirmed on the angeltype first
diff --git a/includes/view/Shifts_view.php b/includes/view/Shifts_view.php
index 2e7bfa4b..01dc1561 100644
--- a/includes/view/Shifts_view.php
+++ b/includes/view/Shifts_view.php
@@ -129,6 +129,13 @@ function Shift_view($shift, $shifttype, $room, $angeltypes_source, ShiftSignupSt
$content[] = info(__('You are signed up for this shift.'), true);
}
+ if (config('signup_advance_hours') && $shift['start'] > time() + config('signup_advance_hours') * 3600) {
+ $content[] = info(sprintf(
+ _('This shift is in the far future and becomes available for signup at %s.'),
+ date(_('Y-m-d') . ' H:i', $shift['start'] - config('signup_advance_hours') * 3600)
+ ), true);
+ }
+
$buttons = [];
if ($shift_admin || $admin_shifttypes || $admin_rooms) {
$buttons = [
diff --git a/resources/lang/de_DE.UTF-8/LC_MESSAGES/default.po b/resources/lang/de_DE.UTF-8/LC_MESSAGES/default.po
index a41d9624..58bc44e9 100644
--- a/resources/lang/de_DE.UTF-8/LC_MESSAGES/default.po
+++ b/resources/lang/de_DE.UTF-8/LC_MESSAGES/default.po
@@ -2124,6 +2124,12 @@ msgstr "Eintragen"
msgid "ended"
msgstr "vorbei"
+msgid "not yet"
+msgstr "noch nicht"
+
+msgid "This shift is in the far future and becomes available for signup at %s."
+msgstr "Diese Schicht liegt in der fernen Zukunft und du kannst dich ab %s eintragen."
+
# Wie ist dies zu verstehen bitte?
#: includes/view/ShiftCalendarShiftRenderer.php:203
msgid "please arrive for signup"