2011-07-15 17:50:57 +02:00
< ? php
2014-09-28 15:01:02 +02:00
2017-01-21 13:58:53 +01:00
use Engelsystem\Database\DB ;
2017-01-03 03:22:48 +01:00
/**
* @ return string
*/
2017-01-02 03:57:23 +01:00
function myshifts_title ()
{
2017-01-03 14:12:17 +01:00
return _ ( 'My shifts' );
2013-11-25 21:04:58 +01:00
}
2011-07-19 19:12:36 +02:00
2017-01-03 03:22:48 +01:00
/**
* Zeigt die Schichten an , die ein Benutzer belegt
*
* @ return string
*/
2017-01-02 03:57:23 +01:00
function user_myshifts ()
{
global $user , $privileges ;
2017-07-18 21:38:53 +02:00
$request = request ();
2017-01-02 15:43:36 +01:00
if (
2017-07-18 21:38:53 +02:00
$request -> has ( 'id' )
2017-01-03 14:12:17 +01:00
&& in_array ( 'user_shifts_admin' , $privileges )
2017-07-18 21:38:53 +02:00
&& preg_match ( '/^\d{1,}$/' , $request -> input ( 'id' ))
&& count ( DB :: select ( 'SELECT `UID` FROM `User` WHERE `UID`=?' , [ $request -> input ( 'id' )])) > 0
2017-01-02 15:43:36 +01:00
) {
2017-07-18 21:38:53 +02:00
$user_id = $request -> input ( 'id' );
2017-01-02 03:57:23 +01:00
} else {
$user_id = $user [ 'UID' ];
}
2017-01-02 15:43:36 +01:00
2017-07-28 20:11:09 +02:00
$shifts_user = DB :: selectOne ( 'SELECT * FROM `User` WHERE `UID`=? LIMIT 1' , [ $user_id ]);
2017-01-02 15:43:36 +01:00
2017-07-18 21:38:53 +02:00
if ( $request -> has ( 'reset' )) {
if ( $request -> input ( 'reset' ) == 'ack' ) {
2017-01-02 03:57:23 +01:00
User_reset_api_key ( $user );
2017-01-03 14:12:17 +01:00
success ( _ ( 'Key changed.' ));
2017-08-28 16:21:10 +02:00
redirect ( page_link_to ( 'users' , [ 'action' => 'view' , 'user_id' => $shifts_user [ 'UID' ]]));
2017-01-02 03:57:23 +01:00
}
2017-01-03 14:12:17 +01:00
return page_with_title ( _ ( 'Reset API key' ), [
2017-01-02 15:43:36 +01:00
error (
2017-01-03 14:12:17 +01:00
_ ( 'If you reset the key, the url to your iCal- and JSON-export and your atom feed changes! You have to update it in every application using one of these exports.' ),
2017-01-02 15:43:36 +01:00
true
),
2017-08-28 16:21:10 +02:00
button ( page_link_to ( 'user_myshifts' , [ 'reset' => 'ack' ]), _ ( 'Continue' ), 'btn-danger' )
2017-01-02 15:43:36 +01:00
]);
2017-08-30 14:59:27 +02:00
} elseif ( $request -> has ( 'edit' ) && preg_match ( '/^\d+$/' , $request -> input ( 'edit' ))) {
2017-07-18 21:38:53 +02:00
$user_id = $request -> input ( 'edit' );
2017-07-28 20:11:09 +02:00
$shift = DB :: selectOne ( '
2017-01-21 13:58:53 +01:00
SELECT
`ShiftEntry` . `freeloaded` ,
`ShiftEntry` . `freeload_comment` ,
`ShiftEntry` . `Comment` ,
`ShiftEntry` . `UID` ,
`ShiftTypes` . `name` ,
`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 `ShiftTypes` ON ( `ShiftTypes` . `id` = `Shifts` . `shifttype_id` )
JOIN `Room` ON ( `Shifts` . `RID` = `Room` . `RID` )
WHERE `ShiftEntry` . `id` = ?
AND `UID` = ?
LIMIT 1
' ,
[
$user_id ,
$shifts_user [ 'UID' ],
]
);
2017-01-02 03:57:23 +01:00
if ( count ( $shift ) > 0 ) {
$freeloaded = $shift [ 'freeloaded' ];
$freeload_comment = $shift [ 'freeload_comment' ];
2017-01-02 15:43:36 +01:00
2017-07-18 21:38:53 +02:00
if ( $request -> has ( 'submit' )) {
2017-01-02 03:57:23 +01:00
$valid = true ;
2017-01-03 14:12:17 +01:00
if ( in_array ( 'user_shifts_admin' , $privileges )) {
2017-07-18 21:38:53 +02:00
$freeloaded = $request -> has ( 'freeloaded' );
2017-01-02 03:57:23 +01:00
$freeload_comment = strip_request_item_nl ( 'freeload_comment' );
if ( $freeloaded && $freeload_comment == '' ) {
$valid = false ;
2017-01-03 14:12:17 +01:00
error ( _ ( 'Please enter a freeload comment!' ));
2017-01-02 03:57:23 +01:00
}
}
2017-01-02 15:43:36 +01:00
2017-01-02 03:57:23 +01:00
$comment = strip_request_item_nl ( 'comment' );
$user_source = User ( $shift [ 'UID' ]);
2017-01-02 15:43:36 +01:00
2017-01-02 03:57:23 +01:00
if ( $valid ) {
2017-07-23 11:46:54 +02:00
ShiftEntry_update ([
2017-01-02 15:43:36 +01:00
'id' => $user_id ,
'Comment' => $comment ,
'freeloaded' => $freeloaded ,
'freeload_comment' => $freeload_comment
]);
engelsystem_log (
2017-01-03 14:12:17 +01:00
'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
. '. Freeloaded: ' . ( $freeloaded ? 'YES Comment: ' . $freeload_comment : 'NO' )
2017-01-02 15:43:36 +01:00
);
2017-01-03 14:12:17 +01:00
success ( _ ( 'Shift saved.' ));
2017-08-28 16:21:10 +02:00
redirect ( page_link_to ( 'users' , [ 'action' => 'view' , 'user_id' => $shifts_user [ 'UID' ]]));
2017-01-02 03:57:23 +01:00
}
}
2017-01-02 15:43:36 +01:00
return ShiftEntry_edit_view (
User_Nick_render ( $shifts_user ),
2017-01-03 14:12:17 +01:00
date ( 'Y-m-d H:i' , $shift [ 'start' ]) . ', ' . shift_length ( $shift ),
2017-01-02 15:43:36 +01:00
$shift [ 'Name' ],
$shift [ 'name' ],
$shift [ 'angel_type' ],
$shift [ 'Comment' ],
$shift [ 'freeloaded' ],
$shift [ 'freeload_comment' ],
2017-01-03 14:12:17 +01:00
in_array ( 'user_shifts_admin' , $privileges )
2017-01-02 15:43:36 +01:00
);
2017-01-02 03:57:23 +01:00
} else {
redirect ( page_link_to ( 'user_myshifts' ));
}
2017-08-30 14:59:27 +02:00
} elseif ( $request -> has ( 'cancel' ) && preg_match ( '/^\d+$/' , $request -> input ( 'cancel' ))) {
2017-07-18 21:38:53 +02:00
$user_id = $request -> input ( 'cancel' );
2017-07-28 20:11:09 +02:00
$shift = DB :: selectOne ( '
2017-01-21 13:58:53 +01:00
SELECT *
2017-01-22 01:02:52 +01:00
FROM `Shifts`
INNER JOIN `ShiftEntry` USING ( `SID` )
2017-01-21 13:58:53 +01:00
WHERE `ShiftEntry` . `id` = ? AND `UID` = ?
' ,
[
$user_id ,
$shifts_user [ 'UID' ],
]
);
2017-01-02 03:57:23 +01:00
if ( count ( $shift ) > 0 ) {
2017-01-21 23:07:20 +01:00
if (
( $shift [ 'start' ] > time () + config ( 'last_unsubscribe' ) * 3600 )
|| in_array ( 'user_shifts_admin' , $privileges )
) {
2017-07-28 18:50:00 +02:00
ShiftEntry_delete ( $user_id );
2017-01-02 03:57:23 +01:00
$room = Room ( $shift [ 'RID' ]);
$angeltype = AngelType ( $shift [ 'TID' ]);
$shifttype = ShiftType ( $shift [ 'shifttype_id' ]);
2017-01-02 15:43:36 +01:00
engelsystem_log (
2017-01-03 14:12:17 +01:00
'Deleted own shift: ' . $shifttype [ 'name' ]
. ' at ' . $room [ 'Name' ]
. ' from ' . date ( 'Y-m-d H:i' , $shift [ 'start' ])
. ' to ' . date ( 'Y-m-d H:i' , $shift [ 'end' ])
. ' as ' . $angeltype [ 'name' ]
2017-01-02 15:43:36 +01:00
);
2017-01-03 14:12:17 +01:00
success ( _ ( 'Shift canceled.' ));
2017-01-02 03:57:23 +01:00
} else {
2017-01-03 14:12:17 +01:00
error ( _ ( 'It\'s too late to sign yourself off the shift. If neccessary, ask the dispatcher to do so.' ));
2017-01-02 03:57:23 +01:00
}
} else {
redirect ( user_link ( $shifts_user ));
}
2016-09-29 10:53:17 +02:00
}
2017-01-02 15:43:36 +01:00
2017-08-28 16:21:10 +02:00
redirect ( page_link_to ( 'users' , [ 'action' => 'view' , 'user_id' => $shifts_user [ 'UID' ]]));
2017-01-03 03:22:48 +01:00
return '' ;
2011-07-19 19:12:36 +02:00
}