diff --git a/includes/controller/shifts_controller.php b/includes/controller/shifts_controller.php index be0cf127..01a7a2f6 100644 --- a/includes/controller/shifts_controller.php +++ b/includes/controller/shifts_controller.php @@ -200,17 +200,19 @@ function shift_controller() { $angeltypes = AngelTypes(); $user_shifts = Shifts_by_user($user); - $signed_up = false; - foreach ($user_shifts as $user_shift) { - if ($user_shift['SID'] == $shift['SID']) { - $signed_up = true; - break; + $shift_signup_state = null; + foreach ($angeltypes as $angeltype) { + $angeltype_signup_state = Shift_signup_allowed($user, $shift, $angeltype, null, $user_shifts); + if ($shift_signup_state == null) { + $shift_signup_state = $angeltype_signup_state; + } else { + $shift_signup_state = $shift_signup_state->combineWith($angeltype_signup_state); } } return [ $shift['name'], - Shift_view($shift, $shifttype, $room, in_array('admin_shifts', $privileges), $angeltypes, in_array('user_shifts_admin', $privileges), in_array('admin_rooms', $privileges), in_array('shifttypes', $privileges), $user_shifts, $signed_up) + Shift_view($shift, $shifttype, $room, $angeltypes, $user_shifts, $shift_signup_state) ]; } diff --git a/includes/view/Shifts_view.php b/includes/view/Shifts_view.php index 8e52eb9d..c53bf972 100644 --- a/includes/view/Shifts_view.php +++ b/includes/view/Shifts_view.php @@ -1,4 +1,5 @@ %c', [ msg(), Shift_collides($shift, $user_shifts) ? info(_('This shift collides with one of your shifts.'), true) : '', - $signed_up ? info(_('You are signed up for this shift.'), true) : '', + $shift_signup_state->getState() == ShiftSignupState::SIGNED_UP ? info(_('You are signed up for this shift.'), true) : '', ($shift_admin || $admin_shifttypes || $admin_rooms) ? buttons([ $shift_admin ? button(shift_edit_link($shift), glyph('pencil') . _('edit')) : '', $shift_admin ? button(shift_delete_link($shift), glyph('trash') . _('delete')) : '',