Adds no-user card registration, ++
This commit is contained in:
1 parent
06814d481c
commit
1161fdea8b
4 files changed
+163
-117
No files matched your search
+52
-5
@@ -15,7 +15,6 @@ if( !function_exists('set_response_code') ) {
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
function return_json_response($data, $response_code=200) {
|
||||
if($response_code != 200) {
|
||||
set_response_code($response_code);
|
||||
@@ -46,7 +45,6 @@ function get_db_connection($fetch_mode=NULL, $options=NULL) {
|
||||
return $conn;
|
||||
}
|
||||
|
||||
|
||||
if( !function_exists('clean_phonenumber') ) {
|
||||
function clean_phonenumber($pn) {
|
||||
$pn = preg_replace('/[^0-9\+]/', '', $pn); // remove everything except valid chars
|
||||
@@ -64,7 +62,6 @@ if( !function_exists('clean_phonenumber') ) {
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
if( !function_exists('valid_phonenumber') ) {
|
||||
// E.164
|
||||
function valid_phonenumber($phone) {
|
||||
@@ -72,8 +69,6 @@ if( !function_exists('valid_phonenumber') ) {
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
|
||||
function _get_cards($value) {
|
||||
$u_cs = array();
|
||||
$u_cards = explode(",", $value);
|
||||
@@ -151,6 +146,37 @@ function get_user_data($ids) {
|
||||
return $results;
|
||||
}
|
||||
|
||||
function get_card($card_number) {
|
||||
$conn = get_db_connection(DB_FETCHMODE_ASSOC);
|
||||
|
||||
$card_number = $conn->quoteSmart($card_number);
|
||||
$sql = "SELECT * FROM din_card WHERE card_number=$card_number";
|
||||
|
||||
$res = $conn->getAll($sql);
|
||||
|
||||
if( DB::isError($res) ) {
|
||||
new Exception($res->getMessage());
|
||||
}
|
||||
if( count($res) === 1) {
|
||||
return $res[0];
|
||||
}
|
||||
|
||||
return NULL;
|
||||
}
|
||||
|
||||
function update_card_with_phone_number($card_number, $phone_number) {
|
||||
/* Set card active and add phone number, phone number should not exist */
|
||||
$conn = get_db_connection(DB_FETCHMODE_ORDERED);
|
||||
|
||||
$card_number = $conn->quoteSmart($card_number);
|
||||
$phone_number = $conn->quoteSmart($phone_number);
|
||||
|
||||
/* Update our card */
|
||||
$sql = "UPDATE din_card SET owner_phone_number=$phone_number,registered=NOW(),is_active=1 WHERE card_number=$card_number";
|
||||
$res = $conn->query($sql);
|
||||
if( DB::isError($res) ) { new Exception($res->getMessage()); }
|
||||
}
|
||||
|
||||
function update_card($user_id, $card_number) {
|
||||
/* Adds card relationship OR if relationship already exist, set inactive and then add new */
|
||||
$conn = get_db_connection(DB_FETCHMODE_ORDERED);
|
||||
@@ -168,6 +194,7 @@ function update_card($user_id, $card_number) {
|
||||
$res = $conn->query($sql);
|
||||
if( DB::isError($res) ) { new Exception($res->getMessage()); }
|
||||
}
|
||||
|
||||
function get_user_id_by_card_number($card_number) {
|
||||
$conn = get_db_connection(DB_FETCHMODE_ORDERED);
|
||||
|
||||
@@ -186,6 +213,26 @@ function get_user_id_by_card_number($card_number) {
|
||||
}
|
||||
return $res[0][0];
|
||||
}
|
||||
|
||||
function get_card_owner_phone_number($card_number) {
|
||||
$conn = get_db_connection(DB_FETCHMODE_ORDERED);
|
||||
|
||||
$card_number = $conn->quoteSmart($card_number);
|
||||
$sql = "SELECT c.owner_phone_number FROM din_card AS c
|
||||
LEFT JOIN din_user AS u ON c.user_id=u.id
|
||||
WHERE c.card_number=$card_number";
|
||||
|
||||
$res = $conn->getAll($sql);
|
||||
|
||||
if( DB::isError($res) ) {
|
||||
new Exception($res->getMessage());
|
||||
}
|
||||
if( count($res) === 0 ) {
|
||||
return NULL;
|
||||
}
|
||||
return $res[0][0];
|
||||
}
|
||||
|
||||
function get_active_card_number($user) {
|
||||
foreach($user['cards'] as $card) {
|
||||
if($card['is_active'] == "1") {
|
||||
|
||||
+110
@@ -0,0 +1,110 @@
|
||||
<?php
|
||||
require_once("api_functions.php");
|
||||
require_once("../includes/DB.php");
|
||||
|
||||
|
||||
header('Access-Control-Allow-Origin: *', true); // Come fetch!
|
||||
|
||||
/* Connect to database */
|
||||
$conn = get_db_connection(DB_FETCHMODE_ORDERED);
|
||||
|
||||
|
||||
if( !isset($_GET['apikey']) ) {
|
||||
return_json_response(array('error' => "Missing param apikey."), 400);
|
||||
}
|
||||
/* Valid API KEY (defined in credentials.php) ? */
|
||||
if( $_GET['apikey'] !== USER_API_KEY && $_GET['apikey'] !== USER_API_KEY_KASSA ) {
|
||||
return_json_response(array('error' => "Invalid apikey: '".$_GET['apikey']."'."), 400);
|
||||
}
|
||||
if($_SERVER['REQUEST_METHOD'] === 'POST') {
|
||||
$body = file_get_contents('php://input');
|
||||
$data = json_decode($body, true);
|
||||
|
||||
/* Validate params */
|
||||
if( !isset($data['card_number']) ) {
|
||||
return_json_response(array('error' => "Missing param card_number"), 400);
|
||||
}
|
||||
$card_number = $data['card_number'];
|
||||
|
||||
if( !is_numeric($card_number) ) {
|
||||
return_json_response(array('error' => "Value card_number must be numeric: '".$card_number."'"), 400);
|
||||
}
|
||||
|
||||
/* Validate user_id */
|
||||
if( !isset($data['user_id']) || !isset($data['phone_number']) ) {
|
||||
return_json_response(array('error' => "Missing either param user_id or phone_number"), 400);
|
||||
}
|
||||
|
||||
$is_new_membership = isset($data['phone_number']); // FIXME: Use param type=new_card instead of checking phone_number
|
||||
if($is_new_membership) {
|
||||
$phone_number = clean_phonenumber($data['phone_number']);
|
||||
if(!valid_phonenumber($phone_number)) {
|
||||
return_json_response(array('error' => "Invalid phone number: '".$phone_number."'"), 400);
|
||||
}
|
||||
|
||||
/* New membership, with only card number and phone number tuple */
|
||||
update_card_with_phone_number($card_number, $phone_number);
|
||||
|
||||
/* Return card object */
|
||||
return_json_response(array('user'=> NULL, 'card' => get_card($card_number)));
|
||||
|
||||
} else {
|
||||
/* Existing user */
|
||||
if( !is_numeric($data['user_id']) ) {
|
||||
return_json_response(array('error' => "Value user_id must be numeric: '".$data['user_id']."'"), 400);
|
||||
}
|
||||
/* If user does not exist, bail */
|
||||
$user_data = get_user_data($data['user_id']);
|
||||
if( count($user_data) !== 1 ) {
|
||||
return_json_response(array('error' => "User with user_id '".$data['user_id']."' does not exist."), 400);
|
||||
}
|
||||
$user = $user_data[0];
|
||||
$active_card_number = get_active_card_number($user);
|
||||
|
||||
/* If card number is attached to specified user, bail */
|
||||
if($active_card_number && $active_card_number === $data['card_number']) {
|
||||
return_json_response(array('error' => "Card number ".$data['card_number']." is already attached to user (".$data['user_id'].")."), 400);
|
||||
}
|
||||
/* If card number does not exist, bail */
|
||||
$id_from_card_number = get_user_id_by_card_number($data['card_number']);
|
||||
if($id_from_card_number === NULL) {
|
||||
return_json_response(array('error' => "Card number ".$data['card_number']." does not exist."), 400);
|
||||
}
|
||||
/* If card belongs to another user, bail */
|
||||
if($id_from_card_number !== "") {
|
||||
return_json_response(array('error' => "Card number ".$data['card_number']." belongs to another user ($id_from_card_number)."), 400);
|
||||
}
|
||||
|
||||
/* Add card relationship OR set old relationship inactive and add new */
|
||||
update_card($data['user_id'], $data['card_number']);
|
||||
|
||||
return_json_response(array('user' => get_user_data($data['user_id'])));
|
||||
}
|
||||
}
|
||||
else {
|
||||
/* Validate params */
|
||||
if( !isset($_GET['card_number']) ) {
|
||||
return_json_response(array('error' => "Missing param card_number: ".var_export($_POST, true)), 400);
|
||||
}
|
||||
$card_number = $_GET['card_number'];
|
||||
|
||||
if( !is_numeric($card_number) ) {
|
||||
return_json_response(array('error' => "Value card_number must be numeric: '".$card_number."'"), 400);
|
||||
}
|
||||
|
||||
$card = get_card($card_number);
|
||||
|
||||
if(!$card || $card['user_id'] === "") {
|
||||
$user = NULL;
|
||||
} else {
|
||||
/* Existing user with card_number */
|
||||
try{
|
||||
$user = get_user_data($card['user_id'])[0];
|
||||
} catch(Exception $e) {
|
||||
return_json_response(array('error' => $e->getMessage()), 500);
|
||||
return; // Note: Help IntelliJ code inspection.
|
||||
}
|
||||
}
|
||||
|
||||
return_json_response(array('user' => $user, 'card' => $card));
|
||||
}
|
||||
@@ -1,111 +0,0 @@
|
||||
<?php
|
||||
require_once("api_functions.php");
|
||||
require_once("../includes/DB.php");
|
||||
|
||||
|
||||
header('Access-Control-Allow-Origin: *', true); // Come fetch!
|
||||
|
||||
/* Connect to database */
|
||||
$conn = get_db_connection(DB_FETCHMODE_ORDERED);
|
||||
|
||||
|
||||
if( !isset($_GET['apikey']) ) {
|
||||
return_json_response(array('error' => "Missing param apikey."), 400);
|
||||
}
|
||||
/* Valid API KEY (defined in credentials.php) ? */
|
||||
if( $_GET['apikey'] !== USER_API_KEY && $_GET['apikey'] !== USER_API_KEY_KASSA ) {
|
||||
return_json_response(array('error' => "Invalid apikey: '".$_GET['apikey']."'."), 400);
|
||||
}
|
||||
if($_SERVER['REQUEST_METHOD'] === 'POST') {
|
||||
$body = file_get_contents('php://input');
|
||||
$data = json_decode($body, true);
|
||||
|
||||
/* Validate params */
|
||||
if( !isset($data['card_number']) ) {
|
||||
return_json_response(array('error' => "Missing param card_number"), 400);
|
||||
}
|
||||
$card_number = $data['card_number'];
|
||||
|
||||
if( !is_numeric($card_number) ) {
|
||||
return_json_response(array('error' => "Value card_number must be numeric: '".$card_number."'"), 400);
|
||||
}
|
||||
|
||||
/* Validate user_id */
|
||||
if( !isset($data['user_id']) ) {
|
||||
return_json_response(array('error' => "Missing param user_id"), 400);
|
||||
}
|
||||
if( !is_numeric($data['user_id']) ) {
|
||||
return_json_response(array('error' => "Value user_id must be numeric: '".$data['user_id']."'"), 400);
|
||||
}
|
||||
/* If user does not exist, bail */
|
||||
$user_data = get_user_data($data['user_id']);
|
||||
if( count($user_data) !== 1 ) {
|
||||
return_json_response(array('error' => "User with user_id '".$data['user_id']."' does not exist."), 400);
|
||||
}
|
||||
$user = $user_data[0];
|
||||
$active_card_number = get_active_card_number($user);
|
||||
|
||||
/* If card number is attached to specified user, bail */
|
||||
if($active_card_number && $active_card_number === $data['card_number']) {
|
||||
return_json_response(array('error' => "Card number ".$data['card_number']." is already attached to user (".$data['user_id'].")."), 400);
|
||||
}
|
||||
/* If card number does not exist, bail */
|
||||
$id_from_card_number = get_user_id_by_card_number($data['card_number']);
|
||||
if($id_from_card_number === NULL) {
|
||||
return_json_response(array('error' => "Card number ".$data['card_number']." does not exist."), 400);
|
||||
}
|
||||
/* If card belongs to another user, bail */
|
||||
if($id_from_card_number !== "") {
|
||||
return_json_response(array('error' => "Card number ".$data['card_number']." belongs to another user ($id_from_card_number)."), 400);
|
||||
}
|
||||
|
||||
/* Add card relationship OR set old relationship inactive and add new */
|
||||
update_card($data['user_id'], $data['card_number']);
|
||||
|
||||
return_json_response(array('user' => get_user_data($data['user_id'])));
|
||||
}
|
||||
else {
|
||||
/* Validate params */
|
||||
if( !isset($_GET['card_number']) && !isset($_POST['card_number']) ) {
|
||||
return_json_response(array('error' => "Missing param card_number: ".var_export($_POST, true)), 400);
|
||||
}
|
||||
$card_number = $_GET['card_number'];
|
||||
|
||||
if( !is_numeric($card_number) ) {
|
||||
return_json_response(array('error' => "Value card_number must be numeric: '".$card_number."'"), 400);
|
||||
}
|
||||
|
||||
// Search query
|
||||
$card_number = $conn->quoteSmart($card_number);
|
||||
$sql = "SELECT c.user_id FROM din_card AS c
|
||||
LEFT JOIN din_user AS u ON c.user_id=u.id
|
||||
WHERE c.card_number=$card_number";
|
||||
|
||||
$res = $conn->getAll($sql);
|
||||
|
||||
if( DB::isError($res) ) {
|
||||
return_json_response(array('error' => $res->message), 500);
|
||||
}
|
||||
$card_number_exists = count($res) === 0;
|
||||
|
||||
/* Invalid card number? */
|
||||
if($card_number_exists) {
|
||||
return_json_response(array('user' => NULL, 'valid' => false));
|
||||
}
|
||||
|
||||
$user_id = $res[0][0];
|
||||
/* Free card_number? */
|
||||
if($user_id === "") {
|
||||
return_json_response(array('user' => NULL, 'valid' => true));
|
||||
}
|
||||
|
||||
/* Existing user with card_number. */
|
||||
try{
|
||||
$user_data = get_user_data($user_id);
|
||||
} catch(Exception $e) {
|
||||
return_json_response(array('error' => $e->getMessage()), 500);
|
||||
return; // Note: Help IntelliJ code inspection.
|
||||
}
|
||||
|
||||
return_json_response(array('user' => $user_data, 'valid' => $res !== NULL));
|
||||
}
|
||||
+1
-1
@@ -70,7 +70,7 @@ if( isset($data['type']) && $data['type'] === "renewal" ) {
|
||||
|
||||
$required_keys = array('apikey', 'phone');
|
||||
$valid_keys = $required_keys;
|
||||
$valid_keys = array_merge($valid_keys, array('purchased', 'source', 'type', 'membership_trial', 'cardno'));
|
||||
$valid_keys = array_merge($valid_keys, array('purchased', 'source', 'type', 'membership_trial', 'card_number'));
|
||||
|
||||
$valid_sources = array('physical', 'web', 'manual');
|
||||
|
||||
|
||||
Reference in new issue
Block a user