- <?php
-
- declare(strict_types=1);
-
- namespace App\Http\Controllers\Admin;
-
- use App\Classes\Validator;
- use App\Models\Invite;
- use App\Models\User;
- use Illuminate\Http\RedirectResponse;
- use Illuminate\Http\Request;
- use Illuminate\Support\Str;
- use Illuminate\View\View;
-
- class InvitationController extends AdminController
- {
- /**
- * Главная страница
- *
- * @param Request $request
- *
- * @return View
- */
- public function index(Request $request): View
- {
- $used = $request->input('used') ? 1 : 0;
-
- $invites = Invite::query()
- ->where('used', $used)
- ->orderByDesc('created_at')
- ->with('user', 'inviteUser')
- ->paginate(setting('listinvite'))
- ->appends(['used' => $used]);
-
- return view('admin/invitations/index', compact('invites', 'used'));
- }
-
- /**
- * Создание ключей
- *
- * @param Request $request
- * @param Validator $validator
- *
- * @return View|RedirectResponse
- */
- public function create(Request $request, Validator $validator)
- {
- if ($request->isMethod('post')) {
- $keys = int($request->input('keys'));
-
- $validator->equal($request->input('_token'), csrf_token(), __('validator.token'))
- ->notEmpty($keys, ['keys' => __('admin.invitations.keys_not_amount')]);
-
- if ($validator->isValid()) {
- $newKeys = [];
-
- for ($i = 0; $i < $keys; $i++) {
- $newKeys[] = [
- 'hash' => Str::random(),
- 'user_id' => getUser('id'),
- 'created_at' => SITETIME,
- ];
- }
-
- Invite::query()->insert($newKeys);
-
- setFlash('success', __('admin.invitations.keys_success_created'));
-
- return redirect('admin/invitations');
- }
-
- setInput($request->all());
- setFlash('danger', $validator->getErrors());
- }
-
- $listKeys = [1, 2, 3, 4, 5, 10, 15, 20, 30, 40, 50];
-
- return view('admin/invitations/create', compact('listKeys'));
- }
-
- /**
- * Отправка ключей пользователю
- *
- * @param Request $request
- * @param Validator $validator
- *
- * @return RedirectResponse
- */
- public function send(Request $request, Validator $validator): RedirectResponse
- {
- $userkeys = int($request->input('userkeys'));
-
- /* @var User $user */
- $user = getUserByLogin($request->input('user'));
-
- $validator->equal($request->input('_token'), csrf_token(), __('validator.token'))
- ->notEmpty($user, ['user' => __('validator.user')])
- ->notEmpty($userkeys, ['userkeys' => __('admin.invitations.keys_not_amount')]);
-
- if ($validator->isValid()) {
- $newKeys = [];
- $listKeys = [];
-
- for ($i = 0; $i < $userkeys; $i++) {
- $key = Str::random();
-
- $listKeys[] = $key;
-
- $newKeys[] = [
- 'hash' => $key,
- 'user_id' => $user->id,
- 'created_at' => SITETIME,
- ];
- }
-
- Invite::query()->insert($newKeys);
-
- $text = textNotice('invite', ['key' => implode(', ', $listKeys)]);
- $user->sendMessage(null, $text);
-
- setFlash('success', __('admin.invitations.keys_success_sent'));
-
- return redirect('admin/invitations');
- }
-
- setInput($request->all());
- setFlash('danger', $validator->getErrors());
-
- return redirect('admin/invitations/create');
- }
-
- /**
- * Отправка ключей активным пользователям
- *
- * @param Request $request
- * @param Validator $validator
- *
- * @return RedirectResponse
- */
- public function mail(Request $request, Validator $validator): RedirectResponse
- {
- $validator->equal($request->input('_token'), csrf_token(), __('validator.token'))
- ->true(isAdmin(User::BOSS), __('main.page_only_owner'));
-
- $users = User::query()->where('updated_at', '>', strtotime('-1 week', SITETIME))->get();
-
- $users = $users->filter(static function ($value, $key) {
- return $value->id !== getUser('id');
- });
-
- $validator->false($users->isEmpty(), __('admin.invitations.keys_empty_recipients'));
-
- if ($validator->isValid()) {
- /** @var User $user */
- foreach ($users as $user) {
- $key = Str::random(mt_rand(12, 15));
-
- Invite::query()->create([
- 'hash' => $key,
- 'user_id' => $user->id,
- 'created_at' => SITETIME,
- ]);
-
- $text = textNotice('invite', compact('key'));
- $user->sendMessage(null, $text);
- }
-
- setFlash('success', __('admin.invitations.keys_success_sent') . ' (' . $users->count() . ')');
-
- return redirect('admin/invitations');
- }
-
- setInput($request->all());
- setFlash('danger', $validator->getErrors());
-
- return redirect('admin/invitations/create');
- }
-
- /**
- * Удаление ключей
- *
- * @param Request $request
- * @param Validator $validator
- *
- * @return RedirectResponse
- */
- public function delete(Request $request, Validator $validator): RedirectResponse
- {
- $page = int($request->input('page', 1));
- $del = intar($request->input('del'));
- $used = $request->input('used') ? 1 : 0;
-
- $validator->equal($request->input('_token'), csrf_token(), __('validator.token'))
- ->true($del, __('validator.deletion'));
-
- if ($validator->isValid()) {
- Invite::query()->whereIn('id', $del)->delete();
-
- setFlash('success', __('admin.invitations.keys_success_deleted'));
- } else {
- setFlash('danger', $validator->getErrors());
- }
-
- return redirect('admin/invitations?used=' . $used . '&page=' . $page);
- }
- }