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

Размер файла: 6.22Kb
  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\Banhist;
  9. use App\Models\User;
  10. use Illuminate\Http\RedirectResponse;
  11. use Illuminate\Http\Request;
  12. use Illuminate\View\View;
  13.  
  14. class BanController extends AdminController
  15. {
  16. /**
  17. * Главная страница
  18. *
  19. * @return View
  20. */
  21. public function index(): View
  22. {
  23. return view('admin/bans/index');
  24. }
  25.  
  26. /**
  27. * Бан пользователя
  28. *
  29. * @param Request $request
  30. * @param Validator $validator
  31. *
  32. * @return View|RedirectResponse
  33. */
  34. public function edit(Request $request, Validator $validator)
  35. {
  36. $user = User::query()->where('login', $request->input('user'))->with('lastBan')->first();
  37.  
  38. if (! $user) {
  39. abort(404, __('validator.user'));
  40. }
  41.  
  42. if (in_array($user->level, User::ADMIN_GROUPS, true)) {
  43. abort(200, __('admin.bans.forbidden_ban'));
  44. }
  45.  
  46. if ($request->isMethod('post')) {
  47. $time = int($request->input('time'));
  48. $type = $request->input('type');
  49. $reason = $request->input('reason');
  50. $notice = $request->input('notice');
  51.  
  52. $validator->equal($request->input('_token'), csrf_token(), __('validator.token'))
  53. ->false($user->level === User::BANNED && $user->timeban > SITETIME, __('admin.bans.user_banned'))
  54. ->gt($time, 0, ['time' => __('admin.bans.time_not_indicated')])
  55. ->in($type, ['minutes', 'hours', 'days'], ['type' => __('admin.bans.time_not_selected')])
  56. ->length($reason, 5, 1000, ['reason' => __('validator.text')])
  57. ->length($notice, 0, 1000, ['notice' => __('validator.text_long')]);
  58.  
  59. if ($validator->isValid()) {
  60. if ($type === 'days') {
  61. $time *= 86400;
  62. } elseif ($type === 'hours') {
  63. $time *= 3600;
  64. } else {
  65. $time *= 60;
  66. }
  67.  
  68. $user->update([
  69. 'level' => User::BANNED,
  70. 'timeban' => SITETIME + $time,
  71. ]);
  72.  
  73. Banhist::query()->create([
  74. 'user_id' => $user->id,
  75. 'send_user_id' => getUser('id'),
  76. 'type' => Banhist::BAN,
  77. 'reason' => $reason,
  78. 'term' => $time,
  79. 'created_at' => SITETIME,
  80. ]);
  81.  
  82. $user->note()->updateOrCreate([], [
  83. 'text' => $notice,
  84. 'edit_user_id' => getUser('id'),
  85. 'updated_at' => SITETIME,
  86. ]);
  87.  
  88. setFlash('success', __('admin.bans.success_banned'));
  89.  
  90. return redirect('admin/bans/edit?user=' . $user->login);
  91. }
  92.  
  93. setInput($request->all());
  94. setFlash('danger', $validator->getErrors());
  95. }
  96.  
  97. return view('admin/bans/edit', compact('user'));
  98. }
  99.  
  100. /**
  101. * Изменение бана
  102. *
  103. * @param Request $request
  104. * @param Validator $validator
  105. *
  106. * @return View|RedirectResponse
  107. */
  108. public function change(Request $request, Validator $validator)
  109. {
  110. $user = User::query()->where('login', $request->input('user'))->with('lastBan')->first();
  111.  
  112. if (! $user) {
  113. abort(404, __('validator.user'));
  114. }
  115.  
  116. if ($user->level !== User::BANNED || $user->timeban < SITETIME) {
  117. abort(200, __('admin.bans.user_not_banned'));
  118. }
  119.  
  120. if ($request->isMethod('post')) {
  121. $timeban = int($request->input('timeban'));
  122. $reason = $request->input('reason');
  123.  
  124. $timeban = strtotime($timeban);
  125. $term = $timeban - SITETIME;
  126.  
  127. $validator->equal($request->input('_token'), csrf_token(), __('validator.token'))
  128. ->gt($term, 0, ['timeban' => __('admin.bans.time_empty')])
  129. ->length($reason, 5, 1000, ['reason' => __('validator.text')]);
  130.  
  131. if ($validator->isValid()) {
  132. $user->update([
  133. 'level' => User::BANNED,
  134. 'timeban' => $timeban,
  135. ]);
  136.  
  137. Banhist::query()->create([
  138. 'user_id' => $user->id,
  139. 'send_user_id' => getUser('id'),
  140. 'type' => Banhist::CHANGE,
  141. 'reason' => $reason,
  142. 'term' => $term,
  143. 'created_at' => SITETIME,
  144. ]);
  145.  
  146. setFlash('success', __('main.record_changed_success'));
  147.  
  148. return redirect('admin/bans/edit?user=' . $user->login);
  149. }
  150.  
  151. setInput($request->all());
  152. setFlash('danger', $validator->getErrors());
  153. }
  154.  
  155. return view('admin/bans/change', compact('user'));
  156. }
  157.  
  158. /**
  159. * Снятие бана
  160. *
  161. * @param Request $request
  162. * @param Validator $validator
  163. *
  164. * @return RedirectResponse
  165. */
  166. public function unban(Request $request, Validator $validator): RedirectResponse
  167. {
  168. $user = User::query()->where('login', $request->input('user'))->with('lastBan')->first();
  169.  
  170. if (! $user) {
  171. abort(404, __('validator.user'));
  172. }
  173.  
  174. if ($user->level !== User::BANNED || $user->timeban < SITETIME) {
  175. abort(200, __('admin.bans.user_not_banned'));
  176. }
  177.  
  178. $validator->equal($request->input('_token'), csrf_token(), __('validator.token'));
  179.  
  180. if ($validator->isValid()) {
  181. $user->update([
  182. 'level' => User::USER,
  183. 'timeban' => null,
  184. ]);
  185.  
  186. Banhist::query()->create([
  187. 'user_id' => $user->id,
  188. 'send_user_id' => getUser('id'),
  189. 'type' => Banhist::UNBAN,
  190. 'created_at' => SITETIME,
  191. ]);
  192.  
  193. setFlash('success', __('admin.bans.success_unbanned'));
  194. } else {
  195. setFlash('danger', $validator->getErrors());
  196. }
  197.  
  198. return redirect('admin/bans/edit?user=' . $user->login);
  199. }
  200. }