²é¿´/±à¼ ´úÂë
ÄÚÈÝ
<?php namespace App\Http\Controllers\Blog; use App\Category; use App\Http\Controllers\Controller; use App\Post; use Illuminate\Database\Eloquent\Model; use Illuminate\Http\Request; use Illuminate\Support\Facades\Validator; use Intervention\Image\Facades\Image; class BlogController extends Controller { public function index(Request $request) { $posts = Post::with(['category'])->orderBy('id', 'desc')->get(); return view('blog.posts.index')->with([ 'posts' => $posts ]); } public function create(Request $request) { $categories = Category::all(); return view('blog.posts.create')->with([ 'categories' => $categories ]); } public function show(Request $request) { $post = Post::where('slug', $request->slug)->firstOrFail(); $categories = Category::all(); return view('blog.posts.edit')->with([ 'post' => $post, 'categories' => $categories ]); } /** * Store a newly created resource in storage. * * @param \Illuminate\Http\Request $request * @return \Illuminate\Http\Response */ public function store(Request $request) { $rules = [ "title" => 'required|unique:posts', ]; $messages = [ 'title.required' => 'Title is required!', ]; $validator = Validator::make($request->all(), $rules, $messages); if ($validator->fails()) { return back() ->withErrors($validator) ->withInput(); } $post = new Post(); $post->title = $request->title; $post->description = $request->description; $post->category_id = $request->category; $post->status = $request->visibility; $post->video_url = $request->video_url; if (!$request->has_comments) { $post->has_comments = 0; } if ($request->is_featured) { $post->is_featured = 1; } $post->meta_keywords = $request->meta_keywords; $post->meta_description = $request->meta_description; $post->user_id = auth()->user()->id; $imgs = []; if ($request->hasFile('featured_img')) { $post->featured_img = $this->uploadImage($request->file('featured_img'), 'single'); } if ($request->hasFile('photos')) { $photos = $request->file('photos'); for ($i = 0; $i < count($photos); $i++) { $photo = $photos[$i]; array_push($imgs, $this->uploadImage($photo, 'multi')); } $post->images = json_encode($imgs); } $post->save(); if ($request->tags) { $tags = explode(',', $request->tags); // $post->attachTags($tags); } // $log = new ActivityLog(); // $log->activity = auth()->user()->name . " added post $post->title"; // $log->user_id = auth()->user()->id; // $log->save(); if ($post instanceof Model) { toast('Post has been saved successfully!','success','top-right'); return redirect('/posts/create'); } toast('An error has occurred please try again later.y','error','top-right'); return back(); } /** * Update the specified resource in storage. * * @param \Illuminate\Http\Request $request * @param \App\Models\Post $post * @return \Illuminate\Http\Response */ public function update(Request $request, Post $post) { $rules = [ "title" => 'required', ]; $messages = [ 'title.required' => 'Title is required!', ]; $validator = Validator::make($request->all(), $rules, $messages); if ($validator->fails()) { return back() ->withErrors($validator) ->withInput(); } $p = $post->find($request->id); if (!$p) { toastr()->error('An error has occurred please try again later.'); return back(); } $p->title = $request->title; $p->description = $request->description; $p->category_id = $request->category; $p->status = $request->visibility; if ($request->video_url) { $p->video_url = $request->video_url; } if (!$request->has_comments) { $p->has_comments = 0; } if ($request->is_featured) { $p->is_featured = 1; } $p->meta_keywords = $request->meta_keywords; $p->meta_description = $request->meta_description; $imgs = []; // check if new featured_image has been sent if ($request->hasFile('featured_img')) { // remove the old image and update with this new one // delete old image if ($p->featured_img != 'noimage.jpg') { unlink('assets/images/thumbs/' . $p->featured_img); unlink('assets/images/' . $p->featured_img); } // do upload $fImg = $this->uploadImage($request->file('featured_img'), 'single'); $p->featured_img = $fImg; if ($p->images) { $imgs = json_decode($p->images); } array_push($imgs, $fImg); } if ($request->hasFile('photos')) { // retrieve other images if ($p->images) { $imgs = json_decode($p->images); } $photos = $request->file('photos'); for ($i = 0; $i < count($photos); $i++) { $photo = $photos[$i]; array_push($imgs, $this->uploadImage($photo, 'multi')); } $p->images = json_encode($imgs); } $p->save(); // $log = new ActivityLog(); // $log->activity = auth()->user()->name . " updated $p->title"; // $log->user_id = auth()->user()->id; // $log->save(); if ($request->tags) { $tags = explode(',', $request->tags); // $p->attachTags($tags); } toast('Post has been updated successfully!','success','top-right'); return redirect('/post/' . $p->slug . '/edit'); } public function remImage($id, Request $request) { $post = Post::findOrFail($id); $photos = []; if ($post->images) { $photos = json_decode($post->images); } // TODO: check if file exists unlink('assets/images/thumbs/' . $request->get('img')); unlink('assets/images/' . $request->get('img')); $new_arr = []; for ($i = 0; $i < count($photos); $i++) { if ($photos[$i] != $request->get('img')) { array_push($new_arr, $photos[$i]); } } if (count($new_arr) == 0) { $post->images = null; } else { $post->images = json_encode($new_arr); } if ($post->save()) { return response()->json([ 'success' => true ]); } } /** * Remove the specified resource from storage. * * @param \App\Models\Post $post * @return \Illuminate\Http\Response */ public function destroy(Post $post, Request $request) { $p = $post->findOrFail($request->id); if ($p->featured_img != 'noimage.jpg') { if (file_exists('assets/images/thumbs/' . $p->featured_img)) { unlink('assets/images/thumbs/' . $p->featured_img); } if (file_exists('assets/images/' . $p->featured_img)) { unlink('assets/images/' . $p->featured_img); } } $imgs = []; if ($p->images) { $imgs = json_decode($p->images); for ($i = 0; $i < count($imgs); $i++) { if (file_exists('assets/images/thumbs/' . $imgs[$i])) { unlink('assets/images/thumbs/' . $imgs[$i]); } if (file_exists('assets/images/' . $imgs[$i])) { unlink('assets/images/' . $imgs[$i]); } } } $p->delete(); // $log = new ActivityLog(); // $log->activity = auth()->user()->name . " deleted $p->title"; // $log->user_id = auth()->user()->id; // $log->save(); return response()->json([ 'success' => true ]); } public function remove(Post $post, Request $request) { $type = $request->get('type'); if ($type == 'single') { $p = $post->onlyTrashed()->where('id', $request->id)->first(); if ($p->featured_img != 'noimage.jpg') { if (file_exists('assets/images/thumbs/' . $p->featured_img)) { unlink('assets/images/thumbs/' . $p->featured_img); } if (file_exists('assets/images/' . $p->featured_img)) { unlink('assets/images/' . $p->featured_img); } } $imgs = []; if ($p->images) { $imgs = json_decode($p->images); for ($i = 0; $i < count($imgs); $i++) { if (file_exists('assets/images/thumbs/' . $imgs[$i])) { unlink('assets/images/thumbs/' . $imgs[$i]); } if (file_exists('assets/images/' . $imgs[$i])) { unlink('assets/images/' . $imgs[$i]); } } } $p->forceDelete(); } else if ($type == 'all') { $posts = Post::onlyTrashed()->get(); foreach ($posts as $key => $p) { if ($p->featured_img != 'noimage.jpg') { if (file_exists('assets/images/thumbs/' . $p->featured_img)) { unlink('assets/images/thumbs/' . $p->featured_img); } if (file_exists('assets/images/' . $p->featured_img)) { unlink('assets/images/' . $p->featured_img); } } $imgs = []; if ($p->images) { $imgs = json_decode($p->images); for ($i = 0; $i < count($imgs); $i++) { if (file_exists('assets/images/thumbs/' . $imgs[$i])) { unlink('assets/images/thumbs/' . $imgs[$i]); } if (file_exists('assets/images/' . $imgs[$i])) { unlink('assets/images/' . $imgs[$i]); } } } $p->forceDelete(); } return response()->json([ 'success' => true ]); } // $log = new ActivityLog(); // $log->activity = auth()->user()->name . " deleted $p->title"; // $log->user_id = auth()->user()->id; // $log->save(); return response()->json([ 'success' => true ]); } private function uploadImage($file, $type) { $oname = basename($file->getClientOriginalName()); $new_name = time() . '_' . $oname; $img = Image::make($file) ->fit(300, 300, function ($constraints) { // $constraints->aspectRatio(); $constraints->upsize(); }); $img2 = Image::make($file); $img2->save('assets/images/' . $new_name); $img->save('assets/images/thumbs/' . $new_name); return $new_name; } }