latest('created_at') ->paginate(20); return view('admin.invitations.index', compact('invitations')); } public function create(): View { $players = Player::with('team')->active()->orderBy('last_name')->get(); return view('admin.invitations.create', compact('players')); } public function store(Request $request): RedirectResponse { $validated = $request->validate([ 'email' => ['nullable', 'email', 'max:255'], 'expires_in_days' => ['required', 'integer', 'min:1', 'max:90'], 'player_ids' => ['nullable', 'array'], 'player_ids.*' => ['exists:players,id'], ]); $invitation = $this->invitationService->createInvitation($validated, $request->user()); $link = route('register', $invitation->raw_token); ActivityLog::logWithChanges('created', __('admin.log_invitation_created', ['email' => $validated['email'] ?? '–']), 'User', null, null, ['email' => $validated['email'] ?? '–']); return redirect()->route('admin.invitations.index') ->with('success', __('admin.invitation_created', ['link' => $link])); } public function destroy(Invitation $invitation): RedirectResponse { if ($invitation->isAccepted()) { return back()->with('error', __('admin.invitation_already_used')); } $invitation->delete(); return back()->with('success', __('admin.invitation_deleted')); } }