%PDF- %PDF-
Direktori : /var/www/html/conference/app/Http/Controllers/ |
Current File : /var/www/html/conference/app/Http/Controllers/ArticleController.php |
<?php namespace App\Http\Controllers; use App\Models\Article; use App\Models\Author; use App\Models\KeyWord; use App\Models\Media; use App\Providers\MorphableName; use Carbon\Carbon; use Illuminate\Http\Request; use Illuminate\Support\Facades\DB; class ArticleController extends Controller { public function index() { $articles = Article::query()->paginate(10); return view('admin.articles.index', ['articles' => $articles]); } public function show($article) { $article = Article::query()->find($article); if (!$article) { $article = new Article(); } return view('admin.articles.show', [ 'article' => $article, 'categories' => [ ['slug' => Article::MAKRO_CATEGORY, 'description' => 'Makro'], ['slug' => Article::MIKRO_CATEGORY, 'description' => 'Mikro'], ], ]); } /** * @param \Illuminate\Http\Request $request * * @return \Illuminate\Contracts\View\Factory|\Illuminate\View\View */ public function store(Request $request) { $rules = [ 'title' => 'required|string', 'description' => 'required|string', 'category' => 'required|string', 'authors' => 'required|string', 'keywords' => 'nullable|string', 'session' => 'required|integer', 'pdf_file' => 'required|mimes:pdf', ]; $this->validate($request, $rules); DB::beginTransaction(); try { $article = new Article([ 'title' => $request->get('title'), 'description' => $request->get('description'), 'category' => $request->get('category'), 'session' => $request->get('session'), ]); $file = $request->file('pdf_file'); $fileName = preg_replace('/[^A-Za-z0-9\-]/', '', trim($article->title)) . Carbon::now()->formatLocalized('%d%m%Y%H%M%S') . '.' . last(explode('/', $file->getClientMimeType())); $file->move('uploads/articles', $fileName); $article->save(); $media = Media::query()->make([ 'model_id' => $article->id, 'model_type' => MorphableName::forClass(Article::class), 'file_name' => $fileName, 'real_file_name' => $file->getClientOriginalName(), 'media_type' => Media::ARTICLE, ]); $media->save(); foreach (explode(',', $request->get('authors')) as $author) { $article->authors()->attach($author); } foreach (explode(',', $request->get('keywords')) as $keyword) { $keyword = KeyWord::query()->firstOrCreate([ 'tag' => $keyword, ]); $article->keyWords()->attach($keyword['id']); } DB::commit(); } catch (\Exception $exception) { DB::rollback(); \File::delete(public_path('uploads/articles') . '/' . $fileName); return $this->show('new'); } return redirect('/admin/articles'); } /** * @param \Illuminate\Http\Request $request * @param $article * * @return \Illuminate\Http\RedirectResponse|\Illuminate\Routing\Redirector */ public function update(Request $request, $article) { $rules = [ 'title' => 'required|string', 'description' => 'required|string', 'category' => 'required|string', 'session' => 'required|integer', ]; $this->validate($request, $rules); $article = Article::query()->find($article); $article->update([ 'title' => $request->get('title'), 'description' => $request->get('description'), 'category' => $request->get('category'), 'session' => $request->get('session'), ]); return redirect('/admin/articles'); } /** * @param $article * @param $author * * @return \Illuminate\Http\JsonResponse */ public function attachAuthor($article, $author) { /** @var Article $article */ $article = Article::query()->find($article); /** @var Author $author */ $author = Author::query()->find($author); $article->authors()->attach($author); return response()->json([ 'data' => $article, ], 200); } /** * @param $article * @param $author * * @return \Illuminate\Http\JsonResponse */ public function detachAuthor($article, $author) { /** @var Article $article */ $article = Article::query()->find($article); /** @var Author $author */ $author = Author::query()->find($author); $article->authors()->detach($author); return response()->json([ 'data' => $article, ], 200); } /** * @param $article * @param $keyword * * @return \Illuminate\Http\JsonResponse */ public function attachKeyword($article, $keyword) { /** @var Article $article */ $article = Article::query()->find($article); $keyword = KeyWord::query()->firstOrCreate([ 'tag' => $keyword, ]); $article->keyWords()->attach($keyword); return response()->json([ 'data' => $article, ], 200); } /** * @param $article * @param $keyword * * @return \Illuminate\Http\JsonResponse */ public function detachKeyword($article, $keyword) { /** @var Article $article */ $article = Article::query()->find($article); $keyword = KeyWord::query()->find($keyword); $article->keyWords()->detach($keyword); return response()->json([ 'data' => $article, ], 200); } }