Article::published()->get()]); } function index() { $all = Article::all()->groupBy("status"); $args = [ "drafts" => $all[Article::STATUS_DRAFT] ?? null, "pending" => $all[Article::STATUS_PENDING] ?? null, "published" => $all[Article::STATUS_PUBLISHED] ?? null, "archive" => $all[Article::STATUS_ARCHIVE] ?? null ]; return view("articles", $args); } function add() { return view("add_article_form"); } function view(Article $article) { return view("article", [ "article" => $article->load([ "comments" => function($query) { $query->published()->recent(); } ]) ]); } function edit(Article $article) { return view("edit_article_form", ["article" => $article]); } function store(Request $request) { $request->validate([ "id" => "nullable|exists:articles", "title" => "required", "description" => "nullable", "content" => "required", "status" => "required", "publish_at" => "nullable", "unpublish_at" => "nullable" ], [ "name" => "Публикация должна иметь название.", "content" => "Публикация должна иметь текст." ]); $arr = $request; if ($arr->status == Article::STATUS_PENDING and !$arr->publish_at) { return back()->withInput()->withErrors([ "publish_at" => "Должны быть указаны дата и время публикации." ]); } $article = Article::find($arr->id) ?? new Article; $article->title = $arr->title; $article->description = $arr->description ?? explode(".", $arr->content)[0]; $article->content = $arr->content; $article->status = $arr->status; $article->publish_at = $arr->publish_at ?? ($arr->status == Article::STATUS_PUBLISHED ? now() : null); $article->unpublish_at = $arr->unpublish_at; $article->save(); return view("success"); } function comment(Article $article, Request $request) { $request->validate([ "name" => "required", "email" => "required|email", "content" => "required" ], [ "name" => "Укажите ваше имя.", "email" => "Укажите ваш email.", "content" => "Введите комментарий." ]); $arr = $request; $article->comments()->create([ "name" => $arr->name, "email" => $arr->email, "content" => $arr->content ]); return view("success"); } function drop(Article $article) { $article->delete(); return view("success"); } }