repository = $repository; $this->serverRepository = $serverRepository; $this->assignableAllocationService = $assignableAllocationService; } /** * Lists all of the allocations available to a server and wether or * not they are currently assigned as the primary for this server. */ public function index(GetNetworkRequest $request, Server $server): array { return $this->fractal->collection($server->allocations) ->transformWith($this->getTransformer(AllocationTransformer::class)) ->toArray(); } /** * Set the primary allocation for a server. * * @throws \Pterodactyl\Exceptions\Model\DataValidationException * @throws \Pterodactyl\Exceptions\Repository\RecordNotFoundException */ public function update(UpdateAllocationRequest $request, Server $server, Allocation $allocation): array { $original = $allocation->notes; $allocation->forceFill(['notes' => $request->input('notes')])->save(); if ($original !== $allocation->notes) { Activity::event('server:allocation.notes') ->subject($allocation) ->property(['allocation' => $allocation->toString(), 'old' => $original, 'new' => $allocation->notes]) ->log(); } return $this->fractal->item($allocation) ->transformWith($this->getTransformer(AllocationTransformer::class)) ->toArray(); } /** * Set the primary allocation for a server. * * @throws \Pterodactyl\Exceptions\Model\DataValidationException * @throws \Pterodactyl\Exceptions\Repository\RecordNotFoundException */ public function setPrimary(SetPrimaryAllocationRequest $request, Server $server, Allocation $allocation): array { $this->serverRepository->update($server->id, ['allocation_id' => $allocation->id]); Activity::event('server:allocation.primary') ->subject($allocation) ->property('allocation', $allocation->toString()) ->log(); return $this->fractal->item($allocation) ->transformWith($this->getTransformer(AllocationTransformer::class)) ->toArray(); } /** * Set the notes for the allocation for a server. *s. * * @throws \Pterodactyl\Exceptions\DisplayException */ public function store(NewAllocationRequest $request, Server $server): array { if ($server->allocations()->count() >= $server->allocation_limit) { throw new DisplayException('Cannot assign additional allocations to this server: limit has been reached.'); } $allocation = $this->assignableAllocationService->handle($server); Activity::event('server:allocation.create') ->subject($allocation) ->property('allocation', $allocation->toString()) ->log(); return $this->fractal->item($allocation) ->transformWith($this->getTransformer(AllocationTransformer::class)) ->toArray(); } /** * Delete an allocation from a server. * * @return \Illuminate\Http\JsonResponse * * @throws \Pterodactyl\Exceptions\DisplayException */ public function delete(DeleteAllocationRequest $request, Server $server, Allocation $allocation) { // Don't allow the deletion of allocations if the server does not have an // allocation limit set. if (empty($server->allocation_limit)) { throw new DisplayException('You cannot delete allocations for this server: no allocation limit is set.'); } if ($allocation->id === $server->allocation_id) { throw new DisplayException('You cannot delete the primary allocation for this server.'); } Allocation::query()->where('id', $allocation->id)->update([ 'notes' => null, 'server_id' => null, ]); Activity::event('server:allocation.delete') ->subject($allocation) ->property('allocation', $allocation->toString()) ->log(); return new JsonResponse([], JsonResponse::HTTP_NO_CONTENT); } }