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

Размер файла: 2.62Kb
  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\User;
  9. use Illuminate\Database\Eloquent\Collection;
  10. use Illuminate\Http\RedirectResponse;
  11. use Illuminate\Http\Request;
  12. use Illuminate\View\View;
  13.  
  14. class DeliveryController extends AdminController
  15. {
  16. /**
  17. * Главная страница
  18. *
  19. * @param Request $request
  20. * @param Validator $validator
  21. *
  22. * @return View|RedirectResponse
  23. */
  24. public function index(Request $request, Validator $validator)
  25. {
  26. if ($request->isMethod('post')) {
  27. $msg = $request->input('msg');
  28. $type = int($request->input('type'));
  29. $users = collect();
  30.  
  31. $validator->equal($request->input('_token'), csrf_token(), ['msg' => __('validator.token')])
  32. ->length($msg, 5, setting('comment_length'), ['msg' => __('validator.text')])
  33. ->between($type, 1, 4, __('admin.delivery.not_recipients_selected'));
  34.  
  35. // Рассылка пользователям, которые в онлайне
  36. if ($type === 1) {
  37. $users = User::query()->whereHas('online')->get();
  38. }
  39.  
  40. // Рассылка активным пользователям, которые посещали сайт менее недели назад
  41. if ($type === 2) {
  42. $users = User::query()->where('updated_at', '>', strtotime('-1 week', SITETIME))->get();
  43. }
  44.  
  45. // Рассылка администрации
  46. if ($type === 3) {
  47. $users = User::query()->whereIn('level', User::ADMIN_GROUPS)->get();
  48. }
  49.  
  50. // Рассылка всем пользователям сайта
  51. if ($type === 4) {
  52. $users = User::query()->whereIn('level', User::USER_GROUPS)->get();
  53. }
  54.  
  55. /** @var Collection $users */
  56. $users = $users->filter(static function ($value, $key) {
  57. return $value->id !== getUser('id');
  58. });
  59.  
  60. if ($users->isEmpty()) {
  61. $validator->addError(__('admin.delivery.not_recipients'));
  62. }
  63.  
  64. if ($validator->isValid()) {
  65. foreach ($users as $user) {
  66. $user->sendMessage(null, $msg);
  67. }
  68.  
  69. setFlash('success', __('admin.delivery.success_sent'));
  70.  
  71. return redirect('admin/delivery');
  72. }
  73.  
  74. setInput($request->all());
  75. setFlash('danger', $validator->getErrors());
  76. }
  77.  
  78. return view('admin/delivery/index');
  79. }
  80. }