Advertisement
Guest User

Untitled

a guest
Oct 15th, 2019
136
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 26.79 KB | None | 0 0
  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. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement