Просмотр файла app/Http/Controllers/Admin/StatusController.php

Размер файла: 4.13Kb
  1. <?php
  2.  
  3. declare(strict_types=1);
  4.  
  5. namespace App\Http\Controllers\Admin;
  6.  
  7. use App\Classes\Validator;
  8. use App\Models\Status;
  9. use Illuminate\Http\RedirectResponse;
  10. use Illuminate\Http\Request;
  11. use Illuminate\View\View;
  12.  
  13. class StatusController extends AdminController
  14. {
  15. /**
  16. * Главная страница
  17. *
  18. * @return View
  19. */
  20. public function index(): View
  21. {
  22. $statuses = Status::query()->orderByDesc('topoint')->get();
  23.  
  24. return view('admin/status/index', compact('statuses'));
  25. }
  26.  
  27. /**
  28. * Добавление статуса
  29. *
  30. * @param Request $request
  31. * @param Validator $validator
  32. *
  33. * @return View|RedirectResponse
  34. */
  35. public function create(Request $request, Validator $validator)
  36. {
  37. if ($request->isMethod('post')) {
  38. $topoint = int($request->input('topoint'));
  39. $point = int($request->input('point'));
  40. $name = $request->input('name');
  41. $color = $request->input('color');
  42.  
  43. $validator
  44. ->equal($request->input('_token'), csrf_token(), __('validator.token'))
  45. ->length($name, 3, 30, ['name' => __('statuses.status_length')])
  46. ->regex($color, '|^#+[A-f0-9]{6}$|', ['color' => __('validator.color')], false);
  47.  
  48. if ($validator->isValid()) {
  49. Status::query()->create([
  50. 'topoint' => $topoint,
  51. 'point' => $point,
  52. 'name' => $name,
  53. 'color' => $color,
  54. ]);
  55.  
  56. setFlash('success', __('statuses.status_success_added'));
  57.  
  58. return redirect('admin/status');
  59. }
  60.  
  61. setInput($request->all());
  62. setFlash('danger', $validator->getErrors());
  63. }
  64.  
  65. return view('admin/status/create');
  66. }
  67.  
  68. /**
  69. * Редактирование статуса
  70. *
  71. * @param Request $request
  72. * @param Validator $validator
  73. *
  74. * @return View|RedirectResponse
  75. */
  76. public function edit(Request $request, Validator $validator)
  77. {
  78. $id = int($request->input('id'));
  79.  
  80. $status = Status::query()->find($id);
  81.  
  82. if (! $status) {
  83. abort(404, __('statuses.status_not_found'));
  84. }
  85.  
  86. if ($request->isMethod('post')) {
  87. $topoint = int($request->input('topoint'));
  88. $point = int($request->input('point'));
  89. $name = $request->input('name');
  90. $color = $request->input('color');
  91.  
  92. $validator
  93. ->equal($request->input('_token'), csrf_token(), __('validator.token'))
  94. ->length($name, 3, 30, ['name' => __('statuses.status_length')])
  95. ->regex($color, '|^#+[A-f0-9]{6}$|', ['color' => __('validator.color')], false);
  96.  
  97. if ($validator->isValid()) {
  98. $status->update([
  99. 'topoint' => $topoint,
  100. 'point' => $point,
  101. 'name' => $name,
  102. 'color' => $color,
  103. ]);
  104.  
  105. setFlash('success', __('statuses.status_success_edited'));
  106.  
  107. return redirect('admin/status');
  108. }
  109.  
  110. setInput($request->all());
  111. setFlash('danger', $validator->getErrors());
  112. }
  113.  
  114. return view('admin/status/edit', compact('status'));
  115. }
  116.  
  117. /**
  118. * Удаление статуса
  119. *
  120. * @param Request $request
  121. * @param Validator $validator
  122. *
  123. * @return RedirectResponse
  124. */
  125. public function delete(Request $request, Validator $validator): RedirectResponse
  126. {
  127. $id = int($request->input('id'));
  128.  
  129. $validator->equal($request->input('_token'), csrf_token(), __('validator.token'));
  130.  
  131. $status = Status::query()->find($id);
  132. $validator->notEmpty($status, __('statuses.status_not_found'));
  133.  
  134. if ($validator->isValid()) {
  135. $status->delete();
  136.  
  137. setFlash('success', __('statuses.status_success_deleted'));
  138. } else {
  139. setFlash('danger', $validator->getErrors());
  140. }
  141.  
  142. return redirect('admin/status');
  143. }
  144. }