API: Adds support for trial memberships
This commit is contained in:
1 parent
2657e79829
commit
61fe0a0678
5 files changed
+48
-12
No files matched your search
+17
-3
@@ -166,15 +166,23 @@ function get_card($card_number) {
|
||||
return NULL;
|
||||
}
|
||||
|
||||
function update_card_with_phone_number($card_number, $phone_number) {
|
||||
function update_card_with_phone_number($card_number, $phone_number, $membership_trial=NULL) {
|
||||
/* 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);
|
||||
|
||||
/* Membership trial (special case) */
|
||||
$in_autumn = intval(date("n")) >= 8 && intval(date("n")) <= 12;
|
||||
if( $membership_trial && $in_autumn ) {
|
||||
$membership_trial = $conn->quoteSmart($membership_trial);
|
||||
$sql = "UPDATE din_card SET owner_phone_number=$phone_number,registered=NOW(),is_active=1,owner_membership_trial=$membership_trial WHERE card_number=$card_number";
|
||||
} else {
|
||||
$sql = "UPDATE din_card SET owner_phone_number=$phone_number,registered=NOW(),is_active=1 WHERE card_number=$card_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()); }
|
||||
}
|
||||
@@ -260,7 +268,7 @@ function get_active_card_number($cards) {
|
||||
}
|
||||
return NULL;
|
||||
}
|
||||
function add_or_renew_membership($user_id, $purchased=NULL) {
|
||||
function add_or_renew_membership($user_id, $purchased=NULL, $membership_trial=false) {
|
||||
assert($user_id !== NULL);
|
||||
|
||||
$conn = get_db_connection(DB_FETCHMODE_ORDERED);
|
||||
@@ -273,6 +281,12 @@ function add_or_renew_membership($user_id, $purchased=NULL) {
|
||||
/* ...or one year from specified date */
|
||||
$expires = date_format(date_modify($purchased, "+1 year"), "Y-m-d");
|
||||
|
||||
/* Membership trial (special case, ignored if not in autumn) */
|
||||
$in_autumn = intval(date("n")) >= 8 && intval(date("n")) <= 12;
|
||||
if( $membership_trial && $in_autumn ) {
|
||||
$expires = date_format(date_create("first day of january next year"), "Y-m-d");
|
||||
}
|
||||
|
||||
$res = $conn->autoExecute("din_user", array('expires' => $expires), DB_AUTOQUERY_UPDATE, "id=$user_id");
|
||||
|
||||
if( DB::isError($res) ) {
|
||||
|
||||
+7
-3
@@ -59,7 +59,13 @@ if($_SERVER['REQUEST_METHOD'] === 'POST') {
|
||||
return_json_response(array('error' => 'User with phone number: '.$phone_number.' already exists: '.$user_id.'.'), 400);
|
||||
}
|
||||
|
||||
update_card_with_phone_number($card_number, $phone_number);
|
||||
/* Membership trial */
|
||||
$membership_trial = '';
|
||||
if( isset($data['membership_trial'])) {
|
||||
$membership_trial = $data['membership_trial'];
|
||||
}
|
||||
|
||||
update_card_with_phone_number($card_number, $phone_number, $membership_trial);
|
||||
|
||||
/* Return fresh card object */
|
||||
return_json_response(array('user'=> NULL, 'card' => get_card($card_number)));
|
||||
@@ -99,8 +105,6 @@ if($_SERVER['REQUEST_METHOD'] === 'POST') {
|
||||
|
||||
return_json_response(array('user' => get_user_data($data['user_id'])));
|
||||
}
|
||||
|
||||
return_json_response(array('error' => 'Unknown action, gave up.'), 400);
|
||||
}
|
||||
else {
|
||||
/* Validate params */
|
||||
|
||||
+7
-2
@@ -24,7 +24,7 @@ if($data === NULL) {
|
||||
|
||||
$required_keys = array('apikey', 'user_id');
|
||||
$valid_keys = $required_keys;
|
||||
$valid_keys = array_merge($valid_keys, array('purchased', 'source'));
|
||||
$valid_keys = array_merge($valid_keys, array('purchased', 'source', 'membership_trial'));
|
||||
|
||||
$valid_sources = array('kassa');
|
||||
|
||||
@@ -80,10 +80,15 @@ if( isset($data['purchased']) ) {
|
||||
if( isset($data['source']) && !in_array($data['source'], $valid_sources) ) {
|
||||
return_json_response(array('error' => 'Invalid value in field source: '.$data['source']), 400);
|
||||
}
|
||||
/* Optional membership trial */
|
||||
$membership_trial = false;
|
||||
if( isset($data['membership_trial'])) {
|
||||
$membership_trial = true;
|
||||
}
|
||||
|
||||
/* Add or renew membership */
|
||||
try {
|
||||
add_or_renew_membership($data['user_id'], $purchased);
|
||||
add_or_renew_membership($data['user_id'], $purchased, $membership_trial);
|
||||
|
||||
$success_message = "Medlemskap registrert via ".$data['source'].".";
|
||||
if(!$first_user_membership) {
|
||||
|
||||
@@ -1722,6 +1722,10 @@ function clean_phonenumber($pn) {
|
||||
}
|
||||
// ISO-8601 Y-m-d
|
||||
function clean_date($date) {
|
||||
if($date instanceof DateTime) {
|
||||
return $date; // already cleaned, bail
|
||||
}
|
||||
|
||||
// returns a DateTime object
|
||||
return date_create_from_format('Y-m-d', $date);
|
||||
}
|
||||
|
||||
@@ -607,7 +607,7 @@ function validate_sms_form($data) {
|
||||
if( $purchased === false ) {
|
||||
throw new ValidationException("Ugyldig kortnummer/kode ".$data['activation_code']." eller kombinasjon med telefonnummer ".$data['phone'].".");
|
||||
}
|
||||
$data['purchased'] = clean_timestamp($purchased);
|
||||
$data['purchased'] = clean_date($purchased);
|
||||
$data['source'] = $source;
|
||||
|
||||
if($logged_in_user_id) {
|
||||
@@ -679,14 +679,23 @@ function get_purchase_date_card($phone, $activation_code) {
|
||||
$phone = $conn->quoteSmart($phone);
|
||||
$activation_code = $conn->quoteSmart($activation_code);
|
||||
|
||||
$sql = "SELECT registered FROM din_card WHERE card_number=$activation_code AND owner_phone_number=$phone AND is_active=1";
|
||||
$res = $conn->getOne($sql);
|
||||
$sql = "SELECT registered,owner_membership_trial FROM din_card WHERE card_number=$activation_code AND owner_phone_number=$phone AND is_active=1";
|
||||
$res = $conn->getAll($sql, DB_FETCHMODE_ASSOC);
|
||||
|
||||
if( DB::isError($res) ) {
|
||||
throw new InsideDatabaseException($res->getMessage().". DEBUG: ".$res->getDebugInfo());
|
||||
}
|
||||
if(count($res) !== 1) {
|
||||
return false;
|
||||
}
|
||||
|
||||
return $res !== null ? $res : false;
|
||||
/* Membership trial (special case) */
|
||||
if( $res[0]['owner_membership_trial'] ) {
|
||||
// Dummy purchased date (1 year before expiry)
|
||||
return date_format(date_modify(date_create("first day of january next year"), '-1 year'), "Y-m-d");
|
||||
}
|
||||
|
||||
return $res[0]['registered'];
|
||||
}
|
||||
|
||||
function get_purchase_date_tekstmelding($phone, $activation_code) {
|
||||
|
||||
Reference in new issue
Block a user