diff --git a/includes/core/class-roles-capabilities.php b/includes/core/class-roles-capabilities.php index 8813547d..f9b181dd 100644 --- a/includes/core/class-roles-capabilities.php +++ b/includes/core/class-roles-capabilities.php @@ -243,6 +243,69 @@ if ( ! class_exists( 'Roles_Capabilities' ) ) { } + /** + * @return array + */ + function get_editable_user_roles() { + // User has roles so look for a UM Role one + $um_roles_keys = get_option( 'um_roles' ); + + if ( ! empty( $um_roles_keys ) ) { + $um_roles_keys = array_map( function( $item ) { + return 'um_' . $item; + }, $um_roles_keys ); + } + + return array_merge( $um_roles_keys, array( 'subscriber' ) ); + } + + + /** + * @param $user_id + * + * @return bool|mixed + */ + function get_editable_priority_user_role( $user_id ) { + $user = get_userdata( $user_id ); + + if ( empty( $user->roles ) ) + return false; + + // User has roles so look for a UM Role one + $um_roles_keys = get_option( 'um_roles' ); + + if ( ! empty( $um_roles_keys ) ) { + $um_roles_keys = array_map( function( $item ) { + return 'um_' . $item; + }, $um_roles_keys ); + } + + $orders = array(); + foreach ( array_values( $user->roles ) as $userrole ) { + if ( ! empty( $um_roles_keys ) && in_array( $userrole, $um_roles_keys ) ) { + $userrole_metakey = substr( $userrole, 3 ); + } else { + $userrole_metakey = $userrole; + } + + $rolemeta = get_option( "um_role_{$userrole_metakey}_meta", false ); + + if ( ! $rolemeta ) { + $orders[ $userrole ] = 0; + continue; + } + + $orders[ $userrole ] = ! empty( $rolemeta['_um_priority'] ) ? $rolemeta['_um_priority'] : 0; + } + + arsort( $orders ); + $roles_in_priority = array_keys( $orders ); + $roles_in_priority = array_intersect( $roles_in_priority, $this->get_editable_user_roles() ); + + return array_shift( $roles_in_priority ); + } + + /** * @param $user_id * diff --git a/includes/core/class-user.php b/includes/core/class-user.php index d6d6d37e..c4d86256 100644 --- a/includes/core/class-user.php +++ b/includes/core/class-user.php @@ -384,7 +384,6 @@ if ( ! class_exists( 'User' ) ) { if ( ! current_user_can( 'edit_user', $userdata->ID ) ) return $content; - //$user_role = UM()->roles()->um_get_user_role( $userdata->ID ); $user_role = UM()->roles()->get_um_user_role( $userdata->ID ); if ( $user_role && ! empty( $userdata->roles ) && count( $userdata->roles ) == 1 ) $style = 'style="display:none;"'; @@ -587,9 +586,7 @@ if ( ! class_exists( 'User' ) ) { } // add permissions - //$user_role = UM()->roles()->um_get_user_role( $this->id ); $user_role = UM()->roles()->get_priority_user_role( $this->id ); - //$this->profile['role'] = ( strpos( $user_role, 'um_' ) === 0 ) ? str_replace( 'um_', '', $user_role ) : $user_role; $this->profile['role'] = $user_role; $this->profile['roles'] = UM()->roles()->get_all_user_roles( $this->id ); diff --git a/includes/um-short-functions.php b/includes/um-short-functions.php index edee0170..a8335d2d 100644 --- a/includes/um-short-functions.php +++ b/includes/um-short-functions.php @@ -1646,7 +1646,8 @@ function um_user( $data, $attrs = null ) { case 'role_select': case 'role_radio': - return UM()->roles()->get_role_name( um_user( 'role' ) ); + + return UM()->roles()->get_role_name( UM()->roles()->get_editable_priority_user_role( um_user( 'ID' ) ) ); break; case 'submitted':