/** * Renders a thread. * * @var \App\Http\Requests\Request $request * @var Board $board * @var integer|null $thread * @return Response */ public function getThread(Request $request, Board $board, $thread = null) { if (is_null($thread)) { return redirect($board->board_uri); } // Pull the thread. $thread = $board->getThread($thread); if (!$thread) { return abort(404); } if ($thread->reply_to) { return redirect("{$board->board_uri}/thread/{$thread->op->board_id}"); } return $this->view(static::VIEW_THREAD, ['board' => $board, 'posts' => [$thread], 'reply_to' => $thread->board_id]); }
/** * Returns a thread and its replies to the client. * * @var Board $board * @var integer|null $thread * @return Response */ public function getThread(Request $request, Board $board, $thread) { if (is_null($thread)) { return abort(404); } $input = $request->only('updatesOnly', 'updatedSince'); if (isset($input['updatesOnly'])) { $updatedSince = Carbon::createFromTimestamp($request->input('updatedSince', 0)); return Post::where('posts.board_uri', $board->board_uri)->withEverything()->where(function ($query) use($thread) { $query->where('posts.reply_to_board_id', $thread); $query->orWhere('posts.board_id', $thread); })->where(function ($query) use($updatedSince) { $query->where('posts.updated_at', '>=', $updatedSince); $query->orWhere('posts.deleted_at', '>=', $updatedSince); })->withTrashed()->orderBy('posts.created_at', 'asc')->get(); } else { // Pull the thread. $thread = $board->getThread($thread); if (!$thread) { return abort(404); } } return $thread; }