| @@ -24,40 +24,47 @@ | ||
| 24 | 24 | } |
| 25 | 25 | |
| 26 | 26 | $search_term = sanitize_text_field($request->get('search')); |
| 27 | 27 | |
| 28 | - $queryArgs = [ | |
| 28 | + // The total is never used, and counting it forces a full scan of every matching user | |
| 29 | + $baseArgs = [ | |
| 29 | 30 | 'role__not_in' => ['subscriber'], |
| 30 | 31 | 'number' => 50, |
| 31 | 32 | 'fields' => ['ID', 'user_email', 'display_name'], |
| 32 | - 'search' => '*' . $search_term . '*' | |
| 33 | + 'count_total' => false | |
| 33 | 34 | ]; |
| 34 | 35 | |
| 35 | - $metaQueryArgs = [ | |
| 36 | - 'role__not_in' => ['subscriber'], | |
| 37 | - 'number' => 50, | |
| 38 | - 'fields' => ['ID', 'user_email', 'display_name'], | |
| 39 | - 'meta_query' => [ | |
| 40 | - 'relation' => 'OR', | |
| 41 | - [ | |
| 42 | - 'key' => 'first_name', | |
| 43 | - 'value' => $search_term, | |
| 44 | - 'compare' => 'LIKE' | |
| 36 | + if ($search_term === '') { | |
| 37 | + $users = get_users(apply_filters('fluent_booking/user_search_meta_query_arguments', $baseArgs, $search_term)); | |
| 38 | + } else { | |
| 39 | + $queryArgs = array_merge($baseArgs, [ | |
| 40 | + 'search' => '*' . $search_term . '*' | |
| 41 | + ]); | |
| 42 | + | |
| 43 | + $metaQueryArgs = array_merge($baseArgs, [ | |
| 44 | + /* phpcs:disable WordPress.DB.SlowDBQuery.slow_db_query_meta_query */ | |
| 45 | + 'meta_query' => [ | |
| 46 | + 'relation' => 'OR', | |
| 47 | + [ | |
| 48 | + 'key' => 'first_name', | |
| 49 | + 'value' => $search_term, | |
| 50 | + 'compare' => 'LIKE' | |
| 51 | + ], | |
| 52 | + [ | |
| 53 | + 'key' => 'last_name', | |
| 54 | + 'value' => $search_term, | |
| 55 | + 'compare' => 'LIKE' | |
| 56 | + ] | |
| 45 | 57 | ], |
| 46 | - [ | |
| 47 | - 'key' => 'last_name', | |
| 48 | - 'value' => $search_term, | |
| 49 | - 'compare' => 'LIKE' | |
| 50 | - ] | |
| 51 | - ], | |
| 52 | - ]; | |
| 58 | + ]); | |
| 53 | 59 | |
| 54 | - $metaQueryArgs = apply_filters('fluent_booking/user_search_meta_query_arguments', $metaQueryArgs, $search_term); | |
| 60 | + $metaQueryArgs = apply_filters('fluent_booking/user_search_meta_query_arguments', $metaQueryArgs, $search_term); | |
| 55 | 61 | |
| 56 | - $queryResult = get_users($queryArgs); | |
| 57 | - $metaQueryResult = get_users($metaQueryArgs); | |
| 62 | + $queryResult = get_users($queryArgs); | |
| 63 | + $metaQueryResult = get_users($metaQueryArgs); | |
| 58 | 64 | |
| 59 | - $users = array_unique(array_merge($queryResult, $metaQueryResult), SORT_REGULAR); | |
| 65 | + $users = array_unique(array_merge($queryResult, $metaQueryResult), SORT_REGULAR); | |
| 66 | + } | |
| 60 | 67 | |
| 61 | 68 | $hosts = []; |
| 62 | 69 | $pushedIds = []; |
| 63 | 70 | $calendarUserIds = Calendar::where('type', 'simple')->pluck('user_id')->toArray(); |