Path: blob/1.0-develop/app/Http/Controllers/Admin/MountController.php
10279 views
<?php12namespace Pterodactyl\Http\Controllers\Admin;34use Ramsey\Uuid\Uuid;5use Illuminate\View\View;6use Illuminate\Http\Request;7use Pterodactyl\Models\Nest;8use Illuminate\Http\Response;9use Pterodactyl\Models\Mount;10use Pterodactyl\Models\Location;11use Illuminate\Http\RedirectResponse;12use Prologue\Alerts\AlertsMessageBag;13use Illuminate\View\Factory as ViewFactory;14use Pterodactyl\Http\Controllers\Controller;15use Pterodactyl\Http\Requests\Admin\MountFormRequest;16use Pterodactyl\Repositories\Eloquent\MountRepository;17use Pterodactyl\Contracts\Repository\NestRepositoryInterface;18use Pterodactyl\Contracts\Repository\LocationRepositoryInterface;1920class MountController extends Controller21{22/**23* MountController constructor.24*/25public function __construct(26protected AlertsMessageBag $alert,27protected NestRepositoryInterface $nestRepository,28protected LocationRepositoryInterface $locationRepository,29protected MountRepository $repository,30protected ViewFactory $view,31) {32}3334/**35* Return the mount overview page.36*/37public function index(): View38{39return view('admin.mounts.index', [40'mounts' => $this->repository->getAllWithDetails(),41]);42}4344/**45* Return the mount view page.46*47* @throws \Pterodactyl\Exceptions\Repository\RecordNotFoundException48*/49public function view(string $id): View50{51$nests = Nest::query()->with('eggs')->get();52$locations = Location::query()->with('nodes')->get();5354return view('admin.mounts.view', [55'mount' => $this->repository->getWithRelations($id),56'nests' => $nests,57'locations' => $locations,58]);59}6061/**62* Handle request to create new mount.63*64* @throws \Throwable65*/66public function create(MountFormRequest $request): RedirectResponse67{68$model = (new Mount())->fill($request->validated());69$model->forceFill(['uuid' => Uuid::uuid4()->toString()]);7071$model->saveOrFail();72$mount = $model->fresh();7374$this->alert->success('Mount was created successfully.')->flash();7576return redirect()->route('admin.mounts.view', $mount->id);77}7879/**80* Handle request to update or delete location.81*82* @throws \Throwable83*/84public function update(MountFormRequest $request, Mount $mount): RedirectResponse85{86if ($request->input('action') === 'delete') {87return $this->delete($mount);88}8990$mount->forceFill($request->validated())->save();9192$this->alert->success('Mount was updated successfully.')->flash();9394return redirect()->route('admin.mounts.view', $mount->id);95}9697/**98* Delete a location from the system.99*100* @throws \Exception101*/102public function delete(Mount $mount): RedirectResponse103{104$mount->delete();105106return redirect()->route('admin.mounts');107}108109/**110* Adds eggs to the mount's many-to-many relation.111*/112public function addEggs(Request $request, Mount $mount): RedirectResponse113{114$validatedData = $request->validate([115'eggs' => 'required|exists:eggs,id',116]);117118$eggs = $validatedData['eggs'] ?? [];119if (count($eggs) > 0) {120$mount->eggs()->attach($eggs);121}122123$this->alert->success('Mount was updated successfully.')->flash();124125return redirect()->route('admin.mounts.view', $mount->id);126}127128/**129* Adds nodes to the mount's many-to-many relation.130*/131public function addNodes(Request $request, Mount $mount): RedirectResponse132{133$data = $request->validate(['nodes' => 'required|exists:nodes,id']);134135$nodes = $data['nodes'] ?? [];136if (count($nodes) > 0) {137$mount->nodes()->attach($nodes);138}139140$this->alert->success('Mount was updated successfully.')->flash();141142return redirect()->route('admin.mounts.view', $mount->id);143}144145/**146* Deletes an egg from the mount's many-to-many relation.147*/148public function deleteEgg(Mount $mount, int $egg_id): Response149{150$mount->eggs()->detach($egg_id);151152return response('', 204);153}154155/**156* Deletes a node from the mount's many-to-many relation.157*/158public function deleteNode(Mount $mount, int $node_id): Response159{160$mount->nodes()->detach($node_id);161162return response('', 204);163}164}165166167