コード例 #1
0
 /**
  * @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]);
 }
コード例 #2
0
 /**
  * @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);
 }
コード例 #3
0
 /**
  * @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'));
 }
コード例 #4
0
 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');
     }
 }
コード例 #5
0
 /**
  * @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]);
 }
コード例 #6
0
 /**
  * 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]);
 }
コード例 #7
0
 /**
  * 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');
 }
コード例 #8
0
 protected function getSearchableList()
 {
     return Task::query();
 }