LTI Integration Library 4.10.3
PHP class library for building LTI integrations
 
Loading...
Searching...
No Matches
User.php
1<?php
2
3namespace ceLTIc\LTI;
4
12class User
13{
14
18 const PRINCIPAL_ROLES = array(
19 'http://purl.imsglobal.org/vocab/lis/v2/system/person#Administrator',
20 'http://purl.imsglobal.org/vocab/lis/v2/system/person#None',
21 'http://purl.imsglobal.org/vocab/lis/v2/system/person#AccountAdmin',
22 'http://purl.imsglobal.org/vocab/lis/v2/system/person#Creator',
23 'http://purl.imsglobal.org/vocab/lis/v2/system/person#SysAdmin',
24 'http://purl.imsglobal.org/vocab/lis/v2/system/person#SysSupport',
25 'http://purl.imsglobal.org/vocab/lis/v2/system/person#User',
26 'http://purl.imsglobal.org/vocab/lis/v2/institution/person#Administrator',
27 'http://purl.imsglobal.org/vocab/lis/v2/institution/person#Faculty',
28 'http://purl.imsglobal.org/vocab/lis/v2/institution/person#Guest',
29 'http://purl.imsglobal.org/vocab/lis/v2/institution/person#None',
30 'http://purl.imsglobal.org/vocab/lis/v2/institution/person#Other',
31 'http://purl.imsglobal.org/vocab/lis/v2/institution/person#Staff',
32 'http://purl.imsglobal.org/vocab/lis/v2/institution/person#Student',
33 'http://purl.imsglobal.org/vocab/lis/v2/institution/person#Alumni',
34 'http://purl.imsglobal.org/vocab/lis/v2/institution/person#Instructor',
35 'http://purl.imsglobal.org/vocab/lis/v2/institution/person#Learner',
36 'http://purl.imsglobal.org/vocab/lis/v2/institution/person#Member',
37 'http://purl.imsglobal.org/vocab/lis/v2/institution/person#Mentor',
38 'http://purl.imsglobal.org/vocab/lis/v2/institution/person#Observer',
39 'http://purl.imsglobal.org/vocab/lis/v2/institution/person#ProspectiveStudent',
40 'http://purl.imsglobal.org/vocab/lis/v2/membership#Administrator',
41 'http://purl.imsglobal.org/vocab/lis/v2/membership#ContentDeveloper',
42 'http://purl.imsglobal.org/vocab/lis/v2/membership#Instructor',
43 'http://purl.imsglobal.org/vocab/lis/v2/membership#Learner',
44 'http://purl.imsglobal.org/vocab/lis/v2/membership#Mentor',
45 'http://purl.imsglobal.org/vocab/lis/v2/membership#Manager',
46 'http://purl.imsglobal.org/vocab/lis/v2/membership#Member',
47 'http://purl.imsglobal.org/vocab/lis/v2/membership#Officer'
48 );
49
55 public $firstname = '';
56
62 public $middlename = '';
63
69 public $lastname = '';
70
76 public $fullname = '';
77
83 public static $allowEmptyName = false;
84
90 public $sourcedId = null;
91
97 public $username = null;
98
104 public $email = '';
105
111 public $image = '';
112
118 public $roles = array();
119
125 public $groups = array();
126
132 public $ltiUserId = null;
133
137 public function __construct()
138 {
139 $this->initialize();
140 }
141
145 public function initialize()
146 {
147 $this->firstname = '';
148 $this->middlename = '';
149 $this->lastname = '';
150 $this->fullname = '';
151 $this->sourcedId = null;
152 $this->username = null;
153 $this->email = '';
154 $this->image = '';
155 $this->roles = array();
156 $this->groups = array();
157 }
158
164 public function initialise()
165 {
166 $this->initialize();
167 }
168
178 {
179 $names = array(0 => '', 1 => '');
180 if (!empty($fullname)) {
181 $this->fullname = trim($fullname);
182 $names = preg_split("/[\s]+/", $this->fullname);
183 }
184 if (!empty($firstname)) {
185 $this->firstname = trim($firstname);
186 $names[0] = $this->firstname;
187 } elseif (!empty($names[0])) {
188 $this->firstname = $names[0];
189 } elseif (!static::$allowEmptyName) {
190 $this->firstname = 'User';
191 } else {
192 $this->firstname = '';
193 }
194 if (!empty($middlename)) {
195 $this->middlename = trim($middlename);
196 } elseif ((count($names) > 2) && !empty($names[1])) {
197 $this->middlename = '';
198 for ($i = 1; $i < count($names); $i++) {
199 $this->middlename .= $names[$i] . ' ';
200 }
201 $this->middlename = trim($this->middlename);
202 } else {
203 $this->middlename = '';
204 }
205 if (!empty($lastname)) {
206 $this->lastname = trim($lastname);
207 } elseif ((count($names) > 1) && !empty($names[count($names) - 1])) {
208 $this->lastname = $names[count($names) - 1];
209 } elseif (!static::$allowEmptyName) {
210 $this->lastname = $this->ltiUserId;
211 } else {
212 $this->lastname = '';
213 }
214 if (empty($this->fullname) && (!empty($this->firstname) || !empty($this->lastname))) {
215 $this->fullname = $this->firstname;
216 if (!empty($this->middlename)) {
217 $this->fullname .= " {$this->middlename}";
218 }
219 $this->fullname .= " {$this->lastname}";
220 }
221 }
222
229 public function setEmail($email, $defaultEmail = null)
230 {
231 if (!empty($email)) {
232 $this->email = $email;
233 } elseif (!empty($defaultEmail)) {
234 $this->email = $defaultEmail;
235 if (substr($this->email, 0, 1) === '@') {
236 if (!empty($this->username)) {
237 $this->email = "{$this->username}{$this->email}";
238 } else {
239 $this->email = "{$this->ltiUserId}{$this->email}";
240 }
241 }
242 } else {
243 $this->email = '';
244 }
245 }
246
252 public function isLearner()
253 {
254 return $this->hasRole('Learner');
255 }
256
262 public function isInstructor()
263 {
264 return $this->hasRole('Instructor');
265 }
266
272 public function isContentDeveloper()
273 {
274 return $this->hasRole('ContentDeveloper');
275 }
276
282 public function isTeachingAssistant()
283 {
284 return $this->hasRole('TeachingAssistant');
285 }
286
292 public function isManager()
293 {
294 return $this->hasRole('Manager');
295 }
296
302 public function isMember()
303 {
304 return $this->hasRole('Member');
305 }
306
312 public function isOfficer()
313 {
314 return $this->hasRole('Officer'); // NB Role not defined for LTI versions prior to 1.3
315 }
316
322 public function isStaff()
323 {
324 return $this->isInstructor() || $this->isContentDeveloper() || $this->isTeachingAssistant();
325 }
326
332 public function isMentor()
333 {
334 return $this->hasRole('Mentor');
335 }
336
342 public function isAdmin()
343 {
344 return $this->hasRole('Administrator') || $this->hasRole('urn:lti:sysrole:ims/lis/SysAdmin') ||
345 $this->hasRole('urn:lti:sysrole:ims/lis/Administrator') || $this->hasRole('urn:lti:instrole:ims/lis/Administrator');
346 }
347
348###
349### PRIVATE METHODS
350###
351
359 private function hasRole($role)
360 {
361 $ok = in_array($role, $this->roles);
362 if (!$ok && (strpos($role, 'urn:') !== 0) && (strpos($role, 'http://') !== 0) && (strpos($role, 'https://') !== 0)) {
363 $role = "urn:lti:role:ims/lis/{$role}";
364 $ok = in_array($role, $this->roles);
365 }
366 if (!$ok) {
367 $role2 = null;
368 $role3 = null;
369 if (strpos($role, 'urn:') === 0) {
370 if (strpos($role, 'urn:lti:role:ims/lis/') === 0) {
371 $role2 = 'http://purl.imsglobal.org/vocab/lis/v2/membership#' . substr($role, 21);
372 if (substr($role, 21) === 'TeachingAssistant') {
373 $role3 = 'http://purl.imsglobal.org/vocab/lis/v2/membership/Instructor#TeachingAssistant';
374 }
375 } elseif (strpos($role, 'urn:lti:instrole:ims/lis/') === 0) {
376 $role2 = 'http://purl.imsglobal.org/vocab/lis/v2/person#' . substr($role, 25);
377 $role3 = 'http://purl.imsglobal.org/vocab/lis/v2/institution/person#' . substr($role, 25);
378 } elseif (strpos($role, 'urn:lti:sysrole:ims/lis/') === 0) {
379 $role2 = 'http://purl.imsglobal.org/vocab/lis/v2/person#' . substr($role, 24);
380 $role3 = 'http://purl.imsglobal.org/vocab/lis/v2/system/person#' . substr($role, 24);
381 }
382 } elseif (strpos($role, 'http://purl.imsglobal.org/vocab/lis/v2/') === 0) {
383 if (strpos($role, 'http://purl.imsglobal.org/vocab/lis/v2/membership#') === 0) {
384 $role2 = 'urn:lti:role:ims/lis/' . substr($role, 50);
385 } elseif (strpos($role, 'http://purl.imsglobal.org/vocab/lis/v2/person#') === 0) {
386 $role2 = 'urn:lti:instrole:ims/lis/' . substr($role, 46);
387 $role3 = 'urn:lti:sysrole:ims/lis/' . substr($role, 46);
388 } elseif (strpos($role, 'http://purl.imsglobal.org/vocab/lis/v2/institution/person#') === 0) {
389 $role2 = 'urn:lti:instrole:ims/lis/' . substr($role, 58);
390 $role3 = 'http://purl.imsglobal.org/vocab/lis/v2/person#' . substr($role, 58);
391 } elseif (strpos($role, 'http://purl.imsglobal.org/vocab/lis/v2/system/person#') === 0) {
392 $role2 = 'urn:lti:sysrole:ims/lis/' . substr($role, 53);
393 $role3 = 'http://purl.imsglobal.org/vocab/lis/v2/person#' . substr($role, 53);
394 }
395 }
396 if (!empty($role2)) {
397 $ok = in_array($role2, $this->roles);
398 if (!$ok && !empty($role3)) {
399 $ok = in_array($role3, $this->roles);
400 }
401 }
402 }
403
404 return $ok;
405 }
406
407}
Class to represent a platform user.
Definition User.php:13
$ltiUserId
user ID as supplied in the last connection request.
Definition User.php:132
$sourcedId
User's sourcedId.
Definition User.php:90
__construct()
Class constructor.
Definition User.php:137
setNames($firstname, $lastname, $fullname, $middlename=null)
Set the user's name.
Definition User.php:177
$username
User's username.
Definition User.php:97
isMember()
Check if the user is a member.
Definition User.php:302
isManager()
Check if the user is a manager.
Definition User.php:292
isInstructor()
Check if the user is an instructor.
Definition User.php:262
isStaff()
Check if the user is staff.
Definition User.php:322
$roles
Roles for user.
Definition User.php:118
isLearner()
Check if the user is a learner.
Definition User.php:252
$groups
Groups for user.
Definition User.php:125
const PRINCIPAL_ROLES
List of principal roles for LTI 1.3.
Definition User.php:18
$image
User's image URI.
Definition User.php:111
isOfficer()
Check if the user is an officer.
Definition User.php:312
$firstname
User's first name.
Definition User.php:55
isContentDeveloper()
Check if the user is a content developer.
Definition User.php:272
static $allowEmptyName
Allow user name field to be empty?
Definition User.php:83
initialize()
Initialise the user.
Definition User.php:145
$fullname
User's fullname.
Definition User.php:76
$email
User's email address.
Definition User.php:104
isAdmin()
Check if the user is an administrator (at any of the system, institution or context levels).
Definition User.php:342
$middlename
User's middle name.
Definition User.php:62
isTeachingAssistant()
Check if the user is a teaching assistant.
Definition User.php:282
initialise()
Initialise the user.
Definition User.php:164
isMentor()
Check if the user is a mentor.
Definition User.php:332
setEmail($email, $defaultEmail=null)
Set the user's email address.
Definition User.php:229
$lastname
User's last name (surname or family name).
Definition User.php:69