diff --git a/includes/core/class-builtin.php b/includes/core/class-builtin.php index e8220e8d..372e17ad 100644 --- a/includes/core/class-builtin.php +++ b/includes/core/class-builtin.php @@ -542,7 +542,13 @@ if ( ! class_exists( 'Builtin' ) ) { ***/ function set_predefined_fields() { - $um_roles = UM()->roles()->get_roles( false, array( 'admin' ) ); + global $wp_roles; + $role_keys = array_map( function( $item ) { + return 'um_' . $item; + }, get_option( 'um_roles' ) ); + $exclude_roles = array_diff( array_keys( $wp_roles->roles ), array_merge( $role_keys, array( 'subscriber' ) ) ); + + $um_roles = UM()->roles()->get_roles( false, $exclude_roles ); $profile_privacy = apply_filters('um_profile_privacy_options', array( __('Everyone','ultimate-member'), __('Only me','ultimate-member') ) ); diff --git a/includes/core/class-fields.php b/includes/core/class-fields.php index fc025cb0..05224530 100644 --- a/includes/core/class-fields.php +++ b/includes/core/class-fields.php @@ -1909,9 +1909,15 @@ } // role field - if ($form_key == 'role') { - $roles = UM()->roles()->get_roles( false, array( 'administrator' ) ); - if (isset( $options )) + if ( $form_key == 'role' ) { + global $wp_roles; + $role_keys = array_map( function( $item ) { + return 'um_' . $item; + }, get_option( 'um_roles' ) ); + $exclude_roles = array_diff( array_keys( $wp_roles->roles ), array_merge( $role_keys, array( 'subscriber' ) ) ); + + $roles = UM()->roles()->get_roles( false, $exclude_roles ); + if ( isset( $options ) ) $options = array_intersect( $options, $roles ); else $options = $roles; @@ -2098,7 +2104,13 @@ // role field if ($form_key == 'role') { - $options = UM()->roles()->get_roles( false, array( 'administrator' ) ); + global $wp_roles; + $role_keys = array_map( function( $item ) { + return 'um_' . $item; + }, get_option( 'um_roles' ) ); + $exclude_roles = array_diff( array_keys( $wp_roles->roles ), array_merge( $role_keys, array( 'subscriber' ) ) ); + + $options = UM()->roles()->get_roles( false, $exclude_roles ); /*var_dump( UM()->roles()->get_roles() ); global $wpdb; @@ -2158,7 +2170,7 @@ $option_value = apply_filters( 'um_field_non_utf8_value', $option_value ); - $output .= 'is_radio_checked( $key, $option_value, $data )) { $output .= 'checked'; diff --git a/includes/core/class-form.php b/includes/core/class-form.php index d75a8052..de6ec7b6 100644 --- a/includes/core/class-form.php +++ b/includes/core/class-form.php @@ -170,19 +170,25 @@ if ( ! class_exists( 'Form' ) ) { $this->post_form = array_merge( $this->form_data, $this->post_form ); - - if( isset( $this->form_data['custom_fields'] ) && strstr( $this->form_data['custom_fields'], 'role_' ) ){ // Secure selected role + if ( isset( $this->form_data['custom_fields'] ) && strstr( $this->form_data['custom_fields'], 'role_' ) ) { // Secure selected role $custom_field_roles = $this->custom_field_roles( $this->form_data['custom_fields'] ); - if( ! empty( $_POST['role'] ) ){ + if ( ! empty( $_POST['role'] ) ) { $role = $_POST['role']; if( is_array( $_POST['role'] ) ){ $role = current( $_POST['role'] ); } - if ( /*isset( $custom_field_roles ) && is_array( $custom_field_roles ) &&*/ ! empty( $role ) && ! in_array( $role , $custom_field_roles ) ) { + global $wp_roles; + $role_keys = array_map( function( $item ) { + return 'um_' . $item; + }, get_option( 'um_roles' ) ); + $exclude_roles = array_diff( array_keys( $wp_roles->roles ), array_merge( $role_keys, array( 'subscriber' ) ) ); + + if ( ! empty( $role ) && + ( ! in_array( $role , $custom_field_roles ) || in_array( $role , $exclude_roles ) ) ) { wp_die( __( 'This is not possible for security reasons.','ultimate-member') ); } @@ -190,8 +196,6 @@ if ( ! class_exists( 'Form' ) ) { $this->post_form['submitted']['role'] = $role; } - - } elseif ( isset( $this->post_form['mode'] ) && $this->post_form['mode'] == 'register' ) { $role = $this->assigned_role( $this->form_id ); $this->post_form['role'] = $role; diff --git a/includes/core/class-rest-api.php b/includes/core/class-rest-api.php index 2a2980c6..2a9d35f3 100644 --- a/includes/core/class-rest-api.php +++ b/includes/core/class-rest-api.php @@ -23,7 +23,7 @@ if ( ! class_exists( 'REST_API' ) ) { add_action( 'template_redirect', array( $this, 'process_query' ), -1 ); add_filter( 'query_vars', array( $this, 'query_vars' ) ); - add_action( 'um_user_profile_section', array( $this, 'user_key_field' ), 2 ); + add_filter( 'um_user_profile_additional_fields', array( $this, 'user_key_field' ), 3, 2 ); add_action( 'personal_options_update', array( $this, 'update_key' ) ); add_action( 'edit_user_profile_update', array( $this, 'update_key' ) ); @@ -278,7 +278,11 @@ if ( ! class_exists( 'REST_API' ) ) { break; case 'role': $wp_user_object = new \WP_User( $id ); - $wp_user_object->set_role( $value ); + $old_roles = $wp_user_object->roles; + $wp_user_object->set_role( $value ); + + do_action( 'um_after_member_role_upgrade', array( $value ), $old_roles ); + $response['success'] = __('User role has been changed.','ultimate-member'); break; default: @@ -598,21 +602,26 @@ if ( ! class_exists( 'REST_API' ) ) { die(); } - /** - * Modify User Profile - */ - function user_key_field( $user ) { - + /** + * Modify User Profile Page fields + * + * @param $content + * @param $user + * @return string + */ + function user_key_field( $content, $user ) { if ( empty( $user ) ) - return; + return $content; if( ! isset( $user->ID ) ) - return; + return $content; if ( current_user_can( 'edit_users' ) && current_user_can( 'edit_user', $user->ID ) ) { $user = get_userdata( $user->ID ); - ?> -
| @@ -636,6 +645,9 @@ if ( ! class_exists( 'REST_API' ) ) { |
|---|