You are here

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 '';
}