From 4be0e70bac062eb706af56ee3a1c3b36bfda8faf Mon Sep 17 00:00:00 2001 From: nikitasinelnikov Date: Thu, 23 Jul 2020 16:06:59 +0300 Subject: [PATCH] - fixed member directory roles query; --- includes/core/class-member-directory-meta.php | 18 +++++++++++++++++- includes/core/class-member-directory.php | 16 +++++++++++++++- 2 files changed, 32 insertions(+), 2 deletions(-) diff --git a/includes/core/class-member-directory-meta.php b/includes/core/class-member-directory-meta.php index 0bf010b4..fa53e679 100644 --- a/includes/core/class-member-directory-meta.php +++ b/includes/core/class-member-directory-meta.php @@ -22,6 +22,8 @@ if ( ! class_exists( 'um\core\Member_Directory_Meta' ) ) { var $where_clauses = array(); var $roles = array(); + var $roles_in_query = false; + var $general_meta_joined = false; var $having = ''; @@ -393,6 +395,8 @@ if ( ! class_exists( 'um\core\Member_Directory_Meta' ) ) { if ( empty( $this->roles ) && ! is_multisite() ) { $this->joins[] = "LEFT JOIN {$wpdb->prefix}um_metadata umm_roles ON ( umm_roles.user_id = u.ID AND umm_roles.um_key = '" . $wpdb->get_blog_prefix( $blog_id ) . "capabilities' )"; $this->roles = $value; + + $this->roles_in_query = true; } $roles_clauses = array(); @@ -568,6 +572,8 @@ if ( ! class_exists( 'um\core\Member_Directory_Meta' ) ) { } $this->roles = array_merge( $this->roles, maybe_unserialize( $view_roles ) ); + + $this->roles_in_query = true; } if ( ! empty( $directory_data['roles'] ) ) { @@ -576,6 +582,8 @@ if ( ! class_exists( 'um\core\Member_Directory_Meta' ) ) { } else { $this->roles = array_merge( $this->roles, maybe_unserialize( $directory_data['roles'] ) ); } + + $this->roles_in_query = true; } if ( ! empty( $this->roles ) ) { @@ -588,10 +596,18 @@ if ( ! class_exists( 'um\core\Member_Directory_Meta' ) ) { $this->where_clauses[] = '( ' . implode( ' OR ', $roles_clauses ) . ' )'; } else { - if ( is_multisite() ) { + if ( ! $this->roles_in_query && is_multisite() ) { // select users who have capabilities for current blog $this->joins[] = "LEFT JOIN {$wpdb->prefix}um_metadata umm_roles ON ( umm_roles.user_id = u.ID AND umm_roles.um_key = '" . $wpdb->get_blog_prefix( $blog_id ) . "capabilities' )"; $this->where_clauses[] = "umm_roles.um_value IS NOT NULL"; + } else { + $member_directory_response = apply_filters( 'um_ajax_get_members_response', array( + 'pagination' => $this->calculate_pagination( $directory_data, 0 ), + 'users' => array(), + 'is_search' => $this->is_search, + ), $directory_data ); + + wp_send_json_success( $member_directory_response ); } } diff --git a/includes/core/class-member-directory.php b/includes/core/class-member-directory.php index 8d0f934e..8482a527 100644 --- a/includes/core/class-member-directory.php +++ b/includes/core/class-member-directory.php @@ -1047,10 +1047,14 @@ if ( ! class_exists( 'um\core\Member_Directory' ) ) { * */ function hide_by_role() { + if ( ! is_user_logged_in() ) { + return; + } + $roles = um_user( 'can_view_roles' ); $roles = maybe_unserialize( $roles ); - if ( empty( $roles ) || ! UM()->roles()->um_user_can( 'can_view_all' ) ) { + if ( UM()->roles()->um_user_can( 'can_view_all' ) && empty( $roles ) ) { return; } @@ -2429,6 +2433,16 @@ if ( ! class_exists( 'um\core\Member_Directory' ) ) { unset( $this->query_args['meta_query'] ); } + if ( isset( $this->query_args['role__in'] ) && empty( $this->query_args['role__in'] ) ) { + $member_directory_response = apply_filters( 'um_ajax_get_members_response', array( + 'pagination' => $this->calculate_pagination( $directory_data, 0 ), + 'users' => array(), + 'is_search' => $this->is_search, + ), $directory_data ); + + wp_send_json_success( $member_directory_response ); + } + /** * UM hook *