Como listar programaticamente as entidades membros de um Grupo Orgânico?

17

Como obter programaticamente uma lista de entidades membros de um Grupo Orgânico?

(Eu sei como obter uma lista de membros do grupo usando o Views: eu prefiro fazer isso usando a API de grupos orgânicos, mas não consegui encontrar o método certo.)

smokris
fonte

Respostas:

14

Usando diretamente a API de grupos orgânicos:

og_get_group_members_properties($yourGroupNode, array(), 'members', 'node');

fornece uma variedade de IDs de usuário.

Para obter apenas usuários ativos, pendentes ou bloqueados, você pode colocar 'members__1', 'members__2' ou 'members__3' no lugar de 'members', como neste exemplo:

og_get_group_members_properties($yourGroupNode, array(), 'members__1', 'node');

de, se preferir, como este:

og_get_group_members_properties($yourGroupNode, array(), 'members__' . OG_STATE_ACTIVE, 'node');

Exemplo do valor retornado:

Array
(
    [0] => 48
    [1] => 49
    [2] => 51
)
Mitja
fonte
1
Esta deve ser a resposta correta
Chris
11

Ou via DBTNG:

$query = db_select("og_membership", "ogm");
$query->condition("ogm.gid", $yourGroupID, "=");
$query->condition("ogm.group_type", "node", "=");
$query->fields("ogm", array("entity_type", "etid"));
$result = $query->execute();
print_r($result->fetchAll());

... que permite que você ingresse em outras tabelas, em vez de precisar filtrar o conjunto de resultados no código PHP como faria se estivesse usando EntityFieldQuery.

smokris
fonte
2

solução smokris funcionou, mas eu encontrei uma outra maneira com EntityFieldQuery:

$query = new EntityFieldQuery();
$entities = $query->entityCondition('entity_type', 'node')
  ->fieldCondition('og_group_ref', 'target_id', $yourGroupID)
  ->execute();

Exemplo do valor retornado:

{"node":
  {"22":{"nid":"22","vid":"22","type":"panoramique"},
   "32":{"nid":"32","vid":"32","type":"panoramique"},
   "35":{"nid":"35","vid":"35","type":"panoramique"},
   "36":{"nid":"36","vid":"36","type":"panoramique"}
  }
}
Thithi32
fonte
0

Estendendo a resposta de @smokris .

O status ativo das associações é "1" ( ->condition('ogm.state', 1, '=')).

function _get_users_in_group($gid) {
  $query = db_select('users', 'u');

  $query
    ->condition('u.uid', 0, '<>')
    ->condition('u.status', 1, '=')
    ->condition('ogm.state', 1, '=')
    ->fields('u', array('uid', 'name'))
    ->join('og_membership', 'ogm', "ogm.gid = :gid AND u.uid = ogm.etid AND ogm.entity_type = 'user'", array(':gid' => $gid));
  return $query->execute();
}
rubofvil
fonte