Drupal 7でプログラムによってユーザーをグループに追加する方法


10

プログラムでグループノードを作成し、Drupal 7でそのグループにユーザーを追加しようとしています。グループノードは問題なく作成されていますが、ユーザーがグループに追加されておらず、エラーも発生していません。私はog_group関数を間違って使用していると思いますが、よくわかりません。何が悪いのですか?

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

こんにちはマックス-あなたは良い質問をしました。たくさんTHX
ゼロ

回答:


13

私はそれを考え出した。グループIDがその有機グループのノードIDと同じではないため、最終的には機能しませんでした。ここに作業バージョンがあります:

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

OG7-2.xはノードID ==グループIDなので、og_get_group()を使用する必要はありません。そして、og_group()とog_role_grant()では、グループタイプが最初の引数です。だからここに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"));

}


これは質問に対する答えを提供しません。批評したり、作者に説明を求めたりするには、投稿の下にコメントを残します。自分の投稿にはいつでもコメントできます。十分な評判得られれ、どの投稿にもコメントできます。
Chapabu 2012年

2
私が何か間違ったことをしたら申し訳ありません。私が検索エンジンからここに来て7.x-2.xを使用している人々に答えを提供すると私は信じています。ここで意味がない場合は、投稿全体を削除できます。
Capono 2012年

あなたの回答は良い出発点ですが、質問の何が間違っているかを指摘するだけでは、これを回答と見なすことはできません。og_get_groupを使用する代わりに何をすべきかを人々に伝えることにより、より役立つようにテキストを修正してください。そうしないと、反対票はおそらく代わりに賛成票に変換されます。:)
Letharion

はい、投稿を編集しました。これがあなたの言っていることだと思いますか?
Capono 2012年

1
これは7.2.xでうまく機能します。前述のように、7.1.xにはこのog_get_group関数がありましたが、7.2.xで削除されました。後でお探しの方はこちらをご利用ください。
グラディエーター2014年

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);
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.