¿Cómo enumerar mediante programación las entidades miembro de un Grupo orgánico?

17

¿Cómo puedo obtener programáticamente una lista de entidades miembro de un Grupo orgánico?

(Sé cómo obtener una lista de los miembros del grupo utilizando Vistas; prefiero hacerlo utilizando la API de Grupos orgánicos, pero no he podido encontrar el método correcto).

smokris
fuente

Respuestas:

14

Usando directamente la API de grupos orgánicos:

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

le brinda una variedad de identificadores de usuario.

Para obtener solo usuarios activos, pendientes o bloqueados, puede poner 'members__1', 'members__2' o 'members__3' en lugar de 'members', como en este ejemplo:

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

de, si lo prefieres, como este:

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

Ejemplo del valor devuelto:

Array
(
    [0] => 48
    [1] => 49
    [2] => 51
)
Mitja
fuente
1
Esta debería ser la respuesta correcta
Chris
11

O a través de 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 le permite unir otras tablas, en lugar de tener que filtrar el conjunto de resultados en código PHP como lo haría si lo estuviera usando EntityFieldQuery.

smokris
fuente
2

La solución smokris funcionó pero encontré otra forma con EntityFieldQuery:

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

Ejemplo del valor devuelto:

{"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
fuente
0

Ampliando la respuesta de @smokris .

El estado activo de las membresías 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
fuente