function lti_tool_provider_memberships_request in LTI Tool Provider 7
Fetch memberships data from consumer.
Perform an OAuth POST on the memberships service and retrieve the memberships XML.
Return value
string The retrieved xml.
1 call to lti_tool_provider_memberships_request()
- lti_tool_provider_memberships_get_memberships in lti_tool_provider_memberships/
lti_tool_provider_memberships.module - Form a membership list array from the XML memberships.
File
- lti_tool_provider_memberships/
lti_tool_provider_memberships.module, line 589 - lti_tool_provider_memberships hook implementations and support functions.
Code
function lti_tool_provider_memberships_request() {
if (isset($_SESSION['lti_tool_provider_context_info'])) {
$url = $_SESSION['lti_tool_provider_context_info']['ext_ims_lis_memberships_url'];
$query_params = array();
$query_string = parse_url($url, PHP_URL_QUERY);
if (!is_null($query_string)) {
$query_items = explode('&', $query_string);
foreach ($query_items as $item) {
if (strpos($item, '=') !== FALSE) {
list($name, $value) = explode('=', $item);
$query_params[$name] = $value;
}
else {
$query_params[$name] = '';
}
}
}
$params = array(
'lti_message_type' => variable_get('lti_tool_provider_memberships_subgroups') ? 'basic-lis-readmembershipsforcontextwithgroups' : 'basic-lis-readmembershipsforcontext',
'id' => $_SESSION['lti_tool_provider_context_info']['ext_ims_lis_memberships_id'],
'lti_version' => 'LTI-1p0',
'oauth_callback' => 'about:blank',
'oauth_consumer_key' => $_SESSION['lti_tool_provider_context_info']['oauth_consumer_key'],
);
$params = $params + $query_params;
$oauth_consumer_key = $_SESSION['lti_tool_provider_context_info']['oauth_consumer_key'];
$store = new LTIToolProviderOAuthDataStore();
$consumer = $store
->lookup_consumer($oauth_consumer_key);
$token = '';
$hmac_method = new OAuthSignatureMethod_HMAC_SHA1();
$request = OAuthRequest::from_consumer_and_token($consumer, $token, 'POST', $url, $params);
$request
->sign_request($hmac_method, $consumer, $token);
$params = $request
->get_parameters();
foreach (array_keys($query_params) as $name) {
unset($params[$name]);
}
$options = array(
'data' => http_build_query($params),
'method' => 'POST',
'max_redirects' => 5,
'headers' => array(
'Content-Type' => 'application/x-www-form-urlencoded',
),
);
$ext_response = drupal_http_request($url, $options);
if ($ext_response->code == 200) {
if ($ext_response->status_message == 'OK') {
return $ext_response->data;
}
drupal_set_message(t('Request failed with status @message.', array(
'@message' => $ext_response->status_message,
)), 'info');
}
else {
drupal_set_message(t('Request failed with code @code.', array(
'@code' => $ext_response->code,
)), 'info');
}
}
return '';
}