You are here

function _og_subgroups_get_inherited_users in Subgroups for Organic groups 7.2

Return an array of inherited users from the parent groups that allow for user inheritance.

@see: og_subgroups_views_pre_render().

Parameters

$group_type: The entity type. Defaults to 'node'.

$entity: Optional; The entity object or entity ID.

$states: Optional; Array with the state to return. Defaults to active.

Return value

An array with the entities' entity type as the key, and array - keyed by the OG membership ID and the Entity ID as the value. If nothing found, then an empty array.

1 call to _og_subgroups_get_inherited_users()
og_subgroups_views_pre_render in ./og_subgroups.views.inc
Implements hook_views_pre_render().

File

./og_subgroups.common.inc, line 241
Common functions used in og_subgroups.

Code

function _og_subgroups_get_inherited_users($group_type, $group_id, $states = array(
  OG_STATE_ACTIVE,
)) {
  $inherited_users = array();
  $parents = og_subgroups_parents_load($group_type, $group_id);
  foreach ($parents as $parent_type => $parent_ids) {
    foreach ($parent_ids as $parent_id) {
      $users = og_subgroups_get_users_group($parent_type, $parent_id, $states);
      foreach ($users['user'] as $membership_id => $uid) {
        $roles = og_get_user_roles($parent_type, $parent_id, $uid);
        $membership_ids[] = $membership_id;
        $user_ids[] = $uid;
        $inherited_from[$parent_type][] = $parent_id;
        $inherited_users[$uid][] = array(
          'uid' => $uid,
          'membership_id' => $membership_id,
          'roles' => $roles,
          'inherited_from' => array(
            'type' => $parent_type,
            'id' => $parent_id,
          ),
        );
      }
    }
  }

  // Populate the array with *_multiple() functions (performance).
  if (!empty($membership_ids)) {
    $memberships = og_membership_load_multiple($membership_ids);
    $accounts = user_load_multiple($user_ids);
    foreach ($inherited_from as $type => $ids) {
      $inherited_from_entities[$type] = entity_load($type, $ids);
    }
    foreach ($inherited_users as $uid => $inheritance) {
      foreach ($inheritance as $delta => $data) {
        $inherited_users[$uid][$delta]['user'] = $accounts[$uid];
        $inherited_users[$uid][$delta]['membership'] = $memberships[$data['membership_id']];
        $inherited_users[$uid][$delta]['inherited_from']['entity'] = $inherited_from_entities[$data['inherited_from']['type']][$data['inherited_from']['id']];
      }
    }
  }
  return $inherited_users;
}