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

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