เพิ่มบทบาทให้กับผู้ใช้หลังจากเข้าร่วมกลุ่มออร์แกนิกพร้อมกฎ


8

ฉันพยายามเพิ่มบทบาทผู้ใช้ให้กับผู้ใช้ที่เป็นสมาชิกของกลุ่ม เวิร์กโฟลว์เป็นดังนี้:

  • ผู้ใช้ร้องขอให้เข้าร่วมกลุ่ม
  • คำขอได้รับการอนุมัติจากผู้ดูแลระบบของกลุ่ม
  • ผู้ใช้เป็นสมาชิกของกลุ่ม
  • ผู้ใช้ได้รับบทบาทเพิ่มเติม

ฉันพยายามสร้างกฏซึ่งสามารถทำได้ แต่ถึงแม้ว่าการตั้งค่าทั้งหมดดูเหมือนจะถูกต้องหลังจากเข้าร่วมกลุ่มผู้ใช้จะไม่ได้รับบทบาทเพิ่มเติม ดูภาพหน้าจอด้านล่างของการตั้งค่ากฎของฉัน:

ภาพหน้าจอของกฎของฉัน


ฉันมีปัญหาเดียวกันทุกประการดังนั้นเริ่มให้เงินรางวัลกับมัน
Green Black

@John คุณแก้ไขปัญหาของคุณแล้วหรือยัง?
kalabro

คำตอบ:


2

ตอนนี้กฎของคุณทำงานหลังจากที่ผู้ใช้ร้องขอการเป็นสมาชิก แต่คุณควรเรียกใช้หลังจากการเป็นสมาชิก OG ได้รับการอนุมัติ
ฉันเตรียมกฎซึ่งเพิ่มบทบาท“ สมาชิก” หลังจากสมาชิกได้รับการอนุมัติหรือถ้ามันถูกเพิ่มโดยผู้ดูแลระบบ (อนุมัติอัตโนมัติ) นี่คือการส่งออก ( 4เป็น id ของบทบาท drupal ของฉัน“ สมาชิก”):

{ "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) เพื่อดูว่าเมื่อใดที่กฎของคุณจะถูกดำเนิน


สวัสดี Kalabro ขอบคุณสำหรับ awnser ของคุณ! ฉันตั้งค่าแบบนั้น แต่ผู้ใช้ไม่ได้รับบทบาท ฉันสามารถแก้ไขได้โดยการเพิ่มฟังก์ชั่นในโมดูลที่กำหนดเองและเพิ่มบทบาทโดยใช้รหัส PHP ที่กำหนดเอง ไม่โพสต์วิธีการแก้ปัญหาที่สกปรกที่นี่
สีเขียวสีดำ

PS ฉันถามคำถามของฉันที่นี่มีรายละเอียดมากกว่าคำถามนี้: drupal.org/node/1866278หากคุณดีบักบัญชี $ คุณจะเห็นบทบาทเพิ่ม แต่ก็ไม่ได้ถูกบันทึกหรือถูกแทนที่ด้วยบางสิ่ง
สีเขียวสีดำ

@John ฉันได้แสดงความคิดเห็นคำถามของคุณใน 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_savecustom php code

ดังนั้นฉันรู้ว่ามันน่าเกลียดมาก แต่ก็ใช้งานได้สำหรับฉัน


0

OG รุ่นใดที่คุณใช้

นี่เป็นข้อบกพร่องรู้ที่ได้รับการแก้ไขด้วยกลุ่มอินทรีย์ 2.4+ ( ดูหน้าข้อผิดพลาด )

หากคุณใช้ OG เวอร์ชัน 2.3 หรือต่ำกว่าอยู่แล้ว updgrate ควรตรงไปตรงมา หากคุณใช้ OG 1.x คุณสามารถค้นหารายละเอียดเพิ่มเติมเกี่ยวกับกระบวนการอัปเดตจาก OG 1.5 ถึง 2.4+

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.