Comment lister par programme les entités membres d'un groupe organique?

17

Comment puis-je obtenir par programme une liste des entités membres d'un groupe organique?

(Je sais comment obtenir une liste des membres du groupe à l'aide de Views - je préfère le faire à l'aide de l'API Organic Groups, mais je n'ai pas pu trouver la bonne méthode.)

smokris
la source

Réponses:

14

Utilisation directe de l'API Organic Groups:

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

vous donne un tableau d'ID utilisateur.

Pour obtenir uniquement des utilisateurs actifs, en attente ou bloqués, vous pouvez mettre 'members__1', 'members__2' ou 'members__3' à la place de 'members', comme dans cet exemple:

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

de, si vous préférez, comme celui-ci:

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

Exemple de valeur retournée:

Array
(
    [0] => 48
    [1] => 49
    [2] => 51
)
Mitja
la source
1
Cela devrait être la bonne réponse
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());

... qui vous permet de rejoindre d'autres tables, plutôt que d'avoir à filtrer le jeu de résultats en code PHP comme vous le feriez si vous utilisez EntityFieldQuery.

smokris
la source
2

La solution smokris a fonctionné mais j'ai trouvé un autre moyen avec EntityFieldQuery:

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

Exemple de valeur retournée:

{"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
la source
0

Extension de la réponse de @smokris .

Le statut actif des adhésions est "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
la source