%PDF- %PDF-
Direktori : /var/www/html/sljcon/app/Http/Controllers/ |
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(); } }