You are here

function lti_tool_provider_memberships_add_member in LTI Tool Provider 7

Add a membership for a new user.

Parameters

array $member: The data for the new member.

2 calls to lti_tool_provider_memberships_add_member()
lti_tool_provider_memberships_add_members in lti_tool_provider_memberships/lti_tool_provider_memberships.module
Add memberships for new users.
lti_tool_provider_memberships_batch_process_added_memberships in lti_tool_provider_memberships/lti_tool_provider_memberships.batch.inc
Batch Operation Callback to process added memberships.

File

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

Code

function lti_tool_provider_memberships_add_member($member) {
  $lti_user = $member['user_id'] . $_SESSION['lti_tool_provider_context_info']['consumer_domain'];
  $result = db_query('SELECT uid FROM {users} WHERE name = :lti_user', array(
    ':lti_user' => $lti_user,
  ));
  $user_created = FALSE;
  foreach ($result as $row) {
    if (isset($row->uid)) {
      $user_created = TRUE;
    }
  }

  // Create user
  if (!$user_created) {
    $member['consumer_domain'] = $_SESSION['lti_tool_provider_context_info']['consumer_domain'];
    $member['lis_person_contact_email_primary'] = $member['person_contact_email_primary'];
    $member['lis_person_name_given'] = $member['person_name_given'];
    $member['lis_person_name_family'] = $member['person_name_family'];
    $member['lis_person_name_full'] = $member['person_name_full'];
    lti_tool_provider_create_account($lti_user, $member);
  }
  $account = user_load_by_name($lti_user);

  // Map Drupal global roles based on the user LTI role.
  if (isset($member['roles'])) {
    lti_tool_provider_assign_global_roles_to_user($member['roles'], $account->uid);
  }
  if (module_exists('lti_tool_provider_og')) {
    $users_groups = og_get_entity_groups('user', $account->uid);

    // Add the user to the group.
    $group_entity = $_SESSION['lti_tool_provider_context_info']['course_entity_type'];
    $group_eid = $_SESSION['lti_tool_provider_context_info']['course_entity_eid'];
    if (!array_key_exists($group_entity, $users_groups) || !in_array($group_eid, $users_groups[$group_entity])) {
      og_group($group_entity, $group_eid, array(
        'entity_type' => 'user',
        'entity' => $account->uid,
        'field_name' => FALSE,
        'state' => OG_STATE_ACTIVE,
      ));
    }

    // Grant the course group roles.
    if (isset($member['roles'])) {
      $found_roles = lti_tool_provider_og_search_roles($member['roles']);
      foreach ($found_roles as $lti_role => $found_role) {
        og_role_grant($group_entity, $group_eid, $account->uid, $found_role);
      }
    }

    // If with_groups, provision subgroups and grant subgroup membership.
    if (variable_get('lti_tool_provider_memberships_subgroups')) {
      lti_tool_provider_memberships_add_user_to_membership_groups($account->uid, $member['groups'], $member['roles']);
    }
  }

  // Update or create the membership.
  $query = new EntityFieldQuery();
  $result = $query
    ->entityCondition('entity_type', 'lti_tool_provider_memberships')
    ->propertyCondition('lti_tool_provider_memberships_user_id', $member['user_id'], '=')
    ->propertyCondition('lti_tool_provider_memberships_context_id', $_SESSION['lti_tool_provider_context_info']['context_id'], '=')
    ->execute();
  if (!empty($result)) {

    // Update
    $entity = reset(entity_load('lti_tool_provider_memberships', array_keys($result['lti_tool_provider_memberships'])));
    $entity->lti_tool_provider_memberships_status = 'Active';
    $entity->lti_tool_provider_memberships_date_dropped = NULL;
    $entity->lti_tool_provider_memberships_date_added = REQUEST_TIME;
  }
  else {

    // Create a memberships entity
    $entity = entity_get_controller('lti_tool_provider_memberships')
      ->create();
    $entity->lti_tool_provider_memberships_context_id = $_SESSION['lti_tool_provider_context_info']['context_id'];
    $entity->lti_tool_provider_memberships_uid = $account->uid;
    $entity->lti_tool_provider_memberships_user_id = $member['user_id'];
    $entity->lti_tool_provider_memberships_role = $member['roles'];
    $entity->lti_tool_provider_memberships_person_name_full = $member['person_name_full'];
  }
  lti_tool_provider_memberships_save($entity);
  drupal_set_message(t('Membership for %name has been updated.', array(
    '%name' => $member['user_id'],
  )));
}