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

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