<?php
namespace App\Http\Controllers;
use Illuminate\Http\Request;
use App\Models\CustomerProduct;
use App\Models\CustomerProductTranslation;
use App\Models\Category;
use App\Models\Brand;
use Auth;
use Illuminate\Support\Str;
use App\Utility\CategoryUtility;
class CustomerProductController extends Controller
{
public function __construct() {
// Staff Permission Check
$this->middleware(['permission:view_classified_products'])->only('customer_product_index');
$this->middleware(['permission:publish_classified_product'])->only('updatePublished');
$this->middleware(['permission:delete_classified_product'])->only('destroy_by_admin');
}
/**
* Display a listing of the resource.
*
* @return \Illuminate\Http\Response
*/
public function index()
{
if(get_setting('classified_product') != 1){
return redirect()->route('dashboard');
}
$products = CustomerProduct::where('user_id', Auth::user()->id)->orderBy('created_at', 'desc')->paginate(10);
return view('frontend.user.customer.products', compact('products'));
}
public function customer_product_index()
{
$products = CustomerProduct::orderBy('created_at', 'desc')->paginate(10);
return view('backend.customer.classified_products.index', compact('products'));
}
/**
* Show the form for creating a new resource.
*
* @return \Illuminate\Http\Response
*/
public function create()
{
$categories = Category::where('parent_id', 0)
->where('digital', 0)
->with('childrenCategories')
->get();
if(Auth::user()->user_type == "customer" && Auth::user()->remaining_uploads > 0){
return view('frontend.user.customer.product_upload', compact('categories'));
}
elseif (Auth::user()->user_type == "seller" && Auth::user()->remaining_uploads > 0) {
return view('frontend.user.customer.product_upload', compact('categories'));
}
else{
flash(translate('Your classified product upload limit has been reached. Please buy a package.'))->error();
return redirect()->route('customer_packages_list_show');
}
}
/**
* Store a newly created resource in storage.
*
* @param \Illuminate\Http\Request $request
* @return \Illuminate\Http\Response
*/
public function store(Request $request)
{
$customer_product = new CustomerProduct;
$customer_product->name = $request->name;
$customer_product->added_by = $request->added_by;
$customer_product->user_id = Auth::user()->id;
$customer_product->category_id = $request->category_id;
$customer_product->brand_id = $request->brand_id;
$customer_product->conditon = $request->conditon;
$customer_product->location = $request->location;
$customer_product->photos = $request->photos;
$customer_product->thumbnail_img = $request->thumbnail_img;
$customer_product->unit = $request->unit;
$tags = array();
if($request->tags[0] != null){
foreach (json_decode($request->tags[0]) as $key => $tag) {
array_push($tags, $tag->value);
}
}
$customer_product->tags = implode(',', $tags);
$customer_product->description = $request->description;
$customer_product->video_provider = $request->video_provider;
$customer_product->video_link = $request->video_link;
$customer_product->unit_price = $request->unit_price;
$customer_product->meta_title = $request->meta_title;
$customer_product->meta_description = $request->meta_description;
$customer_product->meta_img = $request->meta_img;
$customer_product->pdf = $request->pdf;
$customer_product->slug = strtolower(preg_replace('/[^A-Za-z0-9\-]/', '', str_replace(' ', '-', $request->name)).'-'.Str::random(5));
if($customer_product->save()){
$user = Auth::user();
$user->remaining_uploads -= 1;
$user->save();
$customer_product_translation = CustomerProductTranslation::firstOrNew(['lang' => env('DEFAULT_LANGUAGE'), 'customer_product_id' => $customer_product->id]);
$customer_product_translation->name = $request->name;
$customer_product_translation->unit = $request->unit;
$customer_product_translation->description = $request->description;
$customer_product_translation->save();
flash(translate('Product has been inserted successfully'))->success();
return redirect()->route('customer_products.index');
}
else{
flash(translate('Something went wrong'))->error();
return back();
}
}
/**
* Display the specified resource.
*
* @param int $id
* @return \Illuminate\Http\Response
*/
public function show($id)
{
//
}
/**
* Show the form for editing the specified resource.
*
* @param int $id
* @return \Illuminate\Http\Response
*/
public function edit(Request $request, $id)
{
$categories = Category::where('parent_id', 0)
->where('digital', 0)
->with('childrenCategories')
->get();
$product = CustomerProduct::find($id);
$lang = $request->lang;
return view('frontend.user.customer.product_edit', compact('categories', 'product','lang'));
}
/**
* Update the specified resource in storage.
*
* @param \Illuminate\Http\Request $request
* @param int $id
* @return \Illuminate\Http\Response
*/
public function update(Request $request, $id)
{
$customer_product = CustomerProduct::find($id);
if($request->lang == env("DEFAULT_LANGUAGE")){
$customer_product->name = $request->name;
$customer_product->unit = $request->unit;
$customer_product->description = $request->description;
}
$customer_product->status = '1';
$customer_product->user_id = Auth::user()->id;
$customer_product->category_id = $request->category_id;
$customer_product->brand_id = $request->brand_id;
$customer_product->conditon = $request->conditon;
$customer_product->location = $request->location;
$customer_product->photos = $request->photos;
$customer_product->thumbnail_img = $request->thumbnail_img;
$tags = array();
if($request->tags[0] != null){
foreach (json_decode($request->tags[0]) as $key => $tag) {
array_push($tags, $tag->value);
}
}
$customer_product->tags = implode(',', $tags);
$customer_product->video_provider = $request->video_provider;
$customer_product->video_link = $request->video_link;
$customer_product->unit_price = $request->unit_price;
$customer_product->meta_title = $request->meta_title;
$customer_product->meta_description = $request->meta_description;
$customer_product->meta_img = $request->meta_img;
$customer_product->pdf = $request->pdf;
$customer_product->slug = strtolower($request->slug);
if($customer_product->save()){
$customer_product_translation = CustomerProductTranslation::firstOrNew(['lang' => $request->lang, 'customer_product_id' => $customer_product->id]);
$customer_product_translation->name = $request->name;
$customer_product_translation->unit = $request->unit;
$customer_product_translation->description = $request->description;
$customer_product_translation->save();
flash(translate('Product has been inserted successfully'))->success();
return back();
}
else{
flash(translate('Something went wrong'))->error();
return back();
}
}
/**
* Remove the specified resource from storage.
*
* @param int $id
* @return \Illuminate\Http\Response
*/
public function destroy($id)
{
$product = CustomerProduct::findOrFail($id);
$product->customer_product_translations()->delete();
if (CustomerProduct::destroy($id)) {
flash(translate('Product has been deleted successfully'))->success();
return redirect()->route('customer_products.index');
}
}
public function destroy_by_admin($id)
{
$product = CustomerProduct::findOrFail($id);
$product->customer_product_translations()->delete();
if (CustomerProduct::destroy($id)) {
return back();
}
}
public function updateStatus(Request $request)
{
$product = CustomerProduct::findOrFail($request->id);
$product->status = $request->status;
if($product->save()){
return 1;
}
return 0;
}
public function updatePublished(Request $request)
{
$product = CustomerProduct::findOrFail($request->id);
$product->published = $request->status;
if($product->save()){
return 1;
}
return 0;
}
public function customer_products_listing(Request $request)
{
return $this->search($request);
}
public function customer_product($slug)
{
if(get_setting('classified_product') != 1){
return redirect('/');
}
$customer_product = CustomerProduct::where('slug', $slug)->first();
if($customer_product!=null){
return view('frontend.customer_product_details', compact('customer_product'));
}
abort(404);
}
public function search(Request $request)
{
if(get_setting('classified_product') != 1){
return redirect('/');
}
$brand_id = (Brand::where('slug', $request->brand)->first() != null) ? Brand::where('slug', $request->brand)->first()->id : null;
$category_id = (Category::where('slug', $request->category)->first() != null) ? Category::where('slug', $request->category)->first()->id : null;
$sort_by = $request->sort_by;
$condition = $request->condition;
$conditions = ['published' => 1, 'status' => 1];
if($brand_id != null){
$conditions = array_merge($conditions, ['brand_id' => $brand_id]);
}
$customer_products = CustomerProduct::where($conditions);
if($category_id != null){
$category_ids = CategoryUtility::children_ids($category_id);
$category_ids[] = $category_id;
$customer_products = $customer_products->whereIn('category_id', $category_ids);
}
if($sort_by != null){
switch ($sort_by) {
case '1':
$customer_products->orderBy('created_at', 'desc');
break;
case '2':
$customer_products->orderBy('created_at', 'asc');
break;
case '3':
$customer_products->orderBy('unit_price', 'asc');
break;
case '4':
$customer_products->orderBy('unit_price', 'desc');
break;
case '5':
$customer_products->where('conditon', 'new');
break;
case '6':
$customer_products->where('conditon', 'used');
break;
default:
// code...
break;
}
}
if($condition != null){
$customer_products->where('conditon', $condition);
}
$customer_products = $customer_products->paginate(12)->appends(request()->query());
return view('frontend.customer_product_listing', compact('customer_products', 'category_id', 'brand_id', 'sort_by', 'condition'));
}
}
|