SHARE
TWEET

Untitled

a guest Oct 15th, 2019 72 Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. <?php
  2.  
  3.     namespace App\Http\Controllers\Backend\Management;
  4.  
  5.     use Illuminate\Http\Request;
  6.     use Illuminate\Pagination\Paginator;
  7.     use App\Http\Controllers\Controller;
  8.  
  9.     use App\Models\ProductBonus;
  10.     use App\Models\Product;
  11.     use App\Models\ProductItem;
  12.     use App\Models\Setting;
  13.     use App\Models\Translation;
  14.    
  15.     use App\Rules\RuleProductCategoryExists;
  16.  
  17.     use Validator;
  18.    
  19.     class ProductsController extends Controller
  20.     {
  21.         public function __construct() {
  22.             $this->middleware('backend');
  23.             $this->middleware('permission:manage_products');
  24.         }
  25.  
  26.         public function deleteProduct($id) {
  27.             Product::where('id', $id)->delete();
  28.             ProductItem::where('product_id', $id)->delete();
  29.  
  30.             return redirect()->route('backend-management-products');
  31.         }
  32.  
  33.         public function deleteBonus($id, $bid) {
  34.             $bonus = ProductBonus::where('id', $bid)->get()->first();
  35.             if($bonus != null) {
  36.                 $bonus->delete();
  37.             }
  38.  
  39.             return redirect()->route('backend-management-product-bonus', $id);
  40.         }
  41.  
  42.         public function showProductBonusPage(Request $request, $id) {
  43.             if($request->getMethod() == 'POST') {
  44.                 $ok = false;
  45.  
  46.                 if($request->get('settings_bonus_amount_new') && $request->get('settings_bonus_percent_new')) {
  47.                     $Namount = $request->input('settings_bonus_amount_new');
  48.                     $Npercent = $request->input('settings_bonus_percent_new');
  49.    
  50.                     if(strlen($Namount) && strlen($Npercent)) {
  51.                         ProductBonus::create([
  52.                             'min_amount' => $Namount,
  53.                             'product_id' => $id,
  54.                             'percent' => $Npercent
  55.                         ]);
  56.  
  57.                         $ok = true;
  58.                     }
  59.                 }
  60.  
  61.                 if($request->get('settings_bonus_ids')) {
  62.                     $ids = explode(',', $request->input('settings_bonus_ids'));
  63.  
  64.                     foreach($ids as $idx) {
  65.                         if($request->get('settings_bonus_amount_' . $idx) && $request->get('settings_bonus_percent_' . $idx)) {
  66.                             $amount = $request->input('settings_bonus_amount_' . $idx);
  67.                             $percent = $request->input('settings_bonus_percent_' . $idx);
  68.  
  69.                             $bonus = ProductBonus::where('id', $idx)->get()->first();
  70.                             if($bonus != null) {
  71.                                 $bonus->update([
  72.                                     'min_amount' => $amount,
  73.                                     'percent' => $percent
  74.                                 ]);
  75.                             }
  76.  
  77.                             $ok = true;
  78.                         }
  79.                     }
  80.                 }
  81.  
  82.  
  83.                 if($ok) {
  84.                     return redirect()->route('backend-management-product-bonus', $id)->with([
  85.                         'successMessage' => __('backend/main.changes_successfully')
  86.                     ]);
  87.                 }
  88.             }
  89.  
  90.             $bbs = ProductBonus::where('product_id', $id)->orderByDesc('min_amount')->get();
  91.  
  92.             $ids = [];
  93.             foreach($bbs as $b) {
  94.                 $ids[] = $b->id;
  95.             }
  96.  
  97.             return view('backend.management.products.bonus', [
  98.                 'bbs' => $bbs,
  99.                 'pID' => $id,
  100.                 'Ids' => implode(',',  $ids)
  101.             ]);
  102.         }
  103.  
  104.         public function deleteProductItem($id) {
  105.             $productItem = ProductItem::where('id', $id)->get()->first();
  106.  
  107.             if($productItem != null) {
  108.                 $product = Product::where('id', $productItem->product_id)->get()->first();
  109.  
  110.                 $productItem->delete();
  111.  
  112.                 if($product != null) {
  113.                     return redirect()->route('backend-management-product-database', $product->id);
  114.                 }
  115.             }
  116.  
  117.             return redirect()->route('backend-management-products');
  118.         }
  119.  
  120.         public function editProductItem(Request $request, $id) {
  121.             $productItem = ProductItem::where('id', $id)->get()->first();
  122.  
  123.             if($productItem == null) {
  124.                 return redirect()->route('backend-management-products');
  125.             }
  126.  
  127.             if ($request->getMethod() == 'POST') {
  128.                 $productItem = ProductItem::where('id', $id)->get()->first();
  129.  
  130.                     if($productItem != null) {
  131.                         $validator = Validator::make($request->all(), [
  132.                             'productitem_content' => 'required|max:50000'
  133.                         ]);
  134.        
  135.                         if(!$validator->fails()) {
  136.                             $content = $request->input('productitem_content');
  137.                          
  138.                             $productItem->update([
  139.                                 'content' => encrypt($content)
  140.                             ]);
  141.  
  142.                             return redirect()->route('backend-management-product-database-edit', $id)->with([
  143.                                 'successMessage' => 'Ă„nderungen erfolgreich vorgenommen.'
  144.                             ]);
  145.                         }
  146.        
  147.                         $request->flash();
  148.                         return redirect()->route('backend-management-product-database-edit', $id)->withErrors($validator)->withInput();
  149.                     }
  150.             }
  151.  
  152.             $product = Product::where('id', $productItem->product_id)->get()->first();
  153.            
  154.             return view('backend.management.products.database_edit', [
  155.                 'productItem' => $productItem,
  156.                 'product' => $product,
  157.                 'managementPage' => true
  158.             ]);
  159.         }
  160.  
  161.         public function showProductDatabasePageSearch(Request $request, $id, $pageNumber = 0) {
  162.             @session_start();
  163.  
  164.             $search = null;
  165.             if(isset($_SESSION['search-input']) && strlen($_SESSION['search-input']) > 0) {
  166.                 $search = $_SESSION['search-input'];
  167.             }
  168.  
  169.             $regex = false;
  170.             if(isset($_SESSION['search-regex']) && $_SESSION['search-regex'] == true) {
  171.                 $regex = true;
  172.             }
  173.  
  174.             if ($request->getMethod() == 'POST') {
  175.                 if($request->get('search_input')) {
  176.                     $search = $request->get('search_input');
  177.                     $_SESSION['search-input'] = $search;
  178.                 }
  179.  
  180.                 if($request->get('search_regex')) {
  181.                     $search = $request->get('search_regex');
  182.                     $_SESSION['search-regex'] = 1;
  183.                 } else {
  184.                     $_SESSION['search-regex'] = 0;
  185.                 }
  186.             }
  187.  
  188.             $databaseItems = ProductItem::where('product_id', $id)->orderByDesc('created_at')->count();
  189.            
  190.             /*
  191.             if($search != null) {
  192.                 $search = addslashes($search);
  193.  
  194.                 if($regex) {
  195.                     $database = \DB::table('products_items')
  196.                     ->where('product_id', $id)
  197.                     ->whereRaw("content REGEXP '{$search}'")
  198.                     ->orderByDesc('created_at')
  199.                     ->paginate(10, ['*'], 'page', $pageNumber);
  200.                 } else {
  201.                     $database = \DB::table('products_items')
  202.                     ->where('product_id', $id)
  203.                     ->where('content', 'LIKE', '%' . $search . '%')
  204.                     ->orderByDesc('created_at')
  205.                     ->paginate(10, ['*'], 'page', $pageNumber);
  206.                 }
  207.             }
  208.            
  209.             $database = ProductItem::where('product_id', $id)->orderByDesc('created_at')->paginate(1, ['*'], 'page', $pageNumber);
  210.             */
  211.             $db = ProductItem::where('product_id', $id)->orderByDesc('created_at')->get();
  212.  
  213.             $databaseIds = [];
  214.             foreach($db as $dbItem) {
  215.                 if($regex) {
  216.                     $content = strlen($dbItem->content) > 0 ? decrypt($dbItem->content) : '';
  217.  
  218.                     if(preg_match("/$search/", $content)) {
  219.                         $databaseIds[] = $dbItem->id;
  220.                     }
  221.                 } else {
  222.                     $content = strlen($dbItem->content) > 0 ? decrypt($dbItem->content) : '';
  223.  
  224.                     if(stripos($content, $search) !== false) {
  225.                         $databaseIds[] = $dbItem->id;
  226.                     }
  227.                 }
  228.             }
  229.  
  230.             $database = \DB::table('products_items')->whereIn('id', $databaseIds)->paginate(10, ['*'], 'page', $pageNumber);
  231.            
  232.             $databaseItemsSearch = count($database);
  233.             $databaseItems = ProductItem::where('product_id', $id)->count();
  234.            
  235.             if($pageNumber > $database->lastPage() || $pageNumber <= 0) {
  236.                 return redirect()->route('backend-management-product-database-search-with-pageNumber', [$id, 1]);
  237.             }
  238.  
  239.             $product = Product::where('id', $id)->get()->first();
  240.  
  241.             if($product == null || $product->isUnlimited()) {
  242.                 return redirect()->route('backend-management-products');
  243.             }
  244.  
  245.             return view('backend.management.products.database', [
  246.                 'product' => $product,
  247.                 'search' => htmlspecialchars($search),
  248.                 'database' => $database,
  249.                 'databaseItemsSearch' => $databaseItemsSearch,
  250.                 'databaseItems' => $databaseItems,
  251.                 'regex' => $regex,
  252.                 'managementPage' => true
  253.             ]);
  254.         }
  255.  
  256.         public function showProductDatabasePage($id, $pageNumber = 0) {
  257.             $database = ProductItem::where('product_id', $id)->orderByDesc('created_at')->paginate(10, ['*'], 'page', $pageNumber);
  258.            
  259.             $databaseItems = ProductItem::where('product_id', $id)->count();
  260.            
  261.             if($pageNumber > $database->lastPage() || $pageNumber <= 0) {
  262.                 return redirect()->route('backend-management-product-database-with-pageNumber', [$id, 1]);
  263.             }
  264.  
  265.             $product = Product::where('id', $id)->get()->first();
  266.  
  267.             if($product == null || $product->isUnlimited()) {
  268.                 return redirect()->route('backend-management-products');
  269.             }
  270.  
  271.             return view('backend.management.products.database', [
  272.                 'product' => $product,
  273.                 'database' => $database,
  274.                 'databaseItems' => $databaseItems,
  275.                 'managementPage' => true
  276.             ]);
  277.         }
  278.  
  279.         public function databaseImportTXT(Request $request) {
  280.             if ($request->getMethod() == 'POST') {
  281.                 if($request->get('product_id')) {
  282.                     $product = Product::where('id', $request->input('product_id'))->get()->first();
  283.  
  284.                     if($product != null && !$product->isUnlimited() && !$product->asWeight()) {
  285.                         $validator = Validator::make($request->all(), [
  286.                             'import_txt_input' => 'required|max:10000',
  287.                             'product_import_txt_option' => 'required|IN:seperator,linebyline'
  288.                         ]);
  289.        
  290.                         if(!$validator->fails()) {
  291.                             $input = $request->input('import_txt_input');
  292.                             $type = $request->input('product_import_txt_option');
  293.            
  294.                             $count = 0;
  295.  
  296.                             $seperator = "\n";
  297.                             if($type == 'seperator') {
  298.                                 if(!$request->get('product_import_txt_seperator_input')) {
  299.                                     $validator->getMessageBag()->add('product_import_txt_seperator_input', __('backend/management.products.database.import.txt.seperator_required'));
  300.  
  301.                                     $request->flash();
  302.                                     return redirect()->route('backend-management-product-database', $product->id)->withErrors($validator)->withInput();
  303.                                 }
  304.  
  305.                                 $seperator = $request->input('product_import_txt_seperator_input');
  306.  
  307.                                 Setting::set('import.custom.delimiter', $seperator);
  308.                             }
  309.  
  310.                             $items = explode($seperator, trim($input));
  311.                             $items = array_filter($items, 'trim');
  312.  
  313.                             foreach($items as $line) {
  314.                                 if(strlen($line) <= 0) {
  315.                                     continue;
  316.                                 }
  317.  
  318.                                 if(ProductItem::create([
  319.                                     'product_id' => $product->id,
  320.                                     'content' => encrypt($line)
  321.                                 ])) {
  322.                                     $count++;
  323.                                 }
  324.                             }
  325.  
  326.                             return redirect()->route('backend-management-product-database', $product->id)->with([
  327.                                 'successMessage' => __('backend/management.products.database.import.successfully', [
  328.                                     'count' => $count
  329.                                 ])
  330.                             ]);
  331.                         }
  332.        
  333.                         $request->flash();
  334.                         return redirect()->route('backend-management-product-database', $product->id)->withErrors($validator)->withInput();
  335.                     }
  336.                 }
  337.             }
  338.  
  339.             return redirect()->route('backend-management-products');
  340.         }
  341.  
  342.         public function databaseImportONE(Request $request) {
  343.             if ($request->getMethod() == 'POST') {
  344.                 if($request->get('product_id')) {
  345.                     $product = Product::where('id', $request->input('product_id'))->get()->first();
  346.  
  347.                     if($product != null && !$product->isUnlimited()) {
  348.                         $validator = Validator::make($request->all(), [
  349.                             'import_one_content' => 'required|max:1000'
  350.                         ]);
  351.        
  352.                         if(!$validator->fails()) {
  353.                             $content = $request->input('import_one_content');
  354.                          
  355.                             ProductItem::create([
  356.                                 'product_id' => $product->id,
  357.                                 'content' => encrypt($content)
  358.                             ]);
  359.  
  360.                             return redirect()->route('backend-management-product-database', $product->id)->with([
  361.                                 'successMessage' => __('backend/management.products.database.import.one_successfully')
  362.                             ]);
  363.                         }
  364.        
  365.                         $request->flash();
  366.                         return redirect()->route('backend-management-product-database', $product->id)->withErrors($validator)->withInput();
  367.                     }
  368.                 }
  369.             }
  370.  
  371.             return redirect()->route('backend-management-products');
  372.         }
  373.  
  374.         public function editProductForm(Request $request) {
  375.             if ($request->getMethod() == 'POST') {
  376.                 if($request->get('product_edit_id')) {
  377.                     $product = Product::where('id', $request->input('product_edit_id'))->get()->first();
  378.  
  379.                     if($product != null) {
  380.                         if($request->get('translation_lng') && strlen($request->get('translation_lng'))) {
  381.                             $lng = strtolower($request->input('translation_lng'));
  382.                             foreach(['name', 'description', 'short_description'] as $keyword) {
  383.                                 $translation = Translation::where([
  384.                                     ['lang', '=', $lng],
  385.                                     ['type', '=', 'product'],
  386.                                     ['keyword', '=', $keyword],
  387.                                     ['entry_id', '=', $product->id]
  388.                                 ])->get()->first();
  389.    
  390.                                 if($translation == null) {
  391.                                     Translation::create([
  392.                                         'lang' => $lng,
  393.                                         'entry_id' => $product->id,
  394.                                         'keyword' => $keyword,
  395.                                         'value' => $request->input('product_edit_' . $keyword) ?? '',
  396.                                         'type' => 'product'
  397.                                     ]);
  398.                                 } else {
  399.                                     $translation->update([
  400.                                         'value' => $request->input('product_edit_' . $keyword) ?? ''
  401.                                     ]);
  402.                                 }
  403.                             }
  404.  
  405.                             return redirect()->route('lang-edit-product', [$lng, $product->id])->with([
  406.                                 'successMessage' => __('backend/main.changes_successfully')
  407.                             ]);
  408.                         }
  409.  
  410.                         $validator = Validator::make($request->all(), [
  411.                             'product_edit_name' => 'required|max:255',
  412.                             'product_edit_description' => 'required|max:50000',
  413.                             'product_edit_category_id' => new RuleProductCategoryExists(),
  414.                             'product_edit_short_description' => 'required|max:255',
  415.                             'product_edit_content' => 'max:2000',
  416.                             'product_edit_price_in_cent' => 'required|integer',
  417.                             'product_edit_interval' => 'integer|min:1',
  418.                             'product_edit_old_price_in_cent' => 'nullable|integer',
  419.                             'product_edit_stock_management'=> 'required|in:normal,weight,unlimited'
  420.                         ]);
  421.        
  422.                         if(!$validator->fails()) {
  423.                             $name = $request->input('product_edit_name');
  424.                             $description = $request->input('product_edit_description');
  425.                             $short_description = $request->input('product_edit_short_description');
  426.                             $content = $request->get('product_edit_content') ? $request->input('product_edit_content') : '';
  427.                             $price_in_cent = $request->input('product_edit_price_in_cent');
  428.                             $old_price_in_cent = $request->input('product_edit_old_price_in_cent') ?? 0;
  429.                             $interval = $request->input('product_edit_interval') ?? 1;
  430.                             $category_id = $request->input('product_edit_category_id');
  431.                             $product_edit_stock_management = $request->input('product_edit_stock_management');
  432.                            
  433.                             $as_weight = 0;
  434.                             $weight_available = 0;
  435.                             $stock_management = 1;
  436.                             $weightchar = '';
  437.  
  438.                             if($product_edit_stock_management == 'unlimited') {
  439.                                 $stock_management = 0;
  440.                             } else if($product_edit_stock_management == 'weight') {
  441.                                 $stock_management = 0;
  442.                                 $as_weight = 1;
  443.  
  444.                                 if($request->get('product_edit_weight')) {
  445.                                     $weight_available = intval($request->get('product_edit_weight'));
  446.                                 }
  447.  
  448.                                 if($request->get('product_edit_weightchar')) {
  449.                                     $weightchar = $request->get('product_edit_weightchar');
  450.                                 } else {
  451.                                     $weightchar = 'g';
  452.                                 }
  453.                             }
  454.  
  455.                             $drop_needed = 0;
  456.                             if($request->get('product_edit_drop_needed')) {
  457.                                 $drop_needed = 1;
  458.                             }
  459.  
  460.                             $product->update([
  461.                                 'name' => $name,
  462.                                 'description' => encrypt($description),
  463.                                 'short_description' => encrypt($short_description),
  464.                                 'price_in_cent' => $price_in_cent,
  465.                                 'old_price_in_cent' => $old_price_in_cent,
  466.                                 'drop_needed' => $drop_needed,
  467.                                 'category_id' => $category_id,
  468.                                 'stock_management' => $stock_management,
  469.                                 'as_weight' => $as_weight,
  470.                                 'weight_available' => $weight_available,
  471.                                 'weight_char' => $weightchar,
  472.                                 'interval' => $interval,
  473.                                 'content' => encrypt($content)
  474.                             ]);
  475.        
  476.                             return redirect()->route('backend-management-product-edit', $product->id)->with([
  477.                                 'successMessage' => __('backend/main.changes_successfully')
  478.                             ]);
  479.                         }
  480.        
  481.                         $request->flash();
  482.                         return redirect()->route('backend-management-product-edit', $product->id)->withErrors($validator)->withInput();
  483.                     }
  484.                 }
  485.             }
  486.  
  487.             return redirect()->route('backend-management-products');
  488.         }
  489.  
  490.         public function showProductEditPageLang(Request $request, $lang, $id) {
  491.             if(!in_array(strtolower($lang), \App\Models\Setting::getAvailableLocales())) {
  492.                 return redirect()->route('backend-management-products');
  493.             }
  494.  
  495.             return $this->showProductEditPage($request, $id, $lang);
  496.         }
  497.  
  498.         public function showProductEditPage(Request $request, $id, $lang = null) {
  499.             $product = Product::where('id', $id)->get()->first();
  500.  
  501.             if($product == null) {
  502.                 return redirect()->route('backend-management-products');
  503.             }
  504.  
  505.             return view('backend.management.products.edit', [
  506.                 'product' => $product,
  507.                 'lang' => $lang,
  508.                 'managementPage' => true
  509.             ]);
  510.         }
  511.  
  512.         public function addProductForm(Request $request) {
  513.             if ($request->getMethod() == 'POST') {
  514.                 $validator = Validator::make($request->all(), [
  515.                     'product_add_name' => 'required|max:255',
  516.                     'product_add_description' => 'required|max:50000',
  517.                     'product_add_category_id' => new RuleProductCategoryExists(),
  518.                     'product_add_short_description' => 'required|max:255',
  519.                     'product_add_content' => 'max:2000',
  520.                     'product_add_interval' => 'integer|min:1',
  521.                     'product_add_price_in_cent' => 'required|integer',
  522.                     'product_add_old_price_in_cent' => 'nullable|integer',
  523.                     'product_add_stock_management'=> 'required|in:normal,weight,unlimited'
  524.                 ]);
  525.  
  526.                 if(!$validator->fails()) {
  527.                     $name = $request->input('product_add_name');
  528.                     $description = $request->input('product_add_description');
  529.                     $short_description = $request->input('product_add_short_description');
  530.                     $content = $request->get('product_add_content') ? $request->input('product_add_content') : '';
  531.                     $price_in_cent = $request->input('product_add_price_in_cent');
  532.                     $old_price_in_cent = $request->input('product_add_old_price_in_cent') ?? 0;
  533.                     $interval = $request->input('product_add_interval') ?? 1;
  534.                     $category_id = $request->input('product_add_category_id');
  535.                     $product_add_stock_management = $request->input('product_add_stock_management');
  536.  
  537.                     $as_weight = 0;
  538.                     $weight_available = 0;
  539.                     $stock_management = 1;
  540.                     $weightchar = '';
  541.  
  542.                     if($product_add_stock_management == 'unlimited') {
  543.                         $stock_management = 0;
  544.                     } else if($product_add_stock_management == 'weight') {
  545.                         $stock_management = 0;
  546.                         $as_weight = 1;
  547.  
  548.                         if($request->get('product_add_weight')) {
  549.                             $weight_available = intval($request->get('product_add_weight'));
  550.                         }
  551.  
  552.                         if($request->get('product_add_weightchar')) {
  553.                             $weightchar = $request->get('product_add_weightchar');
  554.                         } else {
  555.                             $weightchar = 'g';
  556.                         }
  557.                     }
  558.  
  559.                     $drop_needed = 0;
  560.                     if($request->get('product_add_drop_needed')) {
  561.                         $drop_needed = 1;
  562.                     }
  563.  
  564.                     Product::create([
  565.                         'name' => $name,
  566.                         'description' => encrypt($description),
  567.                         'short_description' => encrypt($short_description),
  568.                         'price_in_cent' => $price_in_cent,
  569.                         'old_price_in_cent' => $old_price_in_cent,
  570.                         'category_id' => $category_id,
  571.                         'drop_needed' => $drop_needed,
  572.                         'stock_management' => $stock_management,
  573.                         'interval' => $interval,
  574.                         'as_weight' => $as_weight,
  575.                         'weight_available' => $weight_available,
  576.                         'weight_char' => $weightchar,
  577.                         'content' => encrypt($content),
  578.                         'sells' => 0
  579.                     ]);
  580.  
  581.                     return redirect()->route('backend-management-product-add')->with([
  582.                         'successMessage' => __('backend/main.added_successfully')
  583.                     ]);
  584.                 }
  585.  
  586.                 $request->flash();
  587.                 return redirect()->route('backend-management-product-add')->withErrors($validator)->withInput();
  588.             }
  589.  
  590.             return redirect()->route('backend-management-product-add');
  591.         }
  592.  
  593.         public function showProductAddPage(Request $request) {
  594.             return view('backend.management.products.add', [
  595.                 'managementPage' => true
  596.             ]);
  597.         }
  598.  
  599.         public function showProductsPage(Request $request, $pageNumber = 0) {
  600.             $products = Product::orderByDesc('created_at')->paginate(10, ['*'], 'page', $pageNumber);
  601.            
  602.             if($pageNumber > $products->lastPage() || $pageNumber <= 0) {
  603.                 return redirect()->route('backend-management-products-with-pageNumber', 1);
  604.             }
  605.  
  606.             return view('backend.management.products.list', [
  607.                 'products' => $products,
  608.                 'managementPage' => true
  609.             ]);
  610.         }
  611.     }
RAW Paste Data
We use cookies for various purposes including analytics. By continuing to use Pastebin, you agree to our use of cookies as described in the Cookies Policy. OK, I Understand
 
Top