%PDF- %PDF-
Mini Shell

Mini Shell

Direktori : /var/www/html/sljcon/app/Http/Controllers/
Upload File :
Create Path :
Current File : /var/www/html/sljcon/app/Http/Controllers/SectionController.php

<?php

namespace App\Http\Controllers;

use App\Models\Project;
use App\Models\Section;
use App\Models\Media;
use Illuminate\Http\Request;
use Carbon\Carbon;
use App\Providers\MorphableName;
use Illuminate\Support\Facades\DB;

class SectionController extends Controller
{
    /**
     * @param $id
     * @return \Illuminate\Contracts\View\Factory|\Illuminate\View\View
     */
    public function index($id)
    {
        $sections = Section::query()
            ->where('project_id', $id)
            ->get();
        $project = Project::query()
            ->find($id);
        return view('admin.section.all', [
            'sections' => $sections,
            'project_id' => $id,
            'project' => $project
        ]);
    }

    /**
     * @param Request $request
     * @param $id
     * @return \Illuminate\Contracts\View\Factory|\Illuminate\View\View
     */
    public function newOrEdit(Request $request, $id)
    {
        $section = Section::query()
            ->find($id);
        if (!$section) {
            $section = new Section();
        }
        $project_id = $request->query('project_id');
        return view('admin.section.form', [
            'section' => $section,
            'id' => $id,
            'project_id' => $project_id
        ]);
    }

    /**
     * @param Request $request
     * @param $id
     * @return $this|\Illuminate\Http\RedirectResponse|\Illuminate\Routing\Redirector
     */
    public function store(Request $request, $id)
    {
        $section = Section::query()
            ->find($id);
        $rules = [
            'title' => 'required|string',
            'order' => 'required|integer',
            'description' => 'required|string',
            //'project_id' => 'required|integer|exists:projects,id',
            'file' => $section
                ? 'nullable'
                : 'required' . '|image',
        ];
        $validate = $this->validate($request, $rules);
        DB::beginTransaction();
        try {
            if ($section) {
                $section->update($request->all());
            } else {
                $section = Section::query()
                    ->create($request->all());
            }
            if ($file = $request->file('file')) {
                $media = $section->media()
                    ->where('media_type', Media::MEDIA_TYPE_SECTION_IMAGE)
                    ->first();
                if ($media) {
                    \File::delete(public_path('uploads/section') . '/' . $media->file_name);
                    $media->delete();
                }
                $fileName = head(explode('.', $file->getClientOriginalName())) . Carbon::now()
                        ->formatLocalized('%d%m%Y%H%M%S') . '.' . last(explode('/', $file->getClientMimeType()));
                $file->move('uploads/section', $fileName);
                Media::query()
                    ->create([
                        'reference_id' => $section->id,
                        'reference_type' => MorphableName::forClass(Section::class),
                        'file_name' => $fileName,
                        'real_file_name' => $file->getClientOriginalName(),
                        'media_type' => Media::MEDIA_TYPE_SECTION_IMAGE,
                    ]);
            }
            DB::commit();
            return redirect(route('admin.project.section', $section->project_id));
        } catch (\Exception $exception) {
            DB::rollback();
            return back()
                ->withErrors($validate)
                ->withInput();
        }
    }

    public function delete(Request $request)
    {
        $data = $request->all();
        DB::beginTransaction();
        try {
            $section = Section::query()
                ->find($data['id']);
            if ($section) {
                $media = $section->media()
                    ->where('media_type', Media::MEDIA_TYPE_SECTION_IMAGE)
                    ->first();
                if ($media) {
                    \File::delete(public_path('uploads/section') . '/' . $media->file_name);
                    $media->delete();
                }
                $section->delete();
            }
            DB::commit();
        } catch (\Exception $exception) {
            DB::rollback();
        }
        return back();
    }
}

Zerion Mini Shell 1.0