2011-07-13 14:30:19 +02:00
< ? php
2014-09-28 19:44:53 +02:00
2013-11-25 21:04:58 +01:00
function shifts_title () {
2014-09-24 15:03:41 +02:00
return _ ( " Shifts " );
2013-11-25 21:04:58 +01:00
}
2011-07-13 14:30:19 +02:00
function user_shifts () {
2016-08-21 18:00:24 +02:00
global $user , $privileges ;
2016-09-29 10:53:17 +02:00
if ( User_is_freeloader ( $user )) {
2013-12-27 18:45:27 +01:00
redirect ( page_link_to ( 'user_myshifts' ));
2016-09-29 10:53:17 +02:00
}
// Locations laden
2014-12-22 20:06:37 +01:00
$rooms = sql_select ( " SELECT * FROM `Room` WHERE `show`='Y' ORDER BY `Name` " );
2016-09-29 10:53:17 +02:00
$room_array = [];
foreach ( $rooms as $room ) {
2014-12-22 20:06:37 +01:00
$room_array [ $room [ 'RID' ]] = $room [ 'Name' ];
2016-09-29 10:53:17 +02:00
}
// Löschen einzelner Schicht-Einträge (Also Belegung einer Schicht von Engeln) durch Admins
2013-11-25 21:56:56 +01:00
if ( isset ( $_REQUEST [ 'entry_id' ]) && in_array ( 'user_shifts_admin' , $privileges )) {
2016-09-29 10:53:17 +02:00
if ( isset ( $_REQUEST [ 'entry_id' ]) && test_request_int ( 'entry_id' )) {
2012-05-19 16:41:00 +02:00
$entry_id = $_REQUEST [ 'entry_id' ];
2016-09-29 10:53:17 +02:00
} else {
2012-05-19 16:41:00 +02:00
redirect ( page_link_to ( 'user_shifts' ));
2016-09-29 10:53:17 +02:00
}
2014-12-17 17:22:35 +01:00
$shift_entry_source = sql_select ( "
2015-08-26 15:00:10 +02:00
SELECT `User` . `Nick` , `ShiftEntry` . `Comment` , `ShiftEntry` . `UID` , `ShiftTypes` . `name` , `Shifts` .* , `Room` . `Name` , `AngelTypes` . `name` as `angel_type`
FROM `ShiftEntry`
JOIN `User` ON ( `User` . `UID` = `ShiftEntry` . `UID` )
JOIN `AngelTypes` ON ( `ShiftEntry` . `TID` = `AngelTypes` . `id` )
JOIN `Shifts` ON ( `ShiftEntry` . `SID` = `Shifts` . `SID` )
2014-12-17 17:22:35 +01:00
JOIN `ShiftTypes` ON ( `ShiftTypes` . `id` = `Shifts` . `shifttype_id` )
2015-08-26 15:00:10 +02:00
JOIN `Room` ON ( `Shifts` . `RID` = `Room` . `RID` )
2014-12-28 13:44:56 +01:00
WHERE `ShiftEntry` . `id` = '" . sql_escape($entry_id) . "' " );
2013-11-25 21:56:56 +01:00
if ( count ( $shift_entry_source ) > 0 ) {
2012-12-26 19:53:27 +01:00
$shift_entry_source = $shift_entry_source [ 0 ];
2016-09-29 10:53:17 +02:00
2014-12-07 17:07:19 +01:00
$result = ShiftEntry_delete ( $entry_id );
2016-09-29 10:53:17 +02:00
if ( $result === false ) {
2014-12-07 17:07:19 +01:00
engelsystem_error ( 'Unable to delete shift entry.' );
2016-09-29 10:53:17 +02:00
}
2015-08-26 15:00:10 +02: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' ]);
2013-11-28 22:40:48 +01:00
success ( _ ( " Shift entry deleted. " ));
2016-09-29 10:53:17 +02:00
} else {
2013-11-28 22:40:48 +01:00
error ( _ ( " Entry not found. " ));
2016-09-29 10:53:17 +02:00
}
2012-05-19 16:41:00 +02:00
redirect ( page_link_to ( 'user_shifts' ));
2016-09-29 10:53:17 +02:00
} elseif ( isset ( $_REQUEST [ 'edit_shift' ]) && in_array ( 'admin_shifts' , $privileges )) {
// Schicht bearbeiten
2012-05-19 16:41:00 +02:00
$msg = " " ;
2016-09-29 12:08:12 +02:00
$valid = true ;
2016-09-29 10:53:17 +02:00
if ( isset ( $_REQUEST [ 'edit_shift' ]) && test_request_int ( 'edit_shift' )) {
2012-05-19 16:41:00 +02:00
$shift_id = $_REQUEST [ 'edit_shift' ];
2016-09-29 10:53:17 +02:00
} else {
2012-05-19 16:41:00 +02:00
redirect ( page_link_to ( 'user_shifts' ));
2016-09-29 10:53:17 +02:00
}
2014-12-17 17:22:35 +01:00
$shift = sql_select ( "
2015-08-26 15:03:53 +02:00
SELECT `ShiftTypes` . `name` , `Shifts` .* , `Room` .* FROM `Shifts`
JOIN `Room` ON ( `Shifts` . `RID` = `Room` . `RID` )
2014-12-17 17:22:35 +01:00
JOIN `ShiftTypes` ON ( `ShiftTypes` . `id` = `Shifts` . `shifttype_id` )
2014-12-28 13:44:56 +01:00
WHERE `SID` = '" . sql_escape($shift_id) . "' " );
2016-09-29 10:53:17 +02:00
if ( count ( $shift ) == 0 ) {
2012-05-19 16:41:00 +02:00
redirect ( page_link_to ( 'user_shifts' ));
2016-09-29 10:53:17 +02:00
}
2012-05-19 16:41:00 +02:00
$shift = $shift [ 0 ];
2016-09-29 10:53:17 +02:00
2014-12-25 22:23:18 +01:00
// Engeltypen laden
2012-05-19 17:05:04 +02:00
$types = sql_select ( " SELECT * FROM `AngelTypes` ORDER BY `name` " );
2016-09-29 10:53:17 +02:00
$angel_types = [];
$needed_angel_types = [];
2012-12-26 19:53:27 +01:00
foreach ( $types as $type ) {
$angel_types [ $type [ 'id' ]] = $type ;
2012-05-19 17:05:04 +02:00
$needed_angel_types [ $type [ 'id' ]] = 0 ;
2012-12-26 19:53:27 +01:00
}
2016-09-29 10:53:17 +02:00
2014-12-26 02:27:54 +01:00
$shifttypes_source = ShiftTypes ();
$shifttypes = [];
2016-09-29 10:53:17 +02:00
foreach ( $shifttypes_source as $shifttype ) {
2014-12-26 02:27:54 +01:00
$shifttypes [ $shifttype [ 'id' ]] = $shifttype [ 'name' ];
2016-09-29 10:53:17 +02:00
}
// Benötigte Engeltypen vom Raum
2014-12-28 13:44:56 +01:00
$needed_angel_types_source = sql_select ( " SELECT `AngelTypes`.*, `NeededAngelTypes`.`count` FROM `AngelTypes` LEFT JOIN `NeededAngelTypes` ON (`NeededAngelTypes`.`angel_type_id` = `AngelTypes`.`id` AND `NeededAngelTypes`.`room_id`=' " . sql_escape ( $shift [ 'RID' ]) . " ') ORDER BY `AngelTypes`.`name` " );
2012-05-19 17:50:09 +02:00
foreach ( $needed_angel_types_source as $type ) {
2016-09-29 10:53:17 +02:00
if ( $type [ 'count' ] != " " ) {
2013-11-25 21:56:56 +01:00
$needed_angel_types [ $type [ 'id' ]] = $type [ 'count' ];
2016-09-29 10:53:17 +02:00
}
2012-12-27 22:49:10 +01:00
}
2016-09-29 10:53:17 +02:00
2012-05-19 17:05:04 +02:00
// Benötigte Engeltypen von der Schicht
2014-12-28 13:44:56 +01:00
$needed_angel_types_source = sql_select ( " SELECT `AngelTypes`.*, `NeededAngelTypes`.`count` FROM `AngelTypes` LEFT JOIN `NeededAngelTypes` ON (`NeededAngelTypes`.`angel_type_id` = `AngelTypes`.`id` AND `NeededAngelTypes`.`shift_id`=' " . sql_escape ( $shift_id ) . " ') ORDER BY `AngelTypes`.`name` " );
2013-11-25 21:56:56 +01:00
foreach ( $needed_angel_types_source as $type ) {
2016-09-29 10:53:17 +02:00
if ( $type [ 'count' ] != " " ) {
2013-11-25 21:56:56 +01:00
$needed_angel_types [ $type [ 'id' ]] = $type [ 'count' ];
2016-09-29 10:53:17 +02:00
}
2012-05-19 17:50:09 +02:00
}
2016-09-29 10:53:17 +02:00
2014-12-26 02:27:54 +01:00
$shifttype_id = $shift [ 'shifttype_id' ];
$title = $shift [ 'title' ];
2012-05-19 16:41:00 +02:00
$rid = $shift [ 'RID' ];
$start = $shift [ 'start' ];
$end = $shift [ 'end' ];
2016-09-29 10:53:17 +02:00
2013-11-25 21:56:56 +01:00
if ( isset ( $_REQUEST [ 'submit' ])) {
2012-05-19 16:41:00 +02:00
// Name/Bezeichnung der Schicht, darf leer sein
2014-12-26 02:27:54 +01:00
$title = strip_request_item ( 'title' );
2016-09-29 10:53:17 +02:00
2012-05-19 16:41:00 +02:00
// Auswahl der sichtbaren Locations für die Schichten
2016-09-29 10:53:17 +02:00
if ( isset ( $_REQUEST [ 'rid' ]) && preg_match ( " /^[0-9]+ $ / " , $_REQUEST [ 'rid' ]) && isset ( $room_array [ $_REQUEST [ 'rid' ]])) {
2012-05-19 16:41:00 +02:00
$rid = $_REQUEST [ 'rid' ];
2016-09-29 10:53:17 +02:00
} else {
2016-09-29 12:08:12 +02:00
$valid = false ;
2012-05-19 16:41:00 +02:00
$rid = $rooms [ 0 ][ 'RID' ];
2013-11-28 22:40:48 +01:00
$msg .= error ( _ ( " Please select a room. " ), true );
2012-05-19 16:41:00 +02:00
}
2016-09-29 10:53:17 +02:00
if ( isset ( $_REQUEST [ 'shifttype_id' ]) && isset ( $shifttypes [ $_REQUEST [ 'shifttype_id' ]])) {
2014-12-26 02:27:54 +01:00
$shifttype_id = $_REQUEST [ 'shifttype_id' ];
2016-09-29 10:53:17 +02:00
} else {
2016-09-29 12:08:12 +02:00
$valid = false ;
2014-12-26 02:27:54 +01:00
$msg .= error ( _ ( 'Please select a shifttype.' ), true );
}
2016-09-29 10:53:17 +02:00
if ( isset ( $_REQUEST [ 'start' ]) && $tmp = DateTime :: createFromFormat ( " Y-m-d H:i " , trim ( $_REQUEST [ 'start' ]))) {
2012-05-19 16:41:00 +02:00
$start = $tmp -> getTimestamp ();
2016-09-29 10:53:17 +02:00
} else {
2016-09-29 12:08:12 +02:00
$valid = false ;
2013-11-28 22:40:48 +01:00
$msg .= error ( _ ( " Please enter a valid starting time for the shifts. " ), true );
2012-05-19 16:41:00 +02:00
}
2016-09-29 10:53:17 +02:00
if ( isset ( $_REQUEST [ 'end' ]) && $tmp = DateTime :: createFromFormat ( " Y-m-d H:i " , trim ( $_REQUEST [ 'end' ]))) {
2012-05-19 16:41:00 +02:00
$end = $tmp -> getTimestamp ();
2016-09-29 10:53:17 +02:00
} else {
2016-09-29 12:08:12 +02:00
$valid = false ;
2013-11-28 22:40:48 +01:00
$msg .= error ( _ ( " Please enter a valid ending time for the shifts. " ), true );
2012-05-19 16:41:00 +02:00
}
2016-09-29 10:53:17 +02:00
2012-05-19 16:41:00 +02:00
if ( $start >= $end ) {
2016-09-29 12:08:12 +02:00
$valid = false ;
2013-11-28 22:40:48 +01:00
$msg .= error ( _ ( " The ending time has to be after the starting time. " ), true );
2012-05-19 16:41:00 +02:00
}
2016-09-29 10:53:17 +02:00
2012-05-19 16:41:00 +02:00
foreach ( $needed_angel_types_source as $type ) {
2013-11-25 21:56:56 +01:00
if ( isset ( $_REQUEST [ 'type_' . $type [ 'id' ]]) && preg_match ( " /^[0-9]+ $ / " , trim ( $_REQUEST [ 'type_' . $type [ 'id' ]]))) {
2012-05-19 16:41:00 +02:00
$needed_angel_types [ $type [ 'id' ]] = trim ( $_REQUEST [ 'type_' . $type [ 'id' ]]);
} else {
2016-09-29 12:08:12 +02:00
$valid = false ;
2013-11-28 22:40:48 +01:00
$msg .= error ( sprintf ( _ ( " Please check your input for needed angels of type %s. " ), $type [ 'name' ]), true );
2012-05-19 16:41:00 +02:00
}
}
2016-09-29 10:53:17 +02:00
2016-09-29 12:08:12 +02:00
if ( $valid ) {
2014-12-26 02:27:54 +01:00
$shift [ 'shifttype_id' ] = $shifttype_id ;
$shift [ 'title' ] = $title ;
2014-12-07 17:41:40 +01:00
$shift [ 'RID' ] = $rid ;
$shift [ 'start' ] = $start ;
$shift [ 'end' ] = $end ;
2016-09-29 10:53:17 +02:00
2014-12-07 17:41:40 +01:00
$result = Shift_update ( $shift );
2016-09-29 10:53:17 +02:00
if ( $result === false ) {
2014-12-07 17:41:40 +01:00
engelsystem_error ( 'Unable to update shift.' );
2016-09-29 10:53:17 +02:00
}
2014-12-28 13:44:56 +01:00
sql_query ( " DELETE FROM `NeededAngelTypes` WHERE `shift_id`=' " . sql_escape ( $shift_id ) . " ' " );
2016-09-29 10:53:17 +02:00
$needed_angel_types_info = [];
2012-12-26 19:53:27 +01:00
foreach ( $needed_angel_types as $type_id => $count ) {
2014-12-28 13:44:56 +01:00
sql_query ( " INSERT INTO `NeededAngelTypes` SET `shift_id`=' " . sql_escape ( $shift_id ) . " ', `angel_type_id`=' " . sql_escape ( $type_id ) . " ', `count`=' " . sql_escape ( $count ) . " ' " );
2012-12-27 02:44:21 +01:00
$needed_angel_types_info [] = $angel_types [ $type_id ][ 'name' ] . " : " . $count ;
2012-12-26 19:53:27 +01:00
}
2016-09-29 10:53:17 +02:00
2016-08-21 18:00:24 +02:00
engelsystem_log ( " Updated shift ' " . $shifttypes [ $shifttype_id ] . " , " . $title . " ' from " . date ( " Y-m-d H:i " , $start ) . " to " . date ( " Y-m-d H:i " , $end ) . " with angel types " . join ( " , " , $needed_angel_types_info ));
2013-11-28 22:40:48 +01:00
success ( _ ( " Shift updated. " ));
2016-09-29 10:53:17 +02:00
2014-12-26 01:26:17 +01:00
redirect ( shift_link ([
2016-09-29 10:53:17 +02:00
'SID' => $shift_id
2014-12-26 01:26:17 +01:00
]));
2012-05-19 16:41:00 +02:00
}
}
2016-09-29 10:53:17 +02:00
2012-05-19 16:41:00 +02:00
$angel_types = " " ;
2016-09-29 10:53:17 +02:00
foreach ( $types as $type ) {
2014-08-22 22:34:13 +02:00
$angel_types .= form_spinner ( 'type_' . $type [ 'id' ], $type [ 'name' ], $needed_angel_types [ $type [ 'id' ]]);
2016-09-29 10:53:17 +02:00
}
return page_with_title ( shifts_title (), [
2013-12-27 18:45:27 +01:00
msg (),
2013-11-28 22:40:48 +01:00
'<noscript>' . info ( _ ( " This page is much more comfortable with javascript. " ), true ) . '</noscript>' ,
2016-09-29 10:53:17 +02:00
form ([
2014-12-26 02:27:54 +01:00
form_select ( 'shifttype_id' , _ ( 'Shifttype' ), $shifttypes , $shifttype_id ),
form_text ( 'title' , _ ( " Title " ), $title ),
2013-11-28 22:40:48 +01:00
form_select ( 'rid' , _ ( " Room: " ), $room_array , $rid ),
form_text ( 'start' , _ ( " Start: " ), date ( " Y-m-d H:i " , $start )),
form_text ( 'end' , _ ( " End: " ), date ( " Y-m-d H:i " , $end )),
'<h2>' . _ ( " Needed angels " ) . '</h2>' ,
$angel_types ,
2016-09-29 10:53:17 +02:00
form_submit ( 'submit' , _ ( " Save " ))
])
]);
} elseif ( isset ( $_REQUEST [ 'delete_shift' ]) && in_array ( 'user_shifts_admin' , $privileges )) {
// Schicht komplett löschen (nur für admins/user mit user_shifts_admin privileg)
if ( isset ( $_REQUEST [ 'delete_shift' ]) && preg_match ( " /^[0-9]* $ / " , $_REQUEST [ 'delete_shift' ])) {
2012-05-19 16:41:00 +02:00
$shift_id = $_REQUEST [ 'delete_shift' ];
2016-09-29 10:53:17 +02:00
} else {
2012-12-30 18:27:45 +01:00
redirect ( page_link_to ( 'user_shifts' ));
2016-09-29 10:53:17 +02:00
}
2014-12-22 20:06:37 +01:00
$shift = Shift ( $shift_id );
2016-09-29 10:53:17 +02:00
if ( $shift === false ) {
2014-12-22 20:06:37 +01:00
engelsystem_error ( 'Unable to load shift.' );
2016-09-29 10:53:17 +02:00
}
if ( $shift == null ) {
2012-12-30 18:27:45 +01:00
redirect ( page_link_to ( 'user_shifts' ));
2016-09-29 10:53:17 +02:00
}
// Schicht löschen bestätigt
2013-11-25 21:56:56 +01:00
if ( isset ( $_REQUEST [ 'delete' ])) {
2014-12-07 17:48:35 +01:00
$result = Shift_delete ( $shift_id );
2016-09-29 10:53:17 +02:00
if ( $result === false ) {
2014-12-07 17:48:35 +01:00
engelsystem_error ( 'Unable to delete shift.' );
2016-09-29 10:53:17 +02:00
}
2015-08-26 15:03:53 +02:00
engelsystem_log ( " Deleted shift " . $shift [ 'name' ] . " from " . date ( " Y-m-d H:i " , $shift [ 'start' ]) . " to " . date ( " Y-m-d H:i " , $shift [ 'end' ]));
2013-11-28 22:40:48 +01:00
success ( _ ( " Shift deleted. " ));
2012-05-19 16:41:00 +02:00
redirect ( page_link_to ( 'user_shifts' ));
}
2016-09-29 10:53:17 +02:00
return page_with_title ( shifts_title (), [
2013-12-27 18:45:27 +01:00
error ( sprintf ( _ ( " Do you want to delete the shift %s from %s to %s? " ), $shift [ 'name' ], date ( " Y-m-d H:i " , $shift [ 'start' ]), date ( " H:i " , $shift [ 'end' ])), true ),
2016-09-29 10:53:17 +02:00
'<a class="button" href="?p=user_shifts&delete_shift=' . $shift_id . '&delete">' . _ ( " delete " ) . '</a>'
]);
2013-11-25 21:56:56 +01:00
} elseif ( isset ( $_REQUEST [ 'shift_id' ])) {
2016-09-29 10:53:17 +02:00
if ( isset ( $_REQUEST [ 'shift_id' ]) && preg_match ( " /^[0-9]* $ / " , $_REQUEST [ 'shift_id' ])) {
2012-05-19 16:41:00 +02:00
$shift_id = $_REQUEST [ 'shift_id' ];
2016-09-29 10:53:17 +02:00
} else {
2012-12-30 18:27:45 +01:00
redirect ( page_link_to ( 'user_shifts' ));
2016-09-29 10:53:17 +02:00
}
2014-12-22 20:06:37 +01:00
$shift = Shift ( $shift_id );
$room ;
$shift [ 'Name' ] = $room_array [ $shift [ 'RID' ]];
2016-09-29 10:53:17 +02:00
if ( $shift === false ) {
2014-12-22 20:06:37 +01:00
engelsystem_error ( 'Unable to load shift.' );
2016-09-29 10:53:17 +02:00
}
if ( $shift == null ) {
2012-12-30 18:27:45 +01:00
redirect ( page_link_to ( 'user_shifts' ));
2016-09-29 10:53:17 +02:00
}
if ( isset ( $_REQUEST [ 'type_id' ]) && preg_match ( " /^[0-9]* $ / " , $_REQUEST [ 'type_id' ])) {
2012-05-19 16:41:00 +02:00
$type_id = $_REQUEST [ 'type_id' ];
2016-09-29 10:53:17 +02:00
} else {
2012-12-30 18:27:45 +01:00
redirect ( page_link_to ( 'user_shifts' ));
2016-09-29 10:53:17 +02:00
}
if ( in_array ( 'user_shifts_admin' , $privileges )) {
2014-12-28 13:44:56 +01:00
$type = sql_select ( " SELECT * FROM `AngelTypes` WHERE `id`=' " . sql_escape ( $type_id ) . " ' LIMIT 1 " );
2016-09-29 10:53:17 +02:00
} else {
2014-12-28 13:44:56 +01:00
$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)) LIMIT 1 " );
2016-09-29 10:53:17 +02:00
}
if ( count ( $type ) == 0 ) {
2012-12-30 18:27:45 +01:00
redirect ( page_link_to ( 'user_shifts' ));
2016-09-29 10:53:17 +02:00
}
2012-05-19 16:41:00 +02:00
$type = $type [ 0 ];
2016-09-29 10:53:17 +02:00
2014-12-28 14:20:16 +01:00
if ( ! Shift_signup_allowed ( $shift , $type )) {
error ( _ ( 'You are not allowed to sign up for this shift. Maybe shift is full or already running.' ));
redirect ( shift_link ( $shift ));
}
2016-09-29 10:53:17 +02:00
2013-11-25 21:56:56 +01:00
if ( isset ( $_REQUEST [ 'submit' ])) {
2012-05-19 16:41:00 +02:00
$selected_type_id = $type_id ;
if ( in_array ( 'user_shifts_admin' , $privileges )) {
2016-09-29 10:53:17 +02:00
if ( isset ( $_REQUEST [ 'user_id' ]) && preg_match ( " /^[0-9]* $ / " , $_REQUEST [ 'user_id' ])) {
2012-05-19 16:41:00 +02:00
$user_id = $_REQUEST [ 'user_id' ];
2016-09-29 10:53:17 +02:00
} else {
2012-05-19 16:41:00 +02:00
$user_id = $user [ 'UID' ];
2016-09-29 10:53:17 +02:00
}
if ( sql_num_query ( " SELECT * FROM `User` WHERE `UID`=' " . sql_escape ( $user_id ) . " ' LIMIT 1 " ) == 0 ) {
2012-05-19 16:41:00 +02:00
redirect ( page_link_to ( 'user_shifts' ));
2016-09-29 10:53:17 +02: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 ) {
2012-05-19 16:41:00 +02:00
$selected_type_id = $_REQUEST [ 'angeltype_id' ];
2016-09-29 10:53:17 +02:00
}
} else {
2012-05-19 16:41:00 +02:00
$user_id = $user [ 'UID' ];
2016-09-29 10:53:17 +02:00
}
if ( sql_num_query ( " SELECT * FROM `ShiftEntry` WHERE `SID`=' " . sql_escape ( $shift [ 'SID' ]) . " ' AND `UID` = ' " . sql_escape ( $user_id ) . " ' " )) {
2012-05-19 16:41:00 +02:00
return error ( " This angel does already have an entry for this shift. " , true );
2016-09-29 10:53:17 +02:00
}
2013-12-27 18:45:27 +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-09-29 10:53:17 +02:00
2012-05-19 16:41:00 +02:00
$comment = strip_request_item_nl ( 'comment' );
2016-09-29 10:53:17 +02:00
$result = ShiftEntry_create ([
2014-12-07 16:45:09 +01:00
'SID' => $shift_id ,
'TID' => $selected_type_id ,
'UID' => $user_id ,
'Comment' => $comment ,
'freeloaded' => $freeloaded ,
2016-09-29 10:53:17 +02:00
'freeload_comment' => $freeload_comment
]);
if ( $result === false ) {
2014-12-07 16:45:09 +01:00
engelsystem_error ( 'Unable to create shift entry.' );
2016-09-29 10:53:17 +02: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 ) {
2012-12-26 23:15:08 +01:00
sql_query ( " INSERT INTO `UserAngelTypes` (`user_id`, `angeltype_id`) VALUES (' " . sql_escape ( $user_id ) . " ', ' " . sql_escape ( $selected_type_id ) . " ') " );
2016-09-29 10:53:17 +02:00
}
2012-12-26 19:53:27 +01:00
$user_source = User ( $user_id );
2015-08-26 15:00:10 +02:00
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' ]));
2013-11-28 22:40:48 +01:00
success ( _ ( " You are subscribed. Thank you! " ) . ' <a href="' . page_link_to ( 'user_myshifts' ) . '">' . _ ( " My shifts " ) . ' »</a>' );
2014-12-19 22:41:55 +01:00
redirect ( shift_link ( $shift ));
2012-05-19 16:41:00 +02:00
}
2016-09-29 10:53:17 +02:00
2012-05-19 16:41:00 +02:00
if ( in_array ( 'user_shifts_admin' , $privileges )) {
2013-12-27 18:45:27 +01:00
$users = sql_select ( " SELECT *, (SELECT count(*) FROM `ShiftEntry` WHERE `freeloaded`=1 AND `ShiftEntry`.`UID`=`User`.`UID`) AS `freeloaded` FROM `User` ORDER BY `Nick` " );
2016-09-29 10:53:17 +02:00
$users_select = [];
foreach ( $users as $usr ) {
2013-12-27 18:45:27 +01:00
$users_select [ $usr [ 'UID' ]] = $usr [ 'Nick' ] . ( $usr [ 'freeloaded' ] == 0 ? " " : " ( " . _ ( " Freeloader " ) . " ) " );
2016-09-29 10:53:17 +02:00
}
2012-05-19 16:41:00 +02:00
$user_text = html_select_key ( 'user_id' , 'user_id' , $users_select , $user [ 'UID' ]);
2016-09-29 10:53:17 +02:00
2012-05-19 16:41:00 +02:00
$angeltypes_source = sql_select ( " SELECT * FROM `AngelTypes` ORDER BY `name` " );
2016-09-29 10:53:17 +02:00
$angeltypes = [];
foreach ( $angeltypes_source as $angeltype ) {
2012-05-19 16:41:00 +02:00
$angeltypes [ $angeltype [ 'id' ]] = $angeltype [ 'name' ];
2016-09-29 10:53:17 +02:00
}
2012-05-19 16:41:00 +02:00
$angeltyppe_select = html_select_key ( 'angeltype_id' , 'angeltype_id' , $angeltypes , $type [ 'id' ]);
} else {
2012-12-30 17:58:23 +01:00
$user_text = User_Nick_render ( $user );
2012-05-19 16:41:00 +02:00
$angeltyppe_select = $type [ 'name' ];
}
2016-09-29 10:53:17 +02:00
2014-11-03 19:37:47 +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' ], $angeltyppe_select , " " , false , null , in_array ( 'user_shifts_admin' , $privileges ));
2012-05-19 16:41:00 +02:00
} else {
return view_user_shifts ();
}
2011-12-28 14:45:49 +01:00
}
2011-12-27 22:13:17 +01:00
2011-12-28 14:45:49 +01:00
function view_user_shifts () {
2012-05-19 16:41:00 +02:00
global $user , $privileges ;
2014-03-09 13:39:04 +01:00
global $ical_shifts ;
2016-09-29 10:53:17 +02:00
$ical_shifts = [];
2014-12-17 17:22:35 +01:00
$days = sql_select_single_col ( "
2015-08-26 15:03:53 +02:00
SELECT DISTINCT DATE ( FROM_UNIXTIME ( `start` )) AS `id` , DATE ( FROM_UNIXTIME ( `start` )) AS `name`
FROM `Shifts`
2014-12-17 17:22:35 +01:00
ORDER BY `start` " );
2016-09-29 10:53:17 +02:00
2014-03-26 18:51:34 +01:00
if ( count ( $days ) == 0 ) {
error ( _ ( " The administration has not configured any shifts yet. " ));
redirect ( '?' );
}
2016-09-29 10:53:17 +02:00
2012-05-19 16:41:00 +02:00
$rooms = sql_select ( " SELECT `RID` AS `id`, `Name` AS `name` FROM `Room` WHERE `show`='Y' ORDER BY `Name` " );
2016-09-29 10:53:17 +02:00
2014-03-12 17:36:55 +01:00
if ( count ( $rooms ) == 0 ) {
error ( _ ( " The administration has not configured any rooms yet. " ));
redirect ( '?' );
}
2016-09-29 10:53:17 +02:00
if ( in_array ( 'user_shifts_admin' , $privileges )) {
2012-12-12 23:15:57 +01:00
$types = sql_select ( " SELECT `id`, `name` FROM `AngelTypes` ORDER BY `AngelTypes`.`name` " );
2016-09-29 10:53:17 +02:00
} else {
2014-12-28 13:44:56 +01:00
$types = sql_select ( " SELECT `AngelTypes`.`id`, `AngelTypes`.`name`, (`AngelTypes`.`restricted`=0 OR (NOT `UserAngelTypes`.`confirm_user_id` IS NULL OR `UserAngelTypes`.`id` IS NULL)) as `enabled` FROM `AngelTypes` LEFT JOIN `UserAngelTypes` ON (`UserAngelTypes`.`angeltype_id`=`AngelTypes`.`id` AND `UserAngelTypes`.`user_id`=' " . sql_escape ( $user [ 'UID' ]) . " ') ORDER BY `AngelTypes`.`name` " );
2016-09-29 10:53:17 +02:00
}
if ( empty ( $types )) {
2012-12-12 00:22:30 +01:00
$types = sql_select ( " SELECT `id`, `name` FROM `AngelTypes` WHERE `restricted` = 0 " );
2016-09-29 10:53:17 +02:00
}
$filled = [
[
2013-11-25 21:56:56 +01:00
'id' => '1' ,
2016-09-29 10:53:17 +02:00
'name' => _ ( " occupied " )
],
[
2013-11-25 21:56:56 +01:00
'id' => '0' ,
2016-09-29 10:53:17 +02:00
'name' => _ ( " free " )
]
];
2014-03-12 17:36:55 +01:00
if ( count ( $types ) == 0 ) {
error ( _ ( " The administration has not configured any angeltypes yet - or you are not subscribed to any angeltype. " ));
redirect ( '?' );
}
2016-09-29 10:53:17 +02:00
if ( ! isset ( $_SESSION [ 'user_shifts' ])) {
$_SESSION [ 'user_shifts' ] = [];
}
2013-11-25 21:56:56 +01:00
if ( ! isset ( $_SESSION [ 'user_shifts' ][ 'filled' ])) {
2015-08-13 11:22:25 +02:00
// User shift admins see free and occupied shifts by default
$_SESSION [ 'user_shifts' ][ 'filled' ] = in_array ( 'user_shifts_admin' , $privileges ) ? [
0 ,
2016-09-29 10:53:17 +02:00
1
2015-08-13 11:22:25 +02:00
] : [
2016-09-29 10:53:17 +02:00
0
2015-08-13 11:22:25 +02:00
];
2012-05-19 16:41:00 +02:00
}
2016-09-29 10:53:17 +02:00
foreach ([
2013-11-25 21:56:56 +01:00
'rooms' ,
'types' ,
2016-09-29 10:53:17 +02:00
'filled'
] as $key ) {
2013-11-25 21:56:56 +01:00
if ( isset ( $_REQUEST [ $key ])) {
2012-05-19 16:41:00 +02:00
$filtered = array_filter ( $_REQUEST [ $key ], 'is_numeric' );
2016-09-29 10:53:17 +02:00
if ( ! empty ( $filtered )) {
2012-05-19 16:41:00 +02:00
$_SESSION [ 'user_shifts' ][ $key ] = $filtered ;
2016-09-29 10:53:17 +02:00
}
2013-11-25 21:56:56 +01:00
unset ( $filtered );
2012-05-19 16:41:00 +02:00
}
2016-09-29 10:53:17 +02:00
if ( ! isset ( $_SESSION [ 'user_shifts' ][ $key ])) {
2012-05-19 16:41:00 +02:00
$_SESSION [ 'user_shifts' ][ $key ] = array_map ( 'get_ids_from_array' , $$key );
2016-09-29 10:53:17 +02:00
}
2012-05-19 16:41:00 +02:00
}
2016-09-29 10:53:17 +02:00
2012-12-28 03:53:08 +01:00
if ( isset ( $_REQUEST [ 'rooms' ])) {
2016-09-29 10:53:17 +02:00
if ( isset ( $_REQUEST [ 'new_style' ])) {
2012-12-28 03:53:08 +01:00
$_SESSION [ 'user_shifts' ][ 'new_style' ] = true ;
2016-09-29 10:53:17 +02:00
} else {
2012-12-28 03:53:08 +01:00
$_SESSION [ 'user_shifts' ][ 'new_style' ] = false ;
2016-09-29 10:53:17 +02:00
}
2012-12-28 03:53:08 +01:00
}
2016-09-29 10:53:17 +02:00
if ( ! isset ( $_SESSION [ 'user_shifts' ][ 'new_style' ])) {
2012-12-27 22:46:41 +01:00
$_SESSION [ 'user_shifts' ][ 'new_style' ] = true ;
2016-09-29 10:53:17 +02:00
}
foreach ([
2013-11-25 21:56:56 +01:00
'start' ,
2016-09-29 10:53:17 +02:00
'end'
] as $key ) {
if ( isset ( $_REQUEST [ $key . '_day' ]) && in_array ( $_REQUEST [ $key . '_day' ], $days )) {
2012-12-30 16:02:23 +01:00
$_SESSION [ 'user_shifts' ][ $key . '_day' ] = $_REQUEST [ $key . '_day' ];
2016-09-29 10:53:17 +02:00
}
if ( isset ( $_REQUEST [ $key . '_time' ]) && preg_match ( '#^\d{1,2}:\d\d$#' , $_REQUEST [ $key . '_time' ])) {
2012-12-30 15:06:52 +01:00
$_SESSION [ 'user_shifts' ][ $key . '_time' ] = $_REQUEST [ $key . '_time' ];
2016-09-29 10:53:17 +02:00
}
2013-11-25 21:56:56 +01:00
if ( ! isset ( $_SESSION [ 'user_shifts' ][ $key . '_day' ])) {
$time = date ( 'Y-m-d' , time () + ( $key == 'end' ? 24 * 60 * 60 : 0 ));
$_SESSION [ 'user_shifts' ][ $key . '_day' ] = in_array ( $time , $days ) ? $time : ( $key == 'end' ? max ( $days ) : min ( $days ));
2012-12-30 15:06:52 +01:00
}
2016-09-29 10:53:17 +02:00
if ( ! isset ( $_SESSION [ 'user_shifts' ][ $key . '_time' ])) {
2012-12-30 15:06:52 +01:00
$_SESSION [ 'user_shifts' ][ $key . '_time' ] = date ( 'H:i' );
2016-09-29 10:53:17 +02:00
}
2012-05-19 16:41:00 +02:00
}
2016-09-29 10:53:17 +02:00
if ( $_SESSION [ 'user_shifts' ][ 'start_day' ] > $_SESSION [ 'user_shifts' ][ 'end_day' ]) {
2012-12-30 15:06:52 +01:00
$_SESSION [ 'user_shifts' ][ 'end_day' ] = $_SESSION [ 'user_shifts' ][ 'start_day' ];
2016-09-29 10:53:17 +02:00
}
if ( $_SESSION [ 'user_shifts' ][ 'start_day' ] == $_SESSION [ 'user_shifts' ][ 'end_day' ] && $_SESSION [ 'user_shifts' ][ 'start_time' ] >= $_SESSION [ 'user_shifts' ][ 'end_time' ]) {
2012-12-30 15:06:52 +01:00
$_SESSION [ 'user_shifts' ][ 'end_time' ] = '23:59' ;
2016-09-29 10:53:17 +02:00
}
2013-12-27 18:45:27 +01:00
if ( isset ( $_SESSION [ 'user_shifts' ][ 'start_day' ])) {
2013-12-01 20:06:41 +01:00
$starttime = DateTime :: createFromFormat ( " Y-m-d H:i " , $_SESSION [ 'user_shifts' ][ 'start_day' ] . $_SESSION [ 'user_shifts' ][ 'start_time' ]);
$starttime = $starttime -> getTimestamp ();
2016-09-29 10:53:17 +02:00
} else {
2013-12-01 20:06:41 +01:00
$starttime = now ();
2016-09-29 10:53:17 +02:00
}
2013-12-27 18:45:27 +01:00
if ( isset ( $_SESSION [ 'user_shifts' ][ 'end_day' ])) {
2013-12-01 20:06:41 +01:00
$endtime = DateTime :: createFromFormat ( " Y-m-d H:i " , $_SESSION [ 'user_shifts' ][ 'end_day' ] . $_SESSION [ 'user_shifts' ][ 'end_time' ]);
$endtime = $endtime -> getTimestamp ();
2016-09-29 10:53:17 +02:00
} else {
2013-12-27 18:45:27 +01:00
$endtime = now () + 24 * 60 * 60 ;
2016-09-29 10:53:17 +02:00
}
if ( ! isset ( $_SESSION [ 'user_shifts' ][ 'rooms' ]) || count ( $_SESSION [ 'user_shifts' ][ 'rooms' ]) == 0 ) {
$_SESSION [ 'user_shifts' ][ 'rooms' ] = [
0
];
}
2014-12-22 20:06:37 +01:00
$SQL = " SELECT DISTINCT `Shifts`.*, `ShiftTypes`.`name`, `Room`.`Name` as `room_name`, nat2.`special_needs` > 0 AS 'has_special_needs'
2012-12-30 17:58:23 +01:00
FROM `Shifts`
INNER JOIN `Room` USING ( `RID` )
2014-12-17 17:22:35 +01:00
INNER JOIN `ShiftTypes` ON ( `ShiftTypes` . `id` = `Shifts` . `shifttype_id` )
2012-12-30 17:58:23 +01:00
LEFT JOIN ( SELECT COUNT ( * ) AS special_needs , nat3 . `shift_id` FROM `NeededAngelTypes` AS nat3 WHERE `shift_id` IS NOT NULL GROUP BY nat3 . `shift_id` ) AS nat2 ON nat2 . `shift_id` = `Shifts` . `SID`
INNER JOIN `NeededAngelTypes` AS nat ON nat . `count` != 0 AND nat . `angel_type_id` IN ( " . implode(',', $_SESSION['user_shifts'] ['types']) . " ) AND (( nat2 . `special_needs` > 0 AND nat . `shift_id` = `Shifts` . `SID` ) OR (( nat2 . `special_needs` = 0 OR nat2 . `special_needs` IS NULL ) AND nat . `room_id` = `RID` ))
LEFT JOIN ( SELECT se . `SID` , se . `TID` , COUNT ( * ) as count FROM `ShiftEntry` AS se GROUP BY se . `SID` , se . `TID` ) AS entries ON entries . `SID` = `Shifts` . `SID` AND entries . `TID` = nat . `angel_type_id`
WHERE `Shifts` . `RID` IN ( " . implode(',', $_SESSION['user_shifts'] ['rooms']) . " )
AND `start` BETWEEN " . $starttime . " AND " . $endtime ;
2016-09-29 10:53:17 +02:00
2012-12-28 03:27:08 +01:00
if ( count ( $_SESSION [ 'user_shifts' ][ 'filled' ]) == 1 ) {
2016-09-29 10:53:17 +02:00
if ( $_SESSION [ 'user_shifts' ][ 'filled' ][ 0 ] == 0 ) {
2012-12-28 03:27:08 +01:00
$SQL .= "
2014-12-28 13:44:56 +01:00
AND ( nat . `count` > entries . `count` OR entries . `count` IS NULL OR EXISTS ( SELECT `SID` FROM `ShiftEntry` WHERE `UID` = '" . sql_escape($user[' UID ']) . "' AND `ShiftEntry` . `SID` = `Shifts` . `SID` )) " ;
2016-09-29 10:53:17 +02:00
} elseif ( $_SESSION [ 'user_shifts' ][ 'filled' ][ 0 ] == 1 ) {
2013-11-25 21:56:56 +01:00
$SQL .= "
2014-12-28 13:44:56 +01:00
AND ( nat . `count` <= entries . `count` OR EXISTS ( SELECT `SID` FROM `ShiftEntry` WHERE `UID` = '" . sql_escape($user[' UID ']) . "' AND `ShiftEntry` . `SID` = `Shifts` . `SID` )) " ;
2016-09-29 10:53:17 +02:00
}
2012-12-28 03:27:08 +01:00
}
$SQL .= "
2012-12-30 17:58:23 +01:00
ORDER BY `start` " ;
2016-09-29 10:53:17 +02:00
2012-12-28 03:27:08 +01:00
$shifts = sql_select ( $SQL );
2016-09-29 10:53:17 +02:00
2014-12-17 17:22:35 +01:00
$ownshifts_source = sql_select ( "
2015-08-26 15:03:53 +02:00
SELECT `ShiftTypes` . `name` , `Shifts` .*
FROM `Shifts`
2014-12-17 17:22:35 +01:00
INNER JOIN `ShiftTypes` ON ( `ShiftTypes` . `id` = `Shifts` . `shifttype_id` )
INNER JOIN `ShiftEntry` ON ( `Shifts` . `SID` = `ShiftEntry` . `SID` AND `ShiftEntry` . `UID` = '" . sql_escape($user[' UID ']) . "' )
2012-12-30 12:09:48 +01:00
WHERE `Shifts` . `RID` IN ( " . implode(',', $_SESSION['user_shifts'] ['rooms']) . " )
2012-12-30 17:58:23 +01:00
AND `start` BETWEEN " . $starttime . " AND " . $endtime );
2016-09-29 10:53:17 +02:00
$ownshifts = [];
foreach ( $ownshifts_source as $ownshift ) {
2012-12-30 12:09:48 +01:00
$ownshifts [ $ownshift [ 'SID' ]] = $ownshift ;
2016-09-29 10:53:17 +02:00
}
2012-12-30 12:09:48 +01:00
unset ( $ownshifts_source );
2016-09-29 10:53:17 +02:00
2012-05-19 16:41:00 +02:00
$shifts_table = " " ;
2012-12-12 22:56:51 +01:00
/*
2013-11-25 21:56:56 +01:00
* [ 0 ] => Array ( [ SID ] => 1 [ start ] => 1355958000 [ end ] => 1355961600 [ RID ] => 1 [ name ] => [ URL ] => [ PSID ] => [ room_name ] => test1 [ has_special_needs ] => 1 [ is_full ] => 0 )
*/
if ( $_SESSION [ 'user_shifts' ][ 'new_style' ]) {
$first = 15 * 60 * floor ( $starttime / ( 15 * 60 ));
$maxshow = ceil (( $endtime - $first ) / ( 60 * 15 ));
2016-09-29 10:53:17 +02:00
$block = [];
$todo = [];
2012-12-30 12:09:48 +01:00
$myrooms = $rooms ;
2016-09-29 10:53:17 +02:00
2012-12-30 12:09:48 +01:00
// delete un-selected rooms from array
2013-11-25 21:56:56 +01:00
foreach ( $myrooms as $k => $v ) {
2016-09-29 10:53:17 +02:00
if ( array_search ( $v [ " id " ], $_SESSION [ 'user_shifts' ][ 'rooms' ]) === false ) {
2012-12-30 12:09:48 +01:00
unset ( $myrooms [ $k ]);
2016-09-29 10:53:17 +02:00
}
// initialize $block array
2012-12-30 12:09:48 +01:00
$block [ $v [ " id " ]] = array_fill ( 0 , $maxshow , 0 );
}
2016-09-29 10:53:17 +02:00
2012-12-29 13:58:59 +01:00
// calculate number of parallel shifts in each timeslot for each room
2013-11-25 21:56:56 +01:00
foreach ( $shifts as $k => $shift ) {
2012-12-29 13:58:59 +01:00
$rid = $shift [ " RID " ];
2013-11-25 21:56:56 +01:00
$blocks = ( $shift [ " end " ] - $shift [ " start " ]) / ( 15 * 60 );
$firstblock = floor (( $shift [ " start " ] - $first ) / ( 15 * 60 ));
2016-09-29 10:53:17 +02:00
for ( $i = $firstblock ; $i < $blocks + $firstblock && $i < $maxshow ; $i ++ ) {
2013-11-25 21:56:56 +01:00
$block [ $rid ][ $i ] ++ ;
2016-09-29 10:53:17 +02:00
}
2012-12-30 12:09:48 +01:00
$shifts [ $k ][ 'own' ] = in_array ( $shift [ 'SID' ], array_keys ( $ownshifts ));
2012-12-12 22:56:51 +01:00
}
2016-09-29 10:53:17 +02:00
2014-12-15 23:09:06 +01:00
$shifts_table = '<div class="shifts-table"><table id="shifts" class="table scrollable"><thead><tr><th>-</th>' ;
2013-11-25 21:56:56 +01:00
foreach ( $myrooms as $key => $room ) {
2012-12-29 13:58:59 +01:00
$rid = $room [ " id " ];
2013-11-25 21:56:56 +01:00
if ( array_sum ( $block [ $rid ]) == 0 ) {
2012-12-29 13:58:59 +01:00
// do not display columns without entries
unset ( $block [ $rid ]);
unset ( $myrooms [ $key ]);
continue ;
}
2012-12-28 03:27:08 +01:00
$colspan = call_user_func_array ( 'max' , $block [ $rid ]);
2016-09-29 10:53:17 +02:00
if ( $colspan == 0 ) {
2012-12-28 03:27:08 +01:00
$colspan = 1 ;
2016-09-29 10:53:17 +02:00
}
2012-12-28 03:27:08 +01:00
$todo [ $rid ] = array_fill ( 0 , $maxshow , $colspan );
2014-12-26 14:31:37 +01:00
$shifts_table .= " <th " . (( $colspan > 1 ) ? ' colspan="' . $colspan . '"' : '' ) . " > " . Room_name_render ([
'RID' => $room [ 'id' ],
2016-09-29 10:53:17 +02:00
'Name' => $room [ 'name' ]
2014-12-26 14:31:37 +01:00
]) . " </th> \n " ;
2013-11-25 21:56:56 +01:00
}
unset ( $block , $blocks , $firstblock , $colspan , $key , $room );
2016-09-29 10:53:17 +02:00
2013-11-25 21:56:56 +01:00
$shifts_table .= " </tr></thead><tbody> " ;
for ( $i = 0 ; $i < $maxshow ; $i ++ ) {
$thistime = $first + ( $i * 15 * 60 );
2014-12-15 23:09:06 +01:00
if ( $thistime % ( 24 * 60 * 60 ) == 23 * 60 * 60 && $endtime - $starttime > 24 * 60 * 60 ) {
$shifts_table .= " <tr class= \" row-day \" ><th class= \" row-header \" > " ;
2015-08-26 15:00:10 +02:00
$shifts_table .= date ( 'Y-m-d<b\r />H:i' , $thistime );
2014-12-19 22:41:55 +01:00
} elseif ( $thistime % ( 60 * 60 ) == 0 ) {
2014-12-15 23:09:06 +01:00
$shifts_table .= " <tr class= \" row-hour \" ><th> " ;
2013-11-25 21:56:56 +01:00
$shifts_table .= date ( " H:i " , $thistime );
2014-12-15 23:09:06 +01:00
} else {
$shifts_table .= " <tr><th> " ;
}
2013-11-25 21:56:56 +01:00
$shifts_table .= " </th> " ;
foreach ( $myrooms as $room ) {
$rid = $room [ " id " ];
foreach ( $shifts as $shift ) {
if ( $shift [ " RID " ] == $rid ) {
if ( floor ( $shift [ " start " ] / ( 15 * 60 )) == $thistime / ( 15 * 60 )) {
$blocks = ( $shift [ " end " ] - $shift [ " start " ]) / ( 15 * 60 );
2016-09-29 10:53:17 +02:00
if ( $blocks < 1 ) {
2013-11-25 21:56:56 +01:00
$blocks = 1 ;
2016-09-29 10:53:17 +02:00
}
2013-11-25 21:56:56 +01:00
$collides = in_array ( $shift [ 'SID' ], array_keys ( $ownshifts ));
2016-09-29 10:53:17 +02:00
if ( ! $collides ) {
2013-11-25 21:56:56 +01:00
foreach ( $ownshifts as $ownshift ) {
2014-12-19 22:41:55 +01:00
if ( $ownshift [ 'start' ] >= $shift [ 'start' ] && $ownshift [ 'start' ] < $shift [ 'end' ] || $ownshift [ 'end' ] > $shift [ 'start' ] && $ownshift [ 'end' ] <= $shift [ 'end' ] || $ownshift [ 'start' ] < $shift [ 'start' ] && $ownshift [ 'end' ] > $shift [ 'end' ]) {
2013-11-25 21:56:56 +01:00
$collides = true ;
break ;
}
}
2016-09-29 10:53:17 +02:00
}
2013-11-25 21:56:56 +01:00
$is_free = false ;
2014-12-28 01:30:29 +01:00
$shifts_row = '' ;
2016-09-29 10:53:17 +02:00
if ( in_array ( 'admin_shifts' , $privileges )) {
$shifts_row .= '<div class="pull-right">' . table_buttons ([
2014-12-28 01:30:29 +01:00
button ( page_link_to ( 'user_shifts' ) . '&edit_shift=' . $shift [ 'SID' ], glyph ( 'edit' ), 'btn-xs' ),
2016-09-29 10:53:17 +02:00
button ( page_link_to ( 'user_shifts' ) . '&delete_shift=' . $shift [ 'SID' ], glyph ( 'trash' ), 'btn-xs' )
]) . '</div>' ;
}
2014-12-28 01:30:29 +01:00
$shifts_row .= Room_name_render ([
2014-12-26 14:31:37 +01:00
'RID' => $room [ 'id' ],
2016-09-29 10:53:17 +02:00
'Name' => $room [ 'name' ]
2014-12-26 14:31:37 +01:00
]) . '<br />' ;
2015-08-26 15:03:53 +02:00
$shifts_row .= '<a href="' . shift_link ( $shift ) . '">' . date ( 'Y-m-d H:i' , $shift [ 'start' ]);
2014-12-17 19:16:40 +01:00
$shifts_row .= " – " ;
$shifts_row .= date ( 'H:i' , $shift [ 'end' ]);
$shifts_row .= " <br /><b> " ;
2014-12-25 22:23:18 +01:00
$shifts_row .= ShiftType ( $shift [ 'shifttype_id' ])[ 'name' ];
2014-12-17 19:16:40 +01:00
$shifts_row .= " </b><br /> " ;
2014-12-25 22:23:18 +01:00
if ( $shift [ 'title' ] != '' ) {
$shifts_row .= $shift [ 'title' ];
$shifts_row .= " <br /> " ;
}
2014-12-28 01:27:41 +01:00
$shifts_row .= '</a>' ;
2013-11-25 21:56:56 +01:00
$shifts_row .= '<br />' ;
$query = " SELECT `NeededAngelTypes`.`count`, `AngelTypes`.`id`, `AngelTypes`.`restricted`, `UserAngelTypes`.`confirm_user_id`, `AngelTypes`.`name`, `UserAngelTypes`.`user_id`
2012-12-30 17:58:23 +01:00
FROM `NeededAngelTypes`
JOIN `AngelTypes` ON ( `NeededAngelTypes` . `angel_type_id` = `AngelTypes` . `id` )
2014-12-28 13:44:56 +01:00
LEFT JOIN `UserAngelTypes` ON ( `NeededAngelTypes` . `angel_type_id` = `UserAngelTypes` . `angeltype_id` AND `UserAngelTypes` . `user_id` = '" . sql_escape($user[' UID ']) . "' )
2012-12-30 17:58:23 +01:00
WHERE
`count` > 0
AND " ;
2016-09-29 10:53:17 +02:00
if ( $shift [ 'has_special_needs' ]) {
2014-12-28 13:44:56 +01:00
$query .= " `shift_id` = ' " . sql_escape ( $shift [ 'SID' ]) . " ' " ;
2016-09-29 10:53:17 +02:00
} else {
2014-12-28 13:44:56 +01:00
$query .= " `room_id` = ' " . sql_escape ( $shift [ 'RID' ]) . " ' " ;
2016-09-29 10:53:17 +02:00
}
if ( ! empty ( $_SESSION [ 'user_shifts' ][ 'types' ])) {
2013-11-25 21:56:56 +01:00
$query .= " AND `angel_type_id` IN ( " . implode ( ',' , $_SESSION [ 'user_shifts' ][ 'types' ]) . " ) " ;
2016-09-29 10:53:17 +02:00
}
2013-11-25 21:56:56 +01:00
$query .= " ORDER BY `AngelTypes`.`name` " ;
$angeltypes = sql_select ( $query );
2016-09-29 10:53:17 +02:00
2013-11-25 21:56:56 +01:00
if ( count ( $angeltypes ) > 0 ) {
foreach ( $angeltypes as $angeltype ) {
2014-12-28 13:44:56 +01:00
$entries = sql_select ( " SELECT * FROM `ShiftEntry` JOIN `User` ON (`ShiftEntry`.`UID` = `User`.`UID`) WHERE `SID`=' " . sql_escape ( $shift [ 'SID' ]) . " ' AND `TID`=' " . sql_escape ( $angeltype [ 'id' ]) . " ' ORDER BY `Nick` " );
2016-09-29 10:53:17 +02:00
$entry_list = [];
2013-12-27 18:45:27 +01:00
$freeloader = 0 ;
2013-11-25 21:56:56 +01:00
foreach ( $entries as $entry ) {
2014-12-26 19:11:26 +01:00
$style = '' ;
2013-12-27 18:45:27 +01:00
if ( $entry [ 'freeloaded' ]) {
$freeloader ++ ;
2014-12-26 19:11:26 +01:00
$style = " text-decoration: line-through; " ;
2013-12-27 18:45:27 +01:00
}
2016-09-29 10:53:17 +02:00
if ( in_array ( 'user_shifts_admin' , $privileges )) {
2016-09-30 17:08:20 +02:00
$entry_list [] = " <span style= \" $style\ " > " . User_Nick_render( $entry ) . ' ' . table_buttons([
2016-09-29 10:53:17 +02:00
button ( page_link_to ( 'user_shifts' ) . '&entry_id=' . $entry [ 'id' ], glyph ( 'trash' ), 'btn-xs' )
2016-09-30 17:08:20 +02:00
]) . '</span>' ;
2016-09-29 10:53:17 +02:00
} else {
2013-11-25 21:56:56 +01:00
$entry_list [] = " <span style= \" $style\ " > " . User_Nick_render( $entry ) . " </ span > " ;
2016-09-29 10:53:17 +02:00
}
2012-12-12 22:56:51 +01:00
}
2013-12-27 18:45:27 +01:00
if ( $angeltype [ 'count' ] - count ( $entries ) - $freeloader > 0 ) {
2013-11-25 21:56:56 +01:00
$inner_text = sprintf ( ngettext ( " %d helper needed " , " %d helpers needed " , $angeltype [ 'count' ] - count ( $entries )), $angeltype [ 'count' ] - count ( $entries ));
// is the shift still running or alternatively is the user shift admin?
$user_may_join_shift = true ;
2016-09-29 10:53:17 +02:00
2013-11-25 21:56:56 +01:00
// you cannot join if user alread joined a parallel or this shift
$user_may_join_shift &= ! $collides ;
2016-09-29 10:53:17 +02:00
2013-11-25 21:56:56 +01:00
// you cannot join if user is not of this angel type
$user_may_join_shift &= isset ( $angeltype [ 'user_id' ]);
2016-09-29 10:53:17 +02:00
2013-11-25 21:56:56 +01:00
// you cannot join if you are not confirmed
if ( $angeltype [ 'restricted' ] == 1 && isset ( $angeltype [ 'user_id' ]))
$user_may_join_shift &= isset ( $angeltype [ 'confirm_user_id' ]);
2016-09-29 10:53:17 +02:00
2013-11-25 21:56:56 +01:00
// you can only join if the shift is in future or running
$user_may_join_shift &= time () < $shift [ 'start' ];
2016-09-29 10:53:17 +02:00
2013-11-25 21:56:56 +01:00
// User shift admins may join anybody in every shift
$user_may_join_shift |= in_array ( 'user_shifts_admin' , $privileges );
2016-09-29 10:53:17 +02:00
if ( $user_may_join_shift ) {
2014-12-28 01:27:41 +01:00
$entry_list [] = '<a href="' . page_link_to ( 'user_shifts' ) . '&shift_id=' . $shift [ 'SID' ] . '&type_id=' . $angeltype [ 'id' ] . '">' . $inner_text . '</a> ' . button ( page_link_to ( 'user_shifts' ) . '&shift_id=' . $shift [ 'SID' ] . '&type_id=' . $angeltype [ 'id' ], _ ( 'Sign up' ), 'btn-xs' );
2016-09-29 10:53:17 +02:00
} else {
if ( time () > $shift [ 'start' ]) {
2014-12-28 01:27:41 +01:00
$entry_list [] = $inner_text . ' (' . _ ( 'ended' ) . ')' ;
2016-09-29 10:53:17 +02:00
} elseif ( $angeltype [ 'restricted' ] == 1 && isset ( $angeltype [ 'user_id' ]) && ! isset ( $angeltype [ 'confirm_user_id' ])) {
2014-12-06 18:16:18 +01:00
$entry_list [] = $inner_text . glyph ( 'lock' );
2016-09-29 10:53:17 +02:00
} elseif ( $angeltype [ 'restricted' ] == 1 ) {
2014-12-28 01:27:41 +01:00
$entry_list [] = $inner_text ;
2016-09-29 10:53:17 +02:00
} elseif ( $collides ) {
2013-11-25 21:56:56 +01:00
$entry_list [] = $inner_text ;
2016-09-29 10:53:17 +02:00
} else {
2014-12-28 01:27:41 +01:00
$entry_list [] = $inner_text . '<br />' . button ( page_link_to ( 'user_angeltypes' ) . '&action=add&angeltype_id=' . $angeltype [ 'id' ], sprintf ( _ ( 'Become %s' ), $angeltype [ 'name' ]), 'btn-xs' );
2016-09-29 10:53:17 +02:00
}
2013-11-25 21:56:56 +01:00
}
2016-09-29 10:53:17 +02:00
2013-11-25 21:56:56 +01:00
unset ( $inner_text );
$is_free = true ;
}
2016-09-29 10:53:17 +02:00
2014-12-28 01:30:29 +01:00
$shifts_row .= '<strong>' . AngelType_name_render ( $angeltype ) . ':</strong> ' ;
2013-11-25 21:56:56 +01:00
$shifts_row .= join ( " , " , $entry_list );
$shifts_row .= '<br />' ;
}
2016-09-29 10:53:17 +02:00
if ( in_array ( 'user_shifts_admin' , $privileges )) {
2014-12-28 01:27:41 +01:00
$shifts_row .= ' ' . button ( page_link_to ( 'user_shifts' ) . '&shift_id=' . $shift [ 'SID' ] . '&type_id=' . $angeltype [ 'id' ], _ ( " Add more angels " ), 'btn-xs' );
2016-09-29 10:53:17 +02:00
}
2012-12-28 17:54:06 +01:00
}
2016-09-29 10:53:17 +02:00
if ( $shift [ 'own' ] && ! in_array ( 'user_shifts_admin' , $privileges )) {
2013-11-25 21:56:56 +01:00
$class = 'own' ;
2016-09-29 10:53:17 +02:00
} elseif ( $collides && ! in_array ( 'user_shifts_admin' , $privileges )) {
2013-11-25 21:56:56 +01:00
$class = 'collides' ;
2016-09-29 10:53:17 +02:00
} elseif ( $is_free ) {
2013-11-25 21:56:56 +01:00
$class = 'free' ;
2016-09-29 10:53:17 +02:00
} else {
2013-11-25 21:56:56 +01:00
$class = 'occupied' ;
2016-09-29 10:53:17 +02:00
}
2013-11-25 21:56:56 +01:00
$shifts_table .= '<td rowspan="' . $blocks . '" class="' . $class . '">' ;
2014-12-13 01:54:05 +01:00
$shifts_table .= $shifts_row ;
2013-11-25 21:56:56 +01:00
$shifts_table .= " </td> " ;
for ( $j = 0 ; $j < $blocks && $i + $j < $maxshow ; $j ++ ) {
$todo [ $rid ][ $i + $j ] -- ;
2012-12-12 22:56:51 +01:00
}
2012-12-30 17:58:23 +01:00
}
2012-12-12 22:56:51 +01:00
}
}
2013-11-25 21:56:56 +01:00
// fill up row with empty <td>
2016-09-29 10:53:17 +02:00
while ( $todo [ $rid ][ $i ] -- > 0 ) {
2014-12-13 00:34:27 +01:00
$shifts_table .= '<td class="empty"></td>' ;
2016-09-29 10:53:17 +02:00
}
2012-12-12 22:56:51 +01:00
}
2013-11-25 21:56:56 +01:00
$shifts_table .= " </tr> \n " ;
2012-12-12 22:56:51 +01:00
}
2014-12-15 23:09:06 +01:00
$shifts_table .= '</tbody></table></div>' ;
2013-11-25 21:56:56 +01:00
} else {
2016-09-29 10:53:17 +02:00
$shifts_table = [];
2013-11-25 21:56:56 +01:00
foreach ( $shifts as $shift ) {
2016-09-29 10:53:17 +02:00
$info = [];
if ( $_SESSION [ 'user_shifts' ][ 'start_day' ] != $_SESSION [ 'user_shifts' ][ 'end_day' ]) {
2013-11-25 21:56:56 +01:00
$info [] = date ( " Y-m-d " , $shift [ 'start' ]);
2016-09-29 10:53:17 +02:00
}
2013-11-25 21:56:56 +01:00
$info [] = date ( " H:i " , $shift [ 'start' ]) . ' - ' . date ( " H:i " , $shift [ 'end' ]);
2016-09-29 10:53:17 +02:00
if ( count ( $_SESSION [ 'user_shifts' ][ 'rooms' ]) > 1 ) {
2014-12-22 18:22:54 +01:00
$info [] = Room_name_render ([
'Name' => $shift [ 'room_name' ],
2016-09-29 10:53:17 +02:00
'RID' => $shift [ 'RID' ]
2014-12-22 18:22:54 +01:00
]);
2016-09-29 10:53:17 +02:00
}
$shift_row = [
2013-11-25 21:56:56 +01:00
'info' => join ( '<br />' , $info ),
2016-09-29 10:53:17 +02:00
'entries' => '<a href="' . shift_link ( $shift ) . '">' . $shift [ 'name' ] . '</a>' . ( $shift [ 'title' ] ? '<br />' . $shift [ 'title' ] : '' )
];
if ( in_array ( 'admin_shifts' , $privileges )) {
$shift_row [ 'info' ] .= ' ' . table_buttons ([
2014-09-28 19:44:53 +02:00
button ( page_link_to ( 'user_shifts' ) . '&edit_shift=' . $shift [ 'SID' ], glyph ( 'edit' ), 'btn-xs' ),
2016-09-29 10:53:17 +02:00
button ( page_link_to ( 'user_shifts' ) . '&delete_shift=' . $shift [ 'SID' ], glyph ( 'trash' ), 'btn-xs' )
]);
}
2013-11-25 21:56:56 +01:00
$shift_row [ 'entries' ] .= '<br />' ;
$is_free = false ;
$shift_has_special_needs = 0 < sql_num_query ( " SELECT `id` FROM `NeededAngelTypes` WHERE `shift_id` = " . $shift [ 'SID' ]);
$query = " SELECT `NeededAngelTypes`.`count`, `AngelTypes`.`id`, `AngelTypes`.`restricted`, `UserAngelTypes`.`confirm_user_id`, `AngelTypes`.`name`, `UserAngelTypes`.`user_id`
2012-12-30 17:58:23 +01:00
FROM `NeededAngelTypes`
JOIN `AngelTypes` ON ( `NeededAngelTypes` . `angel_type_id` = `AngelTypes` . `id` )
2014-12-28 13:44:56 +01:00
LEFT JOIN `UserAngelTypes` ON ( `NeededAngelTypes` . `angel_type_id` = `UserAngelTypes` . `angeltype_id` AND `UserAngelTypes` . `user_id` = '" . sql_escape($user[' UID ']) . "' )
2012-12-30 17:58:23 +01:00
WHERE " ;
2016-09-29 10:53:17 +02:00
if ( $shift_has_special_needs ) {
2014-12-28 13:44:56 +01:00
$query .= " `shift_id` = ' " . sql_escape ( $shift [ 'SID' ]) . " ' " ;
2016-09-29 10:53:17 +02:00
} else {
2014-12-28 13:44:56 +01:00
$query .= " `room_id` = ' " . sql_escape ( $shift [ 'RID' ]) . " ' " ;
2016-09-29 10:53:17 +02:00
}
2013-11-25 21:56:56 +01:00
$query .= " AND `count` > 0 " ;
2016-09-29 10:53:17 +02:00
if ( ! empty ( $_SESSION [ 'user_shifts' ][ 'types' ])) {
2013-11-25 21:56:56 +01:00
$query .= " AND `angel_type_id` IN ( " . implode ( ',' , $_SESSION [ 'user_shifts' ][ 'types' ]) . " ) " ;
2016-09-29 10:53:17 +02:00
}
2013-11-25 21:56:56 +01:00
$query .= " ORDER BY `AngelTypes`.`name` " ;
$angeltypes = sql_select ( $query );
if ( count ( $angeltypes ) > 0 ) {
2014-12-28 13:44:56 +01:00
$my_shift = sql_num_query ( " SELECT * FROM `ShiftEntry` WHERE `SID`=' " . sql_escape ( $shift [ 'SID' ]) . " ' AND `UID`=' " . sql_escape ( $user [ 'UID' ]) . " ' LIMIT 1 " ) > 0 ;
2016-09-29 10:53:17 +02:00
2013-11-25 21:56:56 +01:00
foreach ( $angeltypes as & $angeltype ) {
2014-12-28 13:44:56 +01:00
$entries = sql_select ( " SELECT * FROM `ShiftEntry` JOIN `User` ON (`ShiftEntry`.`UID` = `User`.`UID`) WHERE `SID`=' " . sql_escape ( $shift [ 'SID' ]) . " ' AND `TID`=' " . sql_escape ( $angeltype [ 'id' ]) . " ' ORDER BY `Nick` " );
2016-09-29 10:53:17 +02:00
$entry_list = [];
2015-01-05 13:58:34 +01:00
$entry_nicks = [];
2013-12-27 18:45:27 +01:00
$freeloader = 0 ;
2013-11-25 21:56:56 +01:00
foreach ( $entries as $entry ) {
2016-09-29 10:53:17 +02:00
if ( in_array ( 'user_shifts_admin' , $privileges )) {
2016-09-30 17:08:20 +02:00
$member = User_Nick_render ( $entry ) . ' ' . table_buttons ([
2016-09-29 10:53:17 +02:00
button ( page_link_to ( 'user_shifts' ) . '&entry_id=' . $entry [ 'id' ], glyph ( 'trash' ), 'btn-xs' )
2016-09-30 17:08:20 +02:00
]);
2016-09-29 10:53:17 +02:00
} else {
2013-12-27 18:45:27 +01:00
$member = User_Nick_render ( $entry );
2016-09-29 10:53:17 +02:00
}
2013-12-27 18:45:27 +01:00
if ( $entry [ 'freeloaded' ]) {
$member = '<strike>' . $member . '</strike>' ;
$freeloader ++ ;
}
$entry_list [] = $member ;
2015-01-05 13:58:34 +01:00
$entry_nicks [] = $entry [ 'Nick' ];
2013-11-25 21:56:56 +01:00
}
2013-12-27 18:45:27 +01:00
$angeltype [ 'taken' ] = count ( $entries ) - $freeloader ;
2015-01-05 13:58:34 +01:00
$angeltype [ 'angels' ] = $entry_nicks ;
2016-09-29 10:53:17 +02:00
2013-11-25 21:56:56 +01:00
// do we need more angles of this type?
2013-12-27 18:45:27 +01:00
if ( $angeltype [ 'count' ] - count ( $entries ) + $freeloader > 0 ) {
$inner_text = sprintf ( ngettext ( " %d helper needed " , " %d helpers needed " , $angeltype [ 'count' ] - count ( $entries ) + $freeloader ), $angeltype [ 'count' ] - count ( $entries ) + $freeloader );
2013-11-25 21:56:56 +01:00
// is the shift still running or alternatively is the user shift admin?
$user_may_join_shift = true ;
2016-09-29 10:53:17 +02:00
2013-11-25 21:56:56 +01:00
/* you cannot join if user already joined this shift */
$user_may_join_shift &= ! $my_shift ;
2016-09-29 10:53:17 +02:00
2013-11-25 21:56:56 +01:00
// you cannot join if user is not of this angel type
$user_may_join_shift &= isset ( $angeltype [ 'user_id' ]);
2016-09-29 10:53:17 +02:00
2013-11-25 21:56:56 +01:00
// you cannot join if you are not confirmed
2016-09-29 10:53:17 +02:00
if ( $angeltype [ 'restricted' ] == 1 && isset ( $angeltype [ 'user_id' ])) {
2013-11-25 21:56:56 +01:00
$user_may_join_shift &= isset ( $angeltype [ 'confirm_user_id' ]);
2016-09-29 10:53:17 +02:00
}
// you can only join if the shift is in future or running
2013-11-25 21:56:56 +01:00
$user_may_join_shift &= time () < $shift [ 'start' ];
2016-09-29 10:53:17 +02:00
2013-11-25 21:56:56 +01:00
// User shift admins may join anybody in every shift
$user_may_join_shift |= in_array ( 'user_shifts_admin' , $privileges );
2016-09-29 10:53:17 +02:00
if ( $user_may_join_shift ) {
2013-11-25 21:56:56 +01:00
$entry_list [] = '<a href="' . page_link_to ( 'user_shifts' ) . '&shift_id=' . $shift [ 'SID' ] . '&type_id=' . $angeltype [ 'id' ] . '">' . $inner_text . ' »</a>' ;
2016-09-29 10:53:17 +02:00
} else {
2013-11-25 21:56:56 +01:00
if ( time () > $shift [ 'end' ]) {
$entry_list [] = $inner_text . ' (vorbei)' ;
} elseif ( $angeltype [ 'restricted' ] == 1 && isset ( $angeltype [ 'user_id' ]) && ! isset ( $angeltype [ 'confirm_user_id' ])) {
2014-12-06 18:16:18 +01:00
$entry_list [] = $inner_text . glyph ( " lock " );
2013-11-25 21:56:56 +01:00
} else {
2014-12-28 01:27:41 +01:00
$entry_list [] = $inner_text . ' <a href="' . page_link_to ( 'user_angeltypes' ) . '&action=add&angeltype_id=' . $angeltype [ 'id' ] . '">' . sprintf ( _ ( 'Become %s' ), $angeltype [ 'name' ]) . '</a>' ;
2013-11-25 21:56:56 +01:00
}
2012-12-30 17:58:23 +01:00
}
2016-09-29 10:53:17 +02:00
2013-11-25 21:56:56 +01:00
unset ( $inner_text );
$is_free = true ;
2012-12-27 15:00:21 +01:00
}
2016-09-29 10:53:17 +02:00
2013-11-25 21:56:56 +01:00
$shift_row [ 'entries' ] .= '<b>' . $angeltype [ 'name' ] . ':</b> ' ;
$shift_row [ 'entries' ] .= join ( " , " , $entry_list );
$shift_row [ 'entries' ] .= '<br />' ;
}
if ( in_array ( 'user_shifts_admin' , $privileges )) {
2014-12-28 01:27:41 +01:00
$shift_row [ 'entries' ] .= '<a href="' . page_link_to ( 'user_shifts' ) . '&shift_id=' . $shift [ 'SID' ] . '&type_id=' . $angeltype [ 'id' ] . '">' . _ ( 'Add more angels' ) . ' »</a>' ;
2013-11-25 21:56:56 +01:00
}
2014-12-13 01:54:05 +01:00
$shifts_table [] = $shift_row ;
$shift [ 'angeltypes' ] = $angeltypes ;
$ical_shifts [] = $shift ;
2012-05-19 16:41:00 +02:00
}
}
2016-09-29 10:53:17 +02:00
$shifts_table = table ([
2013-11-25 21:56:56 +01:00
'info' => _ ( " Time " ) . " / " . _ ( " Room " ),
2016-09-29 10:53:17 +02:00
'entries' => _ ( " Entries " )
], $shifts_table );
2012-05-19 16:41:00 +02:00
}
2016-09-29 10:53:17 +02:00
if ( $user [ 'api_key' ] == " " ) {
2014-12-16 00:54:50 +01:00
User_reset_api_key ( $user , false );
2016-09-29 10:53:17 +02:00
}
return page ([
div ( 'col-md-12' , [
msg (),
template_render ( '../templates/user_shifts.html' , [
'title' => shifts_title (),
'room_select' => make_select ( $rooms , $_SESSION [ 'user_shifts' ][ 'rooms' ], " rooms " , _ ( " Rooms " )),
'start_select' => html_select_key ( " start_day " , " start_day " , array_combine ( $days , $days ), $_SESSION [ 'user_shifts' ][ 'start_day' ]),
'start_time' => $_SESSION [ 'user_shifts' ][ 'start_time' ],
'end_select' => html_select_key ( " end_day " , " end_day " , array_combine ( $days , $days ), $_SESSION [ 'user_shifts' ][ 'end_day' ]),
'end_time' => $_SESSION [ 'user_shifts' ][ 'end_time' ],
'type_select' => make_select ( $types , $_SESSION [ 'user_shifts' ][ 'types' ], " types " , _ ( " Angeltypes " ) . '<sup>1</sup>' ),
'filled_select' => make_select ( $filled , $_SESSION [ 'user_shifts' ][ 'filled' ], " filled " , _ ( " Occupancy " )),
'task_notice' => '<sup>1</sup>' . _ ( " The tasks shown here are influenced by the preferences you defined in your settings! " ) . " <a href= \" " . page_link_to ( 'angeltypes' ) . '&action=about' . " \" > " . _ ( " Description of the jobs. " ) . " </a> " ,
'new_style_checkbox' => '<label><input type="checkbox" name="new_style" value="1" ' . ( $_SESSION [ 'user_shifts' ][ 'new_style' ] ? ' checked' : '' ) . '> ' . _ ( " Use new style if possible " ) . '</label>' ,
'shifts_table' => msg () . $shifts_table ,
'ical_text' => '<h2>' . _ ( " iCal export " ) . '</h2><p>' . sprintf ( _ ( " Export of shown shifts. <a href= \" %s \" >iCal format</a> or <a href= \" %s \" >JSON format</a> available (please keep secret, otherwise <a href= \" %s \" >reset the api key</a>). " ), page_link_to_absolute ( 'ical' ) . '&key=' . $user [ 'api_key' ], page_link_to_absolute ( 'shifts_json_export' ) . '&key=' . $user [ 'api_key' ], page_link_to ( 'user_myshifts' ) . '&reset' ) . '</p>' ,
'filter' => _ ( " Filter " )
])
])
]);
2011-12-28 14:45:49 +01:00
}
2013-09-10 14:45:41 +02:00
function make_user_shifts_export_link ( $page , $key ) {
2012-12-30 15:06:52 +01:00
$link = " &start_day= " . $_SESSION [ 'user_shifts' ][ 'start_day' ];
$link = " &start_time= " . $_SESSION [ 'user_shifts' ][ 'start_time' ];
$link = " &end_day= " . $_SESSION [ 'user_shifts' ][ 'end_day' ];
$link = " &end_time= " . $_SESSION [ 'user_shifts' ][ 'end_time' ];
2016-09-29 10:53:17 +02:00
foreach ( $_SESSION [ 'user_shifts' ][ 'rooms' ] as $room ) {
2012-05-19 16:41:00 +02:00
$link .= '&rooms[]=' . $room ;
2016-09-29 10:53:17 +02:00
}
foreach ( $_SESSION [ 'user_shifts' ][ 'types' ] as $type ) {
2012-05-19 16:41:00 +02:00
$link .= '&types[]=' . $type ;
2016-09-29 10:53:17 +02:00
}
foreach ( $_SESSION [ 'user_shifts' ][ 'filled' ] as $filled ) {
2012-05-19 16:41:00 +02:00
$link .= '&filled[]=' . $filled ;
2016-09-29 10:53:17 +02:00
}
2013-09-10 14:45:41 +02:00
return page_link_to_absolute ( $page ) . $link . '&export=user_shifts&key=' . $key ;
2011-07-13 14:30:19 +02:00
}
2011-12-27 22:13:17 +01:00
function get_ids_from_array ( $array ) {
2012-05-19 16:41:00 +02:00
return $array [ " id " ];
2011-07-13 14:30:19 +02:00
}
2011-12-27 22:13:17 +01:00
function make_select ( $items , $selected , $name , $title = null ) {
2016-09-29 10:53:17 +02:00
$html_items = [];
if ( isset ( $title )) {
2014-08-22 22:34:13 +02:00
$html_items [] = '<h4>' . $title . '</h4>' . " \n " ;
2016-09-29 10:53:17 +02:00
}
foreach ( $items as $i ) {
2014-12-06 18:16:18 +01:00
$html_items [] = '<div class="checkbox"><label><input type="checkbox" name="' . $name . '[]" value="' . $i [ 'id' ] . '"' . ( in_array ( $i [ 'id' ], $selected ) ? ' checked="checked"' : '' ) . '> ' . $i [ 'name' ] . '</label>' . ( ! isset ( $i [ 'enabled' ]) || $i [ 'enabled' ] ? '' : glyph ( " lock " )) . '</div><br />' ;
2016-09-29 10:53:17 +02:00
}
2014-08-22 22:34:13 +02:00
$html = '<div id="selection_' . $name . '" class="selection ' . $name . '">' . " \n " ;
2012-05-19 16:41:00 +02:00
$html .= implode ( " \n " , $html_items );
2016-09-29 10:53:17 +02:00
$html .= buttons ([
2016-08-21 20:14:09 +02:00
button ( " javascript: checkAll('selection_ " . $name . " ', true) " , _ ( " All " ), " " ),
2016-09-29 10:53:17 +02:00
button ( " javascript: checkAll('selection_ " . $name . " ', false) " , _ ( " None " ), " " )
]);
2012-05-19 16:41:00 +02:00
$html .= '</div>' . " \n " ;
return $html ;
2011-07-13 14:30:19 +02:00
}
2011-08-13 14:37:54 +02:00
?>