Fixing the method used to get LTI roles
authorChris Scribner <scriby@gmail.com>
Fri, 14 Oct 2011 15:33:23 +0000 (11:33 -0400)
committerChris Scribner <scriby@gmail.com>
Mon, 7 Nov 2011 01:42:02 +0000 (20:42 -0500)
mod/lti/db/access.php
mod/lti/launch.php
mod/lti/locallib.php
mod/lti/version.php

index bc8a15f..c9c70d4 100644 (file)
@@ -45,7 +45,6 @@
 $capabilities = array(
 
     'mod/lti:view' => array(
-
         'captype' => 'read',
         'contextlevel' => CONTEXT_MODULE,
         'archetypes' => array(
@@ -69,6 +68,18 @@ $capabilities = array(
         )
     ),
     
+    'mod/lti:manage' => array(
+        'riskbitmask' => RISK_XSS,
+
+        'captype' => 'write',
+        'contextlevel' => CONTEXT_MODULE,
+        'archetypes' => array(
+            'teacher' => CAP_ALLOW,
+            'editingteacher' => CAP_ALLOW,
+            'manager' => CAP_ALLOW
+        )
+    ),
+    
     'mod/lti:addcoursetool' => array(
         'captype' => 'write',
         'contextlevel' => CONTEXT_COURSE,
index 563a96a..fa92863 100644 (file)
@@ -80,5 +80,6 @@ require_login($course);
 
 add_to_log($course->id, "lti", "launch", "launch.php?id=$cm->id", "$basiclti->id");
 
+$basiclti->cmid = $cm->id;
 lti_view($basiclti);
 
index 5ec5048..281eeda 100644 (file)
@@ -201,8 +201,11 @@ function lti_build_sourcedid($instanceid, $userid, $launchid = null, $servicesal
 function lti_build_request($instance, $typeconfig, $course) {
     global $USER, $CFG;
 
-    $context = get_context_instance(CONTEXT_COURSE, $course->id);
-    $role = lti_get_ims_role($USER, $context);
+    if(empty($instance->cmid)){
+        $instance->cmid = 0;
+    }
+    
+    $role = lti_get_ims_role($USER, $instance->cmid);
 
     $locale = $course->lang;
     if ( strlen($locale) < 1 ) {
@@ -433,34 +436,27 @@ function lti_map_keyname($key) {
 }
 
 /**
- * Returns the IMS user role in a given context
- *
- * This function queries Moodle for an user role and
- * returns the correspondant IMS role
- *
- * @param StdClass $user          Moodle user instance
- * @param StdClass $context       Moodle context
- *
- * @return string                 IMS Role
- *
+ * Gets the IMS role string for the specified user and LTI course module.
+ * 
+ * @param mixed $user User object or user id
+ * @param int $cmid The course module id of the LTI activity
+ * @return string A role string suitable for passing with an LTI launch
  */
-function lti_get_ims_role($user, $context) {
-
-    $roles = get_user_roles($context, $user->id);
-    $rolesname = array();
-    foreach ($roles as $role) {
-        $rolesname[] = $role->shortname;
-    }
-
-    if (in_array('admin', $rolesname) || in_array('coursecreator', $rolesname)) {
-        return get_string('imsroleadmin', 'lti');
+function lti_get_ims_role($user, $cmid) {
+    $context = get_context_instance(CONTEXT_MODULE, $cmid);
+    $roles = array();
+    
+    if(has_capability('mod/lti:manage', $context)){
+        array_push($roles, 'Instructor');
+    } else {
+        array_push($roles, 'Learner');
     }
-
-    if (in_array('editingteacher', $rolesname) || in_array('teacher', $rolesname)) {
-        return get_string('imsroleinstructor', 'lti');
+    
+    if(is_siteadmin($user)){
+        array_push($roles, 'urn:lti:sysrole:ims/lis/Administrator');
     }
-
-    return get_string('imsrolelearner', 'lti');
+    
+    return join(',', $roles);
 }
 
 /**
index 5fbab51..32d70ec 100644 (file)
@@ -46,5 +46,5 @@
  * @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
  */
 
-$module->version  = 2011101201;  // The current module version (Date: YYYYMMDDXX)
+$module->version  = 2011101400;  // The current module version (Date: YYYYMMDDXX)
 $module->cron     = 0;           // Period for cron to check this module (secs)