Code Coverage
 
Lines
Functions and Methods
Classes and Traits
Total
0.00% covered (danger)
0.00%
0 / 20
0.00% covered (danger)
0.00%
0 / 2
CRAP
0.00% covered (danger)
0.00%
0 / 1
AdminCenterCompanyGroupResource
0.00% covered (danger)
0.00%
0 / 20
0.00% covered (danger)
0.00%
0 / 2
20
0.00% covered (danger)
0.00%
0 / 1
 toArray
0.00% covered (danger)
0.00%
0 / 11
0.00% covered (danger)
0.00%
0 / 1
2
 getAllUsers
0.00% covered (danger)
0.00%
0 / 9
0.00% covered (danger)
0.00%
0 / 1
12
1<?php
2
3namespace App\Http\Resources;
4
5use App\Http\Models\Auth\User;
6use Illuminate\Support\Str;
7use Illuminate\Http\Request;
8use Illuminate\Http\Resources\Json\JsonResource;
9
10class 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}