Path: blob/1.0-develop/app/Http/Controllers/Admin/Servers/ServerViewController.php
10284 views
<?php12namespace Pterodactyl\Http\Controllers\Admin\Servers;34use Illuminate\View\View;5use Illuminate\Http\Request;6use Pterodactyl\Models\Nest;7use Pterodactyl\Models\Server;8use Pterodactyl\Exceptions\DisplayException;9use Pterodactyl\Http\Controllers\Controller;10use Pterodactyl\Services\Servers\EnvironmentService;11use Pterodactyl\Repositories\Eloquent\NestRepository;12use Pterodactyl\Repositories\Eloquent\NodeRepository;13use Pterodactyl\Repositories\Eloquent\MountRepository;14use Pterodactyl\Traits\Controllers\JavascriptInjection;15use Pterodactyl\Repositories\Eloquent\LocationRepository;16use Pterodactyl\Repositories\Eloquent\DatabaseHostRepository;1718class ServerViewController extends Controller19{20use JavascriptInjection;2122/**23* ServerViewController constructor.24*/25public function __construct(26private DatabaseHostRepository $databaseHostRepository,27private LocationRepository $locationRepository,28private MountRepository $mountRepository,29private NestRepository $nestRepository,30private NodeRepository $nodeRepository,31private EnvironmentService $environmentService,32) {33}3435/**36* Returns the index view for a server.37*/38public function index(Request $request, Server $server): View39{40return view('admin.servers.view.index', compact('server'));41}4243/**44* Returns the server details page.45*/46public function details(Request $request, Server $server): View47{48return view('admin.servers.view.details', compact('server'));49}5051/**52* Returns a view of server build settings.53*/54public function build(Request $request, Server $server): View55{56$allocations = $server->node->allocations->toBase();5758return view('admin.servers.view.build', [59'server' => $server,60'assigned' => $allocations->where('server_id', $server->id)->sortBy('port')->sortBy('ip'),61'unassigned' => $allocations->where('server_id', null)->sortBy('port')->sortBy('ip'),62]);63}6465/**66* Returns the server startup management page.67*68* @throws \Pterodactyl\Exceptions\Repository\RecordNotFoundException69*/70public function startup(Request $request, Server $server): View71{72$nests = $this->nestRepository->getWithEggs();73$variables = $this->environmentService->handle($server);7475$this->plainInject([76'server' => $server,77'server_variables' => $variables,78'nests' => $nests->map(function (Nest $item) {79return array_merge($item->toArray(), [80'eggs' => $item->eggs->keyBy('id')->toArray(),81]);82})->keyBy('id'),83]);8485return view('admin.servers.view.startup', compact('server', 'nests'));86}8788/**89* Returns all the databases that exist for the server.90*/91public function database(Request $request, Server $server): View92{93return view('admin.servers.view.database', [94'hosts' => $this->databaseHostRepository->all(),95'server' => $server,96]);97}9899/**100* Returns all the mounts that exist for the server.101*/102public function mounts(Request $request, Server $server): View103{104$server->load('mounts');105106return view('admin.servers.view.mounts', [107'mounts' => $this->mountRepository->getMountListForServer($server),108'server' => $server,109]);110}111112/**113* Returns the base server management page, or an exception if the server114* is in a state that cannot be recovered from.115*116* @throws DisplayException117*/118public function manage(Request $request, Server $server): View119{120if ($server->status === Server::STATUS_INSTALL_FAILED) {121throw new DisplayException('This server is in a failed install state and cannot be recovered. Please delete and re-create the server.');122}123124// Check if the panel doesn't have at least 2 nodes configured.125$nodes = $this->nodeRepository->all();126$canTransfer = false;127if (count($nodes) >= 2) {128$canTransfer = true;129}130131\JavaScript::put([132'nodeData' => $this->nodeRepository->getNodesForServerCreation(),133]);134135return view('admin.servers.view.manage', [136'server' => $server,137'locations' => $this->locationRepository->all(),138'canTransfer' => $canTransfer,139]);140}141142/**143* Returns the server deletion page.144*/145public function delete(Request $request, Server $server): View146{147return view('admin.servers.view.delete', compact('server'));148}149}150151152