UserStatus.php 2.79 KB
Newer Older
Bertrand Gauthier's avatar
Bertrand Gauthier committed
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
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
91
92
93
94
95
96
97
98
99
100
101
102
103
<?php
namespace UnicaenAuth\View\Helper;

/**
 * View helper de rendu des éléments concernant le statut de connexion à l'appli.
 * A savoir :
 * - si un utilisateur est connecté: l'identité de l'utilisateur connecté et un
 * lien pointant vers la demande de déconnexion
 * - sinon: un lien pointant vers le formulaire de connexion
 *
 * @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 ?
     * @return UserStatus
     */
    public function __invoke($displayConnectionLink = true)
    {
        $this->setDisplayConnectionLink($displayConnectionLink);
        return $this;
    }

    /**
     * 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 UserStatus
     */
    public function setDisplayConnectionLink($displayConnectionLink)
    {
        $this->displayConnectionLink = $displayConnectionLink;
        return $this;
    }

    /**
     * Retourne le code HTML généré par cette aide de vue.
     *
     * @return string
     */
    public function __toString()
    {
        $out = $this->createStatusContainer();

        if ($this->getDisplayConnectionLink()) {
            $out .= " | " . $this->getView()->userConnection();
        }

        return $out;
    }

    /**
     *
     * @return string
     */
    protected function createStatusContainer()
    {
        $template = '<strong>%s</strong>';
        if (($identity = $this->getIdentity())) {
            if (method_exists($identity, '__toString')) {
                $name = "" . $identity;
            }
            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 {
                $name = sprintf('<span title="Erreur: identité inattendue%s">???</span>',
                        is_object($identity) ? " (classe " . get_class($identity) . ")" : null);
            }
        }
        if (!isset($name) || !$name) {
            $name = $this->getView()->translate("Aucun");
        }
        $out  = sprintf($template, $name);

        return $out;
    }

}