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

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