Book a Demo!
CoCalc Logo Icon
StoreFeaturesDocsShareSupportNewsAboutPoliciesSign UpSign In
pterodactyl
GitHub Repository: pterodactyl/panel
Path: blob/1.0-develop/app/Services/Users/UserDeletionService.php
10277 views
1
<?php
2
3
namespace Pterodactyl\Services\Users;
4
5
use Pterodactyl\Models\User;
6
use Pterodactyl\Exceptions\DisplayException;
7
use Illuminate\Contracts\Translation\Translator;
8
use Pterodactyl\Contracts\Repository\UserRepositoryInterface;
9
use Pterodactyl\Contracts\Repository\ServerRepositoryInterface;
10
11
class UserDeletionService
12
{
13
/**
14
* UserDeletionService constructor.
15
*/
16
public function __construct(
17
protected UserRepositoryInterface $repository,
18
protected ServerRepositoryInterface $serverRepository,
19
protected Translator $translator,
20
) {
21
}
22
23
/**
24
* Delete a user from the panel only if they have no servers attached to their account.
25
*
26
* @throws DisplayException
27
*/
28
public function handle(int|User $user): ?bool
29
{
30
if ($user instanceof User) {
31
$user = $user->id;
32
}
33
34
$servers = $this->serverRepository->setColumns('id')->findCountWhere([['owner_id', '=', $user]]);
35
if ($servers > 0) {
36
throw new DisplayException($this->translator->get('admin/user.exceptions.user_has_servers'));
37
}
38
39
return $this->repository->delete($user); // @phpstan-ignore return.type (this has been like this, unsure at the moment what is truly correct)
40
}
41
}
42
43