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

Размер файла: 6.09Kb
  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\Invite;
  9. use App\Models\User;
  10. use Illuminate\Http\RedirectResponse;
  11. use Illuminate\Http\Request;
  12. use Illuminate\Support\Str;
  13. use Illuminate\View\View;
  14.  
  15. class InvitationController extends AdminController
  16. {
  17. /**
  18. * Главная страница
  19. *
  20. * @param Request $request
  21. *
  22. * @return View
  23. */
  24. public function index(Request $request): View
  25. {
  26. $used = $request->input('used') ? 1 : 0;
  27.  
  28. $invites = Invite::query()
  29. ->where('used', $used)
  30. ->orderByDesc('created_at')
  31. ->with('user', 'inviteUser')
  32. ->paginate(setting('listinvite'))
  33. ->appends(['used' => $used]);
  34.  
  35. return view('admin/invitations/index', compact('invites', 'used'));
  36. }
  37.  
  38. /**
  39. * Создание ключей
  40. *
  41. * @param Request $request
  42. * @param Validator $validator
  43. *
  44. * @return View|RedirectResponse
  45. */
  46. public function create(Request $request, Validator $validator)
  47. {
  48. if ($request->isMethod('post')) {
  49. $keys = int($request->input('keys'));
  50.  
  51. $validator->equal($request->input('_token'), csrf_token(), __('validator.token'))
  52. ->notEmpty($keys, ['keys' => __('admin.invitations.keys_not_amount')]);
  53.  
  54. if ($validator->isValid()) {
  55. $newKeys = [];
  56.  
  57. for ($i = 0; $i < $keys; $i++) {
  58. $newKeys[] = [
  59. 'hash' => Str::random(),
  60. 'user_id' => getUser('id'),
  61. 'created_at' => SITETIME,
  62. ];
  63. }
  64.  
  65. Invite::query()->insert($newKeys);
  66.  
  67. setFlash('success', __('admin.invitations.keys_success_created'));
  68.  
  69. return redirect('admin/invitations');
  70. }
  71.  
  72. setInput($request->all());
  73. setFlash('danger', $validator->getErrors());
  74. }
  75.  
  76. $listKeys = [1, 2, 3, 4, 5, 10, 15, 20, 30, 40, 50];
  77.  
  78. return view('admin/invitations/create', compact('listKeys'));
  79. }
  80.  
  81. /**
  82. * Отправка ключей пользователю
  83. *
  84. * @param Request $request
  85. * @param Validator $validator
  86. *
  87. * @return RedirectResponse
  88. */
  89. public function send(Request $request, Validator $validator): RedirectResponse
  90. {
  91. $userkeys = int($request->input('userkeys'));
  92.  
  93. /* @var User $user */
  94. $user = getUserByLogin($request->input('user'));
  95.  
  96. $validator->equal($request->input('_token'), csrf_token(), __('validator.token'))
  97. ->notEmpty($user, ['user' => __('validator.user')])
  98. ->notEmpty($userkeys, ['userkeys' => __('admin.invitations.keys_not_amount')]);
  99.  
  100. if ($validator->isValid()) {
  101. $newKeys = [];
  102. $listKeys = [];
  103.  
  104. for ($i = 0; $i < $userkeys; $i++) {
  105. $key = Str::random();
  106.  
  107. $listKeys[] = $key;
  108.  
  109. $newKeys[] = [
  110. 'hash' => $key,
  111. 'user_id' => $user->id,
  112. 'created_at' => SITETIME,
  113. ];
  114. }
  115.  
  116. Invite::query()->insert($newKeys);
  117.  
  118. $text = textNotice('invite', ['key' => implode(', ', $listKeys)]);
  119. $user->sendMessage(null, $text);
  120.  
  121. setFlash('success', __('admin.invitations.keys_success_sent'));
  122.  
  123. return redirect('admin/invitations');
  124. }
  125.  
  126. setInput($request->all());
  127. setFlash('danger', $validator->getErrors());
  128.  
  129. return redirect('admin/invitations/create');
  130. }
  131.  
  132. /**
  133. * Отправка ключей активным пользователям
  134. *
  135. * @param Request $request
  136. * @param Validator $validator
  137. *
  138. * @return RedirectResponse
  139. */
  140. public function mail(Request $request, Validator $validator): RedirectResponse
  141. {
  142. $validator->equal($request->input('_token'), csrf_token(), __('validator.token'))
  143. ->true(isAdmin(User::BOSS), __('main.page_only_owner'));
  144.  
  145. $users = User::query()->where('updated_at', '>', strtotime('-1 week', SITETIME))->get();
  146.  
  147. $users = $users->filter(static function ($value, $key) {
  148. return $value->id !== getUser('id');
  149. });
  150.  
  151. $validator->false($users->isEmpty(), __('admin.invitations.keys_empty_recipients'));
  152.  
  153. if ($validator->isValid()) {
  154. /** @var User $user */
  155. foreach ($users as $user) {
  156. $key = Str::random(mt_rand(12, 15));
  157.  
  158. Invite::query()->create([
  159. 'hash' => $key,
  160. 'user_id' => $user->id,
  161. 'created_at' => SITETIME,
  162. ]);
  163.  
  164. $text = textNotice('invite', compact('key'));
  165. $user->sendMessage(null, $text);
  166. }
  167.  
  168. setFlash('success', __('admin.invitations.keys_success_sent') . ' (' . $users->count() . ')');
  169.  
  170. return redirect('admin/invitations');
  171. }
  172.  
  173. setInput($request->all());
  174. setFlash('danger', $validator->getErrors());
  175.  
  176. return redirect('admin/invitations/create');
  177. }
  178.  
  179. /**
  180. * Удаление ключей
  181. *
  182. * @param Request $request
  183. * @param Validator $validator
  184. *
  185. * @return RedirectResponse
  186. */
  187. public function delete(Request $request, Validator $validator): RedirectResponse
  188. {
  189. $page = int($request->input('page', 1));
  190. $del = intar($request->input('del'));
  191. $used = $request->input('used') ? 1 : 0;
  192.  
  193. $validator->equal($request->input('_token'), csrf_token(), __('validator.token'))
  194. ->true($del, __('validator.deletion'));
  195.  
  196. if ($validator->isValid()) {
  197. Invite::query()->whereIn('id', $del)->delete();
  198.  
  199. setFlash('success', __('admin.invitations.keys_success_deleted'));
  200. } else {
  201. setFlash('danger', $validator->getErrors());
  202. }
  203.  
  204. return redirect('admin/invitations?used=' . $used . '&page=' . $page);
  205. }
  206. }