Code Coverage |
||||||||||
Lines |
Functions and Methods |
Classes and Traits |
||||||||
Total | |
0.00% |
0 / 20 |
|
0.00% |
0 / 2 |
CRAP | |
0.00% |
0 / 1 |
AdminCenterCompanyGroupResource | |
0.00% |
0 / 20 |
|
0.00% |
0 / 2 |
20 | |
0.00% |
0 / 1 |
toArray | |
0.00% |
0 / 11 |
|
0.00% |
0 / 1 |
2 | |||
getAllUsers | |
0.00% |
0 / 9 |
|
0.00% |
0 / 1 |
12 |
1 | <?php |
2 | |
3 | namespace App\Http\Resources; |
4 | |
5 | use App\Http\Models\Auth\User; |
6 | use Illuminate\Support\Str; |
7 | use Illuminate\Http\Request; |
8 | use Illuminate\Http\Resources\Json\JsonResource; |
9 | |
10 | class AdminCenterCompanyGroupResource extends JsonResource |
11 | { |
12 | /** |
13 | * Transform the resource into an array. |
14 | * |
15 | * @return array<string, mixed> |
16 | */ |
17 | public function toArray(Request $request): array |
18 | { |
19 | $allUsers = $this->getAllUsers($this, $request); |
20 | |
21 | return [ |
22 | "group" => [ |
23 | 'id' => $this->id, |
24 | 'name' => $this->name, |
25 | 'slug' => Str::slug($this->name), |
26 | 'subgroups' => AdminCenterCompanyGroupResource::collection($this->subgroups), |
27 | ], |
28 | "members" => $allUsers->count(), |
29 | 'users' => AdminCenterUserResource::collection($allUsers), |
30 | ]; |
31 | } |
32 | |
33 | /** |
34 | * Recursively get all users from the group and its subgroups. |
35 | * |
36 | * @param \App\Http\Resources\AdminCenterCompanyGroupResource $group |
37 | * @return \Illuminate\Support\Collection |
38 | */ |
39 | protected function getAllUsers($group, $request) |
40 | { |
41 | $users = $group->users; |
42 | |
43 | if ($group->id === -1) { |
44 | $users = User::where("company_id", $request->company_id)->whereNull("company_group_id")->get(); |
45 | } |
46 | |
47 | $groupInvitations = $group->groupInvitedUsers->whereNull('company_subgroup_id')->whereNotIn('email', $users->pluck('email')); |
48 | $subGroupInvitations = $group->subgroupInvitedUsers->whereNotIn('email', $users->pluck('email')); |
49 | $users = $users->merge($groupInvitations)->merge($subGroupInvitations); |
50 | |
51 | foreach ($group->subgroups as $subgroup) { |
52 | $users = $users->merge($this->getAllUsers($subgroup, $request)); |
53 | } |
54 | |
55 | return $users; |
56 | } |
57 | } |