규칙으로 유기 그룹에 가입 한 후 사용자에게 역할 추가


8

그룹의 회원이 된 사용자에게 사용자 역할을 추가하려고합니다. 워크 플로우는 다음과 같습니다.

  • 사용자가 그룹 가입을 요청합니다.
  • 그룹 관리자가 요청을 승인했습니다.
  • 사용자는 그룹의 구성원입니다.
  • 사용자는 추가 역할을받습니다.

이 작업을 수행 할 수있는 규칙을 만들려고했지만 그룹에 가입 한 후 모든 설정이 올바른 것처럼 보이지만 사용자에게는 추가 역할이 없습니다. 아래의 규칙 설정 스크린 샷을 참조하십시오.

내 규칙의 스크린 샷


나는 정확히 같은 문제가 있으므로 현상금을 시작했습니다.
그린 블랙

@ 존 문제를 해결 했습니까?
kalabro

답변:


2

이제 사용자가 멤버십을 요청한 후 규칙이 실행됩니다. 그러나 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)를 활성화 하여 규칙이 언제 실행되는지 확인할 수 있습니다.


칼라브로 안녕하세요. 차일 주셔서 감사합니다! 그런 식으로 설정했지만 사용자가 역할을 수행하지 못합니다. 사용자 정의 모듈에 기능을 추가하고 사용자 정의 PHP 코드를 사용하여 역할을 추가하여 문제를 해결할 수있었습니다. 더러운 해결책을 여기에 게시하십시오.
Green Black

추신. : 내 더이 질문보다 자세한 여기에 질문, 질문 drupal.org/node/1866278을 당신이 $ 계정을 디버깅 할 경우 역할이 추가, 단순히 저장되지, 또는 무언가에 의해 덮어 쓰기를 참조하십시오.
Green Black

@ 존 Drupal.org에 대한 귀하의 질문에 대해 언급했습니다. 다음을보십시오 : # 1
kalabro

2

나는 같은 문제가 있습니다 (바운티를 시작한 이유).

이 방법으로 해결했습니다.

사용자 정의 모듈에 기능을 추가했습니다. / 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.

그래서 나는 그것이 매우 추악하다는 것을 알고 있지만 그것은 나를 위해 작동합니다.


0

어떤 버전의 OG를 실행하십니까?

이것은 유기 그룹 2.4 이상으로 수정 된 알려진 버그입니다 ( 버그 페이지 참조 ).

이미 2.3 이하의 OG 버전을 사용하고 있다면 업그레이드 속도는 간단해야합니다. OG 1.x를 실행중인 경우 OG 1.5에서 2.4 이상으로 업데이트 프로세스 에 대한 자세한 내용을 찾을 수 있습니다

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.