Starts using new table din_card for member cards
This commit is contained in:
1 parent
2108959402
commit
90d7f338f1
4 files changed
+66
-21
No files matched your search
+52
-11
@@ -77,21 +77,35 @@ if( !function_exists('valid_phonenumber') ) {
|
||||
}
|
||||
|
||||
|
||||
function get_user_data($ids, $conn) {
|
||||
|
||||
function _get_cards($value) {
|
||||
$u_cs = array();
|
||||
$u_cards = explode(",", $value);
|
||||
foreach ($u_cards as $c) {
|
||||
list($card_number, $card_is_active) = explode(";", $c);
|
||||
$u_cs[] = array(
|
||||
'card_number' => $card_number,
|
||||
'is_active' => $card_is_active
|
||||
);
|
||||
}
|
||||
return $u_cs;
|
||||
}
|
||||
|
||||
function get_user_data($ids) {
|
||||
if( !is_string($ids) ) {
|
||||
new Exception('Param ids should be a comma separated string of user ids');
|
||||
}
|
||||
$ACTIVE_GROUP_ID = "2";
|
||||
$conn->setFetchMode(DB_FETCHMODE_ASSOC);
|
||||
$conn = get_db_connection(DB_FETCHMODE_ASSOC);
|
||||
|
||||
/* Get data */
|
||||
$sql_is_member = "u.expires > NOW() OR u.expires IS NULL AS is_member";
|
||||
$CARDNO_LEGACY_MAX = 100000000;
|
||||
$sql_card_is_legacy = "u.cardno<$CARDNO_LEGACY_MAX AS card_is_legacy";
|
||||
$sql_groups = "GROUP_CONCAT(DISTINCT g.id,';',g.name SEPARATOR ',') AS groups";
|
||||
$data_sql = "SELECT u.id,u.username,u.firstname,u.lastname,u.email,up.number,u.expires,u.cardno,$sql_card_is_legacy,$sql_groups,$sql_is_member
|
||||
FROM din_user as u
|
||||
LEFT JOIN din_userphonenumber as up ON up.user_id=u.id
|
||||
$sql_cards = "GROUP_CONCAT(DISTINCT c.card_number,';',c.is_active SEPARATOR ',') AS cards";
|
||||
$data_sql = "SELECT u.id,u.username,u.firstname,u.lastname,u.email,up.number,u.expires,$sql_cards,$sql_groups,$sql_is_member
|
||||
FROM din_user AS u
|
||||
LEFT JOIN din_userphonenumber AS up ON up.user_id=u.id
|
||||
LEFT JOIN din_card AS c ON c.user_id=u.id
|
||||
LEFT JOIN din_usergrouprelationship AS ug ON u.id=ug.user_id
|
||||
LEFT JOIN din_group AS g ON g.id=ug.group_id
|
||||
WHERE u.id IN ($ids)
|
||||
@@ -131,6 +145,12 @@ function get_user_data($ids, $conn) {
|
||||
}
|
||||
$result[$key] = $u_gs;
|
||||
}
|
||||
elseif($key == "cards") {
|
||||
if($value === "") {
|
||||
continue; // no groups
|
||||
}
|
||||
$result[$key] = _get_cards($value);
|
||||
}
|
||||
/* Encoding issues? oh yes, utf-8 please */
|
||||
elseif( !is_valid_utf8($value) ) {
|
||||
$result[$key] = utf8_encode($value);
|
||||
@@ -143,16 +163,29 @@ function get_user_data($ids, $conn) {
|
||||
}
|
||||
|
||||
function update_card($user_id, $card_number) {
|
||||
/* Update card number on user */
|
||||
/* Adds card relationship OR if relationship already exist, set inactive and then add new */
|
||||
$conn = get_db_connection(DB_FETCHMODE_ORDERED);
|
||||
|
||||
$card_number = $conn->quoteSmart($card_number);
|
||||
$user_id = $conn->quoteSmart($user_id);
|
||||
|
||||
/* Set users existing cards inactive, if any */
|
||||
$sql = "UPDATE din_card SET is_active=0 WHERE user_id=$user_id AND is_active=1";
|
||||
$res = $conn->query($sql);
|
||||
if( DB::isError($res) ) { new Exception($res->getMessage()); }
|
||||
|
||||
/* Update our card */
|
||||
$sql = "UPDATE din_card SET user_id=$user_id,registered=NOW(),is_active=1 WHERE card_number=$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);
|
||||
|
||||
$card_number = $conn->quoteSmart($card_number);
|
||||
$sql = "SELECT mc.userId FROM din_membercard AS mc
|
||||
LEFT JOIN din_user AS u ON mc.userId=u.id
|
||||
WHERE mc.id=$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);
|
||||
|
||||
@@ -163,4 +196,12 @@ function get_user_id_by_card_number($card_number) {
|
||||
return NULL;
|
||||
}
|
||||
return $res[0][0];
|
||||
}
|
||||
function get_active_card_number($user) {
|
||||
foreach($user['cards'] as $card) {
|
||||
if($card['is_active'] == "1") {
|
||||
return $card['card_number'];
|
||||
}
|
||||
}
|
||||
return NULL;
|
||||
}
|
||||
+12
-8
@@ -38,14 +38,15 @@ if($_SERVER['REQUEST_METHOD'] === 'POST') {
|
||||
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'], $conn);
|
||||
$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($user['cardno'] === $data['card_number']) {
|
||||
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 */
|
||||
@@ -57,8 +58,11 @@ if($_SERVER['REQUEST_METHOD'] === 'POST') {
|
||||
if($id_from_card_number !== "") {
|
||||
return_json_response(array('error' => "Card number ".$data['card_number']." belongs to another user ($id_from_card_number)."), 400);
|
||||
}
|
||||
/* TODO: Add card relationship OR remove old relationsip and add new */
|
||||
return_json_response(array('error' => 'TODO: Not implemented'));
|
||||
|
||||
/* 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 */
|
||||
@@ -73,9 +77,9 @@ else {
|
||||
|
||||
// Search query
|
||||
$card_number = $conn->quoteSmart($card_number);
|
||||
$sql = "SELECT mc.userId FROM din_membercard AS mc
|
||||
LEFT JOIN din_user AS u ON mc.userId=u.id
|
||||
WHERE mc.id=$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);
|
||||
|
||||
@@ -97,7 +101,7 @@ else {
|
||||
|
||||
/* Existing user with card_number. */
|
||||
try{
|
||||
$user_data = get_user_data($user_id, $conn);
|
||||
$user_data = get_user_data($user_id);
|
||||
} catch(Exception $e) {
|
||||
return_json_response(array('error' => $e->getMessage()), 500);
|
||||
return; // Note: Help IntelliJ code inspection.
|
||||
|
||||
+1
-1
@@ -61,7 +61,7 @@ foreach($res as $value) {
|
||||
$user_ids = implode(",", $id_array);
|
||||
|
||||
try{
|
||||
$results = get_user_data($user_ids, $conn);
|
||||
$results = get_user_data($user_ids);
|
||||
} catch(Exception $e) {
|
||||
set_response_code(500);
|
||||
echo json_encode(array('error' => $e->getMessage()));
|
||||
|
||||
+1
-1
@@ -132,7 +132,7 @@ foreach($res as $value) {
|
||||
$ids = implode(",", $id_array);
|
||||
|
||||
try{
|
||||
$results = get_user_data($ids, $conn);
|
||||
$results = get_user_data($ids);
|
||||
} catch(Exception $e) {
|
||||
set_response_code(500);
|
||||
echo json_encode(array('error' => $e->getMessage()));
|
||||
|
||||
Reference in new issue
Block a user