2011-07-15 17:50:57 +02:00
< ? php
2013-11-25 21:04:58 +01:00
function myshifts_title () {
return _ ( " My shifts " );
}
2011-07-19 19:12:36 +02:00
2011-10-11 19:47:49 +02:00
// Zeigt die Schichten an, die ein Benutzer belegt
2011-07-15 17:50:57 +02:00
function user_myshifts () {
2012-12-26 19:53:27 +01:00
global $LETZTES_AUSTRAGEN ;
global $user , $privileges ;
$msg = " " ;
2013-11-25 21:56:56 +01:00
if ( isset ( $_REQUEST [ 'id' ]) && in_array ( " user_shifts_admin " , $privileges ) && preg_match ( " /^[0-9] { 1,} $ / " , $_REQUEST [ 'id' ]) && sql_num_query ( " SELECT * FROM `User` WHERE `UID`= " . sql_escape ( $_REQUEST [ 'id' ])) > 0 ) {
2012-12-26 19:53:27 +01:00
$id = $_REQUEST [ 'id' ];
} else {
$id = $user [ 'UID' ];
}
2013-11-25 21:56:56 +01:00
list ( $shifts_user ) = sql_select ( " SELECT * FROM `User` WHERE `UID`= " . sql_escape ( $id ) . " LIMIT 1 " );
if ( isset ( $_REQUEST [ 'reset' ])) {
2012-12-26 19:53:27 +01:00
if ( $_REQUEST [ 'reset' ] == " ack " ) {
2013-09-10 14:27:31 +02:00
User_reset_api_key ( $user );
2013-11-28 22:40:48 +01:00
success ( _ ( " Key changed. " ));
2012-12-26 19:53:27 +01:00
redirect ( page_link_to ( 'user_myshifts' ));
}
2013-11-25 21:56:56 +01:00
return template_render ( '../templates/user_myshifts_reset.html' , array ());
} elseif ( isset ( $_REQUEST [ 'edit' ]) && preg_match ( " /^[0-9]* $ / " , $_REQUEST [ 'edit' ])) {
2012-12-26 19:53:27 +01:00
$id = $_REQUEST [ 'edit' ];
2013-12-27 18:45:27 +01:00
$shift = sql_select ( " SELECT
`ShiftEntry` . `freeloaded` ,
`ShiftEntry` . `freeload_comment` ,
`ShiftEntry` . `Comment` ,
`ShiftEntry` . `UID` ,
`Shifts` .* ,
`Room` . `Name` ,
`AngelTypes` . `name` as `angel_type`
FROM `ShiftEntry`
JOIN `AngelTypes` ON ( `ShiftEntry` . `TID` = `AngelTypes` . `id` )
JOIN `Shifts` ON ( `ShiftEntry` . `SID` = `Shifts` . `SID` )
JOIN `Room` ON ( `Shifts` . `RID` = `Room` . `RID` )
WHERE `ShiftEntry` . `id` = " . sql_escape( $id ) . "
AND `UID` = " . sql_escape( $shifts_user['UID'] ) . " LIMIT 1 " );
2012-12-26 19:53:27 +01:00
if ( count ( $shift ) > 0 ) {
$shift = $shift [ 0 ];
2013-11-25 21:56:56 +01:00
if ( isset ( $_REQUEST [ 'submit' ])) {
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' );
}
2012-12-26 19:53:27 +01:00
$comment = strip_request_item_nl ( 'comment' );
$user_source = User ( $shift [ 'UID' ]);
2013-12-27 18:45:27 +01:00
sql_query ( " UPDATE `ShiftEntry` SET
`Comment` = '" . sql_escape($comment) . "' ,
`freeloaded` = " . sql_escape( $freeloaded ? 1 : 0) . " ,
`freeload_comment` = '" . sql_escape($freeload_comment) . "'
WHERE `id` = " . sql_escape( $id ) . "
LIMIT 1 " );
2012-12-30 17:58:23 +01:00
engelsystem_log ( " Updated " . User_Nick_render ( $user_source ) . " 's shift " . $shift [ 'name' ] . " from " . date ( " y-m-d H:i " , $shift [ 'start' ]) . " to " . date ( " y-m-d H:i " , $shift [ 'end' ]) . " with comment " . $comment );
2013-11-28 22:40:48 +01:00
success ( _ ( " Shift saved. " ));
2012-12-26 19:53:27 +01:00
redirect ( page_link_to ( 'user_myshifts' ));
}
2013-11-25 21:56:56 +01:00
2013-12-27 18:45:27 +01:00
return ShiftEntry_edit_view ( User_Nick_render ( $shifts_user ), date ( " Y-m-d H:i " , $shift [ 'start' ]) . ', ' . shift_length ( $shift ), $shift [ 'Name' ], $shift [ 'name' ], $shift [ 'angel_type' ], $shift [ 'Comment' ], $shift [ 'freeloaded' ], $shift [ 'freeload_comment' ], in_array ( " user_shifts_admin " , $privileges ));
2012-12-26 19:53:27 +01:00
} else
redirect ( page_link_to ( 'user_myshifts' ));
2013-11-25 21:56:56 +01:00
} elseif ( isset ( $_REQUEST [ 'cancel' ]) && preg_match ( " /^[0-9]* $ / " , $_REQUEST [ 'cancel' ])) {
2012-12-26 19:53:27 +01:00
$id = $_REQUEST [ 'cancel' ];
2012-12-30 13:08:03 +01:00
$shift = sql_select ( " SELECT `Shifts`.`start` FROM `Shifts` INNER JOIN `ShiftEntry` USING (`SID`) WHERE `ShiftEntry`.`id`= " . sql_escape ( $id ) . " AND `UID`= " . sql_escape ( $shifts_user [ 'UID' ]) . " LIMIT 1 " );
2012-12-26 19:53:27 +01:00
if ( count ( $shift ) > 0 ) {
$shift = $shift [ 0 ];
2012-12-29 15:38:55 +01:00
if (( $shift [ 'start' ] > time () + $LETZTES_AUSTRAGEN * 3600 ) || in_array ( 'user_shifts_admin' , $privileges )) {
2012-12-26 19:53:27 +01:00
sql_query ( " DELETE FROM `ShiftEntry` WHERE `id`= " . sql_escape ( $id ) . " LIMIT 1 " );
2013-11-25 21:04:58 +01:00
$msg .= success ( _ ( " You have been signed off from the shift. " ), true );
2012-12-26 19:53:27 +01:00
} else
2013-12-27 18:45:27 +01:00
$msg .= error ( _ ( " It's too late to sign yourself off the shift. If neccessary, ask the dispatcher to do so. " ), true );
2012-12-26 19:53:27 +01:00
} else
redirect ( page_link_to ( 'user_myshifts' ));
}
$shifts = sql_select ( " SELECT * FROM `ShiftEntry` JOIN `Shifts` ON (`ShiftEntry`.`SID` = `Shifts`.`SID`) JOIN `Room` ON (`Shifts`.`RID` = `Room`.`RID`) WHERE `UID`= " . sql_escape ( $shifts_user [ 'UID' ]) . " ORDER BY `start` " );
2013-11-25 21:56:56 +01:00
2012-12-30 18:23:10 +01:00
$myshifts_table = array ();
2012-12-26 19:53:27 +01:00
$html = " " ;
2012-12-29 14:41:09 +01:00
$timesum = 0 ;
2012-12-26 19:53:27 +01:00
foreach ( $shifts as $shift ) {
2012-12-30 18:23:10 +01:00
$shift_info = $shift [ 'name' ];
2012-12-28 20:55:13 +01:00
$needed_angel_types_source = sql_select ( " SELECT DISTINCT `AngelTypes`.* FROM `ShiftEntry` JOIN `AngelTypes` ON `ShiftEntry`.`TID`=`AngelTypes`.`id` WHERE `ShiftEntry`.`SID`= " . sql_escape ( $shift [ 'SID' ]) . " ORDER BY `AngelTypes`.`name` " );
2013-11-25 21:56:56 +01:00
foreach ( $needed_angel_types_source as $needed_angel_type ) {
2012-12-30 18:23:10 +01:00
$shift_info .= '<br><b>' . $needed_angel_type [ 'name' ] . ':</b> ' ;
2013-11-25 21:56:56 +01:00
2013-12-27 18:45:27 +01:00
$users_source = sql_select ( " SELECT `ShiftEntry`.`freeloaded`, `User`.* FROM `ShiftEntry` JOIN `User` ON `ShiftEntry`.`UID`=`User`.`UID` WHERE `ShiftEntry`.`SID`= " . sql_escape ( $shift [ 'SID' ]) . " AND `ShiftEntry`.`TID`= " . sql_escape ( $needed_angel_type [ 'id' ]));
2012-12-28 20:55:13 +01:00
$shift_entries = array ();
2013-11-25 21:56:56 +01:00
foreach ( $users_source as $user_source ) {
if ( $user [ 'UID' ] == $user_source [ 'UID' ])
2013-12-27 18:45:27 +01:00
$member = '<b>' . $user_source [ 'Nick' ] . '</b>' ;
2012-12-29 15:38:55 +01:00
else
2013-12-27 18:45:27 +01:00
$member = User_Nick_render ( $user_source );
if ( $user_source [ 'freeloaded' ])
$member = '<strike>' . $member . '</strike>' ;
$shift_entries [] = $member ;
2012-12-28 20:55:13 +01:00
}
2012-12-30 18:23:10 +01:00
$shift_info .= join ( " , " , $shift_entries );
2012-12-28 20:55:13 +01:00
}
2013-11-25 21:56:56 +01:00
2012-12-30 18:23:10 +01:00
$myshift = array (
2013-11-25 21:56:56 +01:00
'date' => date ( " Y-m-d " , $shift [ 'start' ]),
'time' => date ( " H:i " , $shift [ 'start' ]) . ' - ' . date ( " H:i " , $shift [ 'end' ]),
'room' => $shift [ 'Name' ],
'shift_info' => $shift_info ,
'comment' => $shift [ 'Comment' ]
2012-12-30 18:23:10 +01:00
);
2013-11-25 21:56:56 +01:00
2013-12-27 18:45:27 +01:00
if ( $shift [ 'freeloaded' ]) {
if ( in_array ( " user_shifts_admin " , $privileges ))
$myshift [ 'comment' ] .= '<br /><p class="error">' . _ ( " Freeloaded " ) . ': ' . $shift [ 'freeload_comment' ] . '</p>' ;
else
$myshift [ 'comment' ] .= '<br /><p class="error">' . _ ( " Freeloaded " ) . '</p>' ;
}
2012-12-30 18:23:10 +01:00
$myshift [ 'actions' ] = " " ;
2013-12-27 18:56:20 +01:00
if ( $id == $user [ 'UID' ] || in_array ( 'user_shifts_admin' , $privileges ))
$myshift [ 'actions' ] .= img_button ( page_link_to ( 'user_myshifts' ) . '&edit=' . $shift [ 'id' ] . '&id=' . $id , 'pencil' , _ ( " edit " ));
2012-12-29 16:02:27 +01:00
if (( $shift [ 'start' ] > time () + $LETZTES_AUSTRAGEN * 3600 ) || in_array ( 'user_shifts_admin' , $privileges ))
2013-11-25 21:56:56 +01:00
$myshift [ 'actions' ] .= img_button ( page_link_to ( 'user_myshifts' ) . (( $id != $user [ 'UID' ]) ? '&id=' . $id : '' ) . '&cancel=' . $shift [ 'id' ], 'cross' , _ ( " sign off " ));
2013-12-27 18:45:27 +01:00
if ( $shift [ 'freeloaded' ])
$timesum += - 2 * ( $shift [ 'end' ] - $shift [ 'start' ]);
else
$timesum += $shift [ 'end' ] - $shift [ 'start' ];
2012-12-30 18:23:10 +01:00
$myshifts_table [] = $myshift ;
2012-12-26 19:53:27 +01:00
}
2013-11-25 21:56:56 +01:00
if ( count ( $myshifts_table ) > 0 )
$myshifts_table [] = array (
'date' => '<b>' . _ ( " Sum: " ) . '</b>' ,
'time' => " <b> " . round ( $timesum / ( 60 * 60 ), 1 ) . " h</b> " ,
'room' => " " ,
'shift_info' => " " ,
'comment' => " " ,
'actions' => " "
);
2012-12-30 18:23:10 +01:00
return page ( array (
2013-11-25 21:56:56 +01:00
msg (),
$id == $user [ 'UID' ] ? sprintf ( _ ( 'These are your shifts.<br/>Please try to appear <b>15 minutes</b> before your shift begins!<br/>You can remove yourself from a shift up to %d hours before it starts.' ), $LETZTES_AUSTRAGEN ) : '' ,
$id != $user [ 'UID' ] ? info ( sprintf ( " You are viewing %s's shifts. " , $shifts_user [ 'Nick' ]), true ) : '' ,
$id != $user [ 'UID' ] ? buttons ( array (
button ( page_link_to ( 'admin_user' ) . '&id=' . $shifts_user [ 'UID' ], " Edit " . $shifts_user [ 'Nick' ], 'edit' )
)) : '' ,
table ( array (
'date' => _ ( " Day " ),
'time' => _ ( " Time " ),
'room' => _ ( " Location " ),
'shift_info' => _ ( " Name & workmates " ),
'comment' => _ ( " Comment " ),
'actions' => _ ( " Action " )
), $myshifts_table ),
$id == $user [ 'UID' ] && count ( $shifts ) == 0 ? error ( sprintf ( _ ( " Go to the <a href= \" %s \" >shifts table</a> to sign yourself up for some shifts. " ), page_link_to ( 'user_shifts' )), true ) : '' ,
'<h2>' . _ ( " Exports " ) . '</h2>' . 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=' . $shifts_user [ 'api_key' ], page_link_to_absolute ( 'shifts_json_export' ) . '&key=' . $shifts_user [ 'api_key' ], page_link_to ( 'user_myshifts' ) . '&reset' )
2012-12-26 19:53:27 +01:00
));
2011-07-19 19:12:36 +02:00
}
2012-12-12 00:22:30 +01:00
?>