/** * Store a newly created resource in storage. * * @param \Illuminate\Http\Request $request * @return \Illuminate\Http\Response */ public function store(Request $request) { // validate input $this->validate($request, ['name' => 'required|max:255|min:5', 'priority' => 'required']); $task = new Task(); $task->owner_id = Auth::user()->id; // TODO: Why doesn't $request->user() work? $task->creator_id = Auth::user()->id; $task->name = $request->get('name'); $task->priority = $request->get('priority'); // TODO: Fix/re-think these? Is checking $saved correct? what about try/catch $task->description = $request->get('description'); $task->status = 'open'; // make constant? if ($request->get('due_date')) { $task->due_date = date('Y-m-d H:i:s', strtotime($request->get('due_date'))); } $saved = $task->save(); if ($saved) { $tagsForThisTask = []; if ($request->get('tags')) { foreach ($request->get('tags') as $tag) { // TODO: change variable names? $firstOrCreate = Tag::firstOrCreate(['tag' => $tag]); $tagsForThisTask[] = $firstOrCreate->id; } } $task->tags()->sync($tagsForThisTask); // if this.. $assigneesForThisTask = []; if ($request->get('assignees')) { foreach ($request->get('assignees') as $user) { $assigneesForThisTask[] = $user; } } $task->assignees()->sync($assigneesForThisTask); // if this.. } // TODO: If saved... // TODO: better way to flash messages? return redirect()->action('TaskController@show', $task)->with('message-type', 'success')->with('message-message', 'New task created!'); // TODO: Assignees // TODO: Shares // TODO: Approvers // TODO: Attachments // TODO: Email notifications }
/** * sync tags to Task * @param Task $task Object * @return void */ private function syncTags(Task $task, array $tags) { if (is_array($tags)) { $task->tags()->sync($tags); } }