トリガーとカスタム アクションを使用して、特定のプロファイル フィールドを指定して (追加/編集時に) ユーザーに特別な役割を与えようとしています。だからここに私のコードがあります:
function mymodule_action_info() {
return array(
'mymodule_user_appropriate_role' => array(
'description' => t('Assign user special role'),
'type' => 'user',
'configurable' => FALSE,
'hooks' => array(
'user' => array('insert', 'update'),
),
),
);
}
その後
function mymodule_user_appropriate_role(&$object, $context = array()) {
// get the uid from the object
if( isset( $object->uid ) ){
$thisUID = $object->uid;
}else if( isset( $context['uid'] ) ){
$thisUID = $context['uid'];
}else{
global $user;
$thisUID = $user->uid;
}
// make sure we have a user record
if( $thisUID ){
// load user object
$thisUser = user_load( $thisUID );
// get user profile object
profile_load_profile( $thisUser );
if( $thisUser->profile_special_field == "value1" ){
// FIRST APPROACH
db_query( 'INSERT INTO {users_roles} (uid, rid) VALUES (%d, %d)', $thisUser->uid, 5 ); // 5 is the custom role ID
// SECOND APPROACH
$thisUserRoles = $thisUser->roles;
if( !isset( $thisUserRoles[5] ) ){
$thisUserRoles[5] = "RID 5 Rule Name";
}
user_save( $thisUser, array( 'roles' => $thisUserRoles ) );
// THIRD APPROACH
$allUserRoles = user_roles();
user_save( $thisUser, array( 'roles' => array( array_search( 'RID 5 Rule Name', $allUserRoles ) => 1 ) ) );
}
}
}
しかし、これら 3 つのアプローチはいずれも機能しませんでした。アクションが呼び出され、if( $thisUser->profile_special_field == "value1" )
ステートメントを入力すると確信しています
私は昨日からこれに苦労しているので、どんな助けも大歓迎です...