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();