| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104 | 
							- <?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->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");
 
- 	}
 
- }
 
 
  |