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_save
khô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.