Complete ProductController
namespace App\Http\Controllers;
use Illuminate\Http\Request;
use App\Product;
use App\Category;
use App\Language;
use App\State;
use App\BusinessSetting;
use Auth;
use App\SubSubCategory;
use Session;
use ImageOptimizer;
class ProductController extends Controller
{
/**
* Display a listing of the resource.
*
* @return \Illuminate\Http\Response
*/
public function admin_products()
{
$type = 'In House';
$products = Product::where('digital', '0')->where('added_by', 'admin')->orderBy('created_at', 'desc')->get();
return view('products.index', compact('products','type'));
}
/**
* Display a listing of the resource.
*
* @return \Illuminate\Http\Response
*/
public function seller_products()
{
$type = 'Seller';
$products = Product::where('digital', '0')->where('added_by', 'seller')->orderBy('created_at', 'desc')->get();
return view('products.index', compact('products','type'));
}
/**
* Show the form for creating a new resource.
*
* @return \Illuminate\Http\Response
*/
public function create()
{
$categories = Category::all();
return view('products.create', compact('categories'));
}
/**
* Store a newly created resource in storage.
*
* @param \Illuminate\Http\Request $request
* @return \Illuminate\Http\Response
*/
public function store(Request $request)
{
//dd($request->all());
$product = new Product;
$product->name = $request->name;
$product->sub_name = $request->sub_name;
$product->added_by = $request->added_by;
$product->user_id = Auth::user()->id;
$product->category_id = $request->category_id;
$product->subcategory_id = $request->subcategory_id;
$product->subsubcategory_id = $request->subsubcategory_id;
$product->brand_id = $request->brand_id;
$product->state_id = json_encode($request->states);
if ($request->product_type == 'internal') {
$product->product_type = $request->product_type;
$product->available = $request->shipping_type;
$product->state_id = $request->current_state;
$shipment_details = array();
foreach ($request->states as $key => $i) {
$it['state_id'] = $i;
$it['min_num_of_day'] = $request['min_num_of_day_'.$i];
$it['max_num_of_day'] = $request['max_num_of_day_'.$i];
array_push($shipment_details, $it);
}
$product->shipment_variation = json_encode($shipment_details);
// dd($product->shipment_variation);
}
elseif ($request->product_type == 'external') {
$product->product_type = $request->product_type;
$product->available = 'external';
$shipment_details = array();
$it['min_num_of_day'] = $request['min_num_of_day_'];
$it['max_num_of_day'] = $request['max_num_of_day_'];
array_push($shipment_details, $it);
$product->shipment_variation = json_encode($shipment_details);
}
if (Auth::user()->user_type == 'admin' || Auth::user()->user_type == 'staff') {
$product->num_of_sale = rand(25,50);
}
elseif (Auth::user()->user_type == 'seller' && Auth::user()->seller->verification_status == '1') {
$product->num_of_sale = rand(15,50);
}
if (Auth::user()->user_type == 'admin' || Auth::user()->user_type == 'staff') {
$product->rating = rand(1,4);
}
elseif (Auth::user()->user_type == 'seller' && Auth::user()->seller->verification_status == '1') {
$product->rating = rand(1,2);
}
if (Auth::user()->user_type == 'admin' || Auth::user()->user_type == 'staff') {
$product->product_code = rand(100000,999999);
}
elseif (Auth::user()->user_type == 'seller' && Auth::user()->seller->verification_status == '1') {
$product->product_code = rand(100000,999990);
}
$photos = array();
if($request->hasFile('photos')){
foreach ($request->photos as $key => $photo) {
$path = $photo->store('uploads/products/photos');
array_push($photos, $path);
if($key == 0){
$product->meta_img = $path;
}
//ImageOptimizer::optimize(base_path('public/').$path);
}
$product->photos = json_encode($photos);
}
if($request->hasFile('thumbnail_img')){
$product->thumbnail_img = $request->thumbnail_img->store('uploads/products/thumbnail');
//ImageOptimizer::optimize(base_path('public/').$product->thumbnail_img);
}
if($request->hasFile('featured_img')){
$product->featured_img = $request->featured_img->store('uploads/products/featured');
//ImageOptimizer::optimize(base_path('public/').$product->featured_img);
}
if($request->hasFile('flash_deal_img')){
$product->flash_deal_img = $request->flash_deal_img->store('uploads/products/flash_deal');
//ImageOptimizer::optimize(base_path('public/').$product->flash_deal_img);
}
$product->unit = $request->unit;
$product->link_s = $request->link_s;
$product->product_notice = $request->product_notice;
$product->brand_c = $request->brand_c;
$product->kg = $request->kg;
$product->search_index = $request->search_index;
$product->tags = implode('|',$request->tags);
$product->description = $request->description;
$product->video_provider = $request->video_provider;
$product->video_link = $request->video_link;
$product->unit_price = $request->unit_price;
$product->purchase_price = $request->purchase_price;
$product->tax = $request->tax;
$product->tax_type = $request->tax_type;
$product->discount = $request->discount;
$product->discount_type = $request->discount_type;
$product->shipping_type = $request->shipping;
if($request->shipping == 'free'){
$product->shipping_cost = 0;
}
elseif ($request->shipping == 'local_pickup') {
$product->shipping_cost = $request->local_pickup_shipping_cost;
}
elseif ($request->shipping == 'flat_rate') {
$product->shipping_cost = $request->flat_shipping_cost;
}
$product->meta_title = $request->meta_title;
$product->meta_description = $request->meta_description;
if($request->hasFile('meta_img')){
$product->meta_img = $request->meta_img->store('uploads/products/meta');
//ImageOptimizer::optimize(base_path('public/').$product->meta_img);
}
if($request->hasFile('pdf')){
$product->pdf = $request->pdf->store('uploads/products/pdf');
}
$product->slug = strtolower(preg_replace('/[^A-Za-z0-9\-]/', '', str_replace(' ', '-', $request->name)).'-'.str_random(5));
if($request->has('colors_active') && $request->has('colors') && count($request->colors) > 0){
$product->colors = json_encode($request->colors);
}
else {
$colors = array();
$product->colors = json_encode($colors);
}
$choice_options = array();
if($request->has('choice')){
foreach ($request->af_no as $key => $no) {
$str = 'choice_options_'.$no;
$item['name'] = 'choice_'.$no;
$item['title'] = $request->choice[$key];
$item['options'] = explode(',', $request[$str]);
array_push($choice_options, $item);
}
}
$product->attributes = json_encode($request->choice_attributes);
$product->choice_options = json_encode($choice_options);
//$product->variations = json_encode($variations);
$additional_fields = array();
if ($request->has('af_title')) {
foreach ($request->af_title as $key => $af) {
$additional['title'] = $request->af_title[$key];
$additional['option'] = $request->af_options[$key];
array_push($additional_fields, $additional);
}
}
$product->additional_fields = json_encode($additional_fields);
$variations = array();
//combinations start
$options = array();
if($request->has('colors_active') && $request->has('colors') && count($request->colors) > 0){
$colors_active = 1;
array_push($options, $request->colors);
}
if($request->has('choice_no')){
foreach ($request->choice_no as $key => $no) {
$name = 'choice_options_'.$no;
$my_str = implode('|',$request[$name]);
array_push($options, explode(',', $my_str));
}
}
//Generates the combinations of customer choice options
$combinations = combinations($options);
if(count($combinations[0]) > 0){
foreach ($combinations as $key => $combination){
$str = '';
foreach ($combination as $key => $item){
if($key > 0 ){
$str .= '-'.str_replace(' ', '', $item);
}
else{
if($request->has('colors_active') && $request->has('colors') && count($request->colors) > 0){
$color_name = \App\Color::where('code', $item)->first()->name;
$str .= $color_name;
}
else{
$str .= str_replace(' ', '', $item);
}
}
}
$item = array();
$item['price'] = $request['price_'.str_replace('.', '_', $str)];
$item['sku'] = $request['sku_'.str_replace('.', '_', $str)];
$item['qty'] = $request['qty_'.str_replace('.', '_', $str)];
$variations[$str] = $item;
}
}
//combinations end
$product->variations = json_encode($variations);
$data = openJSONFile('en');
$data[$product->name] = $product->name;
saveJSONFile('en', $data);
if($product->save()){
flash(__('Product has been inserted successfully'))->success();
if(Auth::user()->user_type == 'admin'){
return redirect()->route('products.admin');
}
else{
return redirect()->route('seller.products');
}
}
else{
flash(__('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 admin_product_edit($id)
{
$product = Product::findOrFail(decrypt($id));
//dd(json_decode($product->price_variations)->choices_0_S_price);
$tags = json_decode($product->tags);
$categories = Category::all();
$states = State::all();
return view('products.edit', compact('product', 'categories', 'tags', 'states'));
}
/**
* Show the form for editing the specified resource.
*
* @param int $id
* @return \Illuminate\Http\Response
*/
public function seller_product_edit($id)
{
$product = Product::findOrFail(decrypt($id));
//dd(json_decode($product->price_variations)->choices_0_S_price);
$tags = json_decode($product->tags);
$categories = Category::all();
$states = State::all();
return view('products.edit', compact('product', 'categories', 'tags', 'states'));
}
/**
* Update the specified resource in storage.
*
* @param \Illuminate\Http\Request $request
* @param int $id
* @return \Illuminate\Http\Response
*/
public function update(Request $request, $id)
{
//dd($request->all());
$product = Product::findOrFail($id);
$product->name = $request->name;
$product->sub_name = $request->sub_name;
$product->category_id = $request->category_id;
$product->subcategory_id = $request->subcategory_id;
$product->subsubcategory_id = $request->subsubcategory_id;
$product->brand_id = $request->brand_id;
if ($request->product_type == 'internal') {
$product->product_type = $request->product_type;
$product->available = $request->shipping_type;
$product->state_id = $request->current_state;
$shipment_details = array();
foreach ($request->states as $key => $i) {
$it['state_id'] = $i;
$it['min_num_of_day'] = $request['min_num_of_day_'.$i];
$it['max_num_of_day'] = $request['max_num_of_day_'.$i];
array_push($shipment_details, $it);
}
$product->shipment_variation = json_encode($shipment_details);
// dd($product->shipment_variation);
}
elseif ($request->product_type == 'external') {
$product->product_type = $request->product_type;
$product->available = 'external';
$shipment_details = array();
$it['min_num_of_day'] = $request['min_num_of_day_'];
$it['max_num_of_day'] = $request['max_num_of_day_'];
array_push($shipment_details, $it);
$product->shipment_variation = json_encode($shipment_details);
}
if($request->has('previous_photos')){
$photos = $request->previous_photos;
}
else{
$photos = array();
}
if($request->hasFile('photos')){
foreach ($request->photos as $key => $photo) {
$path = $photo->store('uploads/products/photos');
array_push($photos, $path);
//ImageOptimizer::optimize(base_path('public/').$path);
}
}
$product->photos = json_encode($photos);
$product->thumbnail_img = $request->previous_thumbnail_img;
if($request->hasFile('thumbnail_img')){
$product->thumbnail_img = $request->thumbnail_img->store('uploads/products/thumbnail');
//ImageOptimizer::optimize(base_path('public/').$product->thumbnail_img);
}
$product->featured_img = $request->previous_featured_img;
if($request->hasFile('featured_img')){
$product->featured_img = $request->featured_img->store('uploads/products/featured');
//ImageOptimizer::optimize(base_path('public/').$product->featured_img);
}
$product->flash_deal_img = $request->previous_flash_deal_img;
if($request->hasFile('flash_deal_img')){
$product->flash_deal_img = $request->flash_deal_img->store('uploads/products/flash_deal');
//ImageOptimizer::optimize(base_path('public/').$product->flash_deal_img);
}
$product->unit = $request->unit;
$product->link_s = $request->link_s;
$product->product_notice = $request->product_notice;
$product->brand_c = $request->brand_c;
$product->kg = $request->kg;
$product->published = 2;
$product->search_index = $request->search_index;
$product->tags = implode('|',$request->tags);
$product->description = $request->description;
$product->video_provider = $request->video_provider;
$product->video_link = $request->video_link;
$product->unit_price = $request->unit_price;
$product->purchase_price = $request->purchase_price;
$product->tax = $request->tax;
$product->tax_type = $request->tax_type;
$product->discount = $request->discount;
$product->discount_type = $request->discount_type;
$product->meta_title = $request->meta_title;
$product->meta_description = $request->meta_description;
$product->shipping_type = $request->shipping;
if($request->shipping == 'free'){
$product->shipping_cost = 0;
}
elseif ($request->shipping == 'local_pickup') {
$product->shipping_cost = $request->local_pickup_shipping_cost;
}
elseif ($request->shipping == 'flat_rate') {
$product->shipping_cost = $request->flat_shipping_cost;
}
$product->meta_img = $request->previous_meta_img;
if($request->hasFile('meta_img')){
$product->meta_img = $request->meta_img->store('uploads/products/meta');
//ImageOptimizer::optimize(base_path('public/').$product->meta_img);
}
if($request->hasFile('pdf')){
$product->pdf = $request->pdf->store('uploads/products/pdf');
}
//$product->slug = strtolower(preg_replace('/[^A-Za-z0-9\-]/', '', str_replace(' ', '-', $request->name)).'-'.substr($product->slug, -5));
if($request->has('colors_active') && $request->has('colors') && count($request->colors) > 0){
$product->colors = json_encode($request->colors);
}
else {
$colors = array();
$product->colors = json_encode($colors);
}
$choice_options = array();
if($request->has('choice_no')){
foreach ($request->choice_no as $key => $no) {
$str = 'choice_options_'.$no;
$item['name'] = 'choice_'.$no;
$item['title'] = $request->choice[$key];
$item['options'] = explode(',', implode('|', $request[$str]));
array_push($choice_options, $item);
}
}
$product->attributes = json_encode($request->choice_attributes);
$product->choice_options = json_encode($choice_options);
foreach (Language::all() as $key => $language) {
$data = openJSONFile($language->code);
unset($data[$product->name]);
$data[$request->name] = "";
saveJSONFile($language->code, $data);
}
$variations = array();
//combinations start
$options = array();
if($request->has('colors_active') && $request->has('colors') && count($request->colors) > 0){
$colors_active = 1;
array_push($options, $request->colors);
}
if($request->has('choice_no')){
foreach ($request->choice_no as $key => $no) {
$name = 'choice_options_'.$no;
$my_str = implode('|',$request[$name]);
array_push($options, explode(',', $my_str));
}
}
$combinations = combinations($options);
if(count($combinations[0]) > 0){
foreach ($combinations as $key => $combination){
$str = '';
foreach ($combination as $key => $item){
if($key > 0 ){
$str .= '-'.str_replace(' ', '', $item);
}
else{
if($request->has('colors_active') && $request->has('colors') && count($request->colors) > 0){
$color_name = \App\Color::where('code', $item)->first()->name;
$str .= $color_name;
}
else{
$str .= str_replace(' ', '', $item);
}
}
}
$item = array();
$item['price'] = $request['price_'.str_replace('.', '_', $str)];
$item['sku'] = $request['sku_'.str_replace('.', '_', $str)];
$item['qty'] = $request['qty_'.str_replace('.', '_', $str)];
$variations[$str] = $item;
}
}
//combinations end
$product->variations = json_encode($variations);
$additional_fields = array();
if ($request->has('af_title')) {
foreach ($request->af_title as $key => $af) {
$additional['title'] = $request->af_title[$key];
$additional['option'] = $request->af_options[$key];
array_push($additional_fields, $additional);
}
}
$product->additional_fields = json_encode($additional_fields);
if($product->save()){
flash(__('Product has been updated successfully'))->success();
if(Auth::user()->user_type == 'admin'){
return redirect()->route('products.admin');
}
else{
return redirect()->route('seller.products');
}
}
else{
flash(__('Something went wrong'))->error();
return back();
}
}
/**
* Remove the specified resource from storage.
*
* @param int $id
* @return \Illuminate\Http\Response
*/
public function destroy($id)
{
$product = Product::findOrFail($id);
if(Product::destroy($id)){
foreach (Language::all() as $key => $language) {
$data = openJSONFile($language->code);
unset($data[$product->name]);
saveJSONFile($language->code, $data);
}
flash(__('Product has been deleted successfully'))->success();
if(Auth::user()->user_type == 'admin'){
return redirect()->route('products.admin');
}
else{
return redirect()->route('seller.products');
}
}
else{
flash(__('Something went wrong'))->error();
return back();
}
}
/**
* Duplicates the specified resource from storage.
*
* @param int $id
* @return \Illuminate\Http\Response
*/
public function duplicate($id)
{
$product = Product::find($id);
$product_new = $product->replicate();
$product_new->slug = substr($product_new->slug, 0, -5).str_random(5);
if($product_new->save()){
flash(__('Product has been duplicated successfully'))->success();
if(Auth::user()->user_type == 'admin'){
return redirect()->route('products.admin');
}
else{
return redirect()->route('seller.products');
}
}
else{
flash(__('Something went wrong'))->error();
return back();
}
}
public function get_products_by_subsubcategory(Request $request)
{
$products = Product::where('subsubcategory_id', $request->subsubcategory_id)->get();
return $products;
}
public function get_products_by_brand(Request $request)
{
$products = Product::where('brand_id', $request->brand_id)->get();
return view('partials.product_select', compact('products'));
}
public function updateTodaysDeal(Request $request)
{
$product = Product::findOrFail($request->id);
$product->todays_deal = $request->status;
if($product->save()){
return 1;
}
return 0;
}
public function updatePublished(Request $request)
{
$product = Product::findOrFail($request->id);
$product->published = $request->status;
if($product->save()){
return 1;
}
return 0;
}
public function updateFeatured(Request $request)
{
$product = Product::findOrFail($request->id);
$product->featured = $request->status;
if($product->save()){
return 1;
}
return 0;
}
public function sku_combination(Request $request)
{
$options = array();
if($request->has('colors_active') && $request->has('colors') && count($request->colors) > 0){
$colors_active = 1;
array_push($options, $request->colors);
}
else {
$colors_active = 0;
}
$unit_price = $request->unit_price;
$product_name = $request->name;
if($request->has('choice_no')){
foreach ($request->choice_no as $key => $no) {
$name = 'choice_options_'.$no;
$my_str = implode('|', $request[$name]);
array_push($options, explode(',', $my_str));
}
}
$combinations = combinations($options);
return view('partials.sku_combinations', compact('combinations', 'unit_price', 'colors_active', 'product_name'));
}
public function sku_combination_edit(Request $request)
{
$product = Product::findOrFail($request->id);
$options = array();
if($request->has('colors_active') && $request->has('colors') && count($request->colors) > 0){
$colors_active = 1;
array_push($options, $request->colors);
}
else {
$colors_active = 0;
}
$product_name = $request->name;
$unit_price = $request->unit_price;
if($request->has('choice_no')){
foreach ($request->choice_no as $key => $no) {
$name = 'choice_options_'.$no;
$my_str = implode('|', $request[$name]);
array_push($options, explode(',', $my_str));
}
}
$combinations = combinations($options);
return view('partials.sku_combinations_edit', compact('combinations', 'unit_price', 'colors_active', 'product_name', 'product'));
}
public function shipment_duration_form(Request $request)
{
if($request->product_type == "external") {
if (Auth::user()->user_type == 'admin' || Auth::user()->user_type == 'staff') {
return view('partials.overseas_shipment_form');
}
else
return view('frontend.partials.overseas_shipment_form');
}
elseif($request->product_type == "internal"){
if (Auth::user()->user_type == 'admin' || Auth::user()->user_type == 'staff') {
return view('frontend.partials.states_shipment_form');
}
else
return view('frontend.partials.states_shipment_form');
}
}
public function shipment_duration_form_edit(Request $request)
{
if($request->product_type == "external") {
$product = Product::where('id', $request->id)->first();
if (Auth::user()->user_type == 'admin' || Auth::user()->user_type == 'staff') {
return view('partials.overseas_shipment_form_edit', compact('product'));
}
else
return view('frontend.partials.overseas_shipment_form_edit', compact('product'));
}
elseif($request->product_type == "internal"){
$product = Product::where('id', $request->id)->first();
if (Auth::user()->user_type == 'admin' || Auth::user()->user_type == 'staff') {
return view('partials.states_shipment_form_edit', compact('product'));
}
else
return view('frontend.partials.states_shipment_form_edit', compact('product'));
}
}
public function get_shipment_form(Request $request){
$state_ids = $request->state_ids;
if (Auth::user()->user_type == 'admin' || Auth::user()->user_type == 'staff') {
return view('partials.get_shipment_form', compact('state_ids'));
}
else
return view('frontend.partials.get_shipment_form', compact('state_ids'));
}
public function get_shipment_form_edit(Request $request){
$state_ids = $request->state_ids;
$product = Product::findOrFail($request->product_id);
if (Auth::user()->user_type == 'admin' || Auth::user()->user_type == 'staff') {
return view('partials.get_shipment_form_edit', compact('state_ids', 'product'));
}
else
return view('frontend.partials.get_shipment_form_edit', compact('state_ids', 'product'));
}
}