Failed Conditions
Pull Request — master (#2358)
by Nico
10:36 queued 05:05
created

AllianceJobManager::getUserJobs()   A

Complexity

Conditions 3
Paths 3

Size

Total Lines 13
Code Lines 7

Duplication

Lines 0
Ratio 0 %

Code Coverage

Tests 7
CRAP Score 3

Importance

Changes 0
Metric Value
cc 3
eloc 7
nc 3
nop 2
dl 0
loc 13
ccs 7
cts 7
cp 1
crap 3
rs 10
c 0
b 0
f 0
1
<?php
2
3
declare(strict_types=1);
4
5
namespace Stu\Module\Alliance\Lib;
6
7
use Stu\Component\Alliance\Enum\AllianceJobPermissionEnum;
8
use Stu\Orm\Entity\Alliance;
9
use Stu\Orm\Entity\AllianceJob;
10
use Stu\Orm\Entity\User;
11
use Stu\Orm\Repository\AllianceMemberJobRepositoryInterface;
12
13
final class AllianceJobManager implements AllianceJobManagerInterface
14
{
15 1
    public function __construct(
16
        private AllianceMemberJobRepositoryInterface $allianceMemberJobRepository
17 1
    ) {}
18
19
    #[\Override]
20
    public function assignUserToJob(User $user, AllianceJob $job): void
21
    {
22
        $existing = $this->allianceMemberJobRepository->getByUserAndJob($user, $job->getId());
23
24
        if ($existing !== null) {
25
            return;
26
        }
27
28
        $assignment = $this->allianceMemberJobRepository->prototype();
29
        $assignment->setUser($user);
30
        $assignment->setJob($job);
31
32
        $this->allianceMemberJobRepository->save($assignment);
33
    }
34
35
    #[\Override]
36
    public function removeUserFromJob(User $user, AllianceJob $job): void
37
    {
38
        $assignment = $this->allianceMemberJobRepository->getByUserAndJob($user, $job->getId());
39
40
        if ($assignment === null) {
41
            return;
42
        }
43
44
        $this->allianceMemberJobRepository->delete($assignment);
45
    }
46
47
    #[\Override]
48
    public function removeUserFromAllJobs(User $user, Alliance $alliance): void
49
    {
50
        $assignments = $this->allianceMemberJobRepository->getByUser($user->getId());
51
52
        foreach ($assignments as $assignment) {
53
            if ($assignment->getJob()->getAlliance()->getId() === $alliance->getId()) {
54
                $this->allianceMemberJobRepository->delete($assignment);
55
            }
56
        }
57
    }
58
59
    #[\Override]
60
    public function hasUserJob(User $user, Alliance $alliance): bool
61
    {
62
        $assignments = $this->allianceMemberJobRepository->getByUser($user->getId());
63
64
        foreach ($assignments as $assignment) {
65
            if ($assignment->getJob()->getAlliance()->getId() === $alliance->getId()) {
66
                return true;
67
            }
68
        }
69
70
        return false;
71
    }
72
73 9
    #[\Override]
74
    public function getUserJobs(User $user, Alliance $alliance): array
75
    {
76 9
        $assignments = $this->allianceMemberJobRepository->getByUser($user->getId());
77 9
        $jobs = [];
78
79 9
        foreach ($assignments as $assignment) {
80 9
            if ($assignment->getJob()->getAlliance()->getId() === $alliance->getId()) {
81 9
                $jobs[] = $assignment->getJob();
82
            }
83
        }
84
85 9
        return $jobs;
86
    }
87
88 4
    #[\Override]
89
    public function hasUserFounderPermission(User $user, Alliance $alliance): bool
90
    {
91 4
        $jobs = $this->getUserJobs($user, $alliance);
92
93 4
        foreach ($jobs as $job) {
94 4
            if ($job->hasPermission(AllianceJobPermissionEnum::FOUNDER->value)) {
95 4
                return true;
96
            }
97
        }
98
99
        return false;
100
    }
101
102
    #[\Override]
103
    public function hasUserSuccessorPermission(User $user, Alliance $alliance): bool
104
    {
105
        $jobs = $this->getUserJobs($user, $alliance);
106
107
        foreach ($jobs as $job) {
108
            if ($job->hasPermission(AllianceJobPermissionEnum::SUCCESSOR->value)) {
109
                return true;
110
            }
111
        }
112
113
        return false;
114
    }
115
116
    #[\Override]
117
    public function hasUserDiplomaticPermission(User $user, Alliance $alliance): bool
118
    {
119
        $jobs = $this->getUserJobs($user, $alliance);
120
121
        foreach ($jobs as $job) {
122
            if ($job->hasPermission(AllianceJobPermissionEnum::DIPLOMATIC->value)) {
123
                return true;
124
            }
125
        }
126
127
        return false;
128
    }
129
130 8
    #[\Override]
131
    public function hasUserPermission(User $user, Alliance $alliance, int $permissionType): bool
132
    {
133 8
        $jobs = $this->getUserJobs($user, $alliance);
134
135 8
        foreach ($jobs as $job) {
136 8
            if ($job->hasPermission(AllianceJobPermissionEnum::FOUNDER->value)) {
137 8
                return true;
138
            }
139
140
            if ($job->hasPermission($permissionType)) {
141
                return true;
142
            }
143
144
            $permissionEnum = AllianceJobPermissionEnum::tryFrom($permissionType);
145
            if ($permissionEnum !== null && $permissionEnum->getParentPermission() !== null) {
146
                if ($job->hasPermission($permissionEnum->getParentPermission()->value)) {
147
                    return true;
148
                }
149
            }
150
        }
151
152
        return false;
153
    }
154
}
155