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

Размер файла: 3.21Kb
  1. <?php
  2.  
  3. declare(strict_types=1);
  4.  
  5. namespace App\Http\Controllers;
  6.  
  7. use App\Classes\Validator;
  8. use App\Models\Transfer;
  9. use App\Models\User;
  10. use Illuminate\Http\RedirectResponse;
  11. use Illuminate\Support\Facades\DB;
  12. use Illuminate\Http\Request;
  13. use Illuminate\View\View;
  14. use Throwable;
  15.  
  16. class TransferController extends Controller
  17. {
  18. /**
  19. * @var User
  20. */
  21. public $user;
  22.  
  23. /**
  24. * Конструктор
  25. */
  26. public function __construct()
  27. {
  28. $this->middleware('check.user');
  29.  
  30. $this->middleware(function ($request, $next) {
  31. $login = $request->input('user');
  32. $this->user = getUserByLogin($login);
  33.  
  34. return $next($request);
  35. });
  36. }
  37.  
  38. /**
  39. * Главная страница
  40. *
  41. * @return View
  42. */
  43. public function index(): View
  44. {
  45. return view('transfers/index', ['user' => $this->user]);
  46. }
  47.  
  48. /**
  49. * Перевод денег
  50. *
  51. * @param Request $request
  52. * @param Validator $validator
  53. *
  54. * @return RedirectResponse
  55. * @throws Throwable
  56. */
  57. public function send(Request $request, Validator $validator): RedirectResponse
  58. {
  59. $money = int($request->input('money'));
  60. $msg = $request->input('msg');
  61.  
  62. $validator
  63. ->equal($request->input('_token'), csrf_token(), ['msg' => __('validator.token')])
  64. ->true($this->user, ['user' => __('validator.user')])
  65. ->length($msg, 0, setting('comment_length'), ['msg' => __('validator.comment_long')])
  66. ->gte(getUser('point'), setting('sendmoneypoint'), ['money' => __('transfers.transfer_point', ['point' => plural(setting('sendmoneypoint'), setting('scorename'))])])
  67. ->gt($money, 0, ['money' => __('transfers.transfer_wrong_amount')])
  68. ->lte($money, getUser('money'), ['money' => __('transfers.transfer_not_money')]);
  69.  
  70. if ($this->user) {
  71. $validator
  72. ->notEqual($this->user->id, getUser('id'), ['user' => __('transfers.transfer_yourself')])
  73. ->false($this->user->isIgnore(getUser()), ['user' => __('ignores.you_are_ignoring')]);
  74. }
  75.  
  76. if ($validator->isValid()) {
  77. DB::transaction(function () use ($money, $msg) {
  78. getUser()->decrement('money', $money);
  79. $this->user->increment('money', $money);
  80.  
  81. $comment = $msg ?? __('ignores.not_specified');
  82. $text = textNotice('transfer', ['login' => getUser('login'), 'money' => plural($money, setting('moneyname')), 'comment' => $comment]);
  83. $this->user->sendMessage(null, $text);
  84.  
  85. // Запись логов
  86. Transfer::query()->create([
  87. 'user_id' => getUser('id'),
  88. 'recipient_id' => $this->user->id,
  89. 'text' => $comment,
  90. 'total' => $money,
  91. 'created_at' => SITETIME
  92. ]);
  93. });
  94.  
  95. setFlash('success', __('transfers.transfer_success_completed'));
  96. } else {
  97. setInput($request->all());
  98. setFlash('danger', $validator->getErrors());
  99. }
  100.  
  101. return redirect('transfers');
  102. }
  103. }