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

Размер файла: 1.99Kb
  1. <?php
  2.  
  3. declare(strict_types=1);
  4.  
  5. namespace App\Http\Controllers;
  6.  
  7. use App\Http\Requests\Invitation\StoreRequest;
  8. use App\Models\Invite;
  9. use App\Models\User;
  10. use App\Services\InviteService;
  11. use Illuminate\Http\RedirectResponse;
  12. use Illuminate\Http\Request;
  13. use Illuminate\Support\Str;
  14. use Illuminate\View\View;
  15.  
  16. class InvitationController extends Controller
  17. {
  18. public ?User $user;
  19.  
  20. /**
  21. * Конструктор
  22. */
  23. public function __construct(private InviteService $inviteService)
  24. {
  25. $this->middleware('check.user');
  26. $this->user = getUser();
  27.  
  28. if ($this->user && $this->user->rating < setting('invite_rating')) {
  29. abort(403, __('invitations.access'));
  30. }
  31. }
  32.  
  33. /**
  34. * Главная страница
  35. *
  36. * @param Request $request
  37. *
  38. * @return View
  39. */
  40. public function index(Request $request): View
  41. {
  42. $used = $request->input('used') ? 1 : 0;
  43.  
  44. $invites = Invite::query()
  45. ->where('user_id', $this->user->id)
  46. ->where('used', $used)
  47. ->orderByDesc('created_at')
  48. ->with('user', 'inviteUser')
  49. ->paginate(setting('listinvite'))
  50. ->appends(['used' => $used]);
  51.  
  52. $lastInvite = $this->inviteService->getLastInviteByUserId($this->user->id);
  53.  
  54. return view('invitations/index', compact('invites', 'used', 'lastInvite'));
  55. }
  56.  
  57. /**
  58. * Создание ключей
  59. *
  60. * @param StoreRequest $request
  61. *
  62. * @return RedirectResponse
  63. */
  64. public function store(StoreRequest $request)
  65. {
  66. $newKeys = [];
  67.  
  68. for ($i = 0; $i < setting('invite_count'); $i++) {
  69. $newKeys[] = [
  70. 'hash' => Str::random(),
  71. 'user_id' => $this->user->id,
  72. 'created_at' => SITETIME,
  73. ];
  74. }
  75.  
  76. Invite::query()->insert($newKeys);
  77.  
  78. return redirect('/invitations')->with('success', __('admin.invitations.keys_success_created'));
  79. }
  80. }