UserProfile.php 3.75 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
15
16
17
18
19
20
21
    /**
     * @var bool 
     */
    protected $userProfileSelectable = false;
    
    /**
     * @var array 
     */
    protected $identityRoles;
22
    
Bertrand Gauthier's avatar
Bertrand Gauthier committed
23
24
25
    /**
     * Point d'entrée.
     * 
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
34
        $this->userProfileSelectable = $userProfileSelectable;
        
Bertrand Gauthier's avatar
Bertrand Gauthier committed
35
36
37
38
39
40
41
42
        return $this;
    }
    
    /**
     * 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
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
        $roles = $this->getIdentityRolesAsOptions();
        
        if (!$roles) {
            $roles[] = $none;
        }

        $html = "<strong>$title :</strong>" . PHP_EOL;
        
        if ($this->userProfileSelectable) {
            $html .= $this->getView()->userProfileSelect(false);
        }
        else {
            $html .= $this->getView()->htmlList($roles);
        }
        
        return $html;
    }
    
    /**
     * Retourne le code HTML généré par cette aide de vue.
     *
     * @return string
     */
    public function __toString()
    {
        return $this->render();
    }
    
    /**
     * Retourne les rôles de l'utilisateur courant.
     * 
     * @return array
     */
    protected function getIdentityRoles()
    {
        if (null === $this->identityRoles) {
91
            $this->identityRoles = $this->getUserContext()->getIdentityRoles();
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
        }
        return $this->identityRoles;
    }
    
    /**
     * Retourne les rôles de l'utilisateur courant.
     * 
     * @return array
     */
    protected function getIdentityRolesAsOptions()
    {
        $identityRoles = $this->getIdentityRoles();
        $roles         = array();
        
        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
130
131
132
133
134
135
136
137
138
    /**
     * 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.
     * 
     * @param bool $userProfileSelectable 
     * @return \UnicaenAuth\View\Helper\UserProfile
     */
    public function setUserProfileSelectable($userProfileSelectable = true)
    {
        $this->userProfileSelectable = $userProfileSelectable;
        return $this;
    }
139
}