ฉันมีปัญหาเดียวกัน (นั่นเป็นสาเหตุที่ฉันเริ่มเงินรางวัล)
ฉันแก้ไขมันด้วยวิธีนี้
ฉันเพิ่มฟังก์ชั่นในโมดูลที่กำหนดเอง คุณสามารถสร้างโมดูลของคุณเองง่ายๆโดยสร้างโฟลเดอร์ใหม่ใน / sites / all / modules ด้วยสองไฟล์:
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>");
}
}
จากนั้นไปที่โมดูลของคุณและเปิดใช้งาน "ฟังก์ชันที่กำหนดเอง"
ตรวจสอบให้แน่ใจว่าคุณได้เปิดใช้งานโค้ด PHP แบบกำหนดเอง
จากนั้นแทนที่จะเพิ่มแอ็คชันให้กับผู้ใช้ในบทบาทให้เพิ่ม: รันโค้ด php ที่กำหนดเองและป้อน:
yourname_add_role_to_user($account->uid, "Members");
header("Location: /admin/people");
exit;
สิ่งนี้จะเพิ่มผู้ใช้เข้ากับบทบาทและหยุดสคริปต์ หากคุณไม่หยุดสคริปต์บทบาทจะไม่ถูกบันทึก และฉันต้องการที่จะเพิ่มโมดูลเพราะไม่ทำงานเมื่อดำเนินการในuser_save
custom php code
ดังนั้นฉันรู้ว่ามันน่าเกลียดมาก แต่ก็ใช้งานได้สำหรับฉัน