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

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
)

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.



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

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();
}
Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.