diff --git a/includes/admin/assets/css/um-admin-global.css b/includes/admin/assets/css/um-admin-global.css index 5a9125f1..0cfe9470 100644 --- a/includes/admin/assets/css/um-admin-global.css +++ b/includes/admin/assets/css/um-admin-global.css @@ -102,7 +102,8 @@ a.um-delete{ color: #a00; } .wp-list-table.roles .column-core, .wp-list-table.roles .column-users, -.wp-list-table.roles .column-admin_access { +.wp-list-table.roles .column-admin_access, +.wp-list-table.roles .column-priority { width:15%; text-align: center !important; } @@ -110,7 +111,8 @@ a.um-delete{ color: #a00; } @media screen and (max-width: 782px) { .wp-list-table.roles .column-core, .wp-list-table.roles .column-users, - .wp-list-table.roles .column-admin_access { + .wp-list-table.roles .column-admin_access, + .wp-list-table.roles .column-priority { text-align: left !important; } } diff --git a/includes/admin/core/list-tables/roles-list-table.php b/includes/admin/core/list-tables/roles-list-table.php index b40f29d5..02891b61 100644 --- a/includes/admin/core/list-tables/roles-list-table.php +++ b/includes/admin/core/list-tables/roles-list-table.php @@ -4,287 +4,293 @@ if ( ! defined( 'ABSPATH' ) ) exit; // Exit if accessed directly global $wpdb; if ( isset( $_REQUEST['_wp_http_referer'] ) ) { - $redirect = remove_query_arg(array('_wp_http_referer' ), wp_unslash( $_REQUEST['_wp_http_referer'] ) ); + $redirect = remove_query_arg(array('_wp_http_referer' ), wp_unslash( $_REQUEST['_wp_http_referer'] ) ); } else { - $redirect = get_admin_url(). 'admin.php?page=um_roles'; + $redirect = get_admin_url(). 'admin.php?page=um_roles'; } global $wp_roles; if ( isset( $_GET['action'] ) ) { - switch ( $_GET['action'] ) { - /* delete action */ - case 'delete': { - $role_keys = array(); - if ( isset( $_REQUEST['id'] ) ) { - check_admin_referer( 'um_role_delete' . $_REQUEST['id'] . get_current_user_id() ); - $role_keys = (array)$_REQUEST['id']; - } elseif( isset( $_REQUEST['item'] ) ) { - check_admin_referer( 'bulk-' . sanitize_key( __( 'Roles', 'ultimate-member' ) ) ); - $role_keys = $_REQUEST['item']; - } + switch ( $_GET['action'] ) { + /* delete action */ + case 'delete': { + $role_keys = array(); + if ( isset( $_REQUEST['id'] ) ) { + check_admin_referer( 'um_role_delete' . $_REQUEST['id'] . get_current_user_id() ); + $role_keys = (array)$_REQUEST['id']; + } elseif( isset( $_REQUEST['item'] ) ) { + check_admin_referer( 'bulk-' . sanitize_key( __( 'Roles', 'ultimate-member' ) ) ); + $role_keys = $_REQUEST['item']; + } - if ( ! count( $role_keys ) ) - um_js_redirect( $redirect ); + if ( ! count( $role_keys ) ) + um_js_redirect( $redirect ); - $um_roles = get_option( 'um_roles' ); + $um_roles = get_option( 'um_roles' ); - $um_custom_roles = array(); - foreach ( $role_keys as $k => $role_key ) { - $role_meta = get_option( "um_role_{$role_key}_meta" ); + $um_custom_roles = array(); + foreach ( $role_keys as $k => $role_key ) { + $role_meta = get_option( "um_role_{$role_key}_meta" ); - if ( empty( $role_meta['_um_is_custom'] ) ) { - continue; - } + if ( empty( $role_meta['_um_is_custom'] ) ) { + continue; + } - delete_option( "um_role_{$role_key}_meta" ); - $um_roles = array_diff( $um_roles, array( $role_key ) ); + delete_option( "um_role_{$role_key}_meta" ); + $um_roles = array_diff( $um_roles, array( $role_key ) ); - $roleID = 'um_' . $role_key; - $um_custom_roles[] = $roleID; + $roleID = 'um_' . $role_key; + $um_custom_roles[] = $roleID; - //check if role exist before removing it - if ( get_role( $roleID ) ) { - remove_role( $roleID ); - } - } + //check if role exist before removing it + if ( get_role( $roleID ) ) { + remove_role( $roleID ); + } + } - //set for users with deleted roles role "Subscriber" - $args = array( - 'blog_id' => get_current_blog_id(), - 'role__in' => $um_custom_roles, - 'number' => -1, - 'count_total' => false, - 'fields' => 'ids', - ); - $users_to_subscriber = get_users( $args ); - if ( ! empty( $users_to_subscriber ) ) { - foreach ( $users_to_subscriber as $user_id ) { - $object_user = get_userdata( $user_id ); + //set for users with deleted roles role "Subscriber" + $args = array( + 'blog_id' => get_current_blog_id(), + 'role__in' => $um_custom_roles, + 'number' => -1, + 'count_total' => false, + 'fields' => 'ids', + ); + $users_to_subscriber = get_users( $args ); + if ( ! empty( $users_to_subscriber ) ) { + foreach ( $users_to_subscriber as $user_id ) { + $object_user = get_userdata( $user_id ); - if ( ! empty( $object_user ) ) { - foreach ( $um_custom_roles as $roleID ) { - $object_user->remove_role( $roleID ); - } - } + if ( ! empty( $object_user ) ) { + foreach ( $um_custom_roles as $roleID ) { + $object_user->remove_role( $roleID ); + } + } - //update user role if it's empty - if ( empty( $object_user->roles ) ) - wp_update_user( array( 'ID' => $user_id, 'role' => 'subscriber' ) ); - } - } + //update user role if it's empty + if ( empty( $object_user->roles ) ) + wp_update_user( array( 'ID' => $user_id, 'role' => 'subscriber' ) ); + } + } - update_option( 'um_roles', $um_roles ); + update_option( 'um_roles', $um_roles ); - um_js_redirect( add_query_arg( 'msg', 'd', $redirect ) ); - break; - } - case 'reset': { - $role_keys = array(); - if ( isset( $_REQUEST['id'] ) ) { - check_admin_referer( 'um_role_reset' . $_REQUEST['id'] . get_current_user_id() ); - $role_keys = (array)$_REQUEST['id']; - } elseif( isset( $_REQUEST['item'] ) ) { - check_admin_referer( 'bulk-' . sanitize_key( __( 'Roles', 'ultimate-member' ) ) ); - $role_keys = $_REQUEST['item']; - } + um_js_redirect( add_query_arg( 'msg', 'd', $redirect ) ); + break; + } + case 'reset': { + $role_keys = array(); + if ( isset( $_REQUEST['id'] ) ) { + check_admin_referer( 'um_role_reset' . $_REQUEST['id'] . get_current_user_id() ); + $role_keys = (array)$_REQUEST['id']; + } elseif( isset( $_REQUEST['item'] ) ) { + check_admin_referer( 'bulk-' . sanitize_key( __( 'Roles', 'ultimate-member' ) ) ); + $role_keys = $_REQUEST['item']; + } - if ( ! count( $role_keys ) ) - um_js_redirect( $redirect ); + if ( ! count( $role_keys ) ) + um_js_redirect( $redirect ); - foreach ( $role_keys as $k=>$role_key ) { - $role_meta = get_option( "um_role_{$role_key}_meta" ); + foreach ( $role_keys as $k=>$role_key ) { + $role_meta = get_option( "um_role_{$role_key}_meta" ); - if ( ! empty( $role_meta['_um_is_custom'] ) ) { - unset( $role_keys[array_search( $role_key, $role_keys )] ); - continue; - } + if ( ! empty( $role_meta['_um_is_custom'] ) ) { + unset( $role_keys[array_search( $role_key, $role_keys )] ); + continue; + } - delete_option( "um_role_{$role_key}_meta" ); - } + delete_option( "um_role_{$role_key}_meta" ); + } - um_js_redirect( add_query_arg( 'msg', 'reset', $redirect ) ); - break; - } - } + um_js_redirect( add_query_arg( 'msg', 'reset', $redirect ) ); + break; + } + } } //remove extra query arg if ( ! empty( $_GET['_wp_http_referer'] ) ) - um_js_redirect( remove_query_arg( array( '_wp_http_referer', '_wpnonce'), wp_unslash( $_SERVER['REQUEST_URI'] ) ) ); + um_js_redirect( remove_query_arg( array( '_wp_http_referer', '_wpnonce'), wp_unslash( $_SERVER['REQUEST_URI'] ) ) ); $order_by = 'name'; $order = ( isset( $_GET['order'] ) && 'asc' == strtolower( $_GET['order'] ) ) ? 'ASC' : 'DESC'; if( ! class_exists( 'WP_List_Table' ) ) - require_once( ABSPATH . 'wp-admin/includes/class-wp-list-table.php' ); + require_once( ABSPATH . 'wp-admin/includes/class-wp-list-table.php' ); class UM_Roles_List_Table extends WP_List_Table { - var $no_items_message = ''; - var $sortable_columns = array(); - var $default_sorting_field = ''; - var $actions = array(); - var $bulk_actions = array(); - var $columns = array(); + var $no_items_message = ''; + var $sortable_columns = array(); + var $default_sorting_field = ''; + var $actions = array(); + var $bulk_actions = array(); + var $columns = array(); - function __construct( $args = array() ){ - $args = wp_parse_args( $args, array( - 'singular' => __( 'item', 'ultimate-member' ), - 'plural' => __( 'items', 'ultimate-member' ), - 'ajax' => false - ) ); + function __construct( $args = array() ){ + $args = wp_parse_args( $args, array( + 'singular' => __( 'item', 'ultimate-member' ), + 'plural' => __( 'items', 'ultimate-member' ), + 'ajax' => false + ) ); - $this->no_items_message = $args['plural'] . ' ' . __( 'not found.', 'ultimate-member' ); + $this->no_items_message = $args['plural'] . ' ' . __( 'not found.', 'ultimate-member' ); - parent::__construct( $args ); + parent::__construct( $args ); - } + } - function __call( $name, $arguments ) { - return call_user_func_array( array( $this, $name ), $arguments ); - } + function __call( $name, $arguments ) { + return call_user_func_array( array( $this, $name ), $arguments ); + } - function prepare_items() { - $columns = $this->get_columns(); - $hidden = array(); - $sortable = $this->get_sortable_columns(); - $this->_column_headers = array( $columns, $hidden, $sortable ); - } + function prepare_items() { + $columns = $this->get_columns(); + $hidden = array(); + $sortable = $this->get_sortable_columns(); + $this->_column_headers = array( $columns, $hidden, $sortable ); + } - function column_default( $item, $column_name ) { - if( isset( $item[ $column_name ] ) ) { - return $item[ $column_name ]; - } else { - return ''; - } - } + function column_default( $item, $column_name ) { + if( isset( $item[ $column_name ] ) ) { + return $item[ $column_name ]; + } else { + return ''; + } + } - function no_items() { - echo $this->no_items_message; - } + function no_items() { + echo $this->no_items_message; + } - function set_sortable_columns( $args = array() ) { - $return_args = array(); - foreach( $args as $k=>$val ) { - if( is_numeric( $k ) ) { - $return_args[ $val ] = array( $val, $val == $this->default_sorting_field ); - } else if( is_string( $k ) ) { - $return_args[ $k ] = array( $val, $k == $this->default_sorting_field ); - } else { - continue; - } - } - $this->sortable_columns = $return_args; - return $this; - } + function set_sortable_columns( $args = array() ) { + $return_args = array(); + foreach( $args as $k=>$val ) { + if( is_numeric( $k ) ) { + $return_args[ $val ] = array( $val, $val == $this->default_sorting_field ); + } else if( is_string( $k ) ) { + $return_args[ $k ] = array( $val, $k == $this->default_sorting_field ); + } else { + continue; + } + } + $this->sortable_columns = $return_args; + return $this; + } - function get_sortable_columns() { - return $this->sortable_columns; - } + function get_sortable_columns() { + return $this->sortable_columns; + } - function set_columns( $args = array() ) { - if( count( $this->bulk_actions ) ) { - $args = array_merge( array( 'cb' => '' ), $args ); - } - $this->columns = $args; - return $this; - } + function set_columns( $args = array() ) { + if( count( $this->bulk_actions ) ) { + $args = array_merge( array( 'cb' => '' ), $args ); + } + $this->columns = $args; + return $this; + } - function get_columns() { - return $this->columns; - } + function get_columns() { + return $this->columns; + } - function set_actions( $args = array() ) { - $this->actions = $args; - return $this; - } + function set_actions( $args = array() ) { + $this->actions = $args; + return $this; + } - function get_actions() { - return $this->actions; - } + function get_actions() { + return $this->actions; + } - function set_bulk_actions( $args = array() ) { - $this->bulk_actions = $args; - return $this; - } + function set_bulk_actions( $args = array() ) { + $this->bulk_actions = $args; + return $this; + } - function get_bulk_actions() { - return $this->bulk_actions; - } + function get_bulk_actions() { + return $this->bulk_actions; + } - function column_cb( $item ) { - return sprintf( '', $item['key'] ); - } + function column_cb( $item ) { + return sprintf( '', $item['key'] ); + } - function column_title( $item ) { - $actions = array(); + function column_title( $item ) { + $actions = array(); - $actions['edit'] = '' . __( 'Edit', 'ultimate-member' ). ''; + $actions['edit'] = '' . __( 'Edit', 'ultimate-member' ). ''; - if ( ! empty( $item['_um_is_custom'] ) ) { - $actions['delete'] = '' . __( 'Delete', 'ultimate-member' ). ''; - } else { - $role_meta = get_option( "um_role_{$item['key']}_meta" ); + if ( ! empty( $item['_um_is_custom'] ) ) { + $actions['delete'] = '' . __( 'Delete', 'ultimate-member' ). ''; + } else { + $role_meta = get_option( "um_role_{$item['key']}_meta" ); - if ( ! empty( $role_meta ) ) { - $actions['reset'] = '' . __( 'Reset UM Role meta', 'ultimate-member' ). ''; - } - } + if ( ! empty( $role_meta ) ) { + $actions['reset'] = '' . __( 'Reset UM Role meta', 'ultimate-member' ). ''; + } + } - return sprintf('%1$s %2$s', '' . $item['name'] . '', $this->row_actions( $actions ) ); - } + return sprintf('%1$s %2$s', '' . $item['name'] . '', $this->row_actions( $actions ) ); + } - function column_roleid( $item ) { - return ! empty( $item['_um_is_custom'] ) ? 'um_' . $item['key'] : $item['key']; - } + function column_roleid( $item ) { + return ! empty( $item['_um_is_custom'] ) ? 'um_' . $item['key'] : $item['key']; + } - function column_core( $item ) { - echo ! empty( $item['_um_is_custom'] ) ? __( 'Yes', 'ultimate-member' ) : __( 'No', 'ultimate-member' ); - } + function column_core( $item ) { + echo ! empty( $item['_um_is_custom'] ) ? __( 'Yes', 'ultimate-member' ) : __( 'No', 'ultimate-member' ); + } - function column_admin_access( $item ) { - echo ! empty( $item['_um_can_access_wpadmin'] ) ? __( 'Yes', 'ultimate-member' ) : __( 'No', 'ultimate-member' ); - } + function column_admin_access( $item ) { + echo ! empty( $item['_um_can_access_wpadmin'] ) ? __( 'Yes', 'ultimate-member' ) : __( 'No', 'ultimate-member' ); + } - function um_set_pagination_args( $attr = array() ) { - $this->set_pagination_args( $attr ); - } + function column_priority( $item ) { + echo ! empty( $item['_um_priority'] ) ? $item['_um_priority'] : '-'; + } + + + function um_set_pagination_args( $attr = array() ) { + $this->set_pagination_args( $attr ); + } } $ListTable = new UM_Roles_List_Table( array( - 'singular' => __( 'Role', 'ultimate-member' ), - 'plural' => __( 'Roles', 'ultimate-member' ), - 'ajax' => false + 'singular' => __( 'Role', 'ultimate-member' ), + 'plural' => __( 'Roles', 'ultimate-member' ), + 'ajax' => false )); $per_page = 20; $paged = $ListTable->get_pagenum(); $ListTable->set_bulk_actions( array( - 'delete' => __( 'Delete', 'ultimate-member' ) + 'delete' => __( 'Delete', 'ultimate-member' ) ) ); $ListTable->set_columns( array( - 'title' => __( 'Role Title', 'ultimate-member' ), - 'roleid' => __( 'Role ID', 'ultimate-member' ), - 'users' => __( 'No.of Members', 'ultimate-member' ), - 'core' => __( 'UM Custom Role', 'ultimate-member' ), - 'admin_access' => __( 'WP-Admin Access', 'ultimate-member' ), + 'title' => __( 'Role Title', 'ultimate-member' ), + 'roleid' => __( 'Role ID', 'ultimate-member' ), + 'users' => __( 'No.of Members', 'ultimate-member' ), + 'core' => __( 'UM Custom Role', 'ultimate-member' ), + 'admin_access' => __( 'WP-Admin Access', 'ultimate-member' ), + 'priority' => __( 'Priority', 'ultimate-member' ), ) ); $ListTable->set_sortable_columns( array( - 'title' => 'title' + 'title' => 'title' ) ); $users_count = count_users(); @@ -293,53 +299,53 @@ $roles = array(); $role_keys = get_option( 'um_roles' ); if ( $role_keys ) { - foreach ( $role_keys as $role_key ) { - $role_meta = get_option( "um_role_{$role_key}_meta" ); - if ( $role_meta ) { + foreach ( $role_keys as $role_key ) { + $role_meta = get_option( "um_role_{$role_key}_meta" ); + if ( $role_meta ) { - $roles['um_' . $role_key] = array( - 'key' => $role_key, - 'users' => ! empty( $users_count['avail_roles']['um_' . $role_key] ) ? $users_count['avail_roles']['um_' . $role_key] : 0 - ); - $roles['um_' . $role_key] = array_merge( $roles['um_' . $role_key], $role_meta ); - } - } + $roles['um_' . $role_key] = array( + 'key' => $role_key, + 'users' => ! empty( $users_count['avail_roles']['um_' . $role_key] ) ? $users_count['avail_roles']['um_' . $role_key] : 0 + ); + $roles['um_' . $role_key] = array_merge( $roles['um_' . $role_key], $role_meta ); + } + } } global $wp_roles; foreach ( $wp_roles->roles as $roleID => $role_data ) { - if ( in_array( $roleID, array_keys( $roles ) ) ) - continue; + if ( in_array( $roleID, array_keys( $roles ) ) ) + continue; - $roles[$roleID] = array( - 'key' => $roleID, - 'users' => ! empty( $users_count['avail_roles'][$roleID] ) ? $users_count['avail_roles'][$roleID] : 0, - 'name' => $role_data['name'] - ); + $roles[$roleID] = array( + 'key' => $roleID, + 'users' => ! empty( $users_count['avail_roles'][$roleID] ) ? $users_count['avail_roles'][$roleID] : 0, + 'name' => $role_data['name'] + ); - $role_meta = get_option( "um_role_{$roleID}_meta" ); - if ( $role_meta ) - $roles[$roleID] = array_merge( $roles[$roleID], $role_meta ); + $role_meta = get_option( "um_role_{$roleID}_meta" ); + if ( $role_meta ) + $roles[$roleID] = array_merge( $roles[$roleID], $role_meta ); } switch( strtolower( $order ) ) { - case 'asc': - uasort( $roles, function( $a, $b ) { - //$a['name'] = ! empty( $a['_um_is_custom'] ) ? 'UM ' . $a['name'] : $a['name']; - //$b['name'] = ! empty( $b['_um_is_custom'] ) ? 'UM ' . $b['name'] : $b['name']; + case 'asc': + uasort( $roles, function( $a, $b ) { + //$a['name'] = ! empty( $a['_um_is_custom'] ) ? 'UM ' . $a['name'] : $a['name']; + //$b['name'] = ! empty( $b['_um_is_custom'] ) ? 'UM ' . $b['name'] : $b['name']; - return strnatcmp( $a['name'], $b['name'] ); - } ); - break; - case 'desc': - uasort( $roles, function( $a, $b ) { - //$a['name'] = ! empty( $a['_um_is_custom'] ) ? 'UM ' . $a['name'] : $a['name']; - //$b['name'] = ! empty( $b['_um_is_custom'] ) ? 'UM ' . $b['name'] : $b['name']; + return strnatcmp( $a['name'], $b['name'] ); + } ); + break; + case 'desc': + uasort( $roles, function( $a, $b ) { + //$a['name'] = ! empty( $a['_um_is_custom'] ) ? 'UM ' . $a['name'] : $a['name']; + //$b['name'] = ! empty( $b['_um_is_custom'] ) ? 'UM ' . $b['name'] : $b['name']; - return strnatcmp( $a['name'], $b['name'] ) * -1; - } ); - break; + return strnatcmp( $a['name'], $b['name'] ) * -1; + } ); + break; } $ListTable->prepare_items(); @@ -347,21 +353,21 @@ $ListTable->items = array_slice( $roles, ( $paged - 1 ) * $per_page, $per_page ) $ListTable->um_set_pagination_args( array( 'total_items' => count( $roles ), 'per_page' => $per_page ) ); ?>
-

- - -

+

+ + +

-

' . __( 'User Role Deleted Successfully.', 'ultimate-member' ) . '

'; - break; - } - } ?> +

' . __( 'User Role Deleted Successfully.', 'ultimate-member' ) . '

'; + break; + } + } ?> -
- - display(); ?> -
+
+ + display(); ?> +
\ No newline at end of file diff --git a/includes/admin/templates/role/publish.php b/includes/admin/templates/role/publish.php index f13d1528..6ff9d8ca 100644 --- a/includes/admin/templates/role/publish.php +++ b/includes/admin/templates/role/publish.php @@ -1,11 +1,27 @@ +$role = $object['data']; ?> + +
+ admin_forms( array( + 'class' => 'um-role-publish um-top-label', + 'prefix_id' => 'role', + 'fields' => array( + array( + 'id' => '_um_priority', + 'type' => 'text', + 'label' => __( 'Role Priority', 'ultimate-member' ), + 'tooltip' => __( 'The higher the number, the higher the priority', 'ultimate-member' ), + 'value' => ! empty( $role['_um_priority'] ) ? $role['_um_priority'] : '', + ), + ) + ) )->render_form(); ?> +
-
- - -
-
+
+ + +
+
\ No newline at end of file diff --git a/includes/core/class-logout.php b/includes/core/class-logout.php index 8bbdf8d1..3d95e752 100644 --- a/includes/core/class-logout.php +++ b/includes/core/class-logout.php @@ -18,44 +18,32 @@ if ( ! class_exists( 'Logout' ) ) { ***/ function logout_page() { - global $sitepress; - $language_code = ''; $current_page_ID = get_the_ID(); $logout_page_id = UM()->config()->permalinks['logout']; - $has_translation = false; $trid = 0; - $not_default_lang = false; if ( is_home() /*|| is_front_page()*/ ) { return; } - if ( function_exists('icl_object_id') || function_exists('icl_get_current_language') ) { + if ( UM()->external_integrations()->is_wpml_active() ) { + global $sitepress; + $default_lang = $sitepress->get_default_language(); + $language_code = $sitepress->get_current_language(); - if( function_exists('icl_get_current_language') ){ - $language_code = icl_get_current_language(); - }else if( function_exists('icl_object_id') && defined('ICL_LANGUAGE_CODE') ){ // checks if WPML exists - $language_code = ICL_LANGUAGE_CODE; - } + if ( function_exists( 'icl_object_id' ) ) { + $trid = icl_object_id( $current_page_ID, 'page', true, $default_lang ); + } else { + $trid = wpml_object_id_filter( $current_page_ID, 'page', true, $default_lang ); + } - $has_translation = true; + if ( $language_code == $default_lang ) { + $language_code = ''; + } + } - if( function_exists('icl_object_id') && defined('ICL_LANGUAGE_CODE') && isset( $sitepress ) ){ // checks if WPML exists - $trid = $sitepress->get_element_trid( $current_page_ID ); - } - - if( icl_get_default_language() !== $language_code ){ - $not_default_lang = true; - }else{ - $language_code = ''; - } - - } - - - - if ( um_is_core_page('logout') || ( $trid > 0 && $has_translation && $trid == $logout_page_id && $not_default_lang ) ) { + if ( um_is_core_page( 'logout' ) || ( $trid > 0 && $trid == $logout_page_id ) ) { if ( is_user_logged_in() ) { diff --git a/includes/core/class-roles-capabilities.php b/includes/core/class-roles-capabilities.php index f3ca5dcf..34c0ebba 100644 --- a/includes/core/class-roles-capabilities.php +++ b/includes/core/class-roles-capabilities.php @@ -170,35 +170,50 @@ if ( ! class_exists( 'Roles_Capabilities' ) ) { } - /** - * Get user one of UM roles if it has it - * - * @param int $user_id - * @return bool|mixed - */ - function um_get_user_role( $user_id ) { - $user = get_userdata( $user_id ); + /** + * Get user one of UM roles if it has it + * + * @param int $user_id + * @return bool|mixed + */ + function um_get_user_role( $user_id ) { + $user = get_userdata( $user_id ); - if ( empty( $user->roles ) ) - return false; + if ( empty( $user->roles ) ) + return false; - // User has roles so look for a UM Role one - $role_keys = get_option( 'um_roles' ); + // User has roles so look for a UM Role one + $um_roles_keys = get_option( 'um_roles' ); - if ( empty( $role_keys ) ) - return array_shift( $user->roles ); + if ( ! empty( $um_roles_keys ) ) { + $um_roles_keys = array_map( function( $item ) { + return 'um_' . $item; + }, $um_roles_keys ); + } - $role_keys = array_map( function( $item ) { - return 'um_' . $item; - }, $role_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; + } - $roles = array_intersect( array_values( $user->roles ), $role_keys ); - if ( ! empty( $roles ) ) { - return array_shift( $roles ); - } else { - return array_shift( $user->roles ); - } - } + $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 ); + + return array_shift( $roles_in_priority ); + } /**