ajax_hook('list_users'); $this->ajax_hook('search_users'); $this->ajax_hook('verify_user'); global $wpdb; $this->db = $wpdb; } private function ajax_hook($code, $admin_only = false) { add_action("wp_ajax_$code", array($this,"ajax_$code" )); if (!$admin_only) { add_action("wp_ajax_nopriv_$code", array($this,"ajax_$code")); } } public function shortcode_workspace($attrs) { if ($this->token != "" ) return ""; $str = file_get_contents(plugin_dir_path(__FILE__) . "/html/workspace.html"); $css = file_get_contents(plugin_dir_path(__FILE__) . "/css/workspace.css"); return $css . "\n" . $str; } public function shortcode_token($attrs) { $token = get_query_var( 'token' ); $user = $this->getUserByToken($token); return "

ok ok " . $user[0]->display_name . "

"; } //for customer profile and broker trans public function my_add_rewrite_rules($aRules) { $aNewRules = array( 'medal/([^/]+)/?$' => 'index.php?pagename=medal&token=$matches[1]', ); $aRules = $aNewRules + $aRules; return $aRules; } // //query var public function add_query_vars($aVars) { $aVars[] = "token"; // represents the receiption of this medal return $aVars; } public function register_js_css() { $this->nonce = wp_create_nonce('medal'); $this->token = get_query_var( 'token' ); if ($this->token == "edit") $this->house_keeping(); if ($this->token == "test") $this->test(); $this->register_medal_js(); } private function register_medal_js() { //wp_enqueue_style( 'mm', plugins_url('css/workspace.css', __FILE__)); wp_enqueue_script('mm', plugins_url('js/workspace.js', __FILE__), array('jquery', 'jquery-ui-core')); wp_enqueue_script('typeahead', plugins_url('js/typeahead.bundle.min.js', __FILE__), array('jquery')); wp_localize_script( 'mm', 'mm', array( 'ajax_url' => admin_url( 'admin-ajax.php' ), 'nonce' => $this->nonce, // It is common practice to comma after 'display_name' => wp_get_current_user()->display_name, 'loading' => plugins_url('img/loading.gif', __FILE__), 'done' => plugins_url('img/done.gif', __FILE__), 'search_user' => plugins_url('img/loading_user.gif', __FILE__), 'anonymous' => !is_user_logged_in(), 'user' => $this->getUserByToken($this->token), ) ); } function ajax_list_users() { //check_ajax_referer('medal'); $client = $_POST['client']; $name = $_POST['name']; $user = false; if ($name != ""){ $user =$this->getUserByDisplayName($name); }else{ $user = get_user_by("ID", $client); } if ($user == false){ $response = array( 'status' => 'error', 'errMsg' => "User not found", ); wp_send_json($response); } $phone = get_user_meta($user->ID, "tel-mobile", true); $response = array( 'status' => 'success', 'userID' => $user->ID, 'email' => $this->mask_email($user->user_email), 'phone' => $this->mask_phone($phone), ); wp_send_json($response); } private function mask_phone($phone) { if ($phone != "" && strlen($phone) > 4){ return substr($phone, 0, -4) . "####"; }else return "no valid phone"; } private function mask_email($email) { $pos = stripos($email,"@"); return substr($email,0,1) . "*****" . substr($email, $pos); } public function ajax_search_users() { //check_ajax_referer('medal'); $pattern = $_GET['pattern']; $args= array( 'search' => "*$pattern*", // or login or nicename in this example 'search_fields' => array('display_name'), ); $users = new \WP_User_Query($args); $count = $users->get_total(); //build response $response = array( 'count' => $count, 'date' => date('Y-m-d H:i:s'), 'users' => array(), ); foreach ( $users->results as $u ) { $response['users'][] = array( 'userid' => $u->ID, 'username' => html_entity_decode($u->display_name), ); } wp_send_json($response['users']); } public function ajax_verify_user() { //check_ajax_referer('medal'); $client = $_POST['client']; $verifycode = $_POST['verifycode']; $method = $_POST['method']; $user = get_user_by("ID", $client); if ($user == false){ $response = array( 'status' => 'error', 'errMsg' => "User not found", ); wp_send_json($response); } $response = array( 'status' => 'success', 'userID' => $user->ID, 'pass' => $this->verify_code($method, $verifycode, $user), ); wp_send_json($response); } private function verify_code($method, $verifycode, $user) { $phone = get_user_meta($user->ID, "tel-mobile", true); if ($method=="mobile" && stripos($phone, $verifycode) != false && strlen($verifycode) ==4 ) return true; if ($method=="email"){ $mas = $this->mask_email($user->user_email); $newEmail = str_replace("*****", $verifycode, $mas ); return $newEmail == $user->user_email; } return false; } private function getUserByDisplayName($pattern) { $args= array( 'search' => "*$pattern*", // or login or nicename in this example 'search_fields' => array('display_name'), ); $users = new \WP_User_Query($args); if ($users->get_total() >=1){ return $users->results[0]; }else return false; } public function getUserByToken($token) { $user = get_users(array( 'meta_key' => 'token', 'meta_value' => "$token" )); return $user; } //for development purpose only public function test() { $this->ajax_list_users(); } public function house_keeping() { $args= array( 'search' => "**", // or login or nicename in this example 'search_fields' => array('display_name'), 'role__in' => array("subscriber"), ); $users = new \WP_User_Query($args); $count = $users->get_total(); foreach ( $users->results as $u ) { $card = 0; $post_addr = get_user_meta($u->ID, 'postal-address', true); $card = trim($post_addr) == ""? -1: 0; $medal = 1; $country = get_user_meta($u->ID, 'country', true); if ($country != "Australia") $medal = 0; $this->db->update('sp_medal_100', array( 'medal' => $medal, 'card' => $card, 'card_posted' =>0, 'card_delivered' => 0, 'medal_delivered' => 0, ),array( 'uid' => $u->ID, )); } } private function update_medal($u) { $this->db->update('sp_medal_100', array( 'medal' => 1, 'card' => 0, 'card_posted' =>0, 'card_delivered' => 0, 'medal_delivered' => 0, ),array( 'uid' => $u->ID, )); } } $mm = new Member();