Code Coverage
 
Lines
Functions and Methods
Classes and Traits
Total
100.00% covered (success)
100.00%
38 / 38
100.00% covered (success)
100.00%
1 / 1
CRAP
100.00% covered (success)
100.00%
1 / 1
Profile
100.00% covered (success)
100.00%
38 / 38
100.00% covered (success)
100.00%
1 / 1
7
100.00% covered (success)
100.00%
1 / 1
 readEntity
100.00% covered (success)
100.00%
38 / 38
100.00% covered (success)
100.00%
1 / 1
7
1<?php
2
3namespace BO\Zmsbackend\Useraccount\Service;
4
5use BO\Zmsbackend\Permission\Service\Permission as PermissionService;
6use BO\Zmsbackend\Role\Service\Role as RoleService;
7use BO\Zmsentities\Useraccount;
8use BO\Zmsentities\Useraccountprofile;
9
10class Profile extends \BO\Zmsbackend\Base
11{
12    public function readEntity(Useraccount $useraccount): Useraccountprofile
13    {
14        $roleNames = $useraccount->getRoles();
15
16        if (count($roleNames) !== 1) {
17            throw new \BO\Zmsbackend\Useraccount\Exception\UseraccountInvalidRoleAssignment();
18        }
19
20        $role = (new RoleService())->readRoleByName($roleNames[0], 0);
21
22        if ($role === null) {
23            throw new \BO\Zmsbackend\Useraccount\Exception\UseraccountInvalidRoleAssignment();
24        }
25
26        $assignedPermissionNames = array_fill_keys(
27            $role['permissions'] ?? [],
28            true
29        );
30
31        $permissionDescriptions = [];
32
33        foreach ((new PermissionService())->readAllPermissions() as $permission) {
34            if (!isset($assignedPermissionNames[$permission->name])) {
35                continue;
36            }
37
38            $permissionDescriptions[] = (string) (
39                $permission->description ?: $permission->name
40            );
41        }
42
43        $collator = new \Collator('de_DE');
44        $collator->setStrength(\Collator::SECONDARY);
45
46        usort(
47            $permissionDescriptions,
48            static function (string $descriptionA, string $descriptionB) use ($collator): int {
49                return (int) $collator->compare(
50                    $descriptionA,
51                    $descriptionB
52                );
53            }
54        );
55
56        $username = preg_replace(
57            '/@keycloak$/',
58            '',
59            (string) $useraccount->id
60        );
61
62        return new Useraccountprofile([
63            'username' => (string) $username,
64            'role' => (string) ($role->description ?: $role->name),
65            'permissions' => $permissionDescriptions,
66        ]);
67    }
68}