|
@@ -0,0 +1,98 @@
|
|
|
+<?php
|
|
|
+
|
|
|
+namespace App\Http\Controllers;
|
|
|
+
|
|
|
+use Illuminate\Http\Request;
|
|
|
+use App\Models\Article;
|
|
|
+
|
|
|
+class ArticleController extends Controller
|
|
|
+{
|
|
|
+ function published() {
|
|
|
+ return view("published", ["rows" => 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->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;
|
|
|
+
|
|
|
+ $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;
|
|
|
+ $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");
|
|
|
+ }
|
|
|
+}
|