auth = $auth; $this->config = $config; $this->log = $log; $this->worklog = $worklog; $this->redirect = $redirector; $this->response = $response; $this->user = $user; } public function editWorklog(Request $request): Response { $userId = (int)$request->getAttribute('user_id'); $worklogId = $request->getAttribute('worklog_id'); // optional $user = $this->user->findOrFail($userId); if (isset($worklogId)) { $worklog = $this->worklog->findOrFail((int)$worklogId); if ($worklog->user->id != $userId) { throw new HttpNotFound(); } return $this->showEditWorklog($user, $worklog->worked_at, $worklog->hours, $worklog->comment, true); } else { return $this->showEditWorklog($user, $this->getWorkDateSuggestion()); } } public function saveWorklog(Request $request): Response { $userId = (int)$request->getAttribute('user_id'); $worklogId = $request->getAttribute('worklog_id'); // optional $user = $this->user->findOrFail($userId); $data = $this->validate($request, [ 'work_date' => 'required|date:Y-m-d', 'work_hours' => 'float|min:0', 'comment' => 'required|max:200', ]); if (isset($worklogId)) { $worklog = $this->worklog->findOrFail((int)$worklogId); if ($worklog->user->id != $userId) { throw new HttpNotFound(); } } else { $worklog = new Worklog(); $worklog->user()->associate($user); $worklog->creator()->associate($this->auth->user()); } $worklog->worked_at = $data['work_date']; $worklog->hours = $data['work_hours']; $worklog->comment = $data['comment']; $worklog->save(); $this->addNotification(isset($worklogId) ? 'worklog.edit.success' : 'worklog.add.success'); return $this->redirect->to('/users?action=view&user_id=' . $userId); // TODO Once User_view.php gets removed, change this to withView + getNotifications } public function showDeleteWorklog(Request $request): Response { $userId = (int)$request->getAttribute('user_id'); $worklogId = (int)$request->getAttribute('worklog_id'); $user = $this->user->findOrFail($userId); $worklog = $this->worklog->findOrFail($worklogId); if ($worklog->user->id != $userId) { throw new HttpNotFound(); } return $this->response->withView( 'admin/user/delete-worklog.twig', [ 'user' => $user ] ); } public function deleteWorklog(Request $request): Response { $userId = (int)$request->getAttribute('user_id'); $worklogId = (int)$request->getAttribute('worklog_id'); $worklog = $this->worklog->findOrFail($worklogId); if ($worklog->user->id != $userId) { throw new HttpNotFound(); } $worklog->delete(); $this->addNotification('worklog.delete.success'); return $this->redirect->to('/users?action=view&user_id=' . $userId); // TODO Once User_view.php gets removed, change this to withView + getNotifications } private function showEditWorklog( User $user, Carbon $work_date, float $work_hours = 0, string $comment = '', bool $is_edit = false ): Response { return $this->response->withView( 'admin/user/edit-worklog.twig', [ 'user' => $user, 'work_date' => $work_date, 'work_hours' => $work_hours, 'comment' => $comment, 'is_edit' => $is_edit, ] ); } private function getWorkDateSuggestion(): Carbon { $buildup_start = config('buildup_start'); $event_start = config('event_start'); $work_date_suggestion = Carbon::today(); if (!empty($buildup_start) && (empty($event_start) || $event_start->lessThan(Carbon::now()))) { $work_date_suggestion = $buildup_start->startOfDay(); } return $work_date_suggestion; } }