You are here

function lti_tool_provider_memberships_drop_member in LTI Tool Provider 7

Drop membership, optionally delete content and account.

Parameters

integer $member_id: The membership id.

boolean $delete_content: Also delete content.

2 calls to lti_tool_provider_memberships_drop_member()
lti_tool_provider_memberships_batch_process_dropped_memberships in lti_tool_provider_memberships/lti_tool_provider_memberships.batch.inc
Batch Operation Callback to process dropped memberships.
lti_tool_provider_memberships_drop_members in lti_tool_provider_memberships/lti_tool_provider_memberships.module
Drop memberships, optionally delete content and account.

File

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

Code

function lti_tool_provider_memberships_drop_member($member_id, $delete_content) {
  $query = new EntityFieldQuery();
  $result = $query
    ->entityCondition('entity_type', 'lti_tool_provider_memberships')
    ->propertyCondition('lti_tool_provider_memberships_id', $member_id, '=')
    ->propertyCondition('lti_tool_provider_memberships_context_id', $_SESSION['lti_tool_provider_context_info']['context_id'], '=')
    ->execute();
  if (!empty($result)) {
    $membership = reset(entity_load('lti_tool_provider_memberships', array_keys($result['lti_tool_provider_memberships'])));
    if (module_exists('lti_tool_provider_og')) {
      if ($delete_content) {

        // Remove node(s) owned by member in this context.
        $query_join = db_query('SELECT nid, id FROM {node} JOIN {og_membership} WHERE node.nid = og_membership.etid AND og_membership.entity_type = :entity_type AND node.uid = :uid AND og_membership.group_type = :group_type AND og_membership.gid = :gid', array(
          ':entity_type' => 'node',
          ':uid' => $account->uid,
          ':group_type' => $group_entity,
          ':gid' => $group_eid,
        ));
        foreach ($query_join as $row) {

          // Delete node
          node_delete($row->nid);
        }
      }
      $group_entity = $_SESSION['lti_tool_provider_context_info']['course_entity_type'];
      $group_eid = $_SESSION['lti_tool_provider_context_info']['course_entity_eid'];

      // If handling subgroups, remove membership of any subgroup.
      if (variable_get('lti_tool_provider_memberships_subgroups') && ($selected_subgroup_bundle = variable_get('lti_tool_provider_memberships_subgroup_mapping_bundle')) != 'none:None') {
        $all_subgroups = lti_tool_provider_memberships_get_subgroups();
        foreach ($all_subgroups as $key => $subgroup) {
          if ($mid = og_get_membership($subgroup_entity, $subgroup, 'user', $membership->lti_tool_provider_memberships_uid)) {
            og_membership_delete($mid->id);
          }
        }
      }

      // Remove og membership of context group.
      $mid = og_get_membership($group_entity, $group_eid, 'user', $membership->lti_tool_provider_memberships_uid);
      og_membership_delete($mid->id);
    }

    // Update membership as dropped.
    $membership->lti_tool_provider_memberships_status = 'Inactive';
    $membership->date_dropped = REQUEST_TIME;
    lti_tool_provider_memberships_save($membership);
    drupal_set_message(t('%name\'s membership invalidated.', array(
      '%name' => $membership->lti_tool_provider_memberships_user_id,
    )));
    if ($delete_content) {

      // If user has no membership in another context, delete the account.
      $query = new EntityFieldQuery();
      $result = $query
        ->entityCondition('entity_type', 'lti_tool_provider_memberships')
        ->propertyCondition('lti_tool_provider_memberships_id', $member_id, '=')
        ->execute();
      if (empty($result)) {

        // Delete user
        user_delete($account->uid);
        drupal_set_message(t('User %name has been deleted.', array(
          '%name' => $account->name,
        )));
      }
    }
  }
  else {
    drupal_set_message(t('%name\'s membership was not found.', array(
      '%name' => $member_id,
    )));
  }
}