diff options
Diffstat (limited to 'includes/controller')
-rw-r--r-- | includes/controller/user_worklog_controller.php | 189 | ||||
-rw-r--r-- | includes/controller/users_controller.php | 4 |
2 files changed, 192 insertions, 1 deletions
diff --git a/includes/controller/user_worklog_controller.php b/includes/controller/user_worklog_controller.php new file mode 100644 index 00000000..ba91534b --- /dev/null +++ b/includes/controller/user_worklog_controller.php @@ -0,0 +1,189 @@ +<?php + +/** + * Delete a work log entry. + */ +function user_worklog_delete_controller() +{ + global $user; + + $request = request(); + $userWorkLog = UserWorkLog($request->input('user_worklog_id')); + if (empty($userWorkLog)) { + redirect(user_link($user)); + } + $user_source = User($userWorkLog['user_id']); + + if ($request->has('confirmed')) { + UserWorkLog_delete($userWorkLog); + + success(_('Work log entry deleted.')); + redirect(user_link($user_source)); + } + + return [ + UserWorkLog_delete_title(), + UserWorkLog_delete_view($user_source, $userWorkLog) + ]; +} + +/** + * Edit work log for user. + */ +function user_worklog_edit_controller() +{ + global $user; + + $request = request(); + $userWorkLog = UserWorkLog($request->input('user_worklog_id')); + if (empty($userWorkLog)) { + redirect(user_link($user)); + } + $user_source = User($userWorkLog['user_id']); + + if ($request->has('submit')) { + list ($valid, $userWorkLog) = user_worklog_from_request($userWorkLog); + + if ($valid) { + UserWorkLog_update($userWorkLog); + + success(_('Work log entry updated.')); + redirect(user_link($user_source)); + } + } + + return [ + UserWorkLog_edit_title(), + UserWorkLog_edit_view($user_source, $userWorkLog) + ]; +} + +/** + * + * @param UserWorkLog $userWorkLog + * @return [bool $valid, UserWorkLog $userWorkLog] + */ +function user_worklog_from_request($userWorkLog) +{ + $request = request(); + + $valid = true; + + $userWorkLog['work_hours'] = $request->input('work_hours'); + if (! preg_match("/[0-9]+(\.[0-9]+)?/", $userWorkLog['work_hours'])) { + $valid = false; + error(_('Please enter work hours in format ##[.##].')); + } + + $userWorkLog['comment'] = $request->input('comment'); + if (empty($userWorkLog['comment'])) { + $valid = false; + error(_('Please enter a comment.')); + } + + return [ + $valid, + $userWorkLog + ]; +} + +/** + * Add work log entry to user. + */ +function user_worklog_add_controller() +{ + global $user; + + $request = request(); + $user_source = User($request->input('user_id')); + if (empty($user_source)) { + redirect(user_link($user)); + } + + $userWorkLog = UserWorkLog_new($user_source); + + if ($request->has('submit')) { + list ($valid, $userWorkLog) = user_worklog_from_request($userWorkLog); + + if ($valid) { + UserWorkLog_create($userWorkLog); + + success(_('Work log entry created.')); + redirect(user_link($user_source)); + } + } + + return [ + UserWorkLog_add_title(), + UserWorkLog_add_view($user_source, $userWorkLog) + ]; +} + +/** + * Link to work log entry add for given user. + * + * @param User $user + */ +function user_worklog_add_link($user) +{ + return page_link_to('user_worklog', [ + 'action' => 'add', + 'user_id' => $user['UID'] + ]); +} + +/** + * Link to work log entry edit. + * + * @param UserWorkLog $userWorkLog + */ +function user_worklog_edit_link($userWorkLog) +{ + return page_link_to('user_worklog', [ + 'action' => 'edit', + 'user_worklog_id' => $userWorkLog['id'] + ]); +} + +/** + * Link to work log entry delete. + * + * @param UserWorkLog $userWorkLog + * @param array[] $parameters + */ +function user_worklog_delete_link($userWorkLog, $parameters = []) +{ + return page_link_to('user_worklog', array_merge([ + 'action' => 'delete', + 'user_worklog_id' => $userWorkLog['id'] + ], $parameters)); +} + +/** + * Work log entry actions + */ +function user_worklogs_controller() +{ + global $user, $privileges; + + if (! in_array('admin_user_worklog', $privileges)) { + redirect(user_link($user)); + } + + $request = request(); + $action = $request->input('action'); + if (! $request->has('action')) { + redirect(user_link($user)); + } + + switch ($action) { + case 'add': + return user_worklog_add_controller(); + case 'edit': + return user_worklog_edit_controller(); + case 'delete': + return user_worklog_delete_controller(); + } +} + +?>
\ No newline at end of file diff --git a/includes/controller/users_controller.php b/includes/controller/users_controller.php index a2a28410..c763cd48 100644 --- a/includes/controller/users_controller.php +++ b/includes/controller/users_controller.php @@ -242,7 +242,9 @@ function user_controller() $shifts, $user['UID'] == $user_source['UID'], $tshirt_score, - in_array('admin_active', $privileges) + in_array('admin_active', $privileges), + in_array('admin_user_worklog', $privileges), + UserWorkLogsForUser($user_source) ) ]; } |