UserProfile.php 3.66 KB
Newer Older
Bertrand Gauthier's avatar
Bertrand Gauthier committed
1
2
3
<?php
namespace UnicaenAuth\View\Helper;

4
5
use Zend\Permissions\Acl\Role\RoleInterface;

Bertrand Gauthier's avatar
Bertrand Gauthier committed
6
7
8
9
10
11
12
/**
 * Aide de vue permettant d'afficher le profil de l'utilisateur connecté.
 *
 * @author Bertrand GAUTHIER <bertrand.gauthier@unicaen.fr>
 */
class UserProfile extends UserAbstract
{
13
    /**
14
     * @var bool
15
16
     */
    protected $userProfileSelectable = false;
17

18
    /**
19
     * @var array
20
21
     */
    protected $identityRoles;
22

Bertrand Gauthier's avatar
Bertrand Gauthier committed
23
24
    /**
     * Point d'entrée.
25
     *
26
27
28
     * @param bool $userProfileSelectable Spécifie s'il faut afficher les profils
     * de l'utilisateur sous forme d'une liste déroulante ou de boutons radios, permettant
     * ainsi à l'utilisateur de changer de profil courant.
29
     * @return self
Bertrand Gauthier's avatar
Bertrand Gauthier committed
30
     */
31
    public function __invoke($userProfileSelectable = false)
Bertrand Gauthier's avatar
Bertrand Gauthier committed
32
    {
33
        $this->userProfileSelectable = $userProfileSelectable;
34

Bertrand Gauthier's avatar
Bertrand Gauthier committed
35
36
        return $this;
    }
37

Bertrand Gauthier's avatar
Bertrand Gauthier committed
38
39
40
41
42
    /**
     * Retourne le code HTML généré par cette aide de vue.
     *
     * @return string
     */
43
    public function render()
Bertrand Gauthier's avatar
Bertrand Gauthier committed
44
    {
45
46
47
48
49
50
51
52
53
54
        $title   = _("Profil utilisateur");
        $unknown = _("Inconnu");
        $none    = _("Aucun");

        if ($this->getTranslator()) {
            $title   = $this->getTranslator()->translate($title, $this->getTranslatorTextDomain());
            $unknown = $this->getTranslator()->translate($unknown, $this->getTranslatorTextDomain());
            $none    = $this->getTranslator()->translate($none, $this->getTranslatorTextDomain());
        }

55
        $roles = $this->getIdentityRolesAsOptions();
56

57
58
59
60
61
        if (!$roles) {
            $roles[] = $none;
        }

        $html = "<strong>$title :</strong>" . PHP_EOL;
62

63
64
65
66
67
68
        if ($this->userProfileSelectable) {
            $html .= $this->getView()->userProfileSelect(false);
        }
        else {
            $html .= $this->getView()->htmlList($roles);
        }
69

70
71
        return $html;
    }
72

73
74
75
76
77
78
79
80
81
    /**
     * Retourne le code HTML généré par cette aide de vue.
     *
     * @return string
     */
    public function __toString()
    {
        return $this->render();
    }
82

83
84
    /**
     * Retourne les rôles de l'utilisateur courant.
85
     *
86
87
88
89
90
     * @return array
     */
    protected function getIdentityRoles()
    {
        if (null === $this->identityRoles) {
91
            $this->identityRoles = $this->getUserContext()->getIdentityRoles();
92
93
94
        }
        return $this->identityRoles;
    }
95

96
97
    /**
     * Retourne les rôles de l'utilisateur courant.
98
     *
99
100
101
102
103
     * @return array
     */
    protected function getIdentityRolesAsOptions()
    {
        $identityRoles = $this->getIdentityRoles();
104
105
        $roles         = [];

106
        foreach ($identityRoles as $id => $role) {
107
108
109
            $lib = '?';
            if (is_object($role) && method_exists($role, '__toString')) {
                $lib = (string) $role;
110
            }
111
112
            elseif ($role instanceof RoleInterface) {
                $lib = $role->getRoleId();
113
            }
114
115
            elseif (is_string($role)) {
                $lib = $role;
116
            }
117
118
            if ($this->getTranslator()) {
                $lib = $this->getTranslator()->translate($lib, $this->getTranslatorTextDomain());
119
            }
120
            $roles[$id] = $lib;
121
        }
122

123
        return $roles;
124
    }
125

126
127
128
129
    /**
     * Spécifie s'il faut afficher les profils
     * de l'utilisateur sous forme d'une liste déroulante ou de boutons radios, permettant
     * ainsi à l'utilisateur de changer de profil courant.
130
131
     *
     * @param bool $userProfileSelectable
132
133
134
135
136
137
138
     * @return \UnicaenAuth\View\Helper\UserProfile
     */
    public function setUserProfileSelectable($userProfileSelectable = true)
    {
        $this->userProfileSelectable = $userProfileSelectable;
        return $this;
    }
139
}