%PDF- %PDF-
Mini Shell

Mini Shell

Direktori : /var/www/html/conference/app/Http/Controllers/
Upload File :
Create Path :
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);
    }
}

Zerion Mini Shell 1.0