So fügen Sie einen Benutzer programmgesteuert zu einer Gruppe in Drupal 7 hinzu

10

Ich versuche, in Drupal 7 programmgesteuert einen Gruppenknoten zu erstellen und dieser Gruppe einen Benutzer hinzuzufügen. Der Gruppenknoten wird einwandfrei erstellt, aber der Benutzer wird nicht zur Gruppe hinzugefügt, und es werden keine Fehler angezeigt. Ich vermute, ich verwende die Funktion og_group falsch, bin mir aber nicht sicher. Was mache ich falsch?

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"));
}
Maxamilian Demian
quelle
hi max - du hast eine gute frage aufgeworfen. Vielen Dank
Null

Antworten:

13

Ich habe es herausgefunden. Es funktionierte schließlich nicht, da die Gruppen-ID NICHT mit der Knoten-ID für diese organische Gruppe übereinstimmt. Hier ist die Arbeitsversion:

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"));
}
Maxamilian Demian
quelle
13

Da OG7-2.x die Knoten-ID == Gruppen-ID ist, muss og_get_group () nicht verwendet werden. Und in og_group () und og_role_grant () ist Ihr Gruppentyp das erste Argument. Hier ist also der gleiche Code für 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"));

}}

Capono
quelle
Dies gibt keine Antwort auf die Frage. Um einen Autor zu kritisieren oder um Klärung zu bitten, hinterlassen Sie einen Kommentar unter seinem Beitrag. Sie können jederzeit Ihre eigenen Beiträge kommentieren. Sobald Sie einen ausreichenden Ruf haben, können Sie jeden Beitrag kommentieren .
Chapabu
2
Entschuldigung, wenn ich etwas falsch gemacht habe. Ich glaube, ich gebe eine Antwort für die Leute, die über eine Suchmaschine hierher kommen und 7.x-2.x verwenden. Sie können den gesamten Beitrag löschen, wenn er hier keinen Sinn ergibt.
Capono
Ihre Antworten sind ein guter Anfang, aber es reicht nicht aus, darauf hinzuweisen, was in der Frage falsch ist, um dies als Antwort zu betrachten. Bitte überarbeiten Sie den Text, um hilfreicher zu sein, indem Sie den Leuten sagen, was zu tun ist, anstatt og_get_group zu verwenden. Die Abstimmungen werden wahrscheinlich stattdessen in Aufwärtsstimmen umgewandelt. :)
Letharion
Ok, ich habe meinen Beitrag bearbeitet. Ich denke das ist was du meinst?
Capono
1
Dies funktioniert gut mit 7.2.x. Wie bereits erwähnt, hatte 7.1.x diese Funktion og_get_group, die jedoch in 7.2.x entfernt wurde. Für diejenigen, die später suchen, verwenden Sie dies bitte.
Gladiator
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);
Suhas
quelle