@@ -226,14 +226,44 @@ public function isLearner()
226
226
*/
227
227
private function hasRole ($ role )
228
228
{
229
- $ role2 = null ;
230
- if ((substr ($ role , 0 , 4 ) !== 'urn: ' ) && (substr ($ role , 0 , 7 ) !== 'http:// ' ) && (substr ($ role , 0 , 8 ) !== 'https:// ' )) {
231
- $ role2 = 'http://purl.imsglobal.org/vocab/lis/v2/membership# ' . $ role ;
232
- $ role = 'urn:lti:role:ims/lis/ ' . $ role ;
233
- }
234
229
$ ok = in_array ($ role , $ this ->roles );
235
- if (!$ ok && !empty ($ role2 )) {
236
- $ ok = in_array ($ role2 , $ this ->roles );
230
+ if (!$ ok && (strpos ($ role , 'urn: ' ) !== 0 ) && (strpos ($ role , 'http:// ' ) !== 0 ) && (strpos ($ role , 'https:// ' ) !== 0 )) {
231
+ $ role = "urn:lti:role:ims/lis/ {$ role }" ;
232
+ $ ok = in_array ($ role , $ this ->roles );
233
+ }
234
+ if (!$ ok ) {
235
+ $ role2 = null ;
236
+ $ role3 = null ;
237
+ if (strpos ($ role , 'urn: ' ) === 0 ) {
238
+ if (strpos ($ role , 'urn:lti:role:ims/lis/ ' ) === 0 ) {
239
+ $ role2 = 'http://purl.imsglobal.org/vocab/lis/v2/membership# ' . substr ($ role , 21 );
240
+ } elseif (strpos ($ role , 'urn:lti:instrole:ims/lis/ ' ) === 0 ) {
241
+ $ role2 = 'http://purl.imsglobal.org/vocab/lis/v2/person# ' . substr ($ role , 25 );
242
+ $ role3 = 'http://purl.imsglobal.org/vocab/lis/v2/institution/person# ' . substr ($ role , 25 );
243
+ } elseif (strpos ($ role , 'urn:lti:sysrole:ims/lis/ ' ) === 0 ) {
244
+ $ role2 = 'http://purl.imsglobal.org/vocab/lis/v2/person# ' . substr ($ role , 24 );
245
+ $ role3 = 'http://purl.imsglobal.org/vocab/lis/v2/system/person# ' . substr ($ role , 24 );
246
+ }
247
+ } elseif (strpos ($ role , 'http://purl.imsglobal.org/vocab/lis/v2/ ' ) === 0 ) {
248
+ if (strpos ($ role , 'http://purl.imsglobal.org/vocab/lis/v2/membership# ' ) === 0 ) {
249
+ $ role2 = 'urn:lti:role:ims/lis/ ' . substr ($ role , 50 );
250
+ } elseif (strpos ($ role , 'http://purl.imsglobal.org/vocab/lis/v2/person# ' ) === 0 ) {
251
+ $ role2 = 'urn:lti:instrole:ims/lis/ ' . substr ($ role , 46 );
252
+ $ role3 = 'urn:lti:sysrole:ims/lis/ ' . substr ($ role , 46 );
253
+ } elseif (strpos ($ role , 'http://purl.imsglobal.org/vocab/lis/v2/institution/person# ' ) === 0 ) {
254
+ $ role2 = 'urn:lti:instrole:ims/lis/ ' . substr ($ role , 58 );
255
+ $ role3 = 'http://purl.imsglobal.org/vocab/lis/v2/person# ' . substr ($ role , 58 );
256
+ } elseif (strpos ($ role , 'http://purl.imsglobal.org/vocab/lis/v2/system/person# ' ) === 0 ) {
257
+ $ role2 = 'urn:lti:sysrole:ims/lis/ ' . substr ($ role , 53 );
258
+ $ role3 = 'http://purl.imsglobal.org/vocab/lis/v2/person# ' . substr ($ role , 53 );
259
+ }
260
+ }
261
+ if (!empty ($ role2 )) {
262
+ $ ok = in_array ($ role2 , $ this ->roles );
263
+ if (!$ ok && !empty ($ role3 )) {
264
+ $ ok = in_array ($ role3 , $ this ->roles );
265
+ }
266
+ }
237
267
}
238
268
239
269
return $ ok ;
0 commit comments