input('user_worklog_id')); if (empty($userWorkLog)) { throw_redirect(user_link(auth()->user()->id)); } $user_source = User::find($userWorkLog['user_id']); if ($request->hasPostData('submit')) { UserWorkLog_delete($userWorkLog); success(__('Work log entry deleted.')); throw_redirect(user_link($user_source->id)); } return [ UserWorkLog_delete_title(), UserWorkLog_delete_view($user_source) ]; } /** * Edit work log for user. * * @return array */ function user_worklog_edit_controller() { $request = request(); $userWorkLog = UserWorkLog($request->input('user_worklog_id')); if (empty($userWorkLog)) { throw_redirect(user_link(auth()->user()->id)); } $user_source = User::find($userWorkLog['user_id']); if ($request->hasPostData('submit')) { list ($valid, $userWorkLog) = user_worklog_from_request($userWorkLog); if ($valid) { UserWorkLog_update($userWorkLog); success(__('Work log entry updated.')); throw_redirect(user_link($user_source->id)); } } return [ UserWorkLog_edit_title(), UserWorkLog_edit_view($user_source, $userWorkLog) ]; } /** * Handle form * * @param array $userWorkLog * @return array [bool $valid, UserWorkLog $userWorkLog] */ function user_worklog_from_request($userWorkLog) { $request = request(); $valid = true; $userWorkLog['work_timestamp'] = parse_date( 'Y-m-d H:i', $request->input('work_timestamp') . ' 00:00' ); if (is_null($userWorkLog['work_timestamp'])) { $valid = false; error(__('Please enter work date.')); } $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.')); } if (mb_strlen($userWorkLog['comment']) > 200) { $valid = false; error(__('Comment too long.')); } return [ $valid, $userWorkLog ]; } /** * Add work log entry to user. * * @return array */ function user_worklog_add_controller() { $request = request(); $user_source = User::find($request->input('user_id')); if (!$user_source) { throw_redirect(user_link(auth()->user()->id)); } $userWorkLog = UserWorkLog_new($user_source->id); if ($request->hasPostData('submit')) { list ($valid, $userWorkLog) = user_worklog_from_request($userWorkLog); if ($valid) { UserWorkLog_create($userWorkLog); success(__('Work log entry created.')); throw_redirect(user_link($user_source->id)); } } return [ UserWorkLog_add_title(), UserWorkLog_add_view($user_source, $userWorkLog) ]; } /** * Link to work log entry add for given user. * * @param User $user * * @return string */ function user_worklog_add_link($user) { return page_link_to('user_worklog', [ 'action' => 'add', 'user_id' => $user->id, ]); } /** * Link to work log entry edit. * * @param array $userWorkLog * @return string */ 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 array $userWorkLog * @param array[] $parameters * @return string */ 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 * * @return array */ function user_worklog_controller() { $user = auth()->user(); if (!auth()->can('admin_user_worklog')) { throw_redirect(user_link($user->id)); } $request = request(); $action = $request->input('action'); if (!$request->has('action')) { throw_redirect(user_link($user->id)); } switch ($action) { case 'add': return user_worklog_add_controller(); case 'edit': return user_worklog_edit_controller(); case 'delete': return user_worklog_delete_controller(); } }