Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

UR-1130 Fix - Incorrect filtering of pending users #597

Merged
merged 5 commits into from
Aug 30, 2023
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
156 changes: 128 additions & 28 deletions includes/admin/class-ur-admin-user-list-manager.php
Original file line number Diff line number Diff line change
Expand Up @@ -182,21 +182,7 @@ public function trigger_query_actions() {
*/
public function user_registration_pending_users_notices() {

$args = array(
'meta_query' => array(
'relation' => 'OR',
array(
'key' => 'ur_user_status',
'value' => 0,
'compare' => '=',
),
array(
'key' => 'ur_confirm_email',
'value' => 0,
'compare' => '=',
),
),
);
$args = $this->get_pending_users_meta_query();

// Remove previously set filter to get exact pending users count.
remove_filter( 'pre_get_users', array( $this, 'filter_users_by_approval_status' ) );
Expand Down Expand Up @@ -298,6 +284,16 @@ public function add_column_cell( $val, $column_name, $user_id ) {
$user_manager = new UR_Admin_User_Manager( $user_id );
$status = $user_manager->get_user_status();

if ( in_array( $status['login_option'], array( 'email_confirmation', 'admin_approval_after_email_confirmation' ), true ) ) {
if ( '0' == $status['approval_status'] || '' == $status['approval_status'] ) {
if ( 0 == $status['email_status'] || 'false' == $status['email_status'] ) {
return __( 'Awaiting Email Confirmation', 'user-registration' );
}
} elseif ( '-1' == $status['approval_status'] ) {
return UR_Admin_User_Manager::get_status_label( '-1' );
}
}

if ( ! empty( $status ) ) {
return UR_Admin_User_Manager::get_status_label( $status['user_status'] );
}
Expand Down Expand Up @@ -367,6 +363,8 @@ public function add_status_filter( $which ) {
$pending_label = UR_Admin_User_Manager::get_status_label( UR_Admin_User_Manager::PENDING );
$denied_label = UR_Admin_User_Manager::get_status_label( UR_Admin_User_Manager::DENIED );

$pending_email_label = __( 'Awaiting Email Confirmation', 'user-registration' );

?>
</div><!-- .alignleft.actions opened in extra_tablenav() - class-wp-users-list-table.php:259 -->
<div class="alignleft actions">
Expand All @@ -380,6 +378,7 @@ public function add_status_filter( $which ) {
echo '<option value="approved" ' . esc_attr( selected( 'approved', $status_filter_value ) ) . '>' . esc_html( $approved_label ) . '</option>';
echo '<option value="pending" ' . esc_attr( selected( 'pending', $status_filter_value ) ) . '>' . esc_html( $pending_label ) . '</option>';
echo '<option value="denied" ' . esc_attr( selected( 'denied', $status_filter_value ) ) . '>' . esc_html( $denied_label ) . '</option>';
echo '<option value="pending_email" ' . esc_attr( selected( 'pending_email', $status_filter_value ) ) . '>' . esc_html( $pending_email_label ) . '</option>';
?>
</select>

Expand Down Expand Up @@ -449,23 +448,13 @@ public function filter_users_by_approval_status( $query ) {
case 'denied':
$status = UR_Admin_User_Manager::DENIED;
break;
case 'pending_email':
break;
default:
return;
}

$meta_query = array(
'relation' => 'OR',
array(
'key' => 'ur_user_status',
'value' => $status,
'compare' => '=',
),
array(
'key' => 'ur_confirm_email',
'value' => $status,
'compare' => '=',
),
);
$meta_query = $this->get_pending_users_meta_query();

if ( UR_Admin_User_Manager::APPROVED === $status ) {
$meta_query = array(
Expand All @@ -492,6 +481,10 @@ public function filter_users_by_approval_status( $query ) {
'value' => UR_Admin_User_Manager::APPROVED,
),
);
} elseif ( UR_Admin_User_Manager::DENIED == $status ) {
$meta_query = $this->get_denied_users_meta_query();
} elseif ( 'pending_email' == $status ) {
$meta_query = $this->get_pending_email_meta_query();
}
}

Expand Down Expand Up @@ -661,6 +654,113 @@ public function save_profile_field( $user_id ) {
return update_user_meta( absint( $user_id ), 'ur_confirm_email', $new_status );
}
}

/**
* Returns meta query array to fetch pending users.
*
* @return array
*/
private function get_pending_users_meta_query() {
$meta_query = array(
'meta_query' => array(
'relation' => 'AND',
array(
'key' => 'ur_user_status',
'value' => '0',
'compare' => '=',
),
array(
'relation' => 'AND',
array(
'relation' => 'OR',
array(
'key' => 'ur_confirm_email',
'value' => '0',
'compare' => '!=',
),
array(
'key' => 'ur_confirm_email',
'compare' => 'NOT EXISTS',
),
),
array(
'relation' => 'OR',
array(
'key' => 'ur_admin_approval_after_email_confirmation',
'value' => 'false',
'compare' => '=',
),
array(
'key' => 'ur_admin_approval_after_email_confirmation',
'compare' => 'NOT EXISTS',
),
),
),
),
);

return $meta_query;
}

/**
* Returns meta query array to fetch denied users.
*
* @return array
*/
private function get_denied_users_meta_query() {
$meta_query = array(
'meta_query' => array(
'relation' => 'OR',
array(
'key' => 'ur_user_status',
'value' => '-1',
'compare' => '=',
),
array(
'key' => 'ur_confirm_email',
'value' => '-1',
'compare' => '=',
),
),
);

return $meta_query;
}

/**
* Returns meta query array to fetch email pending users.
*
* @return array
*/
private function get_pending_email_meta_query() {
$meta_query = array(
'meta_query' => array(

array(
'relation' => 'AND',
array(
'relation' => 'OR',
array(
'key' => 'ur_user_status',
'compare' => 'NOT EXISTS',
),
array(
'key' => 'ur_user_status',
'value' => '0',
'compare' => '=',
),
),
array(
'key' => 'ur_confirm_email',
'value' => '0',
'compare' => '=',
),
),
),
);

return $meta_query;
}
}

return new UR_Admin_User_List_Manager();
12 changes: 8 additions & 4 deletions includes/admin/class-ur-admin-user-manager.php
Original file line number Diff line number Diff line change
Expand Up @@ -202,16 +202,20 @@ public function get_user_status( $exact_value = false ) {
$this->user_status = $admin_approval_after_email_confirmation_status;

$result = array(
'login_option' => 'admin_approval_after_email_confirmation',
'user_status' => $admin_approval_after_email_confirmation_status,
'login_option' => 'admin_approval_after_email_confirmation',
'user_status' => $admin_approval_after_email_confirmation_status,
'email_status' => $user_email_status,
'approval_status' => $admin_approval_after_email_confirmation_status,
);
} elseif ( ( '' === $user_status && '' !== $user_email_status ) || ( '' !== $user_status && '' !== $user_email_status ) ) {

$this->user_status = $user_email_status;

$result = array(
'login_option' => 'email_confirmation',
'user_status' => $user_email_status,
'login_option' => 'email_confirmation',
'user_status' => $user_email_status,
'email_status' => $user_email_status,
'approval_status' => $user_status,
);
}
return $result;
Expand Down
Loading