Create New Item
Item Type
File
Folder
Item Name
Search file in folder and subfolders...
Are you sure want to rename?
peripherad
/
app
/
Http
/
Controllers
/
Admin
:
ProductController.php
Advanced Search
Upload
New Item
Settings
Back
Back Up
Advanced Editor
Save
<?php namespace App\Http\Controllers\Admin; use App\Http\Controllers\Controller; use App\Http\Controllers\Traits\MediaUploadingTrait; use App\Http\Requests\Admin\MassDestroyProductRequest; use App\Http\Requests\Admin\StoreProductRequest; use App\Http\Requests\Admin\UpdateProductRequest; use App\Models\Category; use App\Models\Product; use Gate; use Illuminate\Http\Request; use Spatie\MediaLibrary\MediaCollections\Models\Media; use Symfony\Component\HttpFoundation\Response; use Yajra\DataTables\Facades\DataTables; class ProductController extends Controller { use MediaUploadingTrait; public function index(Request $request) { abort_if(Gate::denies('product_access'), Response::HTTP_FORBIDDEN, '403 Forbidden'); if ($request->ajax()) { $query = Product::with(['category'])->select(sprintf('%s.*', (new Product())->table)); $table = Datatables::of($query); $table->addColumn('placeholder', ' '); $table->addColumn('actions', ' '); $table->editColumn('actions', function ($row) { $viewGate = 'product_show'; $editGate = 'product_edit'; $deleteGate = 'product_delete'; $crudRoutePart = 'products'; return view('partials.datatablesActions', compact( 'viewGate', 'editGate', 'deleteGate', 'crudRoutePart', 'row' )); }); $table->editColumn('id', function ($row) { return $row->id ? $row->id : ''; }); $table->addColumn('category_name', function ($row) { return $row->category ? $row->category->name : ''; }); $table->editColumn('sku', function ($row) { return $row->sku ? $row->sku : ''; }); $table->editColumn('name', function ($row) { return $row->name ? $row->name : ''; }); $table->editColumn('slug', function ($row) { return $row->slug ? $row->slug : ''; }); $table->editColumn('description', function ($row) { return $row->description ? $row->description : ''; }); $table->editColumn('featured_image', function ($row) { if ($photo = $row->featured_image) { return sprintf( '<a href="%s" target="_blank"><img src="%s" width="50px" height="50px"></a>', $photo->url, $photo->thumbnail ); } return ''; }); $table->editColumn('gallery_images', function ($row) { if (!$row->gallery_images) { return ''; } $links = []; foreach ($row->gallery_images as $media) { $links[] = '<a href="' . $media->getUrl() . '" target="_blank"><img src="' . $media->getUrl('thumb') . '" width="50px" height="50px"></a>'; } return implode(' ', $links); }); $table->editColumn('status', function ($row) { return $row->status ? Product::STATUS_RADIO[$row->status] : ''; }); $table->editColumn('product_sketch', function ($row) { if ($photo = $row->product_sketch) { return sprintf( '<a href="%s" target="_blank"><img src="%s" width="50px" height="50px"></a>', $photo->url, $photo->thumbnail ); } return ''; }); $table->rawColumns(['actions', 'placeholder', 'category', 'featured_image', 'gallery_images', 'product_sketch']); return $table->make(true); } $categories = Category::get(); return view('admin.products.index', compact('categories')); } public function create() { abort_if(Gate::denies('product_create'), Response::HTTP_FORBIDDEN, '403 Forbidden'); $categories = Category::pluck('name', 'id')->prepend(trans('global.pleaseSelect'), ''); return view('admin.products.create', compact('categories')); } public function store(StoreProductRequest $request) { $product = Product::create($request->all()); if ($request->input('featured_image', false)) { $product->addMedia(storage_path('tmp/uploads/' . basename($request->input('featured_image'))))->toMediaCollection('featured_image'); } foreach ($request->input('gallery_images', []) as $file) { $product->addMedia(storage_path('tmp/uploads/' . basename($file)))->toMediaCollection('gallery_images'); } if ($request->input('product_sketch', false)) { $product->addMedia(storage_path('tmp/uploads/' . basename($request->input('product_sketch'))))->toMediaCollection('product_sketch'); } if ($media = $request->input('ck-media', false)) { Media::whereIn('id', $media)->update(['model_id' => $product->id]); } return redirect()->route('admin.products.index'); } public function edit(Product $product) { abort_if(Gate::denies('product_edit'), Response::HTTP_FORBIDDEN, '403 Forbidden'); $categories = Category::pluck('name', 'id')->prepend(trans('global.pleaseSelect'), ''); $product->load('category'); return view('admin.products.edit', compact('categories', 'product')); } public function update(UpdateProductRequest $request, Product $product) { $product->update($request->all()); if ($request->input('featured_image', false)) { if (!$product->featured_image || $request->input('featured_image') !== $product->featured_image->file_name) { if ($product->featured_image) { $product->featured_image->delete(); } $product->addMedia(storage_path('tmp/uploads/' . basename($request->input('featured_image'))))->toMediaCollection('featured_image'); } } elseif ($product->featured_image) { $product->featured_image->delete(); } if (count($product->gallery_images) > 0) { foreach ($product->gallery_images as $media) { if (!in_array($media->file_name, $request->input('gallery_images', []))) { $media->delete(); } } } $media = $product->gallery_images->pluck('file_name')->toArray(); foreach ($request->input('gallery_images', []) as $file) { if (count($media) === 0 || !in_array($file, $media)) { $product->addMedia(storage_path('tmp/uploads/' . basename($file)))->toMediaCollection('gallery_images'); } } if ($request->input('product_sketch', false)) { if (!$product->product_sketch || $request->input('product_sketch') !== $product->product_sketch->file_name) { if ($product->product_sketch) { $product->product_sketch->delete(); } $product->addMedia(storage_path('tmp/uploads/' . basename($request->input('product_sketch'))))->toMediaCollection('product_sketch'); } } elseif ($product->product_sketch) { $product->product_sketch->delete(); } return redirect()->route('admin.products.index'); } public function show(Product $product) { abort_if(Gate::denies('product_show'), Response::HTTP_FORBIDDEN, '403 Forbidden'); $product->load('category', 'productProductPrices'); return view('admin.products.show', compact('product')); } public function destroy(Product $product) { abort_if(Gate::denies('product_delete'), Response::HTTP_FORBIDDEN, '403 Forbidden'); $product->delete(); return back(); } public function massDestroy(MassDestroyProductRequest $request) { Product::whereIn('id', request('ids'))->delete(); return response(null, Response::HTTP_NO_CONTENT); } public function storeCKEditorImages(Request $request) { abort_if(Gate::denies('product_create') && Gate::denies('product_edit'), Response::HTTP_FORBIDDEN, '403 Forbidden'); $model = new Product(); $model->id = $request->input('crud_id', 0); $model->exists = true; $media = $model->addMediaFromRequest('upload')->toMediaCollection('ck-media'); return response()->json(['id' => $media->id, 'url' => $media->getUrl()], Response::HTTP_CREATED); } }