public function test_split_custom_parameters() { $this->assertEquals(lti_split_custom_parameters("x=1\ny=2"), array('custom_x' => '1', 'custom_y' => '2')); $this->assertEquals(lti_split_custom_parameters('x=1;y=2'), array('custom_x' => '1', 'custom_y' => '2')); $this->assertEquals(lti_split_custom_parameters('Review:Chapter=1.2.56'), array('custom_review_chapter' => '1.2.56')); $this->assertEquals(lti_split_custom_parameters('Complex!@#$^*(){}[]KEY=Complex!@#$^*(){}[]Value'), array('custom_complex____________key' => 'Complex!@#$^*(){}[]Value')); }
public function test_split_custom_parameters() { $tool = new stdClass(); $tool->enabledcapability = ''; $this->assertEquals(lti_split_custom_parameters(null, $tool, array(), "x=1\ny=2", false), array('custom_x' => '1', 'custom_y' => '2')); // Removed repeat of previous test with a semicolon separator. $this->assertEquals(lti_split_custom_parameters(null, $tool, array(), 'Review:Chapter=1.2.56', false), array('custom_review_chapter' => '1.2.56')); $this->assertEquals(lti_split_custom_parameters(null, $tool, array(), 'Complex!@#$^*(){}[]KEY=Complex!@#$^*;(){}[]½Value', false), array('custom_complex____________key' => 'Complex!@#$^*;(){}[]½Value')); }
public function test_split_custom_parameters() { $this->resetAfterTest(); $tool = new stdClass(); $tool->enabledcapability = ''; $tool->parameter = ''; $this->assertEquals(lti_split_custom_parameters(null, $tool, array(), "x=1\ny=2", false), array('custom_x' => '1', 'custom_y' => '2')); // Removed repeat of previous test with a semicolon separator. $this->assertEquals(lti_split_custom_parameters(null, $tool, array(), 'Review:Chapter=1.2.56', false), array('custom_review_chapter' => '1.2.56')); $this->assertEquals(lti_split_custom_parameters(null, $tool, array(), 'Complex!@#$^*(){}[]KEY=Complex!@#$^*;(){}[]½Value', false), array('custom_complex____________key' => 'Complex!@#$^*;(){}[]½Value')); // Test custom parameter that returns $USER property. $user = $this->getDataGenerator()->create_user(array('middlename' => 'SOMETHING')); $this->setUser($user); $this->assertEquals(array('custom_x' => '1', 'custom_y' => 'SOMETHING'), lti_split_custom_parameters(null, $tool, array(), "x=1\ny=\$Person.name.middle", false)); }
/** * This function builds the request that must be sent to the tool producer * * @param object $instance Basic LTI instance object * @param object $typeconfig Basic LTI tool configuration * @param object $course Course object * * @return array $request Request details */ function lti_build_request($instance, $typeconfig, $course) { global $USER, $CFG; if (empty($instance->cmid)) { $instance->cmid = 0; } $role = lti_get_ims_role($USER, $instance->cmid, $instance->course); $locale = $course->lang; if ( strlen($locale) < 1 ) { $locale = $CFG->lang; } $requestparams = array( 'resource_link_id' => $instance->id, 'resource_link_title' => $instance->name, 'resource_link_description' => $instance->intro, 'user_id' => $USER->id, 'roles' => $role, 'context_id' => $course->id, 'context_label' => $course->shortname, 'context_title' => $course->fullname, 'launch_presentation_locale' => $locale, ); $placementsecret = $instance->servicesalt; if ( isset($placementsecret) ) { $sourcedid = json_encode(lti_build_sourcedid($instance->id, $USER->id, null, $placementsecret)); } if ( isset($placementsecret) && ( $typeconfig['acceptgrades'] == LTI_SETTING_ALWAYS || ( $typeconfig['acceptgrades'] == LTI_SETTING_DELEGATE && $instance->instructorchoiceacceptgrades == LTI_SETTING_ALWAYS ) ) ) { $requestparams['lis_result_sourcedid'] = $sourcedid; //Add outcome service URL $serviceurl = new moodle_url('/mod/lti/service.php'); $serviceurl = $serviceurl->out(); if ($typeconfig['forcessl'] == '1') { $serviceurl = lti_ensure_url_is_https($serviceurl); } $requestparams['lis_outcome_service_url'] = $serviceurl; } // Send user's name and email data if appropriate if ( $typeconfig['sendname'] == LTI_SETTING_ALWAYS || ( $typeconfig['sendname'] == LTI_SETTING_DELEGATE && $instance->instructorchoicesendname == LTI_SETTING_ALWAYS ) ) { $requestparams['lis_person_name_given'] = $USER->firstname; $requestparams['lis_person_name_family'] = $USER->lastname; $requestparams['lis_person_name_full'] = $USER->firstname." ".$USER->lastname; } if ( $typeconfig['sendemailaddr'] == LTI_SETTING_ALWAYS || ( $typeconfig['sendemailaddr'] == LTI_SETTING_DELEGATE && $instance->instructorchoicesendemailaddr == LTI_SETTING_ALWAYS ) ) { $requestparams['lis_person_contact_email_primary'] = $USER->email; } // Concatenate the custom parameters from the administrator and the instructor // Instructor parameters are only taken into consideration if the administrator // has giver permission $customstr = $typeconfig['customparameters']; $instructorcustomstr = $instance->instructorcustomparameters; $custom = array(); $instructorcustom = array(); if ($customstr) { $custom = lti_split_custom_parameters($customstr); } if (!isset($typeconfig['allowinstructorcustom']) || $typeconfig['allowinstructorcustom'] == LTI_SETTING_NEVER) { $requestparams = array_merge($custom, $requestparams); } else { if ($instructorcustomstr) { $instructorcustom = lti_split_custom_parameters($instructorcustomstr); } foreach ($instructorcustom as $key => $val) { // Ignore the instructor's parameter if (!array_key_exists($key, $custom)) { $custom[$key] = $val; } } $requestparams = array_merge($custom, $requestparams); } // Make sure we let the tool know what LMS they are being called from $requestparams["ext_lms"] = "moodle-2"; $requestparams['tool_consumer_info_product_family_code'] = 'moodle'; $requestparams['tool_consumer_info_version'] = strval($CFG->version); // Add oauth_callback to be compliant with the 1.0A spec $requestparams['oauth_callback'] = 'about:blank'; //The submit button needs to be part of the signature as it gets posted with the form. //This needs to be here to support launching without javascript. $submittext = get_string('press_to_submit', 'lti'); $requestparams['ext_submit'] = $submittext; $requestparams['lti_version'] = 'LTI-1p0'; $requestparams['lti_message_type'] = 'basic-lti-launch-request'; return $requestparams; }
/** * This function builds the custom parameters * * @param object $toolproxy Tool proxy instance object * @param object $tool Tool instance object * @param object $instance Tool placement instance object * @param array $params LTI launch parameters * @param string $customstr Custom parameters defined for tool * @param string $instructorcustomstr Custom parameters defined for this placement * @param boolean $islti2 True if an LTI 2 tool is being launched * * @return array Custom parameters */ function lti_build_custom_parameters($toolproxy, $tool, $instance, $params, $customstr, $instructorcustomstr, $islti2) { // Concatenate the custom parameters from the administrator and the instructor // Instructor parameters are only taken into consideration if the administrator // has given permission. $custom = array(); if ($customstr) { $custom = lti_split_custom_parameters($toolproxy, $tool, $params, $customstr, $islti2); } if (!isset($typeconfig['allowinstructorcustom']) || $typeconfig['allowinstructorcustom'] != LTI_SETTING_NEVER) { if ($instructorcustomstr) { $custom = array_merge(lti_split_custom_parameters($toolproxy, $tool, $params, $instructorcustomstr, $islti2), $custom); } } if ($islti2) { $custom = array_merge(lti_split_custom_parameters($toolproxy, $tool, $params, $tool->parameter, true), $custom); $settings = lti_get_tool_settings($tool->toolproxyid); $custom = array_merge($custom, lti_get_custom_parameters($toolproxy, $tool, $params, $settings)); $settings = lti_get_tool_settings($tool->toolproxyid, $instance->course); $custom = array_merge($custom, lti_get_custom_parameters($toolproxy, $tool, $params, $settings)); $settings = lti_get_tool_settings($tool->toolproxyid, $instance->course, $instance->id); $custom = array_merge($custom, lti_get_custom_parameters($toolproxy, $tool, $params, $settings)); } return $custom; }