Tambahkan peran ke pengguna setelah bergabung dengan grup organik dengan aturan


8

Saya mencoba menambahkan peran pengguna ke pengguna yang telah menjadi anggota grup. Alur kerjanya seperti ini:

  • Permintaan pengguna untuk bergabung dengan grup.
  • Permintaan disetujui oleh administrator grup.
  • Pengguna adalah anggota grup.
  • Pengguna mendapat peran tambahan.

Saya sudah mencoba membuat aturan yang bisa melakukan ini, tetapi meskipun semua pengaturan tampak benar setelah bergabung dengan grup, pengguna tidak mendapatkan peran tambahan. Lihat di bawah tangkapan layar pengaturan aturan saya:

Tangkapan layar aturan saya


Saya memiliki masalah yang persis sama, jadi mulailah memberi hadiah.
Green Black

@ John Sudahkah Anda menyelesaikan masalah Anda?
kalabro

Jawaban:


2

Sekarang Aturan Anda berjalan setelah pengguna meminta keanggotaan. Tetapi Anda harus menjalankannya setelah keanggotaan OG disetujui.
Saya menyiapkan Peraturan yang menambahkan peran "anggota" setelah keanggotaan disetujui atau jika ditambahkan oleh admin (disetujui otomatis). Ini ekspor ( 4id dari peran "anggota" drupal saya):

{ "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" } } } }
    ]
  }
}

Tangkapan layar: masukkan deskripsi gambar di sini

Kiat: Anda dapat mengaktifkan debug Aturan (halaman admin/config/workflow/rules/settings) untuk melihat kapan aturan Anda dijalankan.


Hai Kalabro. Terima kasih atas awnser Anda! Saya mengaturnya seperti itu, tetapi pengguna tidak mendapatkan peran itu. Saya dapat memperbaikinya dengan menambahkan fungsi ke modul khusus dan menambahkan peran menggunakan kode php khusus. Saya akan mengirim solusi kotor di sini.
Green Black

PS. Saya mengajukan pertanyaan saya di sini, lebih detail dari pertanyaan ini: drupal.org/node/1866278 Jika Anda men-debug $ akun, Anda melihat perannya ditambahkan, tetapi tidak disimpan, atau ditimpa oleh sesuatu.
Hijau Hitam

@ John Saya sudah berkomentar pertanyaan Anda di Drupal.org Tolong, lihat ini: # 1
kalabro

2

Saya memiliki masalah yang sama (itu sebabnya saya memulai karunia).

Saya memecahkannya dengan cara ini.

Saya menambahkan fungsi ke modul khusus. Anda dapat dengan mudah membuat modul Anda sendiri dengan membuat folder baru di / situs / semua / modul dengan dua file:

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

namaanda.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>");
    }
}

Kemudian goto modul Anda dan aktifkan "Fungsi Kustom".

Pastikan Anda mengaktifkan kode php khusus modul.

Kemudian alih-alih tindakan tambahkan pengguna ke peran dalam aturan, tambahkan: jalankan kode php khusus dan masukkan:

yourname_add_role_to_user($account->uid, "Members");
header("Location: /admin/people");
exit;

Ini menambahkan pengguna ke peran, dan menghentikan skrip. Jika Anda tidak menghentikan skrip, peran tersebut tidak disimpan. Dan saya perlu menambahkan modul karena user_savetidak berfungsi ketika dieksekusi di custom php code.

Jadi, saya tahu itu sangat jelek, tetapi itu bekerja untuk saya.


Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.