admin_user_search = $admin_user_search; $this->version = $version; $this->main = $plugin_main; } public function enqueue_styles($hook_suffix) { if ($hook_suffix=="users_page_search-users") { // bootstrap 4 css wp_enqueue_style( 'bootstrap_4_css', plugin_dir_url( __FILE__ ) . 'assets/bootstrap-5.1.3.min.css', array(), $this->version, 'all'); // angularjs datatables wp_enqueue_style( "angular_datatables_css", plugin_dir_url( __FILE__ ) . 'assets/angular_datatables.css', array(), $this->version, 'all' ); wp_enqueue_style( 'bootstrap_4_datatables', plugin_dir_url( __FILE__ ) . 'assets/dataTables.bootstrap4.min.css', array(), $this->version, 'all' ); wp_enqueue_style('admin_user_search_admin_css', plugin_dir_url(__FILE__) . 'css/admin-user-search-admin.css', array(), time() ); } } public function enqueue_scripts($hook_suffix) { if ($hook_suffix=="users_page_search-users") { // angularJS wp_enqueue_script("angular_min_js", plugin_dir_url(__FILE__) . 'assets/angular.min.js', array( 'jquery' ), time()); // BootstrapJS wp_enqueue_script("bootstrap_min_js", plugin_dir_url(__FILE__) . 'assets/bootstrap-5.1.3.min.js', array( 'jquery' ), time()); // AngularJS used libraries wp_enqueue_script("angular_animate_js", plugin_dir_url(__FILE__) . 'assets/angular-animate.js', array( 'jquery' ), time()); wp_enqueue_script("angular_sanitize_js", plugin_dir_url(__FILE__) . 'assets/angular-sanitize.js', array( 'jquery' ), time()); wp_enqueue_script("ui_bootstrap", plugin_dir_url(__FILE__) . 'assets/ui-bootstrap-tpls-3.0.5.min.js', array( 'jquery' ), time()); wp_enqueue_script("jquery_dataTables", plugin_dir_url(__FILE__) . 'assets/jquery.dataTables.min.js', array( 'jquery' ), time()); wp_enqueue_script("dataTables_bootstrap4", plugin_dir_url(__FILE__) . 'assets/dataTables.bootstrap4.min.js', array( 'jquery' ), time()); wp_enqueue_script("angular_datatables_js", plugin_dir_url(__FILE__) . '/assets/angular_datatables.js', array( 'jquery' )); // Other JS libraris wp_enqueue_script("sweetalert_js", plugin_dir_url(__FILE__) . '/assets/sweetalert.js', array( 'jquery' )); // custom scripts wp_enqueue_script( $this->admin_user_search, plugin_dir_url(__FILE__) . 'js/admin-user-search-admin.js', array( 'jquery' ), time()); // add data to the script when load wp_localize_script( $this->admin_user_search, 'search_users_url', array( 'url' => admin_url( 'admin-ajax.php' ), ) ); } } /** * create menu for search page */ function aus_menu() { add_submenu_page( 'users.php', 'Search Users', 'Search Users', 'manage_options', 'search-users', array($this, 'aus_search_page') ); } /** * create menu for search page */ function admin_bar_menu( WP_Admin_Bar $admin_bar ){ if ( ! current_user_can( 'manage_options' ) ) { return; } $logo = ''; $admin_bar->add_menu( array( 'id' => 'menu-id', 'parent' => null, 'group' => null, 'title' => $logo, 'href' => admin_url('users.php?page=search-users'), 'meta' => [ 'title' => __( 'Search Users', 'textdomain' ), //This title will show on hover ] ) ); } /** * forms for search users with table results */ public function aus_search_page(){ include_once('partials/admin-user-search-admin.php'); } public function post_search_users(){ // keyword = user input // aus_search_key = for chunking // search_limit = limit per search if ( isset($_POST['search_keyword']) && isset($_POST['aus_search_key']) && isset($_POST['search_limit']) ){ global $wpdb; // --------------------------------------------------------------------------------------- // table name $table = $wpdb->prefix . 'admin_user_search_logs'; // get current session user $current_user = wp_get_current_user(); // --------------------------------------------------------------------------------------- // array response to retunr result $response = []; // contains users result $response['users'] = []; // --------------------------------------------------------------------------------------- // sanitize $aus_search_keyword = sanitize_text_field($_POST['search_keyword']); $aus_search_key = sanitize_text_field($_POST['aus_search_key']); $aus_search_limit = sanitize_text_field($_POST['search_limit']); // --------------------------------------------------------------------------------------- // delete previous search logs when doing new search //$wpdb->query( "DELETE FROM wp_admin_user_search_logs WHERE `aus_search_key` != '".$aus_search_key."' AND `aus_user_id` = '".$current_user->ID."' "); $wpdb->query($wpdb->prepare("DELETE FROM wp_admin_user_search_logs WHERE aus_search_key != '".$aus_search_key."' AND `aus_user_id` = '".$current_user->ID."' ")); // --------------------------------------------------------------------------------------- // check table if a search log exist // $aus_users_id_exclude = $wpdb->get_row("SELECT * FROM wp_admin_user_search_logs WHERE `aus_search_key` = '".$aus_search_key."' AND `aus_user_id` = '".$current_user->ID."' "); $aus_users_id_exclude = $wpdb->get_row( $wpdb->prepare( "SELECT * FROM wp_admin_user_search_logs WHERE `aus_search_key` = '".$aus_search_key."' AND `aus_user_id` = '".$current_user->ID."'" ) ); // if exist, get users ids to exclude, this ids had been return and should not be included on new user search query if(count($aus_users_id_exclude)>0){ $aus_users_id_exclude = unserialize($aus_users_id_exclude->aus_exclude_user_ids); }else{ // make exclude empty $aus_users_id_exclude = []; } // --------------------------------------------------------------------------------------- // contains parameter for wp_user_query $aus_wp_query_params = []; // limit of users to query, can be adjusted js/admin-user-search-admin.js $aus_wp_query_params['number'] = $aus_search_limit; // users ids to exclude for new query $aus_wp_query_params['exclude'] = $aus_users_id_exclude; $aus_meta_query_params['relation'] = 'OR'; // --------------------------------------------------------------------------------------- // meta query, check possible result from all meta value. $meta = array( 'value' => $aus_search_keyword, 'compare' => 'LIKE' ); // store the meta params to main param array_push($aus_meta_query_params, $meta); // --------------------------------------------------------------------------------------- $aus_wp_query_params['meta_query'] = $aus_meta_query_params; // execute wp_user_query $aus_users = new WP_User_Query($aus_wp_query_params); $aus_users = $aus_users->get_results(); // if result found continue if (count($aus_users)>0) { // users found and logs are empty do a default insert else, if users found and logs exist, add/update new user ids to exclude $aus_log_insert = 1; if(count($aus_users_id_exclude)>0){ // recorder exist do update $aus_log_insert = 0; } // store IDS to exclude foreach ($aus_users as $user) { $name = explode(" ", $user->data->display_name); $user_meta = get_userdata($user->ID); $user_roles = $user_meta->roles; $role_empty = substr($user_roles[0], 0, 6); if($role_empty=="ignite"){ $user_roles = []; } array_push($response['users'], (object) [ 'ID'=> $user->ID, 'fname'=> get_user_meta( $user->ID, 'first_name', true), 'lname'=> get_user_meta( $user->ID, 'last_name', true) , 'email'=>$user->data->user_email, 'roles'=>$user_roles ]); array_push($aus_users_id_exclude, $user->ID); } // INSERT FIRST LOG if ($aus_log_insert==1) { $datas = array( 'aus_search_key' => $aus_search_key, 'aus_exclude_user_ids' => serialize($aus_users_id_exclude), 'aus_user_id' => $current_user->ID, ); $format = array( '%s', // practitioner_id '%s', // practitioner_name '%d', // practitioner_email ); $wpdb->insert($table, $datas, $format); } // UPDATE EXCLUDED IDS WITH ADDITIONAL IDS TO EXCLUDE else{ $datas = array( 'aus_exclude_user_ids' => serialize($aus_users_id_exclude) ); $format = array( '%s'); $where = array('aus_search_key' => $aus_search_key, 'aus_user_id' => $current_user->ID); $where_format = array( '%s', '%d'); $wpdb->update( $table, $datas, $where, $format, $where_format ); } // return this response to flag if should continue or not. $response['continue'] = 1; $response['aus_search_key'] = $aus_search_key; }else{ // return this response to flag if should continue or not. $response['aus_search_key'] = $aus_search_key; $response['continue'] = 0; $response['users'] = []; } echo json_encode($response); die(); } // end isset } }