नियमों के साथ जैविक समूह में शामिल होने के बाद उपयोगकर्ता में भूमिका जोड़ें


8

मैं एक उपयोगकर्ता की एक उपयोगकर्ता भूमिका जोड़ने की कोशिश कर रहा हूं जो एक समूह का सदस्य बन गया है। वर्कफ़्लो इस तरह है:

  • उपयोगकर्ता समूह में शामिल होने का अनुरोध करता है।
  • अनुरोध समूह व्यवस्थापक द्वारा अनुमोदित है।
  • उपयोगकर्ता समूह का सदस्य है।
  • उपयोगकर्ता को एक अतिरिक्त भूमिका मिलती है।

मैंने एक नियम बनाने की कोशिश की है जो ऐसा करने में सक्षम होगा, लेकिन हालांकि उपयोगकर्ता को अतिरिक्त भूमिका नहीं मिलने के बाद समूह में शामिल होने के बाद सभी सेटिंग्स सही लगती हैं। मेरी नियम सेटिंग का स्क्रीनशॉट देखें:

मेरे शासन का स्क्रीनशॉट


मेरे पास एक ही मुद्दा है, इसलिए उस पर एक इनाम शुरू किया।
ग्रीन ब्लैक

@ क्या आपने अपनी समस्याओं को हल किया है?
कलाब्रो

जवाबों:


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) को यह देखने के लिए सक्षम कर सकते हैं कि आपके नियमों का निष्पादन कब किया गया है।


हाय कलाब्रो। आप अपने awnser के लिए धन्यवाद! मैंने इसे इस तरह से सेट किया, लेकिन उपयोगकर्ता को भूमिका नहीं मिली। मैं एक कस्टम मॉड्यूल में एक फ़ंक्शन जोड़कर इसे ठीक करने में सक्षम था और कस्टम php कोड का उपयोग करके भूमिका जोड़ता हूं। यहाँ गंदा समाधान पोस्ट।
ग्रीन ब्लैक

पुनश्च। मैंने यहां अपना प्रश्न पूछा, इस प्रश्न से अधिक विस्तृत: drupal.org/node/1866278 यदि आप $ खाते को डीबग करते हैं, तो आप देखते हैं कि भूमिका जोड़ी गई है, लेकिन बस सहेजा नहीं गया है, या कुछ द्वारा अधिलेखित नहीं किया गया है।
ग्रीन ब्लैक

@ जॉन ने Drupal.org पर आपके प्रश्न पर टिप्पणी की है। कृपया, इसे देखें: # 1
कलाब्रो

2

मेरे पास एक ही मुद्दा है (इसलिए मैंने एक इनाम शुरू किया है)।

मैंने इसे इस तरह हल किया।

मैंने एक कस्टम मॉड्यूल में एक फ़ंक्शन जोड़ा। आप दो फ़ाइलों के साथ / साइटों / सभी / मॉड्यूल में एक नया फ़ोल्डर बनाकर अपने खुद के मॉड्यूल को सरल बना सकते हैं:

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

ओजी का कौन सा संस्करण आप चलाते हैं?

यह एक पता बग है जिसे कार्बनिक समूह 2.4+ ( बग पेज देखें ) के साथ तय किया गया है ।

यदि आप पहले से ही OG का 2.3 या निचला संस्करण चला रहे हैं, तो updgrate सीधा होना चाहिए। यदि आप OG 1.x चला रहे हैं, तो आप OG 1.5 से 2.4+ तक की अपडेट प्रक्रिया पर अधिक जानकारी पा सकते हैं

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.