diff --git a/css/workspace.css b/css/workspace.css
index 8f666d6..5daf7c9 100644
--- a/css/workspace.css
+++ b/css/workspace.css
@@ -9,7 +9,8 @@
}
div.error {
- color:red
+ text-align: center;
+ color:red;
font-weight: bold;
}
@@ -19,12 +20,17 @@ div.verification, div.details, div.success {
margin-top:10px;
margin-bottom:10px;
color: black;
- //display:none;
+ display:none;
}
input.fullwidth{
width:100%;
}
+select.fullwidth{
+ width: 100%;
+ height: 50px;
+ padding:10px;
+}
table.details {
border: 1px solid #FFFFFF;
diff --git a/html/workspace.html b/html/workspace.html
index 6b70641..586b2bd 100644
--- a/html/workspace.html
+++ b/html/workspace.html
@@ -1,21 +1,25 @@
-
+
|
diff --git a/js/workspace.js b/js/workspace.js
index 89dbc8a..25e6339 100644
--- a/js/workspace.js
+++ b/js/workspace.js
@@ -20,14 +20,17 @@
/*______________________________________________________*/
$(function () {
- $('#test').html(mm.display_name);
+ //$('#test').html(mm.display_name);
console.log(mm);
$("#cardloading").attr('src', mm.loading);
$("#loading90").attr('src', mm.loading);
$("#done").attr('src', mm.done);
+ $(':radio:not(:checked)').attr('disabled', true);
+
init_clientname_input("#username");
+
});
function clientname_suggestions(){
@@ -47,8 +50,18 @@
function onUpdateClientID (e, suggestion)
{
- console.log(suggestion);
- console.log(e);
+ mm.current_user = suggestion.userid;
+ $.post(mm.ajax_url, { // POST request
+ _ajax_nonce: mm.nonce, // nonce
+ action: "list_users", // action
+ client : suggestion.userid,
+ name : ''
+ }, function(response, status, xhr){
+ step2_verify_user(response);
+ }).fail(function(){
+ errUserName("Network Error, Please try again later");
+ });
+
}
function init_clientname_input(selector){
//console.log('selector = ' + selector);
@@ -94,6 +107,7 @@
}, 2000);
}
+
//step1
$(document).on("click", "#step1", function(){
var input = $("#username").val();
@@ -105,7 +119,8 @@
$.post(mm.ajax_url, { // POST request
_ajax_nonce: mm.nonce, // nonce
action: "list_users", // action
- client : input,
+ client : mm.current_user,
+ name : input,
}, function(response, status, xhr){
step2_verify_user(response);
}).fail(function(){
@@ -117,16 +132,49 @@
//step2
function step2_verify_user(response)
{
+ console.log(response);
var el = $("#userpass");
+ el.slideUp();
+ el.slideDown();
+ $("#vmobile").text(response.phone);
+ $("#vemail").text(response.email);
- el.slideToggle();
}
//verify
$(document).on("click", "#step2", function(){
+
+ var input = $("#verifycode").val();
+ var method = $("#verify_method").val();
+ $.post(mm.ajax_url, { // POST request
+ _ajax_nonce: mm.nonce, // nonce
+ action: "verify_user", // action
+ client : mm.current_user,
+ method: method,
+ verifycode : input,
+ }, function(response, status, xhr){
+ step3_show_details(response);
+ }).fail(function(){
+ errUserName("Network Error, Please try again later");
+ });
+
+ });
+
+
+ function step3_show_details(response)
+ {
var el = $('#details');
el.slideDown();
- });
+
+ if ( response.pass ){
+ el.slideDown();
+ $("#errVerify").text("");
+ }else {
+ el.hide();
+ $("#errVerify").text("Incorrect, please try again");
+ }
+
+ }
//apply card
$(document).on("click", "#cardbtn", function(){
diff --git a/member.php b/member.php
index 42bab3c..ceb9116 100644
--- a/member.php
+++ b/member.php
@@ -18,6 +18,7 @@ require_once (ABSPATH . 'wp-includes/pluggable.php');
class Member{
private $token = "";
private $nonce = "";
+ private $db;
public function __construct() {
add_action('wp_enqueue_scripts', array($this, 'register_js_css'), 99);
@@ -33,6 +34,12 @@ class Member{
//
$this->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)
@@ -53,8 +60,9 @@ class Member{
}
public function shortcode_token($attrs) {
- $login = get_query_var( 'token' );
- return "
$login
";
+ $token = get_query_var( 'token' );
+ $user = $this->getUserByToken($token);
+ return "
ok ok " . $user[0]->display_name . "
";
}
@@ -79,6 +87,10 @@ class Member{
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();
}
@@ -95,6 +107,7 @@ class Member{
'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),
) );
}
@@ -103,23 +116,55 @@ class Member{
{
//check_ajax_referer('medal');
$client = $_POST['client'];
- $url = $_POST["action"];
+ $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',
- 'users' => [
- 1,2,3,4,5,6,7
- ],
- 'id' => $client,
- 'url' => $url,
+ 'userID' => $user->ID,
+ 'email' => $this->mask_email($user->user_email),
+ 'phone' => $this->mask_phone($phone),
);
+
wp_send_json($response);
}
- public function ajax_search_users(){
+ 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'),
@@ -143,6 +188,137 @@ class Member{
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();
\ No newline at end of file
+$mm = new Member();