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

3
4
5
6
7
8
9
10
11
12
13
14
namespace UnicaenLdap\Entity;

use DateTime;

/**
 * Classe mère des people de l'annuaire LDAP.
 *
 * @author Laurent Lécluse <laurent.lecluse at unicaen.fr>
 * @author Bertrand GAUTHIER <bertrand.gauthier@unicaen.fr>
 */
class People extends Entity
{
Bertrand Gauthier's avatar
Bertrand Gauthier committed
15
    static protected $role_pattern = '/^\[role={SUPANN}(.*)\]\[type={SUPANN}(.*)\]\[code=(.*)\]\[libelle=(.*)\]$/';
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

    protected $type = 'People';
Bertrand Gauthier's avatar
Bertrand Gauthier committed
29

30
31
32
33
    /**
     * Liste des classes d'objet nécessaires à la création d'une personne
     * Il est nécessaire d'ajouter la classe 'ucbnEtu' ou 'ucbnEmp' selon le
     * statut de la personne.
Bertrand Gauthier's avatar
Bertrand Gauthier committed
34
35
36
37
38
39
40
41
42
43
44
45
46
47
     *
     * @var string[]
     */
    protected $objectClass = [
        'top',
        'inetOrgPerson',
        'organizationalPerson',
        'person',
        'eduPerson',
        'supannPerson',
        'sambaAccount',
        'sambaSamAcount',
        'posixAccount',
    ];
48
49
50
51
52
53

    /**
     * Liste des attributs contenant des dates
     *
     * @var string[]
     */
Bertrand Gauthier's avatar
Bertrand Gauthier committed
54
    protected $dateTimeAttributes = [
55

Bertrand Gauthier's avatar
Bertrand Gauthier committed
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
     * Retourne le nom complet de cet individu LDAP.
     *
     * @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
     */
    public function getNomComplet($nomEnMajuscule = false, $avecCivilite = false, $prenomDabord = false)
    {
        $sn = $this->get('sn');
        $sn = is_array($sn) ? current($sn) : $sn;

        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;
    }

    /**
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
     * 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()
    {
Bertrand Gauthier's avatar
Bertrand Gauthier committed
119
        if ($result = $this->getNode()->getDn()->get(1)) {
120
121
            return $result['ou'];
        }
Bertrand Gauthier's avatar
Bertrand Gauthier committed
122

123
124
125
126
127
128
129
130
        return null;
    }

    /**
     * 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
     *
     * @param DateTime $dateObservation
Bertrand Gauthier's avatar
Bertrand Gauthier committed
131
     * @param string   $orderBy Champ de tri (au besoin)
132
133
     * @return Group[]
     */
Bertrand Gauthier's avatar
Bertrand Gauthier committed
134
    public function getGroups(DateTime $dateObservation = null, $orderBy = null)
135
    {
136
        $groupService = $this->getService()->getLdapGroupService();
Bertrand Gauthier's avatar
Bertrand Gauthier committed
137

138
        return $groupService->filterValids($groupService->getAllBy($this->get('memberOf'), 'dn', $orderBy), $dateObservation);
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
    }

    /**
     * Détermine si la personne est étudiante
     *
     * @return boolean
     */
    public function estEtudiant()
    {
        return 0 === strpos($this->uid, 'e');
    }

    /**
     * Détermine si la personne est un personnel
     *
     * @return boolean
     */
    public function estPersonnel()
    {
        return 0 === strpos($this->uid, 'p');
    }

    /**
     * Détermine si la personne est un invité
     *
     * @return boolean
     */
    public function estInvite()
    {
        return 0 === strpos($this->uid, 'i');
    }

171
172
173
    /**
     * Retourne les structures auxquelles appartiennent la personne
     *
174
     * @return Entity[]|Structure[]
175
176
177
     */
    public function getEduPersonOrgUnit()
    {
178
        $structureService = $this->getService()->getLdapStructureService();
179
180
        $dn = $this->eduPersonOrgUnitDN;
        if (empty($dn)) return null;
Bertrand Gauthier's avatar
Bertrand Gauthier committed
181

182
        return $structureService->getAllBy($dn, 'dn');
183
184
185
186
187
    }

    /**
     * Retourne la structure principale à laquelle appartient la personne
     *
188
189
     * @return Entity|Structure
     * @throws \UnicaenLdap\Exception
190
191
192
     */
    public function getEduPersonPrimaryOrgUnit()
    {
193
        $structureService = $this->getService()->getLdapStructureService();
194
195
        $dn = $this->eduPersonPrimaryOrgUnitDN;
        if (empty($dn)) return null;
Bertrand Gauthier's avatar
Bertrand Gauthier committed
196

197
        return $structureService->getBy($dn, 'dn');
198
199
200
201
    }

    /**
     * Retourne la structure d'affectation de la personne
Bertrand Gauthier's avatar
Bertrand Gauthier committed
202
     *
203
     * @todo à terminer
204
     * @return Entity|Structure
Bertrand Gauthier's avatar
Bertrand Gauthier committed
205
     * @throws \Exception
206
207
208
209
     */
    public function getEntiteAffectation()
    {
        throw new \Exception('Méthode pas finie');
210
        $structureService = $this->getService()->getLdapStructureService();
211
212
        $codes = $this->getNode()->getAttribute('supannEntiteAffectation');
        var_dump($codes);
Bertrand Gauthier's avatar
Bertrand Gauthier committed
213

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

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

Bertrand Gauthier's avatar
Bertrand Gauthier committed
229
        $codes = [];
230
231
232
        $affectations = $this->getNode()->getAttribute('supannAffectation');


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

237
        return $structureService->getBy($dn, 'dn');
238
239
240
241
    }

    /**
     * Retourne la structure d'affectation de la personne
Bertrand Gauthier's avatar
Bertrand Gauthier committed
242
     *
243
244
     * @todo à terminer
     * @return Structure
Bertrand Gauthier's avatar
Bertrand Gauthier committed
245
     * @throws \Exception
246
247
248
249
     */
    public function getAffectationDescription()
    {
        throw new \Exception('Méthode pas finie');
250
        $structureService = $this->getService()->getLdapStructureService();
Bertrand Gauthier's avatar
Bertrand Gauthier committed
251
252

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

256
        return $structureService->getBy($dn, 'dn');
257
258
    }

Bertrand Gauthier's avatar
Bertrand Gauthier committed
259
    /**
260
261
262
263
264
265
266
     * 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
267
268
        if (preg_match(static::$role_pattern, $string, $matches)) {
            $role = $matches[1];
269
270
            $typeStructure = $matches[2];
            $codeStructure = $matches[3];
Bertrand Gauthier's avatar
Bertrand Gauthier committed
271
272
            $libelleRole = $matches[4];

273
274
            return true;
        }
Bertrand Gauthier's avatar
Bertrand Gauthier committed
275

276
277
278
        return false;
    }
}