From 6190f6e643b5650ca1c7eeecffe1a13fb11a3902 Mon Sep 17 00:00:00 2001 From: Nikolai R Kristiansen Date: Tue, 4 Aug 2015 09:39:04 +0200 Subject: [PATCH] Rename and work on membership renewal WIP --- api/api_functions.php | 20 ++++++++++++++------ api/card.php | 11 +++++++---- api/{register.php => membership.php} | 16 +++++----------- 3 files changed, 26 insertions(+), 21 deletions(-) rename api/{register.php => membership.php} (87%) diff --git a/api/api_functions.php b/api/api_functions.php index fe28b9b..e7254ca 100644 --- a/api/api_functions.php +++ b/api/api_functions.php @@ -260,15 +260,23 @@ function get_active_card_number($user) { } return NULL; } -function add_or_renew_membership($user, $data) { - // TODO stub - throw new Exception("TODO: Not implemented!"); +function add_or_renew_membership($user_id, $purchased=NULL) { + assert($user_id !== NULL); + + $conn = get_db_connection(DB_FETCHMODE_ORDERED); /* Membership expiry */ /* One year from today (default) */ - if( !isset($data['purchased']) ) { - $data['purchased'] = date_create(); + if( $purchased == NULL ) { + $purchased = date_create(); } /* ...or one year from specified date */ - $expires = date_format(date_modify($data['purchased'], "+1 year"), "Y-m-d"); + $expires = date_format(date_modify($purchased, "+1 year"), "Y-m-d"); + + $res = $conn->autoExecute("din_user", array('expires' => $expires), DB_AUTOQUERY_UPDATE, "id=$user_id"); + + if( DB::isError($res) ) { + new InsideDatabaseException($res->getMessage().". DEBUG: ".$res->getDebugInfo()); + } + } \ No newline at end of file diff --git a/api/card.php b/api/card.php index 4d6a8f9..f19df61 100644 --- a/api/card.php +++ b/api/card.php @@ -36,14 +36,14 @@ if($_SERVER['REQUEST_METHOD'] === 'POST') { } /* Validate action */ - $valid_actions = array('new_card_no_user', 'update_card', 'renewal'); + $valid_actions = array('new_card_membership', 'update_card', 'add_or_renew'); if( !isset($data['action']) || !in_array($data['action'], $valid_actions) ) { return_json_response(array('error' => "Missing param 'action' or action not in ".implode(", ", $valid_actions).'.'), 400); } /* New membership, with only card number and phone number tuple */ - if($data['action'] === 'new_card_no_user') { + if($data['action'] === 'new_card_membership') { $phone_number = clean_phonenumber($data['phone_number']); if(!valid_phonenumber($phone_number)) { return_json_response(array('error' => "Invalid phone number: '".$phone_number."'"), 400); @@ -52,7 +52,10 @@ if($_SERVER['REQUEST_METHOD'] === 'POST') { if($card['registered'] !== '') { return_json_response(array('error' => 'Card number is in use and belongs to phone number: '.$card['owner_phone_number'].'.')); } - /* TODO Check if user with phone number exists, if so, then bail */ + /* If user with phone number exists, then bail */ + if( !getUseridFromPhone($phone_number) ) { + return_json_response(array('error' => 'User with phone number: '.$phone_number.' already exists.')); + } update_card_with_phone_number($card_number, $phone_number); @@ -98,7 +101,7 @@ if($_SERVER['REQUEST_METHOD'] === 'POST') { else { /* Validate params */ if( !isset($_GET['card_number']) ) { - return_json_response(array('error' => "Missing param card_number: ".var_export($_POST, true)), 400); + return_json_response(array('error' => "Missing param card_number."), 400); } $card_number = $_GET['card_number']; diff --git a/api/register.php b/api/membership.php similarity index 87% rename from api/register.php rename to api/membership.php index 182f83a..0ac6803 100644 --- a/api/register.php +++ b/api/membership.php @@ -21,12 +21,6 @@ $data = json_decode($body, true); if($data === NULL) { return_json_response(array('error' => 'Can\'t decode body'), 400); } -/* Check type of registration and set valid fields */ -$reg_type = "new"; -if( isset($data['type']) && $data['type'] === "renewal" ) { - /* Renewal */ - $reg_type = $data['type']; -} $required_keys = array('apikey', 'user_id'); $valid_keys = $required_keys; @@ -55,7 +49,7 @@ $conn = get_db_connection(DB_FETCHMODE_ASSOC); /* Existing user? */ $user = get_user($user_id); -/* Don't allow renewal of an existing valid membership. */ +/* Don't allow renewal if valid membership exists. */ if( $user['membership_status'] !== 0 ) { if($user['expires'] === '') { // Life long @@ -63,14 +57,15 @@ if( $user['membership_status'] !== 0 ) { } return_json_response(array('error' => 'Cannot renew, user with phone '.$user['id'].' has a valid membership until: '.$user['expires']), 409); } +// TODO: existing membership or new membership? /* Validate optional purchase_date */ +$purchased = NULL; if( isset($data['purchased']) ) { - $purchased = clean_date($data['purchased']) ; + $purchased = clean_date($data['purchased']); if($purchased === false) { return_json_response(array('error' => 'Could not parse date from field purchased: '.$data['purchased']), 400); } - $data['purchased'] = $purchased; } /* Validate optional source */ @@ -80,8 +75,7 @@ if( isset($data['source']) && !in_array($data['source'], $valid_sources) ) { /* Add or renew membership */ try { - // TODO ADD or renew membership - add_or_renew_membership($user, $data); + add_or_renew_membership($user_id, $purchased); } catch(InsideDatabaseException $e) { error_log($e->getMessage()); return_json_response(array('error' => 'db_error', 'error_message' => $e->getMessage()), 500);