Current File : /home/masbinta/public_html/core/app/Http/Controllers/Admin/ProductController.php |
<?php
namespace App\Http\Controllers\Admin;
use App\Helpers\Helper;
use App\Models\Product;
use App\Models\Language;
use Illuminate\Support\Str;
use App\Models\ProductImage;
use Illuminate\Http\Request;
use App\Models\ProductCategory;
use App\Http\Controllers\Controller;
use Illuminate\Support\Facades\Session;
class ProductController extends Controller
{
public $lang;
public function __construct()
{
$this->lang = Language::where('is_default',1)->first();
}
public function products(Request $request){
$lang = Language::where('code', $request->language)->first()->id;
$data['products'] = Product::where('language_id',$lang)->orderBy('id', 'DESC')->get();
return view('admin.product.index',$data);
}
public function add(){
$categoryies = ProductCategory::where('status', 1)->get();
return view('admin.product.add', compact('categoryies'));
}
public function store(Request $request){
$request->validate([
'attributes_title' => 'nullable|array',
'attributes_description' => 'nullable|array',
'language_id' => 'required',
'title' => 'required|string|unique:products,title',
'category_id' => 'required',
'description' => 'nullable|string',
'short_description' => 'nullable',
'current_price' => 'nullable|numeric',
'previous_price' => 'nullable|numeric',
'sku' => 'nullable|string|max:191|unique:products,sku',
'stock' => 'required|numeric',
'is_downloadable' => 'nullable',
'meta_tags' => 'nullable|string|max:191',
'meta_description' => 'nullable|string|max:191',
'image' => 'required|mimes:jpeg,jpg,png',
'gallery[]' => 'mimes:jpeg,jpg,png',
'status' => 'nullable|string|max:191',
'downloadable_file' => 'nullable|mimes:zip|max:10650',
]);
$product = new Product();
if($request->hasFile('image')){
$file = $request->file('image');
$extension = $file->getClientOriginalExtension();
$image = 'portfolio_'.time().rand().'.'.$extension;
$file->move('assets/front/img/', $image);
$product->image = $image;
}
if ($request->hasFile('downloadable_file')){
$file_extenstion = $request->downloadable_file->getClientOriginalExtension();
if ($file_extenstion == 'zip'){
$file_name_with_ext = $request->downloadable_file->getClientOriginalName();
$file_name = pathinfo($file_name_with_ext, PATHINFO_FILENAME);
$file_name = strtolower(Str::slug($file_name));
$file_db = $file_name . time() . '.' . $file_extenstion;
$request->downloadable_file->move('assets/front/downloadable/', $file_db);
$product->downloadable_file = $file_db;
}
}
$product->stock = $request->stock;
$product->attributes_title = implode(',,,',$request->attributes_title);
$product->attributes_description = implode(',,,',$request->attributes_description);
$product->language_id = $request->language_id;
$product->title = $request->title;
$product->slug = Str::slug($request->title);
$product->category_id = $request->category_id;
$product->description = $request->description;
$product->short_description = $request->short_description;
$product->current_price = Helper::storePrice($request->current_price);
$product->previous_price = Helper::storePrice($request->previous_price);
$product->sku = $request->sku;
$product->is_downloadable = $request->is_downloadable;
$product->tags = $request->tags;
$product->is_downloadable = $request->is_downloadable;
$product->status = $request->status;
$product->meta_tags = $request->meta_tags;
$product->meta_description = $request->meta_description;
$product->save();
$id = $product->id;
if($request->gallery){
foreach($request->gallery as $gallery){
$file = $gallery;
$extension = $file->getClientOriginalExtension();
$gimage = 'portfolio_'.time().rand().'.'.$extension;
$file->move('assets/front/img/', $gimage);
$gallery_image = new ProductImage;
$gallery_image->product_id = $id;
$gallery_image->image = $gimage;
$gallery_image->save();
}
}
$product->save();
$notification = array(
'messege' => 'Product Added successfully!',
'alert' => 'success'
);
return redirect()->back()->with('notification', $notification);
}
public function delete($id){
$product = Product::findOrFail($id);
foreach ($product->product_images as $key => $image) {
@unlink('assets/front/img/' . $image->image);
$image->delete();
}
@unlink('assets/front/img/' . $product->image);
$product->delete();
$notification = array(
'messege' => 'Product deleted successfully!',
'alert' => 'success'
);
return redirect()->back()->with('notification', $notification);
}
public function edit($id){
$product = Product::findOrFail($id);
$categoryies = ProductCategory::where('status', 1)->get();
return view('admin.product.edit', compact('product', 'categoryies'));
}
public function update(Request $request, $id){
$product = Product::findOrFail($id);
$request->validate([
'attributes_title' => 'nullable|array',
'attributes_description' => 'nullable|array',
'language_id' => 'required',
'title' => 'required|string|unique:products,title,'.$id,
'category_id' => 'required',
'description' => 'nullable|string',
'short_description' => 'nullable',
'current_price' => 'nullable|numeric',
'previous_price' => 'nullable|numeric',
'sku' => 'nullable|string|max:191|unique:products,sku,'.$id,
'stock' => 'required|numeric',
'is_downloadable' => 'nullable',
'meta_tags' => 'nullable|string|max:191',
'meta_description' => 'nullable|string|max:191',
'image' => 'mimes:jpeg,jpg,png',
'gallery[]' => 'mimes:jpeg,jpg,png',
'status' => 'nullable|string|max:191',
'downloadable_file' => 'nullable|mimes:zip|max:10650',
]);
if($request->hasFile('image')){
@unlink('assets/front/img/'. $product->image);
$file = $request->file('image');
$extension = $file->getClientOriginalExtension();
$image = 'portfolio_'.time().rand().'.'.$extension;
$file->move('assets/front/img/', $image);
$product->image = $image;
}
if ($request->hasFile('downloadable_file')){
$file_extenstion = $request->downloadable_file->getClientOriginalExtension();
if ($file_extenstion == 'zip'){
@unlink('assets/front/img/'. $product->downloadable_file);
$file_name_with_ext = $request->downloadable_file->getClientOriginalName();
$file_name = pathinfo($file_name_with_ext, PATHINFO_FILENAME);
$file_name = strtolower(Str::slug($file_name));
$file_db = $file_name . time() . '.' . $file_extenstion;
$request->downloadable_file->move('assets/front/downloadable/', $file_db);
$product->downloadable_file = $file_db;
}
}
$product->stock = $request->stock;
$product->attributes_title = implode(',,,',$request->attributes_title);
$product->attributes_description = implode(',,,',$request->attributes_description);
$product->language_id = $request->language_id;
$product->title = $request->title;
$product->slug = Str::slug($request->title);
$product->category_id = $request->category_id;
$product->description = $request->description;
$product->short_description = $request->short_description;
$product->current_price = Helper::storePrice($request->current_price);
$product->previous_price = Helper::storePrice($request->previous_price);
$product->sku = $request->sku;
$product->is_downloadable = $request->is_downloadable;
$product->tags = $request->tags;
$product->is_downloadable = $request->is_downloadable;
$product->status = $request->status;
$product->meta_tags = $request->meta_tags;
$product->meta_description = $request->meta_description;
$product->save();
$id = $product->id;
if($request->gallery){
foreach($product->product_images as $img){
@unlink('assets/front/img/'. $img->image);
$img->delete();
}
foreach($request->gallery as $gallery){
$file = $gallery;
$extension = $file->getClientOriginalExtension();
$gimage = 'product_'.time().rand().'.'.$extension;
$file->move('assets/front/img/', $gimage);
$gallery_image = new ProductImage;
$gallery_image->product_id = $id;
$gallery_image->image = $gimage;
$gallery_image->save();
}
}
$product->update();
$notification = array(
'messege' => 'Product Updated successfully!',
'alert' => 'success'
);
return redirect(route('admin.product').'?language='.$this->lang->code)->with('notification', $notification);
}
public function galleryremvoe($id)
{
$gallery = ProductImage::findOrFail($id);
@unlink('assets/front/img/'. $gallery->image);
$gallery->delete();
$mgs = __('Image remove successfully.');
return response()->json($mgs);
}
}