그룹의 회원이 된 사용자에게 사용자 역할을 추가하려고합니다. 워크 플로우는 다음과 같습니다.
- 사용자가 그룹 가입을 요청합니다.
- 그룹 관리자가 요청을 승인했습니다.
- 사용자는 그룹의 구성원입니다.
- 사용자는 추가 역할을받습니다.
이 작업을 수행 할 수있는 규칙을 만들려고했지만 그룹에 가입 한 후 모든 설정이 올바른 것처럼 보이지만 사용자에게는 추가 역할이 없습니다. 아래의 규칙 설정 스크린 샷을 참조하십시오.
그룹의 회원이 된 사용자에게 사용자 역할을 추가하려고합니다. 워크 플로우는 다음과 같습니다.
이 작업을 수행 할 수있는 규칙을 만들려고했지만 그룹에 가입 한 후 모든 설정이 올바른 것처럼 보이지만 사용자에게는 추가 역할이 없습니다. 아래의 규칙 설정 스크린 샷을 참조하십시오.
답변:
이제 사용자가 멤버십을 요청한 후 규칙이 실행됩니다. 그러나 OG 멤버쉽이 승인 된 후에 실행해야합니다.
멤버쉽이 승인 된 후 또는 관리자 (자동 승인)에 의해 추가 된 경우 "멤버"역할을 추가하는 규칙을 준비했습니다. 수출은 다음과 같습니다 ( 4
내 drupal 역할 "회원"의 ID 임).
{ "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" } } } }
]
}
}
스크린 샷 :
팁 : 규칙 디버그 (페이지 admin/config/workflow/rules/settings
)를 활성화 하여 규칙이 언제 실행되는지 확인할 수 있습니다.
나는 같은 문제가 있습니다 (바운티를 시작한 이유).
이 방법으로 해결했습니다.
사용자 정의 모듈에 기능을 추가했습니다. / 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
.
그래서 나는 그것이 매우 추악하다는 것을 알고 있지만 그것은 나를 위해 작동합니다.
어떤 버전의 OG를 실행하십니까?
이것은 유기 그룹 2.4 이상으로 수정 된 알려진 버그입니다 ( 버그 페이지 참조 ).
이미 2.3 이하의 OG 버전을 사용하고 있다면 업그레이드 속도는 간단해야합니다. OG 1.x를 실행중인 경우 OG 1.5에서 2.4 이상으로 업데이트 프로세스 에 대한 자세한 내용을 찾을 수 있습니다