diff --git a/lti_tool_provider.module b/lti_tool_provider.module index a3a8657..e847912 100644 --- a/lti_tool_provider.module +++ b/lti_tool_provider.module @@ -307,10 +307,10 @@ function lti_tool_provider_unassign_global_roles_from_user($lti_roles, $uid) { * to meet the protocol. */ function lti_tool_provider_is_basic_lti_request() { - $good_message_type = array_key_exists('lti_message_type', $_REQUEST) ? $_REQUEST["lti_message_type"] : "basic-lti-launch-request"; - $good_lti_version = array_key_exists('lti_version', $_REQUEST) ? $_REQUEST["lti_version"] : "LTI-1p0"; + $good_message_type = array_key_exists('lti_message_type', $_REQUEST) ? $_REQUEST["lti_message_type"] : NULL; + $good_lti_version = array_key_exists('lti_version', $_REQUEST) ? $_REQUEST["lti_version"] : NULL; $resource_link_id = array_key_exists('resource_link_id', $_REQUEST) ? $_REQUEST["resource_link_id"] : NULL; - if ($good_message_type and $good_lti_version and isset($resource_link_id)) { + if ($good_message_type == 'basic-lti-launch-request' && in_array($good_lti_version, array('LTI-1p0', 'LTI-1p2')) && isset($resource_link_id)) { return TRUE; } return FALSE; @@ -332,6 +332,8 @@ function lti_tool_provider_get_lti_roles() { 'Mentor', 'Administrator', 'TeachingAssistant', + 'Else', + 'Alumni' ); } @@ -751,4 +753,4 @@ function lti_tool_provider_consumer_access($op, $item = NULL, $account = NULL) { } // they didn't have viewer rights ignore this call return FALSE; -} \ No newline at end of file +} diff --git a/lti_tool_provider.operations.inc b/lti_tool_provider.operations.inc index 1bf06e6..a99eb22 100644 --- a/lti_tool_provider.operations.inc +++ b/lti_tool_provider.operations.inc @@ -26,14 +26,24 @@ function lti_tool_provider_launch() { global $user; // If not an LTI launch request, then ignore. if (!lti_tool_provider_is_basic_lti_request()) { - drupal_set_message(t('Not a LTI request.'), 'info'); - return t('Error: Not a LTI request.'); + if (isset($_REQUEST['launch_presentation_return_url'])) { + lti_tool_provider_goto(url($_REQUEST['launch_presentation_return_url'], array('query' => array('lti_errormsg' => t('Error: Not a LTI request.'))))); + } + else { + drupal_set_message(t('Error: Not a LTI request.'), 'error'); + return t('Error: Not a LTI request.'); + } } // Insure we have a valid context. if (empty($_REQUEST['oauth_consumer_key'])) { unset($_SESSION['lti_tool_provider_context_info']); - drupal_set_message(t('Not a valid LTI context.'), 'info'); - return t('Error: Invalid context. Missing oauth_consumer_key in request.'); + if (isset($_REQUEST['launch_presentation_return_url'])) { + lti_tool_provider_goto(url($_REQUEST['launch_presentation_return_url'], array('query' => array('lti_errormsg' => t(t('Not a valid LTI context.')))))); + } + else { + drupal_set_message(t('Error: Invalid context. Missing oauth_consumer_key in request.'), 'error'); + return t('Error: Invalid context. Missing oauth_consumer_key in request.'); + } } // Begin a new session based on this LTI launch request. drupal_session_start(); @@ -48,19 +58,24 @@ function lti_tool_provider_launch() { $server->verify_request($request); // This is a LTI launch request. } catch (Exception $e) { - drupal_set_message(check_plain($e->getMessage()), 'error'); - return t('Error: Invalid context, OAuth failure.'); + if (isset($_REQUEST['launch_presentation_return_url'])) { + lti_tool_provider_goto(url($_REQUEST['launch_presentation_return_url'], array('query' => array('lti_errormsg' => t('Error: Invalid context, OAuth failure.'))))); + } + else { + drupal_set_message(check_plain($e->getMessage()), 'error'); + return t('Error: Invalid context, OAuth failure.'); + } } // Collect the launch information for later storage in the session. $launch_info = $request->get_parameters(); - if (empty($launch_info['context_id'])) { + /*if (empty($launch_info['context_id'])) { if (isset($launch_info['launch_presentation_return_url'])) { lti_tool_provider_goto(url($launch_info['launch_presentation_return_url'], array('query' => array('lti_errormsg' => t('Error: Invalid context, No context Id.'))))); } else { return t('Error: Invalid context, No context Id.'); } - } + }*/ $consumer = lti_tool_provider_get_consumer_by_key($oauth_consumer_key); $launch_info['consumer_id'] = $consumer->lti_tool_provider_consumer_id; $launch_info['consumer_domain'] = $consumer->lti_tool_provider_consumer_domain; diff --git a/lti_tool_provider_memberships/lti_tool_provider_memberships.module b/lti_tool_provider_memberships/lti_tool_provider_memberships.module index 8f7b8d4..7c5e6c5 100644 --- a/lti_tool_provider_memberships/lti_tool_provider_memberships.module +++ b/lti_tool_provider_memberships/lti_tool_provider_memberships.module @@ -25,7 +25,7 @@ function lti_tool_provider_memberships_menu() { 'description' => 'Configure LTI Memberships groups.', 'page callback' => 'drupal_get_form', 'page arguments' => array('lti_tool_provider_memberships_subgroup_mapping'), - 'access callback' => 'lti_tool_provider_memberships_access_and_og', + 'access callback' => 'lti_tool_provider_memberships_access_and_og', 'access arguments' => array('administer lti_tool_provider module'), 'file' => 'lti_tool_provider_memberships.admin.inc', 'weight' => -3, @@ -911,18 +911,25 @@ function lti_tool_provider_memberships_lti_tool_provider_launch_alter(&$launch_i // If user does not have a membership, create one global $user; $query = new EntityFieldQuery(); - $result = $query - -> entityCondition('entity_type', 'lti_tool_provider_memberships') - -> propertyCondition('lti_tool_provider_memberships_context_id', $launch_info['context_id']) - -> propertyCondition('lti_tool_provider_memberships_user_id', $launch_info['user_id']) - -> execute(); + $result = $query->entityCondition('entity_type', 'lti_tool_provider_memberships'); + // can't assume context_id isset, not required by IMS specification + if (isset($launch_info['context_id'])) { + $result->propertyCondition('lti_tool_provider_memberships_context_id', $launch_info['context_id']); + } + // can't assume user_id is set when working with guest access + if (isset($launch_info['user_id'])) { + $result->propertyCondition('lti_tool_provider_memberships_user_id', $launch_info['user_id']); + } + $result->execute(); if (empty($result)) { $entity = entity_get_controller('lti_tool_provider_memberships')->create(); $entity->lti_tool_provider_memberships_context_id = $launch_info['context_id']; $entity->lti_tool_provider_memberships_uid = isset($account->uid) ? $account->uid : NULL; $entity->lti_tool_provider_memberships_user_id = $launch_info['user_id']; $entity->lti_tool_provider_memberships_role = $launch_info['roles']; - $entity->lti_tool_provider_memberships_person_name_full = $launch_info['lis_person_name_full']; + if (isset($launch_info['lis_person_name_full'])) { + $entity->lti_tool_provider_memberships_person_name_full = $launch_info['lis_person_name_full']; + } lti_tool_provider_memberships_save($entity); } } diff --git a/lti_tool_provider_og/lti_tool_provider_og.module b/lti_tool_provider_og/lti_tool_provider_og.module index 2e437d3..6d33d5e 100644 --- a/lti_tool_provider_og/lti_tool_provider_og.module +++ b/lti_tool_provider_og/lti_tool_provider_og.module @@ -127,7 +127,7 @@ function lti_tool_provider_og_lti_tool_provider_launch_alter(&$launch_info, $acc foreach (og_get_all_group($group_entity) as $key => $group_id) { $group_wrapper = entity_metadata_wrapper($group_entity, $group_id); $fields = $group_wrapper->getPropertyInfo(); - if (isset($fields[$mapping_field]) && $group_wrapper->{$mapping_field}->value() == $launch_info['context_id']) { + if (isset($fields[$mapping_field]) && isset($launch_info['context_id']) && $group_wrapper->{$mapping_field}->value() == $launch_info['context_id']) { // Found the group that matches the context_id. $course_found = TRUE; $launch_info['course_entity_type'] = $group_entity; @@ -152,7 +152,7 @@ function lti_tool_provider_og_lti_tool_provider_launch_alter(&$launch_info, $acc } // Provision group. // FIX THIS does not cope with non-node group bundles. - if (!$course_found && ($launch_info['context_id'] != NULL) && + if (!$course_found && isset($launch_info['context_id']) && ($launch_info['context_id'] != NULL) && (variable_get('lti_tool_provider_og_provision_groups') == 1) && ((variable_get('lti_tool_provider_og_provision_groups_anon') == 1) || (user_access('create ' . $group_bundle . ' content', $account)))) { $node = new stdClass(); @@ -189,7 +189,13 @@ function lti_tool_provider_og_lti_tool_provider_launch_alter(&$launch_info, $acc $launch_info['destination'] = $launch_info['course_entity_type'] . '/' . $launch_info['course_entity_eid']; } else { - drupal_set_message(t('No course corresponding to @label exists.', array('@label' => $launch_info['context_label']))); + if (isset($launch_info['context_label'])) { + $label = $launch_info['context_label']; + } + else { + $label = ''; + } + drupal_set_message(t('No course corresponding to @label exists.', array('@label' => $label))); } } } diff --git a/lti_tool_provider_outcomes/lti_tool_provider_outcomes.module b/lti_tool_provider_outcomes/lti_tool_provider_outcomes.module index 5c79122..e97f0da 100644 --- a/lti_tool_provider_outcomes/lti_tool_provider_outcomes.module +++ b/lti_tool_provider_outcomes/lti_tool_provider_outcomes.module @@ -749,6 +749,9 @@ function lti_tool_provider_outcomes_lti_tool_provider_create_account_alter(&$acc // Set the resultvalue_sourcedids in the lti info. $lti_info['resultvalue_sourcedids'] = isset($lti_info['ext_ims_lis_resultvalue_sourcedids']) ? $lti_info['ext_ims_lis_resultvalue_sourcedids'] : 'decimal'; // Create the resource. + if (!isset($lti_info['resource_link_title'])) { + $lti_info['resource_link_title'] = ''; + } $lti_info['resource_id'] = lti_tool_provider_outcomes_get_set_resource($lti_info['consumer_id'], $lti_info['context_id'], $lti_info['resource_link_id'], $lti_info['resource_link_title'], $lti_info['resultvalue_sourcedids']); } // Create or update the outcome. @@ -763,4 +766,4 @@ function lti_tool_provider_outcomes_lti_tool_provider_memberships_get_alter(&$me if (isset($member_data->lis_result_sourcedid)) { $member['lis_result_sourcedid'] = (string)$member_data->lis_result_sourcedid; } -} \ No newline at end of file +}