You are here

function lti_tool_provider_memberships_get_altered_memberships in LTI Tool Provider 7

Extract the memberships with altered groups and roles from the memberships list.

Parameters

array $member_data: The current saved memberships data.

Return value

array The altered memberships.

1 call to lti_tool_provider_memberships_get_altered_memberships()
lti_tool_provider_memberships_batch_get_altered_memberships in lti_tool_provider_memberships/lti_tool_provider_memberships.batch.inc
Batch Operation Callback to get altered memberships.

File

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

Code

function lti_tool_provider_memberships_get_altered_memberships($member_data) {
  $altered_members = array();
  if (!empty($member_data)) {
    $count = count($member_data);
    for ($i = 0; $i < $count; $i++) {
      $query = new EntityFieldQuery();
      $result = $query
        ->entityCondition('entity_type', 'lti_tool_provider_memberships')
        ->propertyCondition('lti_tool_provider_memberships_context_id', $_SESSION['lti_tool_provider_context_info']['context_id'], '=')
        ->propertyCondition('lti_tool_provider_memberships_user_id', $member_data[$i]['user_id'])
        ->propertyCondition('lti_tool_provider_memberships_status', 'Active')
        ->execute();
      if (isset($result['lti_tool_provider_memberships'])) {
        $member = reset(entity_load('lti_tool_provider_memberships', array_keys($result['lti_tool_provider_memberships'])));
        if ($member->lti_tool_provider_memberships_role != $member_data[$i]['roles']) {
          $altered_members[$i]['lti_tool_provider_memberships_id'] = $member->lti_tool_provider_memberships_id;
          $altered_members[$i]['user_id'] = $member_data[$i]['user_id'];
          $altered_members[$i]['person_name_full'] = $member_data[$i]['person_name_full'];
          $altered_members[$i]['old_roles'] = $member->lti_tool_provider_memberships_role;
          $altered_members[$i]['new_roles'] = $member_data[$i]['roles'];
          $altered_members[$i]['existing_roles'] = $member_data[$i]['roles'];
          $altered_members[$i]['dropped_subgroups'] = array();
          $altered_members[$i]['added_subgroups'] = array();
        }
        if (variable_get('lti_tool_provider_memberships_subgroups')) {
          $subgroups = lti_tool_provider_memberships_get_subgroups();

          // Find the subgroup nids that match the member data groups.
          // Get users current groups.
          $entity_groups = og_get_entity_groups('user', $member->lti_tool_provider_memberships_uid);
          $users_groups = empty($entity_groups) ? array() : reset($entity_groups);
          $old_subgroups = array_intersect($subgroups, $users_groups);
          $current_groups = array();
          foreach ($old_subgroups as $gid) {
            $group = node_load($gid);
            $current_groups[] = array(
              'id' => empty($group->field_lti_memberships_group_id) ? '' : $group->field_lti_memberships_group_id['und'][0]['value'],
              'title' => $group->title,
            );
          }
          $new_subgroups = isset($member_data[$i]['groups']) ? $member_data[$i]['groups'] : array();
          $dropped_subgroups = array_udiff($current_groups, $new_subgroups, '_lti_tool_provider_memberships_compare_groups');
          $added_subgroups = array_udiff($new_subgroups, $current_groups, '_lti_tool_provider_memberships_compare_groups');
          if (count($dropped_subgroups) != 0 || count($added_subgroups) != 0) {
            $altered_members[$i]['lti_tool_provider_memberships_id'] = $member->lti_tool_provider_memberships_id;
            $altered_members[$i]['user_id'] = $member_data[$i]['user_id'];
            $altered_members[$i]['person_name_full'] = $member_data[$i]['person_name_full'];
            $altered_members[$i]['dropped_subgroups'] = $dropped_subgroups;
            $altered_members[$i]['added_subgroups'] = $added_subgroups;
            $altered_members[$i]['existing_roles'] = $member_data[$i]['roles'];
          }
        }
      }
    }
  }
  if (!empty($altered_members)) {
    foreach ($altered_members as $key => $row) {
      $user_id[$key] = $row['user_id'];
    }
    array_multisort($user_id, SORT_ASC, $altered_members);
  }
  return $altered_members;
}