Organik gruba kurallarla katıldıktan sonra kullanıcıya rol ekleyin


8

Bir grubun üyesi olan bir kullanıcıya kullanıcı rolü eklemeye çalışıyorum. İş akışı şöyledir:

  • Kullanıcı gruba katılmak istiyor.
  • İstek grup yöneticisi tarafından onaylandı.
  • Kullanıcı grubun bir üyesidir.
  • Kullanıcı ek bir rol alır.

Bunu yapabilecek bir kural yapmaya çalıştım, ancak gruba katıldıktan sonra tüm ayarlar doğru görünse de, kullanıcı ek rol almıyor. Kural ayarlarımın ekran görüntüsünün altına bakın:

Kuralımın ekran görüntüsü


Ben tamamen aynı sorunu var, bu yüzden üzerinde bir ödül başladı.
Green Black

@John Sorunlarınızı çözdünüz mü?
kalabro

Yanıtlar:


2

Artık Kuralınız kullanıcı üyelik istediğinde çalışır. Ancak OG üyeliği onaylandıktan sonra çalıştırmalısınız.
Üyelik onaylandıktan sonra veya yönetici tarafından eklenmişse (otomatik onaylı) “üye” rolünü ekleyen Kural hazırladım. İşte ihracat ( 4benim drupal rolüm “üye” 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" } } } }
    ]
  }
}

Ekran görüntüsü: resim açıklamasını buraya girin

İpucu: Kurallarınızın admin/config/workflow/rules/settingsne zaman yürütüldüğünü görmek için Kural hata ayıklamasını (sayfa ) etkinleştirebilirsiniz .


Merhaba Kalabro. Awnser için teşekkürler! Bu şekilde ayarladım, ancak kullanıcı rolü almıyor. Özel bir modüle bir işlev ekleyerek düzeltmek ve özel php kodu kullanarak rol eklemek mümkün. Kirli çözümü buraya göndereceğim.
Green Black

PS. Sorumu burada, bu sorudan daha ayrıntılı olarak sordum: drupal.org/node/1866278 $ hesabında hata ayıklarsanız , rolün eklendiğini, ancak kaydedilmediğini veya bir şeyin üzerine yazıldığını görürsünüz.
Green Black

@John Sorunuzu Drupal.org'da yorumladım. Lütfen şuna bakın: # 1
kalabro

2

Aynı sorunum var (bu yüzden bir lütuf başladım).

Bu şekilde çözdüm.

Özel bir modüle bir işlev ekledim. / Sites / all / modüllerinde iki dosya içeren yeni bir klasör oluşturarak kendi modülünüzü kolayca oluşturabilirsiniz:

adınız_modül.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>");
    }
}

Ardından modüllerinizi seçin ve "Özel İşlevler" i etkinleştirin.

Modül özel php kodunu etkinleştirdiğinizden emin olun.

Daha sonra eylem yerine kullanıcıyı kurallarda role ekleyin, şunu ekleyin: run custom php code ve enter:

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

Bu kullanıcıyı role ekler ve komut dosyasını durdurur. Komut dosyasını durdurmazsanız, rol kaydedilmez. Ve bir modül eklemem gerekiyordu çünkü user_saveçalıştırıldığında çalışmıyor custom php code.

Yani, çok çirkin olduğunu biliyorum, ama benim için çalışıyor.


Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.