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

/**
5
6
7
8
9
10
11
12
 * Aide de vue générant les éléments concernant le statut de connexion à l'appli
 * de l'utilisateur.
 * 
 * À savoir :
 * - Si un utilisateur est connecté : l'identité de l'utilisateur connecté et
 *   éventuellement le lien pointant vers l'URL de déconnexion.
 * - Si aucun utilisateur n'est connecté : le libellé "Aucun" et éventuellement
 *   le lien pointant vers l'URL de connexion.
Bertrand Gauthier's avatar
Bertrand Gauthier committed
13
14
15
16
17
18
19
20
21
22
23
24
25
26
 *
 * @author Bertrand GAUTHIER <bertrand.gauthier@unicaen.fr>
 */
class UserStatus extends UserAbstract
{
    /**
     * @var bool 
     */
    protected $displayConnectionLink = true;

    /**
     * Retourne l'instance de ce view helper.
     *
     * @param boolean $displayConnectionLink Inclure ou pas le lien de connexion/déconnexion ?
27
     * @return self
Bertrand Gauthier's avatar
Bertrand Gauthier committed
28
29
30
31
32
33
34
35
36
37
38
39
40
41
     */
    public function __invoke($displayConnectionLink = true)
    {
        $this->setDisplayConnectionLink($displayConnectionLink);
        return $this;
    }

    /**
     * Retourne le code HTML généré par cette aide de vue.
     *
     * @return string
     */
    public function __toString()
    {
42
43
44
        $parts = array();
        
        $parts[] = $this->createStatusContainer();
Bertrand Gauthier's avatar
Bertrand Gauthier committed
45
46

        if ($this->getDisplayConnectionLink()) {
47
48
            $userConnectionHelper = $this->getView()->plugin('userConnection'); /* @var $userConnectionHelper UserConnection */
            $parts[] = (string) $userConnectionHelper;
Bertrand Gauthier's avatar
Bertrand Gauthier committed
49
50
        }

51
52
        $out = implode(' | ', $parts);
        
Bertrand Gauthier's avatar
Bertrand Gauthier committed
53
54
55
56
57
58
59
60
61
62
63
        return $out;
    }

    /**
     *
     * @return string
     */
    protected function createStatusContainer()
    {
        if (($identity = $this->getIdentity())) {
            if (method_exists($identity, '__toString')) {
64
                $name = (string) $identity;
Bertrand Gauthier's avatar
Bertrand Gauthier committed
65
66
67
68
69
70
71
72
73
74
75
            }
            elseif (method_exists($identity, 'getDisplayName')) {
                $name = $identity->getDisplayName();
            }
            elseif (method_exists($identity, 'getUsername')) {
                $name = $identity->getUsername();
            }
            elseif (method_exists($identity, 'getId')) {
                $name = $identity->getId();
            }
            else {
76
77
                $name = sprintf('<span title="Erreur: identité inattendue (%s)">???</span>',
                        is_object($identity) ? get_class($identity) : gettype($identity));
Bertrand Gauthier's avatar
Bertrand Gauthier committed
78
79
            }
        }
80
81
82
83
84
        else {
            $name = _("Aucun");
            if ($this->getTranslator()) {
                $name = $this->getTranslator()->translate($name, $this->getTranslatorTextDomain());
            }
Bertrand Gauthier's avatar
Bertrand Gauthier committed
85
        }
86
87
        
        $out = sprintf('<strong>%s</strong>', $name);
Bertrand Gauthier's avatar
Bertrand Gauthier committed
88
89
90
91

        return $out;
    }

92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
    /**
     * Indique si le lien de connexion/déconnexion est affiché ou non
     * 
     * @return boolean 
     */
    public function getDisplayConnectionLink()
    {
        return $this->displayConnectionLink;
    }

    /**
     * Affiche ou non le lien de connexion/déconnexion
     * 
     * @param boolean $displayConnectionLink 
     * @return self
     */
    public function setDisplayConnectionLink($displayConnectionLink = true)
    {
        $this->displayConnectionLink = $displayConnectionLink;
        return $this;
    }
}