From 9d6f6231bd02db2af550d95cb58f7a67bb61b9a6 Mon Sep 17 00:00:00 2001 From: nikitozzzzzzz Date: Thu, 31 Aug 2017 17:42:01 +0300 Subject: [PATCH] - fixed user update logic; - checked and optimized um_role() function; - small changes and fixes for 2.0; --- includes/admin/core/class-admin-enqueue.php | 5 -- includes/core/class-fields.php | 8 --- includes/core/class-rest-api.php | 2 +- includes/core/class-roles-capabilities.php | 56 ++++++++++++++------- includes/core/class-shortcodes.php | 2 +- includes/core/class-user.php | 10 ++-- includes/core/um-actions-access.php | 6 +-- includes/core/um-actions-form.php | 8 +-- includes/core/um-actions-login.php | 3 +- includes/core/um-actions-members.php | 2 +- includes/core/um-actions-user.php | 3 +- includes/core/um-filters-members.php | 4 +- includes/core/um-filters-navmenu.php | 2 +- 13 files changed, 56 insertions(+), 55 deletions(-) diff --git a/includes/admin/core/class-admin-enqueue.php b/includes/admin/core/class-admin-enqueue.php index 6ed2cc59..f58eb336 100644 --- a/includes/admin/core/class-admin-enqueue.php +++ b/includes/admin/core/class-admin-enqueue.php @@ -278,11 +278,6 @@ if ( ! class_exists( 'Admin_Enqueue' ) ) { wp_register_style( 'um_admin_misc', $this->css_url . 'um-admin-misc.css' ); wp_enqueue_style( 'um_admin_misc' ); - if ( get_post_type() != 'shop_order' ) { - wp_register_style( 'um_admin_select2', $this->css_url . 'um-admin-select2.css' ); - wp_enqueue_style( 'um_admin_select2' ); - } - } diff --git a/includes/core/class-fields.php b/includes/core/class-fields.php index 901ab0c8..a9487089 100644 --- a/includes/core/class-fields.php +++ b/includes/core/class-fields.php @@ -2562,14 +2562,6 @@ if ( ! class_exists( 'Fields' ) ) { $res = apply_filters("um_view_field", $res, $data, $type ); $res = apply_filters("um_view_field_value_{$type}", $res, $data ); - -/* if ( $key == 'role_radio' || $key == 'role_select' ) { - $role_meta = UM()->roles()->role_data( um_user( 'role' ) ); - if ( ! empty( $role_meta['is_custom'] ) ) { - $res = 'UM ' . $res; - } - }*/ - $output .= '
'; $output .= '
' . $res . '
'; $output .= '
'; diff --git a/includes/core/class-rest-api.php b/includes/core/class-rest-api.php index b20916af..2a2980c6 100644 --- a/includes/core/class-rest-api.php +++ b/includes/core/class-rest-api.php @@ -437,7 +437,7 @@ if ( ! class_exists( 'REST_API' ) ) { break; case 'role': - $response['role'] = um_user('role'); + $response['role'] = um_user( 'role' ); break; case 'email': diff --git a/includes/core/class-roles-capabilities.php b/includes/core/class-roles-capabilities.php index e3dab028..6606f6c2 100644 --- a/includes/core/class-roles-capabilities.php +++ b/includes/core/class-roles-capabilities.php @@ -63,6 +63,27 @@ if ( ! class_exists( 'Roles_Capabilities' ) ) { } + /** + * Check if role is custom + * + * @param $role + * @return bool + */ + function is_role_custom( $role ) { + // User has roles so look for a UM Role one + $role_keys = get_option( 'um_roles' ); + + if ( empty( $role_keys ) ) + return false; + + $role_keys = array_map( function( $item ) { + return 'um_' . $item; + }, $role_keys ); + + return in_array( $role, $role_keys ); + } + + /** * Return a user's main role * @@ -78,7 +99,6 @@ if ( ! class_exists( 'Roles_Capabilities' ) ) { // User exists if ( ! empty( $user ) ) { - // Get users old UM role $role = $this->um_get_user_role( $user_id ); @@ -89,7 +109,7 @@ if ( ! class_exists( 'Roles_Capabilities' ) ) { // Users role is different than the new role // Remove the old UM role - if ( ! empty( $role ) ) + if ( ! empty( $role ) && $this->is_role_custom( $role ) ) $user->remove_role( $role ); // Add the new role @@ -126,30 +146,28 @@ if ( ! class_exists( 'Roles_Capabilities' ) ) { * @param int $user_id * @return bool|mixed */ - function um_get_user_role( $user_id = 0 ) { + function um_get_user_role( $user_id ) { $user = get_userdata( $user_id ); - $role = false; + + if ( empty( $user->roles ) ) + return false; // User has roles so look for a UM Role one - if ( ! empty( $user->roles ) ) { - $role_keys = get_option( 'um_roles' ); + $role_keys = get_option( 'um_roles' ); - if ( empty( $role_keys ) ) - return array_shift( $user->roles ); + if ( empty( $role_keys ) ) + return array_shift( $user->roles ); - $role_keys = array_map( function( $item ) { - return 'um_' . $item; - }, $role_keys ); + $role_keys = array_map( function( $item ) { + return 'um_' . $item; + }, $role_keys ); - $roles = array_intersect( array_values( $user->roles ), $role_keys ); - if ( ! empty( $roles ) ) { - $role = array_shift( $roles ); - } else { - return array_shift( $user->roles ); - } + $roles = array_intersect( array_values( $user->roles ), $role_keys ); + if ( ! empty( $roles ) ) { + return array_shift( $roles ); + } else { + return array_shift( $user->roles ); } - - return $role; } diff --git a/includes/core/class-shortcodes.php b/includes/core/class-shortcodes.php index 24723295..fdd8a5bf 100644 --- a/includes/core/class-shortcodes.php +++ b/includes/core/class-shortcodes.php @@ -556,7 +556,7 @@ if ( ! class_exists( 'Shortcodes' ) ) { - $current_user_role = um_user('role'); + $current_user_role = um_user( 'role' ); if( isset( $a['not'] ) && ! empty( $a['not'] ) && isset( $a['roles'] ) && ! empty( $a['roles'] ) ){ return do_shortcode( $content ); diff --git a/includes/core/class-user.php b/includes/core/class-user.php index 3b422dcc..c6f21211 100644 --- a/includes/core/class-user.php +++ b/includes/core/class-user.php @@ -62,10 +62,9 @@ if ( ! class_exists( 'User' ) ) { add_action( 'profile_update', array( &$this, 'profile_update' ), 10, 2 ); // user_id and old_user_data add_action( 'edit_user_profile_update', array( &$this, 'profile_update' ), 10, 1 ); + add_action( 'user_register', array( &$this, 'user_register_via_admin' ), 10, 1 ); - add_action( 'user_register', array( &$this, 'set_gravatar' ), 11, 1 ); - } @@ -231,13 +230,13 @@ if ( ! class_exists( 'User' ) ) { function profile_update( $user_id ) { // Bail if no user ID was passed - if ( empty( $user_id ) ) return; if ( ! empty( $_POST['um-role'] ) ) { - if ( ! user_can( $user_id, $_POST['um-role'] ) ) + if ( ! user_can( $user_id, $_POST['um-role'] ) ) { UM()->roles()->set_role( $user_id, $_POST['um-role'] ); + } } $this->remove_cache( $user_id ); @@ -482,7 +481,8 @@ if ( ! class_exists( 'User' ) ) { // add permissions $user_role = UM()->roles()->um_get_user_role( $this->id ); - $this->profile['role'] = ( strpos( $user_role, 'um_' ) === 0 ) ? str_replace( 'um_', '', $user_role ) : $user_role; + //$this->profile['role'] = ( strpos( $user_role, 'um_' ) === 0 ) ? str_replace( 'um_', '', $user_role ) : $user_role; + $this->profile['role'] = $user_role; $role_meta = UM()->roles()->role_data( $user_role ); $role_meta = apply_filters( 'um_user_permissions_filter', $role_meta, $this->id ); diff --git a/includes/core/um-actions-access.php b/includes/core/um-actions-access.php index 4ef3b20e..424e5185 100644 --- a/includes/core/um-actions-access.php +++ b/includes/core/um-actions-access.php @@ -178,7 +178,7 @@ $access_roles = unserialize( $access_roles ); $access_roles = array_filter($access_roles); - if ( !empty( $access_roles ) && !in_array( um_user('role'), $access_roles ) ) { + if ( ! empty( $access_roles ) && ! in_array( um_user( 'role' ), $access_roles ) ) { if ( empty( $access_redirect ) ) { if ( is_user_logged_in() ) { $access_redirect = site_url(); @@ -307,8 +307,8 @@ $access_roles = unserialize( $access_roles ); $access_roles = array_filter($access_roles); - if ( !empty( $access_roles ) && !in_array( um_user('role'), $access_roles ) ) { - if ( !$access_redirect ) { + if ( ! empty( $access_roles ) && ! in_array( um_user( 'role' ), $access_roles ) ) { + if ( ! $access_redirect ) { if ( is_user_logged_in() ) { $access_redirect = site_url(); } else { diff --git a/includes/core/um-actions-form.php b/includes/core/um-actions-form.php index 20a661aa..20f72a13 100644 --- a/includes/core/um-actions-form.php +++ b/includes/core/um-actions-form.php @@ -135,12 +135,12 @@ } - if( isset( $fields ) && ! empty( $fields ) ){ - foreach( $fields as $key => $array ) { + if ( ! empty( $fields ) ) { + foreach ( $fields as $key => $array ) { - if( isset( $array['public'] ) && -2 == $array['public'] && isset( $array['roles'] ) && ! empty( $array['roles'] ) && is_user_logged_in() ){ + if ( isset( $array['public'] ) && -2 == $array['public'] && ! empty( $array['roles'] ) && is_user_logged_in() ) { - if( ! in_array( um_user('role') , $array['roles'] ) ){ + if( ! in_array( um_user( 'role' ) , $array['roles'] ) ){ continue; } } diff --git a/includes/core/um-actions-login.php b/includes/core/um-actions-login.php index 4f7c1623..8590e92c 100644 --- a/includes/core/um-actions-login.php +++ b/includes/core/um-actions-login.php @@ -189,8 +189,7 @@ exit( wp_redirect( $args['redirect_to'] ) ); } - $role = um_user( 'role' ); - $role_data = UM()->roles()->role_data( $role ); + $role_data = UM()->roles()->role_data( um_user( 'role' ) ); // Role redirect if ( empty( $role_data['after_login'] ) ) diff --git a/includes/core/um-actions-members.php b/includes/core/um-actions-members.php index b0c1a0d3..86fde4de 100644 --- a/includes/core/um-actions-members.php +++ b/includes/core/um-actions-members.php @@ -18,7 +18,7 @@ if ( $args['search'] == 1 && is_array( $search_filters ) ) { // search on - if ( isset( $args['roles_can_search'] ) && !empty( $args['roles_can_search'] ) && !in_array( um_user('role'), $args['roles_can_search'] ) ){ + if ( isset( $args['roles_can_search'] ) && ! empty( $args['roles_can_search'] ) && ! in_array( um_user( 'role' ), $args['roles_can_search'] ) ) { return; } diff --git a/includes/core/um-actions-user.php b/includes/core/um-actions-user.php index 58ea8100..34c76ce4 100644 --- a/includes/core/um-actions-user.php +++ b/includes/core/um-actions-user.php @@ -22,8 +22,7 @@ add_action('um_when_role_is_set', 'um_remove_prev_synced_wp_role'); function um_remove_prev_synced_wp_role( $user_id ) { um_fetch_user( $user_id ); - $role = um_user('role'); - $meta = UM()->roles()->role_data( $role ); + $meta = UM()->roles()->role_data( um_user( 'role' ) ); if ( isset( $meta['synced_role'] ) && $meta['synced_role'] ) { $wp_user_object = new WP_User( $user_id ); $wp_user_object->remove_role( $meta['synced_role'] ); diff --git a/includes/core/um-filters-members.php b/includes/core/um-filters-members.php index 184fd3f6..62416c62 100644 --- a/includes/core/um-filters-members.php +++ b/includes/core/um-filters-members.php @@ -67,9 +67,7 @@ if ( UM()->roles()->um_user_can( 'can_view_all' ) && UM()->roles()->um_user_can( 'can_view_roles' ) ) { - $role = um_user( 'role' ); - - $permissions = UM()->roles()->role_data( $role ); + $permissions = UM()->roles()->role_data( um_user( 'role' ) ); if ( ! empty( $permissions['can_view_roles'] ) ) $roles = maybe_unserialize( $permissions['can_view_roles'] ); diff --git a/includes/core/um-filters-navmenu.php b/includes/core/um-filters-navmenu.php index ead5fd9e..f297dca4 100644 --- a/includes/core/um-filters-navmenu.php +++ b/includes/core/um-filters-navmenu.php @@ -47,7 +47,7 @@ case 2: if ( is_user_logged_in() && ! empty( $roles ) ) { - $visible = in_array( um_user('role'), (array)$roles ) ? true : false; + $visible = in_array( um_user( 'role' ), (array)$roles ) ? true : false; } else { $visible = is_user_logged_in() ? true : false; }