Comment ajouter par programme un utilisateur à un groupe dans Drupal 7


10

J'essaie de créer par programme un nœud de groupe et d'ajouter un utilisateur à ce groupe dans Drupal 7. Le nœud de groupe est bien créé mais l'utilisateur n'est pas ajouté au groupe et je ne reçois aucune erreur. Je suppose que j'utilise la fonction og_group de manière incorrecte mais je ne suis pas sûr. Qu'est-ce que je fais mal?

function MYMODULE_form_submit($form_id, $form_values) {
    global $user;

    $node = new stdClass();

    $node->type     = "group";
    $node->uid      = $user->uid;
    $node->title        = t("Group Node Title");
    $node->body     = t("Group Node Body");
    $node->status       = 1;
    $node->promote      = 0;
    $node->comment      = 1;

    $node->og_description   = t("OG Description");
    $node->og_register  = 0;
    $node->og_directory = 0;
    $node->og_private   = 1;
    $node->og_selective = 3;

    $node = node_submit($node);
    node_save($node);

    $account = user_load(2);

    og_group($node->nid, array(
                "entity type"       => "user",
                "entity"        => $account,
                "membership type"   => "OG_MEMBERSHIP_TYPE_DEFAULT",
            ));

    drupal_set_message(t("Finished"));
}

salut max - vous avez soulevé une bonne question. thx beaucoup
zéro

Réponses:


13

Je l'ai compris. Il a fini par ne pas fonctionner car l'ID de groupe n'est PAS le même que l'ID de nœud pour ce groupe organique. Voici la version de travail:

function MYMODULE_page_form_submit($form_id, $form_values) {
    global $user;

    $node = new stdClass();

    $node->type     = "group";
    $node->uid      = $user->uid;
    $node->title        = t("Group Node Title");
    $node->body     = t("Group Node Body");
    $node->status       = 1; //(1 or 0): published or not
    $node->promote      = 0; //(1 or 0): promoted to front page
    $node->comment      = 1; //2 = comments on, 1 = comments off

    $node->og_description   = t("OD Description");
    $node->og_register  = 0;
    $node->og_directory = 0;
    $node->og_private   = 1;
    $node->og_selective = 3;

    $node = node_submit($node);
    node_save($node);

    // Get the group ID from the node ID
    $group = og_get_group("node", $node->nid);

    // Load the user we want to add to the group (ID #2 was my test user)
    $account = user_load(2);

    // Add the user to the group
    og_group($group->gid, array(
                "entity type"       => "user",
                "entity"        => $account,
                "membership type"   => OG_MEMBERSHIP_TYPE_DEFAULT,
            ));

    // Changes the users role in the group (1 = non-member, 2 = member, 3 = administrator member)
    og_role_grant($group->gid, $account->uid, 3);

    drupal_set_message(t("Finished"));
}

13

Depuis OG7-2.x l'ID de nœud == ID de groupe, il n'est pas nécessaire d'utiliser og_get_group (). Et dans og_group () et og_role_grant () votre type de groupe est le premier argument. Voici donc le même code pour OG 7.x-2.x

function MYMODULE_page_form_submit($form_id, $form_values) {
global $user;

$node = new stdClass();

$node->type     = "group";
$node->uid      = $user->uid;
$node->title        = t("Group Node Title");
$node->body     = t("Group Node Body");
$node->status       = 1; //(1 or 0): published or not
$node->promote      = 0; //(1 or 0): promoted to front page
$node->comment      = 1; //2 = comments on, 1 = comments off

$node->og_description   = t("OD Description");
$node->og_register  = 0;
$node->og_directory = 0;
$node->og_private   = 1;
$node->og_selective = 3;

$node = node_submit($node);
node_save($node);

// Load the user we want to add to the group (ID #2 was my test user)
$account = user_load(2);

// Add the user to the group
og_group('node', $node->nid, array(
            "entity type"       => "user",
            "entity"        => $account,
            "membership type"   => OG_MEMBERSHIP_TYPE_DEFAULT,
        ));

// Changes the users role in the group (1 = non-member, 2 = member, 3 = administrator member)
og_role_grant('node', $node->nid, $account->uid, 3);

drupal_set_message(t("Finished"));

}


Cela ne fournit pas de réponse à la question. Pour critiquer ou demander des éclaircissements à un auteur, laissez un commentaire sous son article - vous pouvez toujours commenter vos propres articles, et une fois que vous aurez une réputation suffisante, vous pourrez commenter n'importe quel article .
Chapabu

2
Désolé si j'ai fait quelque chose de mal. Je crois que je donne une réponse aux personnes qui viennent ici via un moteur de recherche et utilisent 7.x-2.x. Vous pouvez supprimer l'intégralité du message s'il ne fait pas sens ici.
Capono

Vos réponses sont un bon début, mais souligner ce qui ne va pas dans la question ne suffit pas pour que cela soit considéré comme une réponse. Veuillez réviser le texte pour être plus utile en disant aux gens quoi faire au lieu d'utiliser og_get_group, et les votes négatifs seront probablement convertis en votes positifs à la place. :)
Letharion

Ok, j'ai édité mon post. Je suppose que c'est ce que tu veux dire?
Capono

1
Cela fonctionne bien avec 7.2.x. Comme mentionné, le 7.1.x avait cette fonction og_get_group mais qui a été supprimée dans 7.2.x. Donc, pour ceux qui recherchent plus tard, veuillez utiliser ceci.
Gladiator le

1
Adding programmatically Group  content:
$node->type     = "group_post";
$node->uid      = $user->uid;
$node->title        = t("Group postNode Title");
$node->body     = t("Group Node Body");
$node->status       = 1; //(1 or 0): published or not
$node->promote      = 0; //(1 or 0): promoted to front page
$node->comment      = 1; //2 = comments on, 1 = comments off

$node->og_group_ref['und'][] = array('target_id' => $gid);

$node = node_submit($node);
node_save($node);
En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.