Path: blob/1.0-develop/app/Http/Controllers/Admin/UserController.php
10284 views
<?php12namespace Pterodactyl\Http\Controllers\Admin;34use Illuminate\View\View;5use Illuminate\Http\Request;6use Pterodactyl\Models\User;7use Pterodactyl\Models\Model;8use Illuminate\Support\Collection;9use Illuminate\Http\RedirectResponse;10use Prologue\Alerts\AlertsMessageBag;11use Spatie\QueryBuilder\QueryBuilder;12use Illuminate\View\Factory as ViewFactory;13use Pterodactyl\Exceptions\DisplayException;14use Pterodactyl\Http\Controllers\Controller;15use Illuminate\Contracts\Translation\Translator;16use Pterodactyl\Services\Users\UserUpdateService;17use Pterodactyl\Traits\Helpers\AvailableLanguages;18use Pterodactyl\Services\Users\UserCreationService;19use Pterodactyl\Services\Users\UserDeletionService;20use Pterodactyl\Http\Requests\Admin\UserFormRequest;21use Pterodactyl\Http\Requests\Admin\NewUserFormRequest;22use Pterodactyl\Contracts\Repository\UserRepositoryInterface;2324class UserController extends Controller25{26use AvailableLanguages;2728/**29* UserController constructor.30*/31public function __construct(32protected AlertsMessageBag $alert,33protected UserCreationService $creationService,34protected UserDeletionService $deletionService,35protected Translator $translator,36protected UserUpdateService $updateService,37protected UserRepositoryInterface $repository,38protected ViewFactory $view,39) {40}4142/**43* Display user index page.44*/45public function index(Request $request): View46{47$users = QueryBuilder::for(48User::query()->select('users.*')49->selectRaw('COUNT(DISTINCT(subusers.id)) as subuser_of_count')50->selectRaw('COUNT(DISTINCT(servers.id)) as servers_count')51->leftJoin('subusers', 'subusers.user_id', '=', 'users.id')52->leftJoin('servers', 'servers.owner_id', '=', 'users.id')53->groupBy('users.id')54)55->allowedFilters(['username', 'email', 'uuid'])56->defaultSort('-root_admin')57->allowedSorts(['id', 'uuid'])58->paginate(50);5960return view('admin.users.index', ['users' => $users]);61}6263/**64* Display new user page.65*/66public function create(): View67{68return view('admin.users.new', [69'languages' => $this->getAvailableLanguages(true),70]);71}7273/**74* Display user view page.75*/76public function view(User $user): View77{78return view('admin.users.view', [79'user' => $user,80'languages' => $this->getAvailableLanguages(true),81]);82}8384/**85* Delete a user from the system.86*87* @throws \Exception88* @throws DisplayException89*/90public function delete(Request $request, User $user): RedirectResponse91{92if ($request->user()->is($user)) {93throw new DisplayException(__('admin/user.exceptions.delete_self'));94}9596$this->deletionService->handle($user);9798return redirect()->route('admin.users');99}100101/**102* Create a user.103*104* @throws \Exception105* @throws \Throwable106*/107public function store(NewUserFormRequest $request): RedirectResponse108{109$user = $this->creationService->handle($request->normalize());110$this->alert->success($this->translator->get('admin/user.notices.account_created'))->flash();111112return redirect()->route('admin.users.view', $user->id);113}114115/**116* Update a user on the system.117*118* @throws \Pterodactyl\Exceptions\Model\DataValidationException119* @throws \Pterodactyl\Exceptions\Repository\RecordNotFoundException120*/121public function update(UserFormRequest $request, User $user): RedirectResponse122{123$this->updateService124->setUserLevel(User::USER_LEVEL_ADMIN)125->handle($user, $request->normalize());126127$this->alert->success(trans('admin/user.notices.account_updated'))->flash();128129return redirect()->route('admin.users.view', $user->id);130}131132/**133* Get a JSON response of users on the system.134*/135public function json(Request $request): Model|Collection136{137$users = QueryBuilder::for(User::query())->allowedFilters(['email'])->paginate(25);138139// Handle single user requests.140if ($request->query('user_id')) {141$user = User::query()->findOrFail($request->input('user_id'));142// @phpstan-ignore-next-line property.notFound143$user->md5 = md5(strtolower($user->email));144145return $user;146}147148return $users->map(function ($item) {149// @phpstan-ignore-next-line property.notFound150$item->md5 = md5(strtolower($item->email));151152return $item;153});154}155}156157158