ProductController.php 2.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778
  1. <?php
  2. namespace App\Http\Controllers;
  3. use App\Jobs\Import\ImportCatalog;
  4. use App\Models\Product;
  5. use Illuminate\Http\RedirectResponse;
  6. use Illuminate\Http\Request;
  7. use Illuminate\Support\Facades\Log;
  8. use Illuminate\Support\Facades\Storage;
  9. use Illuminate\Support\Str;
  10. class ProductController extends Controller
  11. {
  12. protected array $data = [
  13. 'active' => 'catalog',
  14. 'title' => 'Каталог',
  15. ];
  16. public function index(Request $request)
  17. {
  18. $q = Product::query();
  19. // ------- setup sort and order --------------------------------------------------------------------------------
  20. $this->data['sortBy'] = (!empty($request->sortBy))
  21. ? Str::replace('_txt', '', $request->sortBy) // remove '_txt' fields modifier
  22. : Product::DEFAULT_SORT_BY;
  23. // check for sortBy is valid field
  24. $p = new Product();
  25. if(!in_array($this->data['sortBy'], $p->getFillable())) {
  26. $this->data['sortBy'] = Product::DEFAULT_SORT_BY;
  27. }
  28. // set order
  29. $this->data['orderBy'] = (!empty($request->order)) ? 'desc' : 'asc';
  30. $q->orderBy($this->data['sortBy'], $this->data['orderBy']);
  31. $this->data['products'] = $q->paginate()->withQueryString();
  32. return view('catalog.index', $this->data);
  33. }
  34. public function show()
  35. {
  36. }
  37. /**
  38. * @param Request $request
  39. * @return RedirectResponse
  40. */
  41. public function import(Request $request)
  42. {
  43. // validate data
  44. $request->validate([
  45. 'year' => 'required|integer|min:2000|max:' . (int)date('Y', strtotime('next year')),
  46. 'import_file' => 'file',
  47. ]);
  48. // load and save file
  49. $path = Str::random(2) . '/' . Str::uuid() . '.' .$request->file('import_file')->getClientOriginalExtension();
  50. Storage::disk('upload')->put($path, $request->file('import_file')->getContent());
  51. // dispatch job
  52. ImportCatalog::dispatch($path, $request->year, $request->user()->id);
  53. Log::info('ImportCatalog job created!');
  54. return redirect()->route('catalog.index')->with(['success' => 'Задача импорта успешно создана!']);
  55. }
  56. public function export(Request $request)
  57. {
  58. return redirect()->route('catalog.index')->with(['success' => 'Задача импорта успешно создана!']);
  59. }
  60. }