People.php 6.98 KB
Newer Older
1
<?php
Bertrand Gauthier's avatar
Bertrand Gauthier committed
2

3
4
namespace UnicaenLdap\Entity;

5
use UnicaenLdap\Entity\Base\People as BasePeople;
6
7
8
use DateTime;

/**
9
 * Classe de gestion des entités de la branche "people" de l'annuaire LDAP.
10
11
12
 *
 * @author Laurent Lécluse <laurent.lecluse at unicaen.fr>
 * @author Bertrand GAUTHIER <bertrand.gauthier@unicaen.fr>
13
 * @author David SURVILLE <david.surville@unicaen.fr>
14
 */
15
class People extends BasePeople
16
17
{
    /**
18
     * Liste des rôles existants
Bertrand Gauthier's avatar
Bertrand Gauthier committed
19
     *
20
     * @var string[]
21
     */
Bertrand Gauthier's avatar
Bertrand Gauthier committed
22
23
24
25
26
    public static $roles_list = [
        'DIRECTEUR'          => 'D30',
        'RESPONSABLE'        => 'R00',
        'RESP_ADMINISTRATIF' => 'R40',
    ];
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
     * Détermine si l'individu est actif ou non
     *
     * @return boolean
     */
    public function isPeople()
    {
        return 'people' == $this->getOu();
    }

    /**
     * Détermine si l'individu est désactivé ou non
     *
     * @return boolean
     */
    public function isDeactivated()
    {
        return 'deactivated' == $this->getOu();
    }

    /**
     * Détermine si l'individu est bloqué ou non
     *
     * @return boolean
     */
    public function isBlocked()
    {
        return 'blocked' == $this->getOu();
    }

    /**
     * Retourne l'Organizational Unit (OU) de l'utilisateur
     *
     * @return string
     */
    public function getOu()
    {
65
        if ($result = $this->getNode()->getDn()->get(1)) {
66
67
            return $result['ou'];
        }
Bertrand Gauthier's avatar
Bertrand Gauthier committed
68

69
70
71
72
        return null;
    }

    /**
73
     * Retourne le nom complet de cet individu LDAP.
74
     *
75
76
77
78
     * @param boolean $nomEnMajuscule Mettre le nom de famille en majuscules ?
     * @param boolean $avecCivilite Inclure la civilité ?
     * @param boolean $prenomDabord Mettre le prénom avant le nom de famille ?
     * @return string
79
     */
80
    public function getNomComplet($nomEnMajuscule = false, $avecCivilite = false, $prenomDabord = false)
81
    {
82
83
        $sn = $this->get('sn');
        $sn = is_array($sn) ? current($sn) : $sn;
Bertrand Gauthier's avatar
Bertrand Gauthier committed
84

85
86
87
88
89
90
91
92
93
        if (!$sn) {
            return '';
        }

        $nom = $nomEnMajuscule ? strtoupper($sn) : $sn;
        $prenom = $this->get('givenname');
        $civilite = $avecCivilite ? ' ' . $this->get('supannCivilite') : null;

        return ($prenomDabord ? $prenom . ' ' . $nom : $nom . ' ' . $prenom) . $civilite;
94
95
96
    }

    /**
97
     * Retourne le léocode associé à l'individu
98
     *
99
     * @return string|null
100
     */
101
    public function getLeocarteCode()
102
    {
103
104
105
106
107
108
109
110
111
112
        $attributeValues = $this->preFormat($this->supannRefId);
        $label = $this->getLabel('LEOCODE');

        $value = array_filter($attributeValues, function ($v) use ($label) {
            return preg_match("/^$label(?<identifiant>.+)$/", $v);
        });

        return !empty($value)
            ? str_replace($label, '', array_values($value)[0])
            : null;
113
114
115
    }

    /**
116
     * Retourne le code de la léocarte associée à l'individu
117
     *
118
     * @return string|null
119
     */
120
    public function getLeocarteCSN()
121
    {
122
123
124
125
126
127
128
129
130
131
        $attributeValues = $this->preFormat($this->supannRefId);
        $label = $this->getLabel('UNICAEN', 'REVERSECSN');

        $value = array_filter($attributeValues, function ($v) use ($label) {
            return preg_match("/^$label(?<identifiant>.+)$/", $v);
        });

        return !empty($value)
            ? str_replace($label, '', array_values($value)[0])
            : null;
132
133
134
    }

    /**
135
136
     * Retourne la liste des groupes dont l'utilisateur fait partie
     * Si le groupe n'est plus valide à la date d'observation, alors il n'est pas retourné dans la liste
137
     *
138
139
140
     * @param DateTime $dateObservation
     * @param string   $orderBy Champ de tri (au besoin)
     * @return Group[]
141
     */
142
    public function getGroups(DateTime $dateObservation = null, $orderBy = null)
143
    {
144
145
146
        $groupService = $this->getService()->getLdapGroupService();

        return $groupService->filterValids($groupService->getAllBy($this->get('memberOf'), 'dn', $orderBy), $dateObservation);
147
148
    }

149
150
151
    /**
     * Retourne les structures auxquelles appartiennent la personne
     *
152
     * @return Entity[]|Structure[]
153
154
155
     */
    public function getEduPersonOrgUnit()
    {
156
        $structureService = $this->getService()->getLdapStructureService();
157
158
        $dn = $this->eduPersonOrgUnitDN;
        if (empty($dn)) return null;
Bertrand Gauthier's avatar
Bertrand Gauthier committed
159

160
        return $structureService->getAllBy($dn, 'dn');
161
162
163
164
165
    }

    /**
     * Retourne la structure principale à laquelle appartient la personne
     *
166
167
     * @return Entity|Structure
     * @throws \UnicaenLdap\Exception
168
169
170
     */
    public function getEduPersonPrimaryOrgUnit()
    {
171
        $structureService = $this->getService()->getLdapStructureService();
172
173
        $dn = $this->eduPersonPrimaryOrgUnitDN;
        if (empty($dn)) return null;
Bertrand Gauthier's avatar
Bertrand Gauthier committed
174

175
        return $structureService->getBy($dn, 'dn');
176
177
178
179
    }

    /**
     * Retourne la structure d'affectation de la personne
Bertrand Gauthier's avatar
Bertrand Gauthier committed
180
     *
181
     * @todo à terminer
182
     * @return Entity|Structure
Bertrand Gauthier's avatar
Bertrand Gauthier committed
183
     * @throws \Exception
184
185
186
187
     */
    public function getEntiteAffectation()
    {
        throw new \Exception('Méthode pas finie');
188
        $structureService = $this->getService()->getLdapStructureService();
189
190
        $codes = $this->getNode()->getAttribute('supannEntiteAffectation');
        var_dump($codes);
Bertrand Gauthier's avatar
Bertrand Gauthier committed
191

192
        return $structureService->getBy($dn, 'dn');
193
194
195
196
    }

    /**
     * Retourne la structure d'affectation de la personne
Bertrand Gauthier's avatar
Bertrand Gauthier committed
197
     *
198
199
     * @todo à terminer
     * @return Structure
Bertrand Gauthier's avatar
Bertrand Gauthier committed
200
     * @throws \Exception
201
202
203
204
     */
    public function getEntiteAffectationPrincipale()
    {
        throw new \Exception('Méthode pas finie');
205
        $structureService = $this->getService()->getLdapStructureService();
206

Bertrand Gauthier's avatar
Bertrand Gauthier committed
207
        $codes = [];
208
209
210
        $affectations = $this->getNode()->getAttribute('supannAffectation');


Bertrand Gauthier's avatar
Bertrand Gauthier committed
211
        list($code, $description) = explode(';', $this->supannAffectation);
212
213
        $code = $this->supannAffectation;
        if (empty($dn)) return null;
Bertrand Gauthier's avatar
Bertrand Gauthier committed
214

215
        return $structureService->getBy($dn, 'dn');
216
217
218
219
    }

    /**
     * Retourne la structure d'affectation de la personne
Bertrand Gauthier's avatar
Bertrand Gauthier committed
220
     *
221
222
     * @todo à terminer
     * @return Structure
Bertrand Gauthier's avatar
Bertrand Gauthier committed
223
     * @throws \Exception
224
225
226
227
     */
    public function getAffectationDescription()
    {
        throw new \Exception('Méthode pas finie');
228
        $structureService = $this->getService()->getLdapStructureService();
Bertrand Gauthier's avatar
Bertrand Gauthier committed
229
230

        list($code, $description) = explode(';', $this->supannAffectation);
231
232
        $code = $this->supannAffectation;
        if (empty($dn)) return null;
Bertrand Gauthier's avatar
Bertrand Gauthier committed
233

234
        return $structureService->getBy($dn, 'dn');
235
236
    }

Bertrand Gauthier's avatar
Bertrand Gauthier committed
237
    /**
238
239
240
241
242
243
244
     * Retourne true si l'argument est au format "supannRoleEntite".
     *
     * @param string $role
     * @return bool
     */
    static public function isSupannRoleEntite($string, &$role = null, &$typeStructure = null, &$codeStructure = null, &$libelleRole = null)
    {
Bertrand Gauthier's avatar
Bertrand Gauthier committed
245
246
        if (preg_match(static::$role_pattern, $string, $matches)) {
            $role = $matches[1];
247
248
            $typeStructure = $matches[2];
            $codeStructure = $matches[3];
Bertrand Gauthier's avatar
Bertrand Gauthier committed
249
250
            $libelleRole = $matches[4];

251
252
            return true;
        }
Bertrand Gauthier's avatar
Bertrand Gauthier committed
253

254
255
256
        return false;
    }
}