Додати роль користувача після приєднання органічної групи з правилами


8

Я намагаюся додати роль користувача до користувача, який став членом групи. Робочий процес такий:

  • Користувачі просять долучитися до групи.
  • Запит затверджується адміністратором групи.
  • Користувач є членом групи.
  • Користувач отримує додаткову роль.

Я намагався скласти правило, яке могло б це зробити, але хоча всі налаштування здаються правильними після приєднання до групи, користувач не отримує додаткової ролі. Дивіться нижче скріншот моїх налаштувань правил:

Скріншот мого правила


У мене точно таке саме питання, тому я розпочав щедроту.
Зелений Чорний

@John Ви вирішили свої проблеми?
калабро

Відповіді:


2

Тепер ваше правило працює після того, як користувач запитує членство. Але вам слід запустити його після затвердження членства в ОГ.
Я підготував правило, яке додає роль "член" після затвердження членства або якщо його додав адміністратор (автоматично затверджений). Ось експорт ( 4ідентифікатор моєї друкарської ролі "учасника"):

{ "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-коду. Тут розміщую брудне рішення.
Зелений Чорний

PS. Я поставив тут своє запитання, більш детальне, ніж це питання: drupal.org/node/1866278 Якщо ви налагоджуєте $ account, ви бачите, що роль додана, але просто не збережена або переписана чимось.
Зелений Чорний

@John Я прокоментував ваше запитання на Drupal.org. Будь ласка, подивіться на це: №1
калабро

2

У мене те саме питання (саме тому я і почав баунті).

Я вирішив це таким чином.

Я додав функцію до спеціального модуля. Ви можете просто створити власний модуль, створивши нову папку в / sites / all / модулі з двома файлами:

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 ви запускаєте?

Це помилка знань, яку виправили за допомогою Organic Group 2.4+ ( див. Сторінку помилки ).

Якщо ви вже використовуєте версію OG 2.3 або нижчої версії, оновлення повинно бути простим. Якщо ви використовуєте OG 1.x, ви можете дізнатися більше про процес оновлення від OG 1.5 до 2.4+

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.