/** * @api {post} /tasks Create A Task * @apiGroup Tasks * @apiDescription Returns information about a single task. * * @param Request $request * * @return \Illuminate\Http\Response */ public function store(Request $request) { $user = $this->requireAuthentication(); $this->validate($request, ['stickerId' => 'required|exists:stickers,id', 'name' => 'required|unique:tasks,name', 'submission' => 'required', 'submissionType' => 'required|in:' . Task::SUBMISSION_TEXT . ',' . Task::SUBMISSION_IMAGE]); $data = $request->only(['name', 'description', 'submission', 'submissionType', 'stickerId']); $task = new Task($data); $task->userId = $user->id; $task->save(); return $this->response(['task' => $task]); }
/** * @api {get} /tasks/:slug/doers Get Task Doers * @apiGroup Tasks * @apiDescription Returns a list of users that have a task on their to do list. * * @param Task $task * * @return \Illuminate\Http\Response */ public function index(Task $task) { $earners = $task->doers()->orderBy('pivot_createdAt', 'DESC')->withPivot('id', 'likeCount'); $paginator = $earners->paginate($this->getResultsPerPage()); $array = $this->paginatorToArray($paginator, 'users'); if ($this->user) { foreach ($array['users'] as &$user) { $user['pivot']['liked'] = $this->user->likesToDo($user['pivot']['id']); } } return $this->response($array); }
/** * @api {get} /tasks/:slug/posts Get Task Posts * @apiGroup Task Posts * @apiDescription Get posts for a task. * * @param Request $request * @param Task $task * * @return \Illuminate\Http\Response */ public function index(Request $request, Task $task) { $this->validate($request, ['type' => 'in:submission,question,tip']); if ($type = $request->input('type')) { $posts = $task->posts()->where('type', $type); } else { $posts = $task->posts(); } // TODO: Order by best unless type filter is given then order by most recent $posts = $posts->orderBy('id', 'DESC'); $paginator = $posts->paginate($this->getResultsPerPage()); return $this->response($this->paginatorToArray($paginator, 'posts')); }
protected function getList() { if ($this->request->has('task')) { $taskId = $this->request->input('task'); /** @var Task $task */ $task = Task::findOrFail($taskId); $this->pageTitle = ' Submissions for ' . $task->name; $this->breadcrumbs = \Breadcrumbs::render('task-submissions', $task); return Submission::where('taskId', $taskId)->orderBy('createdAt', 'DESC'); } else { return Submission::orderBy('createdAt', 'DESC'); } }
/** * @api {get} /stickers/search Search Stickers and Tasks * @apiGroup Stickers * @apiDescription Find stickers and tasks * * @param Request $request * * @return \Illuminate\Http\Response */ public function search(Request $request) { $term = $request->input('q'); $query = DB::select('SELECT * FROM stickers WHERE name LIKE ? AND deletedAt IS NULL', ["%{$term}%"]); /** @var Sticker[] $stickers */ $stickers = Sticker::hydrate($query); $query = DB::select('SELECT * FROM tasks WHERE name LIKE ? AND deletedAt IS NULL', ["%{$term}%"]); /** @var Task[] $tasks */ $tasks = Task::hydrate($query); $results = []; foreach ($stickers as $sticker) { $results[] = ['type' => 'sticker', 'people' => $sticker->peopleCount, 'sticker' => $sticker]; } foreach ($tasks as $task) { $results[] = ['type' => 'task', 'task' => $task, 'people' => $task->peopleCount, 'sticker' => $task->getSticker()]; } usort($results, function ($a, $b) { $countA = $a['type'] === 'task' ? $a['task']->peopleCount : $a['sticker']->peopleCount; $countB = $b['type'] === 'task' ? $b['task']->peopleCount : $b['sticker']->peopleCount; return $countA < $countB; }); return $this->response(['results' => $results]); }
/** * Remove the specified resource from storage. * * @param Request $request * @param User $user * * @return Response */ public function destroy(Request $request, User $user) { $this->requireUser($user); $toDoManager = new ToDoManager(); if ($request->has('taskId')) { $this->validate($request, ['taskId' => 'integer']); $taskId = $request->input('taskId'); /** @var Task $task */ $task = Task::findOrFail($taskId); $success = $toDoManager->removeTaskToDo($task, $user) > 0; } elseif ($request->has('stickerId')) { $this->validate($request, ['stickerId' => 'integer']); $stickerId = $request->input('stickerId'); /** @var Sticker $sticker */ $sticker = Sticker::findOrFail($stickerId); $success = $toDoManager->removeStickerToDo($sticker, $user) > 0; } else { throw new HttpException(400, "taskId or stickerId is required"); } return $this->response(['success' => $success]); }
/** * Get a query for the all the users that have a Task on their To Do List. * * @param Task $task * * @return Builder */ public function getTaskDoers(Task $task) { return $task->doers()->orderBy('pivot_createdAt', 'DESC')->withPivot('id', 'likeCount'); }
protected function getSearchableList() { return Task::query(); }