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.)

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
)

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.



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"}
  }
}

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();
}
Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.