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

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