2011-07-13 14:30:19 +02:00
< ? php
2016-10-02 23:00:01 +02:00
use Engelsystem\ShiftsFilter ;
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
}
2016-10-02 21:19:03 +02:00
/**
* Start different controllers for deleting shifts and shift_entries , edit shifts and add shift entries .
*/
2011-07-13 14:30:19 +02:00
function user_shifts () {
2016-10-04 16:16:00 +02:00
global $user ;
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
}
// Löschen einzelner Schicht-Einträge (Also Belegung einer Schicht von Engeln) durch Admins
2016-10-02 21:19:03 +02:00
if ( isset ( $_REQUEST [ 'entry_id' ])) {
return shift_entry_delete_controller ();
} elseif ( isset ( $_REQUEST [ 'edit_shift' ])) {
return shift_edit_controller ();
} elseif ( isset ( $_REQUEST [ 'delete_shift' ])) {
return shift_delete_controller ();
2013-11-25 21:56:56 +01:00
} elseif ( isset ( $_REQUEST [ 'shift_id' ])) {
2016-10-02 21:19:03 +02:00
return shift_entry_add_controller ();
2012-05-19 16:41:00 +02:00
}
2016-10-02 21:19:03 +02:00
return view_user_shifts ();
2011-12-28 14:45:49 +01:00
}
2011-12-27 22:13:17 +01:00
2016-10-04 18:36:57 +02:00
/**
* Helper function that updates the start and end time from request data .
* Use update_ShiftsFilter () .
*
* @ param ShiftsFilter $shiftsFilter
* The shiftfilter to update .
*/
function update_ShiftsFilter_timerange ( ShiftsFilter $shiftsFilter ) {
$day = date ( 'Y-m-d' , time ());
$start_day = in_array ( $day , $days ) ? $day : min ( $days );
if ( isset ( $_REQUEST [ 'start_day' ]) && in_array ( $_REQUEST [ 'start_day' ], $days )) {
$start_day = $_REQUEST [ 'start_day' ];
}
$start_time = date ( " H:i " );
if ( isset ( $_REQUEST [ 'start_time' ]) && preg_match ( '#^\d{1,2}:\d\d$#' , $_REQUEST [ 'start_time' ])) {
$start_time = $_REQUEST [ 'start_time' ];
}
$day = date ( 'Y-m-d' , time () + 24 * 60 * 60 );
$end_day = in_array ( $day , $days ) ? $day : max ( $days );
if ( isset ( $_REQUEST [ 'end_day' ]) && in_array ( $_REQUEST [ 'end_day' ], $days )) {
$end_day = $_REQUEST [ 'end_day' ];
}
$end_time = date ( " H:i " );
if ( isset ( $_REQUEST [ 'end_time' ]) && preg_match ( '#^\d{1,2}:\d\d$#' , $_REQUEST [ 'end_time' ])) {
$end_time = $_REQUEST [ 'end_time' ];
}
if ( $start_day > $end_day ) {
$end_day = $start_day ;
}
if ( $start_day == $end_day && $start_time >= $end_time ) {
$end_time = " 23:59 " ;
}
$shiftsFilter -> setStartTime ( parse_date ( " Y-m-d H:i " , $start_day . " " . $start_time ));
$shiftsFilter -> setEndTime ( parse_date ( " Y-m-d H:i " , $end_day . " " . $end_time ));
}
2016-10-02 23:00:01 +02:00
/**
* Update given ShiftsFilter with filter params from user input
*
2016-10-04 18:36:57 +02:00
* @ param ShiftsFilter $shiftsFilter
* The shifts filter to update from request data
* @ param boolean $user_shifts_admin
* Has the user user_shift_admin privilege ?
* @ param string [] $days
* An array of available filter days
2016-10-02 23:00:01 +02:00
*/
function update_ShiftsFilter ( ShiftsFilter $shiftsFilter , $user_shifts_admin , $days ) {
$shiftsFilter -> setUserShiftsAdmin ( $user_shifts_admin );
2016-10-02 23:32:10 +02:00
if ( isset ( $_REQUEST [ 'filled' ])) {
$shiftsFilter -> setFilled ( check_request_int_array ( 'filled' ));
2016-10-02 23:00:01 +02:00
}
2016-10-02 23:32:10 +02:00
if ( isset ( $_REQUEST [ 'rooms' ])) {
$shiftsFilter -> setRooms ( check_request_int_array ( 'rooms' ));
2016-10-02 23:00:01 +02:00
}
2016-10-02 23:32:10 +02:00
if ( isset ( $_REQUEST [ 'types' ])) {
$shiftsFilter -> setTypes ( check_request_int_array ( 'types' ));
2016-10-02 23:00:01 +02:00
}
2016-10-02 23:32:10 +02:00
if (( isset ( $_REQUEST [ 'start_time' ]) && isset ( $_REQUEST [ 'start_day' ]) && isset ( $_REQUEST [ 'end_time' ]) && isset ( $_REQUEST [ 'end_day' ])) || $shiftsFilter -> getStartTime () == null || $shiftsFilter -> getEndTime () == null ) {
2016-10-04 18:36:57 +02:00
update_ShiftsFilter_timerange ( $shiftsFilter );
2016-10-02 23:00:01 +02:00
}
}
2016-10-04 18:36:57 +02:00
function load_rooms () {
$rooms = sql_select ( " SELECT `RID` AS `id`, `Name` AS `name` FROM `Room` WHERE `show`='Y' ORDER BY `Name` " );
if ( count ( $rooms ) == 0 ) {
error ( _ ( " The administration has not configured any rooms yet. " ));
redirect ( '?' );
}
return $rooms ;
}
function load_days () {
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` " );
2014-03-26 18:51:34 +01:00
if ( count ( $days ) == 0 ) {
error ( _ ( " The administration has not configured any shifts yet. " ));
redirect ( '?' );
}
2016-10-04 18:36:57 +02:00
return $days ;
}
function load_types () {
global $user ;
2016-09-29 10:53:17 +02:00
2016-10-04 18:36:57 +02:00
if ( sql_num_query ( " SELECT `id`, `name` FROM `AngelTypes` WHERE `restricted` = 0 " ) == 0 ) {
error ( _ ( " The administration has not configured any angeltypes yet - or you are not subscribed to any angeltype. " ));
2014-03-12 17:36:55 +01:00
redirect ( '?' );
}
2016-10-04 18:36:57 +02: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 )) {
2016-10-04 18:36:57 +02:00
return sql_select ( " SELECT `id`, `name` FROM `AngelTypes` WHERE `restricted` = 0 " );
2016-09-29 10:53:17 +02:00
}
2016-10-04 18:36:57 +02:00
return $types ;
}
function view_user_shifts () {
global $user , $privileges ;
global $ical_shifts ;
2016-09-29 10:53:17 +02:00
2016-10-04 18:36:57 +02:00
$ical_shifts = [];
$days = load_days ();
$rooms = load_rooms ();
$types = load_types ();
2016-09-29 10:53:17 +02:00
2016-10-02 23:00:01 +02:00
if ( ! isset ( $_SESSION [ 'ShiftsFilter' ])) {
$room_ids = array_map ( 'get_ids_from_array' , $rooms );
$type_ids = array_map ( 'get_ids_from_array' , $types );
$_SESSION [ 'ShiftsFilter' ] = new ShiftsFilter ( in_array ( 'user_shifts_admin' , $privileges ), $room_ids , $type_ids );
2016-09-29 10:53:17 +02:00
}
2016-10-02 23:32:10 +02:00
update_ShiftsFilter ( $_SESSION [ 'ShiftsFilter' ], in_array ( 'user_shifts_admin' , $privileges ), $days );
2016-10-02 23:00:01 +02:00
$shiftsFilter = $_SESSION [ 'ShiftsFilter' ];
2016-09-29 10:53:17 +02:00
2016-10-02 23:00:01 +02:00
$shifts = Shifts_by_ShiftsFilter ( $shiftsFilter , $user );
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 ']) . "' )
2016-10-02 23:00:01 +02:00
WHERE `Shifts` . `RID` IN ( " . implode(',', $shiftsFilter->getRooms ()) . " )
AND `start` BETWEEN " . $shiftsFilter->getStartTime () . " AND " . $shiftsFilter->getEndTime ());
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 )
*/
2016-10-02 23:00:01 +02:00
$first = 15 * 60 * floor ( $shiftsFilter -> getStartTime () / ( 15 * 60 ));
$maxshow = ceil (( $shiftsFilter -> getEndTime () - $first ) / ( 60 * 15 ));
$block = [];
$todo = [];
$myrooms = $rooms ;
// delete un-selected rooms from array
foreach ( $myrooms as $k => $v ) {
if ( array_search ( $v [ " id " ], $shiftsFilter -> getRooms ()) === false ) {
unset ( $myrooms [ $k ]);
2012-12-30 12:09:48 +01:00
}
2016-10-02 23:00:01 +02:00
// initialize $block array
$block [ $v [ " id " ]] = array_fill ( 0 , $maxshow , 0 );
}
// calculate number of parallel shifts in each timeslot for each room
foreach ( $shifts as $k => $shift ) {
$rid = $shift [ " RID " ];
$blocks = ( $shift [ " end " ] - $shift [ " start " ]) / ( 15 * 60 );
$firstblock = floor (( $shift [ " start " ] - $first ) / ( 15 * 60 ));
for ( $i = $firstblock ; $i < $blocks + $firstblock && $i < $maxshow ; $i ++ ) {
$block [ $rid ][ $i ] ++ ;
2012-12-12 22:56:51 +01:00
}
2016-10-02 23:00:01 +02:00
$shifts [ $k ][ 'own' ] = in_array ( $shift [ 'SID' ], array_keys ( $ownshifts ));
}
$shifts_table = '<div class="shifts-table"><table id="shifts" class="table scrollable"><thead><tr><th>-</th>' ;
foreach ( $myrooms as $key => $room ) {
$rid = $room [ " id " ];
if ( array_sum ( $block [ $rid ]) == 0 ) {
// do not display columns without entries
unset ( $block [ $rid ]);
unset ( $myrooms [ $key ]);
continue ;
2013-11-25 21:56:56 +01:00
}
2016-10-02 23:00:01 +02:00
$colspan = call_user_func_array ( 'max' , $block [ $rid ]);
if ( $colspan == 0 ) {
$colspan = 1 ;
}
$todo [ $rid ] = array_fill ( 0 , $maxshow , $colspan );
$shifts_table .= " <th " . (( $colspan > 1 ) ? ' colspan="' . $colspan . '"' : '' ) . " > " . Room_name_render ([
'RID' => $room [ 'id' ],
'Name' => $room [ 'name' ]
]) . " </th> \n " ;
}
unset ( $block , $blocks , $firstblock , $colspan , $key , $room );
$shifts_table .= " </tr></thead><tbody> " ;
for ( $i = 0 ; $i < $maxshow ; $i ++ ) {
$thistime = $first + ( $i * 15 * 60 );
if ( $thistime % ( 24 * 60 * 60 ) == 23 * 60 * 60 && $shiftsFilter -> getEndTime () - $shiftsFilter -> getStartTime () > 24 * 60 * 60 ) {
$shifts_table .= " <tr class= \" row-day \" ><th class= \" row-header \" > " ;
$shifts_table .= date ( 'Y-m-d<b\r />H:i' , $thistime );
} elseif ( $thistime % ( 60 * 60 ) == 0 ) {
$shifts_table .= " <tr class= \" row-hour \" ><th> " ;
$shifts_table .= date ( " H:i " , $thistime );
} else {
$shifts_table .= " <tr><th> " ;
}
$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 );
if ( $blocks < 1 ) {
$blocks = 1 ;
}
$collides = in_array ( $shift [ 'SID' ], array_keys ( $ownshifts ));
if ( ! $collides ) {
foreach ( $ownshifts as $ownshift ) {
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' ]) {
$collides = true ;
break ;
2013-11-25 21:56:56 +01:00
}
2016-09-29 10:53:17 +02:00
}
2016-10-02 23:00:01 +02:00
}
$is_free = false ;
$shifts_row = '' ;
if ( in_array ( 'admin_shifts' , $privileges )) {
$shifts_row .= '<div class="pull-right">' . table_buttons ([
button ( page_link_to ( 'user_shifts' ) . '&edit_shift=' . $shift [ 'SID' ], glyph ( 'edit' ), 'btn-xs' ),
button ( page_link_to ( 'user_shifts' ) . '&delete_shift=' . $shift [ 'SID' ], glyph ( 'trash' ), 'btn-xs' )
]) . '</div>' ;
}
$shifts_row .= Room_name_render ([
'RID' => $room [ 'id' ],
'Name' => $room [ 'name' ]
]) . '<br />' ;
$shifts_row .= '<a href="' . shift_link ( $shift ) . '">' . date ( 'Y-m-d H:i' , $shift [ 'start' ]);
$shifts_row .= " – " ;
$shifts_row .= date ( 'H:i' , $shift [ 'end' ]);
$shifts_row .= " <br /><b> " ;
$shifts_row .= ShiftType ( $shift [ 'shifttype_id' ])[ 'name' ];
$shifts_row .= " </b><br /> " ;
if ( $shift [ 'title' ] != '' ) {
$shifts_row .= $shift [ 'title' ];
$shifts_row .= " <br /> " ;
}
$shifts_row .= '</a>' ;
$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-10-02 23:00:01 +02:00
if ( $shift [ 'has_special_needs' ]) {
$query .= " `shift_id` = ' " . sql_escape ( $shift [ 'SID' ]) . " ' " ;
} else {
$query .= " `room_id` = ' " . sql_escape ( $shift [ 'RID' ]) . " ' " ;
}
if ( ! empty ( $shiftsFilter -> getTypes ())) {
$query .= " AND `angel_type_id` IN ( " . implode ( ',' , $shiftsFilter -> getTypes ()) . " ) " ;
}
$query .= " ORDER BY `AngelTypes`.`name` " ;
$angeltypes = sql_select ( $query );
if ( count ( $angeltypes ) > 0 ) {
foreach ( $angeltypes as $angeltype ) {
$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` " );
$entry_list = [];
$freeloader = 0 ;
foreach ( $entries as $entry ) {
$style = '' ;
if ( $entry [ 'freeloaded' ]) {
$freeloader ++ ;
$style = " text-decoration: line-through; " ;
2012-12-12 22:56:51 +01:00
}
2016-10-02 23:00:01 +02:00
if ( in_array ( 'user_shifts_admin' , $privileges )) {
$entry_list [] = " <span style= \" $style\ " > " . User_Nick_render( $entry ) . ' ' . table_buttons([
button ( page_link_to ( 'user_shifts' ) . '&entry_id=' . $entry [ 'id' ], glyph ( 'trash' ), 'btn-xs' )
]) . '</span>' ;
} else {
$entry_list [] = " <span style= \" $style\ " > " . User_Nick_render( $entry ) . " </ span > " ;
}
}
if ( $angeltype [ 'count' ] - count ( $entries ) - $freeloader > 0 ) {
$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 ;
// you cannot join if user alread joined a parallel or this shift
$user_may_join_shift &= ! $collides ;
// you cannot join if user is not of this angel type
$user_may_join_shift &= isset ( $angeltype [ 'user_id' ]);
// 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' ]);
}
// you can only join if the shift is in future or running
$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 );
if ( $user_may_join_shift ) {
$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' );
} else {
if ( time () > $shift [ 'start' ]) {
$entry_list [] = $inner_text . ' (' . _ ( 'ended' ) . ')' ;
} elseif ( $angeltype [ 'restricted' ] == 1 && isset ( $angeltype [ 'user_id' ]) && ! isset ( $angeltype [ 'confirm_user_id' ])) {
$entry_list [] = $inner_text . glyph ( 'lock' );
} elseif ( $angeltype [ 'restricted' ] == 1 ) {
$entry_list [] = $inner_text ;
} elseif ( $collides ) {
$entry_list [] = $inner_text ;
2016-09-29 10:53:17 +02:00
} else {
2016-10-02 23:00:01 +02: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' );
2013-11-25 21:56:56 +01:00
}
}
2016-09-29 10:53:17 +02:00
2016-10-02 23:00:01 +02:00
unset ( $inner_text );
$is_free = true ;
2013-11-25 21:56:56 +01:00
}
2016-10-02 23:00:01 +02:00
$shifts_row .= '<strong>' . AngelType_name_render ( $angeltype ) . ':</strong> ' ;
$shifts_row .= join ( " , " , $entry_list );
$shifts_row .= '<br />' ;
2016-09-29 10:53:17 +02:00
}
2016-10-02 23:00:01 +02:00
if ( in_array ( 'user_shifts_admin' , $privileges )) {
$shifts_row .= ' ' . button ( page_link_to ( 'user_shifts' ) . '&shift_id=' . $shift [ 'SID' ] . '&type_id=' . $angeltype [ 'id' ], _ ( " Add more angels " ), 'btn-xs' );
2012-12-12 22:56:51 +01:00
}
2012-12-30 17:58:23 +01:00
}
2016-10-02 23:00:01 +02:00
if ( $shift [ 'own' ] && ! in_array ( 'user_shifts_admin' , $privileges )) {
$class = 'own' ;
} elseif ( $collides && ! in_array ( 'user_shifts_admin' , $privileges )) {
$class = 'collides' ;
} elseif ( $is_free ) {
$class = 'free' ;
2016-09-29 10:53:17 +02:00
} else {
2016-10-02 23:00:01 +02:00
$class = 'occupied' ;
2016-09-29 10:53:17 +02:00
}
2016-10-02 23:00:01 +02:00
$shifts_table .= '<td rowspan="' . $blocks . '" class="' . $class . '">' ;
$shifts_table .= $shifts_row ;
$shifts_table .= " </td> " ;
2016-10-03 19:37:00 +02:00
// also output that shift on ical export
$ical_shifts [] = $shift ;
2016-10-02 23:00:01 +02:00
for ( $j = 0 ; $j < $blocks && $i + $j < $maxshow ; $j ++ ) {
$todo [ $rid ][ $i + $j ] -- ;
2012-12-30 17:58:23 +01:00
}
2012-12-27 15:00:21 +01:00
}
2013-11-25 21:56:56 +01:00
}
2016-10-02 23:00:01 +02:00
}
// fill up row with empty <td>
while ( $todo [ $rid ][ $i ] -- > 0 ) {
$shifts_table .= '<td class="empty"></td>' ;
2012-05-19 16:41:00 +02:00
}
}
2016-10-02 23:00:01 +02:00
$shifts_table .= " </tr> \n " ;
2012-05-19 16:41:00 +02:00
}
2016-10-02 23:00:01 +02:00
$shifts_table .= '</tbody></table></div>' ;
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
}
2016-10-02 23:00:01 +02:00
$filled = [
[
'id' => '1' ,
'name' => _ ( " occupied " )
],
[
'id' => '0' ,
'name' => _ ( " free " )
]
];
$start_day = date ( " Y-m-d " , $shiftsFilter -> getStartTime ());
$start_time = date ( " H:i " , $shiftsFilter -> getStartTime ());
$end_day = date ( " Y-m-d " , $shiftsFilter -> getEndTime ());
$end_time = date ( " H:i " , $shiftsFilter -> getEndTime ());
2016-09-29 10:53:17 +02:00
return page ([
div ( 'col-md-12' , [
msg (),
template_render ( '../templates/user_shifts.html' , [
'title' => shifts_title (),
2016-10-02 23:00:01 +02:00
'room_select' => make_select ( $rooms , $shiftsFilter -> getRooms (), " rooms " , _ ( " Rooms " )),
'start_select' => html_select_key ( " start_day " , " start_day " , array_combine ( $days , $days ), $start_day ),
'start_time' => $start_time ,
'end_select' => html_select_key ( " end_day " , " end_day " , array_combine ( $days , $days ), $end_day ),
'end_time' => $end_time ,
'type_select' => make_select ( $types , $shiftsFilter -> getTypes (), " types " , _ ( " Angeltypes " ) . '<sup>1</sup>' ),
'filled_select' => make_select ( $filled , $shiftsFilter -> getFilled (), " filled " , _ ( " Occupancy " )),
'task_notice' => '<sup>1</sup>' . _ ( " The tasks shown here are influenced by the angeltypes you joined already! " ) . " <a href= \" " . page_link_to ( 'angeltypes' ) . '&action=about' . " \" > " . _ ( " Description of the jobs. " ) . " </a> " ,
2016-09-29 10:53:17 +02:00
'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
}
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
?>