LTI Integration Library  3.1.0
PHP class library for building LTI integrations
Membership.php
Go to the documentation of this file.
1 <?php
2 
4 
5 use ceLTIc\LTI;
8 
17 class Membership extends Service
18 {
19 
25  private $source;
26 
33  public function __construct($source, $endpoint)
34  {
35  $consumer = $source->getConsumer();
36  parent::__construct($consumer, $endpoint, 'application/vnd.ims.lis.v2.membershipcontainer+json');
37  $this->source = $source;
38  }
39 
48  public function get($role = null, $limit = 0)
49  {
50  $isLink = is_a($this->source, 'ceLTIc\LTI\ResourceLink');
51  $parameters = array();
52  if (!empty($role)) {
53  $parameters['role'] = $role;
54  }
55  if ($limit > 0) {
56  $parameters['limit'] = strval($limit);
57  }
58  if ($isLink) {
59  $parameters['rlid'] = $this->source->getId();
60  }
61  $http = $this->send('GET', $parameters);
62  if (!$http->ok) {
63  $userResults = false;
64  } else {
65  $userResults = array();
66  if ($isLink) {
67  $oldUsers = $this->source->getUserResultSourcedIDs(true, LTI\ToolProvider::ID_SCOPE_RESOURCE);
68  }
69  foreach ($http->responseJson->pageOf->membershipSubject->membership as $membership) {
70  $member = $membership->member;
71  if ($isLink) {
72  $userresult = LTI\UserResult::fromResourceLink($this->source, $member->userId);
73  } else {
74  $userresult = new LTI\UserResult();
75  $userresult->ltiUserId = $member->userId;
76  }
77 
78 // Set the user name
79  $firstname = (isset($member->givenName)) ? $member->givenName : '';
80  $lastname = (isset($member->familyName)) ? $member->familyName : '';
81  $fullname = (isset($member->name)) ? $member->name : '';
82  $userresult->setNames($firstname, $lastname, $fullname);
83 
84 // Set the user email
85  $email = (isset($member->email)) ? $member->email : '';
86  $userresult->setEmail($email, $this->source->getConsumer()->defaultEmail);
87 
88 // Set the user roles
89  if (isset($membership->role)) {
90  $userresult->roles = LTI\ToolProvider::parseRoles($membership->role);
91  }
92 
93 // If a result sourcedid is provided save the user
94  if ($isLink) {
95  if (isset($member->message)) {
96  foreach ($member->message as $message) {
97  if (isset($message->message_type) && (($message->message_type === 'basic-lti-launch-request') || (strtolower($message->message_type) === 'ltiresourcelinkrequest'))) {
98  if (isset($message->lis_result_sourcedid)) {
99  $userresult->ltiResultSourcedId = $message->lis_result_sourcedid;
100  $userresult->save();
101  }
102  break;
103  }
104  }
105  }
106  }
107  $userResults[] = $userresult;
108 
109 // Remove old user (if it exists)
110  if ($isLink) {
111  unset($oldUsers[$userresult->getId(LTI\ToolProvider::ID_SCOPE_RESOURCE)]);
112  }
113  }
114 
116  if ($isLink) {
117  foreach ($oldUsers as $id => $userresult) {
118  $userresult->delete();
119  }
120  }
121  }
122 
123  return $userResults;
124  }
125 
126 }
$endpoint
Service endpoint.
Definition: Service.php:32
static fromResourceLink($resourceLink, $ltiUserId)
Class constructor from resource link.
Definition: UserResult.php:255
Class to implement a service.
Definition: Service.php:17
__construct($source, $endpoint)
Class constructor.
Definition: Membership.php:33
Class to represent a tool consumer context.
Definition: Context.php:17
Class to implement the Membership service.
Definition: Membership.php:17
send($method, $parameters=array(), $body=null)
Send a service request.
Definition: Service.php:78
const ID_SCOPE_RESOURCE
Prefix the ID with the consumer key and resource ID.
Class to represent a tool consumer user.
Definition: UserResult.php:15
static parseRoles($roles, $ltiVersion=self::LTI_VERSION1)
Get an array of fully qualified user roles.