Thêm vai trò cho người dùng sau khi tham gia nhóm hữu cơ với các quy tắc


8

Tôi đang cố gắng thêm vai trò người dùng cho người dùng đã trở thành thành viên của một nhóm. Quy trình làm việc là như thế này:

  • Người dùng yêu cầu tham gia nhóm.
  • Yêu cầu được phê duyệt bởi quản trị viên nhóm.
  • Người dùng là thành viên của nhóm.
  • Người dùng có được một vai trò bổ sung.

Tôi đã cố gắng đưa ra một quy tắc có thể thực hiện điều này, nhưng mặc dù tất cả các cài đặt có vẻ đúng sau khi tham gia nhóm, người dùng không nhận được vai trò bổ sung. Xem bên dưới ảnh chụp màn hình cài đặt quy tắc của tôi:

Ảnh chụp màn hình quy tắc của tôi


Tôi có cùng một vấn đề, vì vậy đã bắt đầu một tiền thưởng về nó.
Xanh đen

@ John Bạn đã giải quyết vấn đề của mình chưa?
kalabro

Câu trả lời:


2

Bây giờ Quy tắc của bạn chạy sau khi người dùng yêu cầu thành viên. Nhưng bạn nên chạy nó sau khi thành viên OG được chấp thuận.
Tôi đã chuẩn bị Quy tắc bổ sung vai trò thành viên nhóm Đăng sau khi thành viên được phê duyệt hoặc nếu được thêm bởi quản trị viên (tự động phê duyệt). Đây là xuất khẩu ( 4là id của vai trò drupal của tôi, thành viên của Google):

{ "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" } } } }
    ]
  }
}

Ảnh chụp màn hình: nhập mô tả hình ảnh ở đây

Mẹo: bạn có thể bật gỡ lỗi Quy tắc (trang admin/config/workflow/rules/settings) để xem khi quy tắc của bạn được thực thi.


Xin chào Kalabro. Cảm ơn bạn cho awnser của bạn! Tôi thiết lập nó theo cách đó, nhưng người dùng không nhận được vai trò. Tôi đã có thể sửa nó bằng cách thêm một hàm vào một mô-đun tùy chỉnh và thêm vai trò bằng mã php tùy chỉnh. Ill đăng các giải pháp bẩn ở đây.
Xanh đen

Tái bút Tôi đã hỏi câu hỏi của tôi ở đây, chi tiết hơn câu hỏi này: drupal.org/node/1866278 Nếu bạn gỡ lỗi tài khoản $, bạn thấy vai trò được thêm vào, nhưng đơn giản là không được lưu hoặc bị ghi đè bởi một cái gì đó.
Xanh đen

@ John Tôi đã nhận xét câu hỏi của bạn trên Drupal.org. Xin vui lòng, hãy nhìn vào đây: # 1
kalabro

2

Tôi có cùng một vấn đề (đó là lý do tại sao tôi bắt đầu một tiền thưởng).

Tôi đã giải quyết nó theo cách này.

Tôi đã thêm một chức năng cho một mô-đun tùy chỉnh. Bạn có thể đơn giản tạo mô-đun của riêng mình bằng cách tạo một thư mục mới trong / site / all / mô-đun với hai tệp:

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

Sau đó, goto các mô-đun của bạn và kích hoạt "Chức năng tùy chỉnh".

Hãy chắc chắn rằng bạn đã kích hoạt mã php tùy chỉnh mô-đun.

Sau đó, thay vì hành động thêm người dùng vào vai trò trong các quy tắc, hãy thêm: chạy mã php tùy chỉnh và nhập:

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

Điều này thêm người dùng vào vai trò và dừng tập lệnh. Nếu bạn không dừng tập lệnh, vai trò sẽ không được lưu. Và tôi cần thêm một mô-đun vì user_savekhông hoạt động khi được thực thi custom php code.

Vì vậy, tôi biết nó rất xấu, nhưng nó hiệu quả với tôi.


Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.