69 lines
1.8 KiB
PHP
69 lines
1.8 KiB
PHP
<?php
|
|
|
|
namespace Modules\Product\Http\Controllers;
|
|
|
|
use Illuminate\Routing\Controller;
|
|
use Modules\Review\Entities\Review;
|
|
use Modules\Product\Entities\Product;
|
|
use Modules\Product\Events\ProductViewed;
|
|
use Modules\Product\Filters\ProductFilter;
|
|
use Modules\Product\Http\Middleware\SetProductSortOption;
|
|
|
|
class ProductController extends Controller
|
|
{
|
|
use ProductSearch;
|
|
|
|
/**
|
|
* Create a new controller instance.
|
|
*
|
|
* @return void
|
|
*/
|
|
public function __construct()
|
|
{
|
|
$this->middleware(SetProductSortOption::class)->only('index');
|
|
}
|
|
|
|
/**
|
|
* Display a listing of the resource.
|
|
*
|
|
* @param \Modules\Product\Entities\Product $model
|
|
* @param \Modules\Product\Filters\ProductFilter $productFilter
|
|
* @return \Illuminate\Http\Response
|
|
*/
|
|
public function index(Product $model, ProductFilter $productFilter)
|
|
{
|
|
if (request()->expectsJson()) {
|
|
return $this->searchProducts($model, $productFilter);
|
|
}
|
|
|
|
return view('public.products.index');
|
|
}
|
|
|
|
/**
|
|
* Show the specified resource.
|
|
*
|
|
* @param string $slug
|
|
* @return \Illuminate\Http\Response
|
|
*/
|
|
public function show($slug)
|
|
{
|
|
$product = Product::findBySlug($slug);
|
|
$relatedProducts = $product->relatedProducts()->forCard()->get();
|
|
$upSellProducts = $product->upSellProducts()->forCard()->get();
|
|
$review = $this->getReviewData($product);
|
|
|
|
event(new ProductViewed($product));
|
|
|
|
return view('public.products.show', compact('product', 'relatedProducts', 'upSellProducts', 'review'));
|
|
}
|
|
|
|
private function getReviewData(Product $product)
|
|
{
|
|
if (! setting('reviews_enabled')) {
|
|
return;
|
|
}
|
|
|
|
return Review::countAndAvgRating($product);
|
|
}
|
|
}
|