2016-10-03 17:41:14 +02:00
< ? php
/**
* Sign up for a shift .
*/
2017-01-02 03:57:23 +01:00
function shift_entry_add_controller ()
{
global $privileges , $user ;
2016-10-03 17:55:49 +02:00
2017-01-02 03:57:23 +01:00
if ( isset ( $_REQUEST [ 'shift_id' ]) && preg_match ( " /^[0-9]* $ / " , $_REQUEST [ 'shift_id' ])) {
$shift_id = $_REQUEST [ 'shift_id' ];
} else {
redirect ( page_link_to ( 'user_shifts' ));
}
2016-10-03 17:41:14 +02:00
2016-10-03 17:55:49 +02:00
// Locations laden
$rooms = sql_select ( " SELECT * FROM `Room` WHERE `show`='Y' ORDER BY `Name` " );
2017-01-02 03:57:23 +01:00
$room_array = [];
foreach ( $rooms as $room ) {
$room_array [ $room [ 'RID' ]] = $room [ 'Name' ];
}
2016-10-03 17:55:49 +02:00
2017-01-02 03:57:23 +01:00
$shift = Shift ( $shift_id );
$shift [ 'Name' ] = $room_array [ $shift [ 'RID' ]];
if ( $shift == null ) {
redirect ( page_link_to ( 'user_shifts' ));
}
2016-10-03 17:41:14 +02:00
2017-01-02 03:57:23 +01:00
if ( isset ( $_REQUEST [ 'type_id' ]) && preg_match ( " /^[0-9]* $ / " , $_REQUEST [ 'type_id' ])) {
$type_id = $_REQUEST [ 'type_id' ];
} else {
redirect ( page_link_to ( 'user_shifts' ));
}
2016-10-03 17:41:14 +02:00
2017-01-02 03:57:23 +01:00
if ( in_array ( 'user_shifts_admin' , $privileges ) || in_array ( 'shiftentry_edit_angeltype_supporter' , $privileges )) {
$type = AngelType ( $type_id );
} else {
$type = sql_select ( " SELECT * FROM `UserAngelTypes` JOIN `AngelTypes` ON (`UserAngelTypes`.`angeltype_id` = `AngelTypes`.`id`) WHERE `AngelTypes`.`id` = ' " . sql_escape ( $type_id ) . " ' AND (`AngelTypes`.`restricted` = 0 OR (`UserAngelTypes`.`user_id` = ' " . sql_escape ( $user [ 'UID' ]) . " ' AND NOT `UserAngelTypes`.`confirm_user_id` IS NULL)) " );
$type = $type [ 0 ];
}
2016-12-24 17:00:03 +01:00
2017-01-02 03:57:23 +01:00
if ( $type == null ) {
redirect ( page_link_to ( 'user_shifts' ));
}
2016-12-24 17:00:03 +01:00
2017-01-02 03:57:23 +01:00
if ( isset ( $_REQUEST [ 'user_id' ]) && preg_match ( " /^[0-9]* $ / " , $_REQUEST [ 'user_id' ]) && ( in_array ( 'user_shifts_admin' , $privileges ) || in_array ( 'shiftentry_edit_angeltype_supporter' , $privileges ))) {
$user_id = $_REQUEST [ 'user_id' ];
} else {
$user_id = $user [ 'UID' ];
}
2016-12-24 17:00:03 +01:00
2017-01-02 03:57:23 +01:00
$needed_angeltype = NeededAngeltype_by_Shift_and_Angeltype ( $shift , $type );
$shift_entries = ShiftEntries_by_shift_and_angeltype ( $shift [ 'SID' ], $type [ 'id' ]);
2016-12-27 23:02:05 +01:00
2017-01-02 03:57:23 +01:00
$shift_signup_allowed = Shift_signup_allowed ( User ( $user_id ), $shift , $type , null , null , $needed_angeltype , $shift_entries );
if ( ! $shift_signup_allowed -> isSignupAllowed ()) {
error ( _ ( " You are not allowed to sign up for this shift. Maybe shift is full or already running. " ));
redirect ( shift_link ( $shift ));
}
2016-10-03 17:41:14 +02:00
2017-01-02 03:57:23 +01:00
if ( isset ( $_REQUEST [ 'submit' ])) {
$selected_type_id = $type_id ;
if ( in_array ( 'user_shifts_admin' , $privileges ) || in_array ( 'shiftentry_edit_angeltype_supporter' , $privileges )) {
if ( sql_num_query ( " SELECT * FROM `User` WHERE `UID`=' " . sql_escape ( $user_id ) . " ' LIMIT 1 " ) == 0 ) {
redirect ( page_link_to ( 'user_shifts' ));
}
2016-10-03 17:41:14 +02:00
2017-01-02 03:57:23 +01:00
if ( isset ( $_REQUEST [ 'angeltype_id' ]) && test_request_int ( 'angeltype_id' ) && sql_num_query ( " SELECT * FROM `AngelTypes` WHERE `id`=' " . sql_escape ( $_REQUEST [ 'angeltype_id' ]) . " ' LIMIT 1 " ) > 0 ) {
$selected_type_id = $_REQUEST [ 'angeltype_id' ];
}
}
2016-10-03 17:41:14 +02:00
2017-01-02 03:57:23 +01:00
if ( sql_num_query ( " SELECT * FROM `ShiftEntry` WHERE `SID`=' " . sql_escape ( $shift [ 'SID' ]) . " ' AND `UID` = ' " . sql_escape ( $user_id ) . " ' " )) {
return error ( " This angel does already have an entry for this shift. " , true );
}
2016-10-03 17:41:14 +02:00
2017-01-02 03:57:23 +01:00
$freeloaded = $shift [ 'freeloaded' ];
$freeload_comment = $shift [ 'freeload_comment' ];
if ( in_array ( " user_shifts_admin " , $privileges )) {
$freeloaded = isset ( $_REQUEST [ 'freeloaded' ]);
$freeload_comment = strip_request_item_nl ( 'freeload_comment' );
}
2016-10-03 17:41:14 +02:00
2017-01-02 03:57:23 +01:00
$comment = strip_request_item_nl ( 'comment' );
$result = ShiftEntry_create ([
2016-10-03 17:41:14 +02:00
'SID' => $shift_id ,
'TID' => $selected_type_id ,
'UID' => $user_id ,
'Comment' => $comment ,
'freeloaded' => $freeloaded ,
2017-01-02 03:57:23 +01:00
'freeload_comment' => $freeload_comment
2016-10-03 17:41:14 +02:00
]);
2017-01-02 03:57:23 +01:00
if ( $result === false ) {
engelsystem_error ( 'Unable to create shift entry.' );
}
2016-10-03 17:41:14 +02:00
2017-01-02 03:57:23 +01:00
if ( $type [ 'restricted' ] == 0 && sql_num_query ( " SELECT * FROM `UserAngelTypes` INNER JOIN `AngelTypes` ON `AngelTypes`.`id` = `UserAngelTypes`.`angeltype_id` WHERE `angeltype_id` = ' " . sql_escape ( $selected_type_id ) . " ' AND `user_id` = ' " . sql_escape ( $user_id ) . " ' " ) == 0 ) {
sql_query ( " INSERT INTO `UserAngelTypes` (`user_id`, `angeltype_id`) VALUES (' " . sql_escape ( $user_id ) . " ', ' " . sql_escape ( $selected_type_id ) . " ') " );
}
2016-10-03 17:41:14 +02:00
2017-01-02 03:57:23 +01:00
$user_source = User ( $user_id );
engelsystem_log ( " User " . User_Nick_render ( $user_source ) . " signed up for shift " . $shift [ 'name' ] . " from " . date ( " Y-m-d H:i " , $shift [ 'start' ]) . " to " . date ( " Y-m-d H:i " , $shift [ 'end' ]));
success ( _ ( " You are subscribed. Thank you! " ) . ' <a href="' . page_link_to ( 'user_myshifts' ) . '">' . _ ( " My shifts " ) . ' »</a>' );
redirect ( shift_link ( $shift ));
2016-10-03 17:41:14 +02:00
}
2017-01-02 03:57:23 +01:00
if ( in_array ( 'user_shifts_admin' , $privileges )) {
$users = sql_select ( " SELECT *, (SELECT count(*) FROM `ShiftEntry` WHERE `freeloaded`=1 AND `ShiftEntry`.`UID`=`User`.`UID`) AS `freeloaded` FROM `User` ORDER BY `Nick` " );
$users_select = [];
foreach ( $users as $usr ) {
$users_select [ $usr [ 'UID' ]] = $usr [ 'Nick' ] . ( $usr [ 'freeloaded' ] == 0 ? " " : " ( " . _ ( " Freeloader " ) . " ) " );
}
$user_text = html_select_key ( 'user_id' , 'user_id' , $users_select , $user [ 'UID' ]);
2016-10-03 17:41:14 +02:00
2017-01-02 03:57:23 +01:00
$angeltypes_source = sql_select ( " SELECT * FROM `AngelTypes` ORDER BY `name` " );
$angeltypes = [];
foreach ( $angeltypes_source as $angeltype ) {
$angeltypes [ $angeltype [ 'id' ]] = $angeltype [ 'name' ];
}
$angeltype_select = html_select_key ( 'angeltype_id' , 'angeltype_id' , $angeltypes , $type [ 'id' ]);
} elseif ( in_array ( 'shiftentry_edit_angeltype_supporter' , $privileges )) {
$users = Users_by_angeltype ( $type );
$users_select = [];
foreach ( $users as $usr ) {
if ( ! $type [ 'restricted' ] || $usr [ 'confirm_user_id' ] != null ) {
$users_select [ $usr [ 'UID' ]] = $usr [ 'Nick' ];
}
}
$user_text = html_select_key ( 'user_id' , 'user_id' , $users_select , $user [ 'UID' ]);
2016-12-24 17:00:03 +01:00
2017-01-02 03:57:23 +01:00
$angeltypes_source = User_angeltypes ( $user );
$angeltypes = [];
foreach ( $angeltypes_source as $angeltype ) {
if ( $angeltype [ 'supporter' ]) {
$angeltypes [ $angeltype [ 'id' ]] = $angeltype [ 'name' ];
}
$angeltype_select = html_select_key ( 'angeltype_id' , 'angeltype_id' , $angeltypes , $type [ 'id' ]);
}
} else {
$user_text = User_Nick_render ( $user );
$angeltype_select = $type [ 'name' ];
2016-12-24 17:00:03 +01:00
}
2016-10-03 17:41:14 +02:00
2017-01-02 03:57:23 +01:00
return ShiftEntry_edit_view ( $user_text , date ( " Y-m-d H:i " , $shift [ 'start' ]) . ' – ' . date ( 'Y-m-d H:i' , $shift [ 'end' ]) . ' (' . shift_length ( $shift ) . ')' , $shift [ 'Name' ], $shift [ 'name' ], $angeltype_select , " " , false , null , in_array ( 'user_shifts_admin' , $privileges ));
2016-10-03 17:41:14 +02:00
}
/**
* Remove somebody from a shift .
*/
2017-01-02 03:57:23 +01:00
function shift_entry_delete_controller ()
{
global $privileges , $user ;
2016-10-03 17:41:14 +02:00
2017-01-02 03:57:23 +01:00
if ( ! isset ( $_REQUEST [ 'entry_id' ]) || ! test_request_int ( 'entry_id' )) {
redirect ( page_link_to ( 'user_shifts' ));
}
$entry_id = $_REQUEST [ 'entry_id' ];
2016-10-03 17:41:14 +02:00
2017-01-02 03:57:23 +01:00
$shift_entry_source = sql_select ( "
2016-12-24 17:29:12 +01:00
SELECT `User` . `Nick` , `ShiftEntry` . `Comment` , `ShiftEntry` . `UID` , `ShiftTypes` . `name` , `Shifts` .* , `Room` . `Name` , `AngelTypes` . `name` as `angel_type` , `AngelTypes` . `id` as `angeltype_id`
2016-10-03 17:41:14 +02:00
FROM `ShiftEntry`
JOIN `User` ON ( `User` . `UID` = `ShiftEntry` . `UID` )
JOIN `AngelTypes` ON ( `ShiftEntry` . `TID` = `AngelTypes` . `id` )
JOIN `Shifts` ON ( `ShiftEntry` . `SID` = `Shifts` . `SID` )
JOIN `ShiftTypes` ON ( `ShiftTypes` . `id` = `Shifts` . `shifttype_id` )
JOIN `Room` ON ( `Shifts` . `RID` = `Room` . `RID` )
WHERE `ShiftEntry` . `id` = '" . sql_escape($entry_id) . "' " );
2017-01-02 03:57:23 +01:00
if ( count ( $shift_entry_source ) > 0 ) {
$shift_entry_source = $shift_entry_source [ 0 ];
2016-10-03 17:41:14 +02:00
2017-01-02 03:57:23 +01:00
if ( ! in_array ( 'user_shifts_admin' , $privileges ) && ( ! in_array ( 'shiftentry_edit_angeltype_supporter' , $privileges ) || ! User_is_AngelType_supporter ( $user , AngelType ( $shift_entry_source [ 'angeltype_id' ])))) {
redirect ( page_link_to ( 'user_shifts' ));
}
2016-12-24 17:29:12 +01:00
2017-01-02 03:57:23 +01:00
$result = ShiftEntry_delete ( $entry_id );
if ( $result === false ) {
engelsystem_error ( 'Unable to delete shift entry.' );
}
2016-10-03 17:41:14 +02:00
2017-01-02 03:57:23 +01:00
engelsystem_log ( " Deleted " . User_Nick_render ( $shift_entry_source ) . " 's shift: " . $shift_entry_source [ 'name' ] . " at " . $shift_entry_source [ 'Name' ] . " from " . date ( " Y-m-d H:i " , $shift_entry_source [ 'start' ]) . " to " . date ( " Y-m-d H:i " , $shift_entry_source [ 'end' ]) . " as " . $shift_entry_source [ 'angel_type' ]);
success ( _ ( " Shift entry deleted. " ));
} else {
error ( _ ( " Entry not found. " ));
}
redirect ( shift_link ( $shift_entry_source ));
2016-10-03 17:41:14 +02:00
}