You are here

function lti_tool_provider_memberships_get_memberships in LTI Tool Provider 7

Form a membership list array from the XML memberships.

Parameters

boolean $new: If TRUE, retrieve a new memberships list from the consumer.

Return value

array|NULL An array containing the memberships from the latest saved memberships data file.

1 call to lti_tool_provider_memberships_get_memberships()
lti_tool_provider_memberships_batch_get_memberships in lti_tool_provider_memberships/lti_tool_provider_memberships.batch.inc
Batch Operation Callback to get membership data.

File

lti_tool_provider_memberships/lti_tool_provider_memberships.module, line 656
lti_tool_provider_memberships hook implementations and support functions.

Code

function lti_tool_provider_memberships_get_memberships($new = FALSE) {
  $memberships_context = lti_tool_provider_memberships_get_memberships_context();
  $fid = $memberships_context->lti_tool_provider_memberships_context_file_id;
  if ($new || $fid == 0) {

    // Retrieve a new copy of the memberships XML from the Consumer.
    $data = lti_tool_provider_memberships_request();
    if ($fid != 0) {

      // Remove the old file.
      $file = file_load($fid);
      file_usage_delete($file, 'lti_tool_provider_memberships');
      file_delete($file);
    }

    // Create the new file.
    $file = file_save_data($data, NULL, FILE_EXISTS_REPLACE);
    file_usage_add($file, 'lti_tool_provider_memberships', 'lti_tool_provider_memberships_context', $memberships_context->lti_tool_provider_memberships_context_id);

    // Set the fid in the memberships context to the new file and save it.
    $memberships_context->lti_tool_provider_memberships_context_file_id = $file->fid;
    lti_tool_provider_memberships_context_save($memberships_context);
  }
  else {
    $file = file_load($fid);
    $data = file_get_contents($file->uri);
  }
  $memberships = array();
  if ($data != '') {
    $message_response = new SimpleXMLElement($data);
    if (isset($message_response->memberships)) {
      $members = $message_response->memberships->member;
      $count = $members
        ->count();
      for ($i = 0; $i < $count; $i++) {
        $memberships[$i]['user_id'] = (string) $members[$i]->user_id;
        $memberships[$i]['roles'] = (string) $members[$i]->roles;
        $memberships[$i]['person_sourcedid'] = (string) $members[$i]->person_sourcedid;
        $memberships[$i]['person_contact_email_primary'] = (string) $members[$i]->person_contact_email_primary;
        $memberships[$i]['person_name_given'] = (string) $members[$i]->person_name_given;
        $memberships[$i]['person_name_family'] = (string) $members[$i]->person_name_family;
        $memberships[$i]['person_name_full'] = (string) $members[$i]->person_name_full;
        if (variable_get('lti_tool_provider_memberships_subgroups') && isset($members[$i]->groups)) {
          foreach ($members[$i]->groups->group as $group) {
            $memberships[$i]['groups'][] = array(
              'id' => (string) $group->id,
              'title' => (string) $group->title,
            );
          }
        }

        // Allow other modules to alter.
        drupal_alter('lti_tool_provider_memberships_get', $memberships[$i], $members[$i]);
      }
    }
  }
  return $memberships;
}