Agregar rol al usuario después de unirse al grupo orgánico con reglas

8

Estoy tratando de agregar un rol de usuario a un usuario que se ha convertido en miembro de un grupo. El flujo de trabajo es así:

  • Solicitudes de usuario para unirse al grupo.
  • La solicitud es aprobada por el administrador del grupo.
  • El usuario es un miembro del grupo.
  • El usuario obtiene un rol adicional.

Intenté hacer una regla que pudiera hacer esto, pero aunque todas las configuraciones parecen correctas después de unirse al grupo, el usuario no obtiene el rol adicional. Vea a continuación una captura de pantalla de la configuración de mi regla:

Captura de pantalla de mi regla

roose
fuente
Tengo exactamente el mismo problema, así que comencé una recompensa.
Verde Negro
@John ¿Has resuelto tus problemas?
kalabro

Respuestas:

2

Ahora su regla se ejecuta después de que el usuario solicite membresía. Pero debe ejecutarlo después de que se aprobó la membresía de OG.
Preparé la regla que agrega el rol "miembro" después de que la membresía fue aprobada o si fue agregada por el administrador (auto-aprobado). Aquí está exportar ( 4es el id de mi rol drupal "miembro"):

{ "rules_after_add_user_to_group" : {
    "LABEL" : "After add user to group",
    "PLUGIN" : "reaction rule",
    "TAGS" : [ "test" ],
    "REQUIRES" : [ "rules", "og" ],
    "ON" : [ "og_user_insert", "og_user_approved" ],
    "IF" : [ { "data_is" : { "data" : [ "og-membership:state" ], "value" : "1" } } ],
    "DO" : [
      { "user_add_role" : { "account" : [ "account" ], "roles" : { "value" : { "4" : "4" } } } }
    ]
  }
}

Captura de pantalla: ingrese la descripción de la imagen aquí

Consejo: puede habilitar la depuración de reglas (página admin/config/workflow/rules/settings) para ver cuándo se ejecutan sus reglas.

kalabro
fuente
Hola kalabro ¡Gracias por tu bocina! Lo configuré de esa manera, pero el usuario no obtiene el rol. Pude solucionarlo agregando una función a un módulo personalizado y agregué el rol usando un código php personalizado. Publicaré la solución sucia aquí.
Verde Negro
PD. Hice mi pregunta aquí, más detallada que esta pregunta: drupal.org/node/1866278 Si depura $ account, verá que el rol se agrega, pero simplemente no se guarda o se sobrescribe por algo.
Verde Negro
@John He comentado tu pregunta en Drupal.org. Por favor, mira esto: # 1
kalabro
2

Tengo el mismo problema (por eso comencé una recompensa).

Lo resolví de esta manera.

Agregué una función a un módulo personalizado. Simplemente puede crear su propio módulo creando una nueva carpeta en / sites / all / modules con dos archivos:

yourname_module.info - >>

name = "Custom Functions"
description = "Allows execution of custom code for the website"
core = 7.x
package = "yourname_customs"
version = 7.x-1.x

yourname.module

<?php 
function yourname_add_role_to_user($uid, $role_name) {

    $user = user_load($uid);

    if ($user === false || !isset($user->uid) || !is_array($user->roles)) {
        //Display an ugly error when user is not set correctly
        exit('$user is not set correctly <pre>' . print_r($user, true) . "</pre>");
    }

    //Get the user roles
    $roles = user_roles(TRUE);
    $rid = array_search($role_name, $roles);

    if ($rid != FALSE) {
        $new_role[$rid] = $role_name;

        // Add new role to existing roles.
        $all_roles = $user->roles + $new_role;

        //Delete all user roles from DB
        db_delete('users_roles')
                ->condition('uid', $user->uid)
                ->execute();

        //Insert all user roles in DB
        $query = db_insert('users_roles')->fields(array('uid', 'rid'));
        foreach (array_keys($all_roles) as $rid) {
            if (!in_array($rid, array(DRUPAL_ANONYMOUS_RID, DRUPAL_AUTHENTICATED_RID))) {
                $query->values(array(
                    'uid' => $user->uid,
                    'rid' => $rid,
                ));
            }
        }
        $query->execute();
    } else {

        //Display an ugly error wen role not found
        exit("Could not find role " . htmlspecialchars($role_name) . "<br/>
              Vald roles: <pre>" . print_r($roles, true) . "</pre>");
    }
}

Luego pase a sus módulos y active "Funciones personalizadas".

Asegúrese de tener habilitado el código php personalizado del módulo.

Luego, en lugar de acción, agregue el usuario al rol en las reglas, agregue: ejecute el código php personalizado e ingrese:

yourname_add_role_to_user($account->uid, "Members");
header("Location: /admin/people");
exit;

Esto agrega al usuario al rol y detiene el script. Si no detiene el script, el rol no se guarda. Y necesitaba agregar un módulo porque user_saveno funciona cuando se ejecuta en custom php code.

Entonces, sé que es muy feo, pero funciona para mí.

Verde negro
fuente
0

¿Qué versión de OG ejecutas?

Este es un error conocido que se ha solucionado con Organic Group 2.4+ ( ver página de error ).

Si ya está ejecutando una versión 2.3 o inferior de OG, la actualización debería ser sencilla. Si está ejecutando OG 1.x, puede encontrar más detalles sobre el proceso de actualización de OG 1.5 a 2.4+

magdmartin
fuente