99 lines
2.8 KiB
PHP
99 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\StoreProductRequest;
|
|
use Modules\Product\Http\Requests\UpdateProductRequest;
|
|
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(StoreProductRequest $request) {
|
|
$product = Product::create($request->except('document'));
|
|
|
|
if ($request->has('document')) {
|
|
foreach ($request->input('document', []) as $file) {
|
|
$product->addMedia(storage_path('temp/dropzone/' . $file))->toMediaCollection('images');
|
|
}
|
|
}
|
|
|
|
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(UpdateProductRequest $request, Product $product) {
|
|
$product->update($request->except('document'));
|
|
|
|
if ($request->has('document')) {
|
|
if (count($product->getMedia('images')) > 0) {
|
|
foreach ($product->getMedia('images') as $media) {
|
|
if (!in_array($media->file_name, $request->input('document', []))) {
|
|
$media->delete();
|
|
}
|
|
}
|
|
}
|
|
|
|
$media = $product->getMedia('images')->pluck('file_name')->toArray();
|
|
|
|
foreach ($request->input('document', []) as $file) {
|
|
if (count($media) === 0 || !in_array($file, $media)) {
|
|
$product->addMedia(storage_path('temp/dropzone/' . $file))->toMediaCollection('images');
|
|
}
|
|
}
|
|
}
|
|
|
|
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');
|
|
}
|
|
}
|