Cómo agregar mediante programación un usuario a un grupo en Drupal 7

10

Estoy tratando de crear mediante programación un nodo de grupo y agregar un usuario a ese grupo en Drupal 7. El nodo de grupo se está creando muy bien pero el usuario no se está agregando al grupo y no obtengo ningún error. Supongo que estoy usando la función og_group incorrectamente, pero no estoy seguro. ¿Qué estoy haciendo 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"));
}
Demian Maxamilian
fuente
hola max - planteaste una buena pregunta. muchas gracias
cero

Respuestas:

13

Me lo imaginé. Terminó no funcionando porque la ID del grupo NO es la misma que la ID del nodo para ese grupo orgánico. Aquí está la versión de trabajo:

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

Desde OG7-2.x la ID del nodo == ID del grupo, no hay necesidad de usar og_get_group (). Y en og_group () y og_role_grant () su tipo de grupo es el primer argumento. Así que aquí está el mismo código para 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
fuente
Esto no proporciona una respuesta a la pregunta. Para criticar o solicitar una aclaración de un autor, deje un comentario debajo de su publicación; siempre puede comentar sus propias publicaciones, y una vez que tenga suficiente reputación , podrá comentar cualquier publicación .
Chapabu
2
Lo siento si hice algo mal. Creo que proporciono una respuesta para las personas que vienen a través de un motor de búsqueda y están usando 7.x-2.x. Puede eliminar toda la publicación si no tiene sentido aquí.
Capono
Sus respuestas son un buen comienzo, pero señalar lo que está mal en la pregunta no es suficiente para que esto se considere una respuesta. Revise el texto para que sea más útil al decirle a la gente qué hacer en lugar de usar og_get_group, y los votos negativos probablemente se convertirán en votos positivos. :)
Letharion
Ok, edité mi publicación. Supongo que esto es lo que quieres decir?
Capono
1
Esto funciona bien con 7.2.x. Como se mencionó, el 7.1.x tenía esta función og_get_group, pero se eliminó en 7.2.x. Entonces, para aquellos que buscan lo posterior, utilicen esto.
Gladiador
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
fuente