Code Coverage
 
Classes and Traits
Functions and Methods
Lines
Total
100.00% covered (success)
100.00%
1 / 1
100.00% covered (success)
100.00%
2 / 2
CRAP
100.00% covered (success)
100.00%
15 / 15
Features
100.00% covered (success)
100.00%
1 / 1
100.00% covered (success)
100.00%
2 / 2
5
100.00% covered (success)
100.00%
15 / 15
 getFeaturesByUser
100.00% covered (success)
100.00%
1 / 1
3
100.00% covered (success)
100.00%
11 / 11
 getFeaturesByExternalUser
100.00% covered (success)
100.00%
1 / 1
2
100.00% covered (success)
100.00%
4 / 4
1<?php
2
3namespace Qmp\Laravel\Entities\Services\Features;
4
5use App\User;
6use Illuminate\Database\Eloquent\Collection;
7use Illuminate\Http\Request;
8use Qmp\Laravel\Acls\Client\Client as AclsClient;
9use Qmp\Laravel\Acls\Exceptions\RolePermissionException;
10use Qmp\Laravel\Entities\Controllers\EntityController;
11use Qmp\Laravel\Entities\Models\Entity;
12use Qmp\Laravel\Entities\Models\Feature;
13
14class Features
15{
16
17    /**
18     * @param $userId
19     * @return \Illuminate\Database\Eloquent\Collection
20     */
21    public function getFeaturesByUser($userId): Collection
22    {
23        $user = User::findOrFail($userId);
24
25        try {
26            AclsClient::role($user->id, ['super_admin']);
27        } catch (RolePermissionException $e) {
28            $results = Entity::pipeline()
29                ->unwind('config')
30                ->match('id', ['$in' => $user->entities])
31                ->group(null, '{"features": {"$addToSet": "$config.id"}}')
32                ->aggregate()->first();
33
34            $ids = $results ? iterator_to_array($results->features) : [];
35            return Feature::whereIn('id', $ids)->orderBy('id')->get();
36        }
37
38        return Feature::orderBy('id')->get();
39    }
40
41    /**
42     * @param \Illuminate\Http\Request $request
43     * @param string|null $httpOrigin
44     * @return \Illuminate\Database\Eloquent\Collection
45     */
46    public function getFeaturesByExternalUser(Request $request, ?string $httpOrigin): Collection
47    {
48        $request->merge(['url' => $httpOrigin]);
49        $entity = resolve(EntityController::class)->getEntityFromUrlOrigin($request);
50
51        $ids = $entity ? collect($entity->config)->pluck('id')->toArray(): [];
52
53        return Feature::whereIn('id', $ids)->orderBy('id')->get();
54    }
55}