MIF_E31222707/Modules/Product/Http/Controllers/ProductController.php

101 lines
2.8 KiB
PHP

<?php
namespace Modules\Product\Http\Controllers;
use App\DataTables\ProductDataTable;
use Illuminate\Contracts\Support\Renderable;
use Illuminate\Http\Request;
use Illuminate\Routing\Controller;
use Illuminate\Support\Facades\Gate;
use Illuminate\Support\Facades\Storage;
use Modules\Product\Entities\Product;
use Modules\Product\Http\Requests\ProductCreateRequest;
use Modules\Product\Http\Requests\ProductUpdateRequest;
use Modules\Upload\Entities\Upload;
class ProductController extends Controller
{
public function index(ProductDataTable $dataTable) {
abort_if(Gate::denies('access_products'), 403);
return $dataTable->render('product::products.index');
}
public function create() {
abort_if(Gate::denies('create_products'), 403);
return view('product::products.create');
}
public function store(ProductCreateRequest $request) {
$product = Product::create($request->except('image'));
if ($request->has('image')) {
$tempFile = Upload::where('folder', $request->image)->first();
if ($tempFile) {
$product->addMedia(Storage::path('public/temp/' . $request->image . '/' . $tempFile->filename))->toMediaCollection();
Storage::deleteDirectory('public/temp/' . $request->image);
$tempFile->delete();
}
}
toast('Product Created!', 'success');
return redirect()->route('products.index');
}
public function show(Product $product) {
abort_if(Gate::denies('show_products'), 403);
return view('product::products.show', compact('product'));
}
public function edit(Product $product) {
abort_if(Gate::denies('edit_products'), 403);
return view('product::products.edit', compact('product'));
}
public function update(ProductUpdateRequest $request, Product $product) {
$product->update($request->except('image'));
if ($request->has('image')) {
$tempFile = Upload::where('folder', $request->image)->first();
if ($product->getFirstMedia()) {
$product->getFirstMedia()->delete();
}
if ($tempFile) {
$product->addMedia(Storage::path('public/temp/' . $request->image . '/' . $tempFile->filename))->toMediaCollection();
Storage::deleteDirectory('public/temp/' . $request->image);
$tempFile->delete();
}
}
toast('Product Updated!', 'info');
return redirect()->route('products.index');
}
public function destroy(Product $product) {
abort_if(Gate::denies('delete_products'), 403);
$product->delete();
toast('Product Deleted!', 'warning');
return redirect()->route('products.index');
}
}