Change WordPress user roles and capabilities Forums How to or FAQ Gravity Forms User Registration

Viewing 12 posts - 1 through 12 (of 12 total)
  • Author
    Posts
  • #1556
    kardon
    Participant

    Can anyone tell me if they have connected URE with Gravity Forms User Registration add-on?

    Specifically, I want to be able to set multiple roles on the user profile using a front end form.

    #1558
    kardon
    Participant

    The Gravity Forms team says they have never worked with URE but they have hooks that could be used for what we want to do if we know the actions to perform.

    https://www.gravityhelp.com/documentation/category/user-registration/
    Has the list of hooks.

    They believe the user updated one is what we need. https://www.gravityhelp.com/documentation/article/gform_user_updated/

    Can you tell me what the PHP code would need to do in order for me to add a checkbox field for adding secondary roles?

    #1559
    Vladimir
    Keymaster

    Thanks for the additional information. There is no such feature currently. But I’m interested to realize it: 1st, as a PHP code. Then add it to the User Role Editor Pro.

    Can you send me (support [at-sign] role-editor.com the installation package of “Gravity Forms User Registration” add-on? I will use it for the investigation/testing purpose and at my localhost only.

    #1576
    Vladimir
    Keymaster

    Code:

    // prefill roles at User profile editor Gravity Form fields
    add_filter( 'gform_pre_render_10', 'frontend_profile_populate_roles' );
    
    
    function frontend_profile_populate_roles( $form ) {
        
        foreach ( $form['fields'] as &$field ) {
    
            if ( $field->type == 'select' && $field->inputName==='primary_role' ) {
                prepare_primary_role_dropdown($field);
            }
            
            if ( $field->type == 'multiselect' && $field->inputName==='secondary_roles' ) {
                prepare_secondary_roles_multiselect($field);
            }
            
        }   // foreach
        
        return $form;
    }
    
    
    function get_primary_role() {
        global $current_user;
        
        if (!empty($current_user->roles)) {
            $roles = array_values($current_user->roles);
            $primary_role = array_shift($roles);
        } else {
            $primary_role = 'do-not-allow';
        }
        
        return $primary_role;
    }
    
    
    function prepare_primary_role_dropdown( &$field ) {
        global $wp_roles;
        
        $primary_role = get_primary_role();    
        $choices = array();    
        foreach ($wp_roles->role_names as $key=>$value) {
            $is_selected = $primary_role===$key;
            $choices[] = array('text'=>$value, 'value'=>$key, 'isSelected'=>$is_selected, 'price'=>0.00);
        }
        $field->choices = $choices;
        
    }
    
    
    function prepare_secondary_roles_multiselect( &$field ) {
        global $current_user, $wp_roles;
            
        $primary_role = get_primary_role();
        $choices = array();
        foreach ($wp_roles->role_names as $key=>$value) {
            if ($key==$primary_role) {
                continue;
            }
            $is_selected = in_array($key, $current_user->roles);
            $choices[] = array('text'=>$value, 'value'=>$key, 'isSelected'=>$is_selected, 'price'=>0.00);
            
        }
        $field->choices = $choices;
    }
    
    // update user's roles according to the on form selection
    add_action( 'gform_user_updated', 'frontend_profile_change_user_roles', 10, 4);
    
    function frontend_profile_change_user_roles($user_id, $user_config, $entry, $user_pass) {
    
        $user = new WP_User($user_id);
        $user->set_role($entry[6]); // Primary role
        
        // secondary roles
        if (empty($entry[7])) {
            return;
        }
        $roles = explode(',', $entry[7]);
        foreach($roles as $role) {
            $user->add_role($role);
        }
        
    }
    

    10 at the filter name ‘gform_pre_render_10’ is the ID of Gravity Forms form (with user profile fields including roles) linked to the “User Registration” add-on item with ‘update’ action.
    Form ID=10 includes 2 roles related fields:
    1) “Primary role” drop down field with “Allow field to be populated dynamically” flag turned on and “parameter name” value “primary_role”. It corresponds to the entry[6] at the code above.
    2) “Secondary roles” multi select field with “Allow field to be populated dynamically” flag turned on and “parameter name” value “secondary_roles”. It corresponds to the entry[7] at the code above.

    #1582
    kardon
    Participant

    Thank you so much for the work you did here!! Got this thing working pretty easily and it works great on all our testing. Rolling it out live in the next week!

    #1583
    Vladimir
    Keymaster

    Excellent! Thanks for the feedback.

    #2973
    cemfundog
    Participant

    Hello Vladimir. My name is Brian. I just purchased this plugin due to this post. I am hoping that you can help me out a bit here. I am trying to register new users with 2 roles. One based on the predefined role in the gravity forms user registration addon, and the other from a radio button list on the same form. Due to a plugin that we had custom made for this project, I need each user to have a custom user role called ‘shiftee_customer’, and I also need them to have another role. So in other words, they can not share capabilities, they need to have 2 separate roles attached to their account after sign up. The code you provided is very close to what I need. Would you be willing to help me finish it up for my needs. I really appreciate your plugin and your help. Thank you in advance for looking.

    #2977
    Vladimir
    Keymaster

    Hi Brian,

    Show a screenshot of your GF user registration add-on form.
    I have Gravity Forms User Registration Add-On copy version 1.6 for testing. If you use another version send its copy to support [at-sign] role-editor.com
    I will try to reproduce your form and write a script for it.

    I use a copy of commercial products provided by clients at the local development environment and for testing purpose only.

    #2995
    cemfundog
    Participant

    Did you get my email with the attachment?

    #2997
    Vladimir
    Keymaster

    Hi Brian,

    Thanks for this checking. I just found your message at the Gmail SPAM box. I will work on the subject. Excuse me for this delay with response.

    #2998
    Vladimir
    Keymaster

    Hi Brian,

    I made an assumption that user select a secondary role from the business type radio list. So I added role IDs as the option values for its options: hospice, hospital, surgury_center.
    You have to create roles with the same IDs. This interface element is available as the $entry[11] at the GF ‘gform_user_registered’ filter. So PHP code will be:

    add_action( 'gform_user_registered', 'frontend_register_add_2nd_user_role', 10, 4);
    
    function frontend_register_add_2nd_user_role($user_id, $user_config, $entry, $user_pass) {
    
        global $wp_roles;
        
        $user = new WP_User($user_id);
        
        $role = $entry[11];
        
        // secondary role
        if (empty($role)) {
            return;
        }
        
        if (!isset($wp_roles->roles[$role])) {
            return;
        }
        
        $user->add_role($role);
        
    }
    
    #2999
    cemfundog
    Participant

    I am so grateful for your help. This worked perfectly. You are the best. I will spread the word for your plugin and thank you so much for the extra, above and beyond, help.

Viewing 12 posts - 1 through 12 (of 12 total)
  • You must be logged in to reply to this topic.