From 1a3b4e2a334c57cc403be1d8e21fd8e162d9df5c Mon Sep 17 00:00:00 2001 From: msquare Date: Sat, 12 Nov 2016 23:00:46 +0100 Subject: redone shift coloring and shift signup state --- includes/model/Shifts_model.php | 74 ++++++++++++++++++++++++----------------- 1 file changed, 44 insertions(+), 30 deletions(-) (limited to 'includes/model/Shifts_model.php') diff --git a/includes/model/Shifts_model.php b/includes/model/Shifts_model.php index 392adfaa..306d3e13 100644 --- a/includes/model/Shifts_model.php +++ b/includes/model/Shifts_model.php @@ -1,5 +1,6 @@ $user_shifts * List of the users shifts */ -function Shift_signup_allowed($shift, $angeltype, $user_angeltype = null, $user_shifts = null) { - global $user, $privileges; +function Shift_signup_allowed($user, $shift, $angeltype, $user_angeltype = null, $user_shifts = null) { + global $privileges; - if ($user_shifts == null) { - $user_shifts = Shifts_by_user($user); + $free_entries = Shift_free_entries($shift['SID'], $angeltype['id']); + + if (in_array('user_shifts_admin', $privileges)) { + if ($free_entries == 0) { + // User shift admins may join anybody in every shift + return new ShiftSignupState(ShiftSignupState::ADMIN, $free_entries); + } + + return new ShiftSignupState(ShiftSignupState::FREE, $free_entries); + } + if (time() < $shift['start']) { + // you can only join if the shift is in future + return new ShiftSignupState(ShiftSignupState::SHIFT_ENDED, $free_entries); + } + if ($free_entries == 0) { + // you cannot join if shift is full + return new ShiftSignupState(ShiftSignupState::OCCUPIED, $free_entries); } if ($user_angeltype == null) { $user_angeltype = UserAngelType_by_User_and_AngelType($user, $angeltype); } + if ($user_angeltype == null || ($angeltype['restricted'] == 1 && $user_angeltype != null && ! isset($user_angeltype['confirm_user_id']))) { + // you cannot join if user is not of this angel type + // you cannot join if you are not confirmed + return new ShiftSignupState(ShiftSignupState::ANGELTYPE, $free_entries); + } + + if ($user_shifts == null) { + $user_shifts = Shifts_by_user($user); + } + + if (Shift_collides($shift, $user_shifts)) { + // you cannot join if user alread joined a parallel or this shift + return new ShiftSignupState(ShiftSignupState::COLLIDES, $free_entries); + } + $signed_up = false; foreach ($user_shifts as $user_shift) { if ($user_shift['SID'] == $shift['SID']) { @@ -138,30 +169,13 @@ function Shift_signup_allowed($shift, $angeltype, $user_angeltype = null, $user_ } } - // you canot join if shift is full - $user_may_join_shift = ! Shift_occupied($shift['SID'], $angeltype['id']); - - // you cannot join if user alread joined a parallel or this shift - $user_may_join_shift &= ! Shift_collides($shift, $user_shifts); - - // you cannot join if you already singed up for this shift - $user_may_join_shift &= ! $signed_up; - - // you cannot join if user is not of this angel type - $user_may_join_shift &= $user_angeltype != null; - - // you cannot join if you are not confirmed - if ($angeltype['restricted'] == 1 && $user_angeltype != null) { - $user_may_join_shift &= isset($user_angeltype['confirm_user_id']); + if ($signed_up) { + // you cannot join if you already singed up for this shift + return new ShiftSignupState(ShiftSignupState::SIGNED_UP, $free_entries); } - // you can only join if the shift is in future - $user_may_join_shift &= time() < $shift['start']; - - // User shift admins may join anybody in every shift - $user_may_join_shift |= in_array('user_shifts_admin', $privileges); - - return $user_may_join_shift; + // Hooray, shift is free for you! + return new ShiftSignupState(ShiftSignupState::FREE, $free_entries); } /** -- cgit v1.2.3-70-g09d2