From e9eb3dbe8824e14388247fc7491fcadb9cc16113 Mon Sep 17 00:00:00 2001 From: Nikolai Kristiansen Date: Sat, 2 Aug 2014 14:23:38 +0200 Subject: [PATCH] Adds support for membership_trial field --- snapporder/api/register.php | 19 ++++-- snapporder/lib/functions.php | 41 +++++++++--- snapporder/migrate.sql | 1 + snapporder/tests/integration.php | 65 +++++++++++++++++++- snapporder/tests/testuser.json | 5 +- snapporder/tests/testuser_buddy.json | 7 +++ snapporder/tests/testuser_buddy_renewal.json | 5 ++ snapporder/tests/testuser_renewal.json | 2 +- 8 files changed, 126 insertions(+), 19 deletions(-) create mode 100644 snapporder/tests/testuser_buddy.json create mode 100644 snapporder/tests/testuser_buddy_renewal.json diff --git a/snapporder/api/register.php b/snapporder/api/register.php index ec93dea..702adae 100644 --- a/snapporder/api/register.php +++ b/snapporder/api/register.php @@ -71,20 +71,20 @@ if($data === NULL) { echo $crypt->json_encode_and_encrypt(array('error' => 'Can\'t decode body')); die(); } -/* Check type of registration */ +/* Check type of registration and set valid fields */ $reg_type = "new"; -/* Renewal */ if( isset($data['type']) && $data['type'] === "renewal" ) { + /* Renewal */ $required_keys = array('phone'); $reg_type = $data['type']; } else { $required_keys = array('firstname', 'lastname', 'phone', 'email'); } -/* Validate supplied data */ $valid_keys = $required_keys; -$valid_keys = array_merge($valid_keys, array('purchased', 'source', 'type')); +$valid_keys = array_merge($valid_keys, array('purchased', 'source', 'type', 'membership_trial')); +/* Validate supplied data */ foreach($required_keys as $key) { if(!array_key_exists($key, $data)) { set_response_code(400); @@ -183,6 +183,12 @@ if( isset($data['source']) && !in_array($data['source'], array('snapporder', 'sn die(); } +/* Validate optional membership_trial */ +if( isset($data['membership_trial']) && $data['membership_trial'] !== "buddy") { + set_response_code(400); + echo $crypt->json_encode_and_encrypt(array('error' => 'Invalid value in field membership_trial: '.$data['membership_trial'])); + die(); +} /* Create user */ try { @@ -215,6 +221,11 @@ if($user['registration_status'] === "partial") { /* Add back phone number from query */ $user['phone'] = $data['phone']; +if( isset($data['membership_trial']) ) { + /* Add back membership_trial from query */ + $user['membership_trial'] = $data['membership_trial']; +} + /* Return encrypted user object */ echo $crypt->json_encode_and_encrypt($user); diff --git a/snapporder/lib/functions.php b/snapporder/lib/functions.php index 56d2f4c..34ea5c3 100644 --- a/snapporder/lib/functions.php +++ b/snapporder/lib/functions.php @@ -39,6 +39,12 @@ function add_user($data) { $data['expires'] = date_format(date_modify($data['purchased'], "+1 year"), "Y-m-d"); unset($data['purchased']); // dont save purchase date + /* Trial membership (special case, ignored if not in autumn) */ + $in_autumn = intval(date("n")) >= 8 && intval(date("n")) <= 12; + if( isset($data['membership_trial']) && $in_autumn) { + $data['expires'] = date_format(date_create("first day of january next year"), "Y-m-d"); + } + $cols = array_keys($data); $values = array_values($data); @@ -66,7 +72,11 @@ function add_user($data) { } log_userupdate($user_id, "User registered."); // for legacy - log_userupdate($user_id, "Medlemskap registrert via SnappOrder."); + if( isset($data['membership_trial']) && $in_autumn) { + log_userupdate($user_id, "Medlemskap registrert via SnappOrder. Prøvemedlemskap (".$data['membership_trial'].")."); + } else { + log_userupdate($user_id, "Medlemskap registrert via SnappOrder."); + } return $user_id; } @@ -81,7 +91,7 @@ function get_user($user_id) { * - a date >= NOW(): Valid membership * - NULL: Lifelong membership */ - $cols = array('id', 'firstname', 'lastname', 'email', 'expires', 'cardno', 'registration_status', 'birthdate'); + $cols = array('id', 'firstname', 'lastname', 'email', 'expires', 'cardno', 'registration_status', 'birthdate', 'membership_trial'); $sql_group_ids = "GROUP_CONCAT(group_id) AS group_ids"; $sql_is_member = "expires > NOW() OR expires IS NULL AS is_member"; $sql = "SELECT ".implode($cols, ",").",$sql_group_ids,$sql_is_member FROM din_user AS users LEFT JOIN din_usergrouprelationship AS ug ON users.id=ug.user_id WHERE users.id=$user_id GROUP BY users.id"; @@ -119,6 +129,9 @@ function get_user($user_id) { if($user['birthdate'] == "0000-00-00") { unset($user['birthdate']); } + if($user['membership_trial'] === "") { + unset($user['membership_trial']); + } /* FIXME: Double encode fields as utf-8... why? */ foreach($user as $key => $value) { @@ -140,9 +153,9 @@ function renew_user($data) { unset($data['type']); /* Our own values */ - $source = $data['source']; - if( !isset($data['source']) ) { - $source = "snapporder"; + $source = "snapporder"; + if( isset($data['source']) ) { + $source = $data['source']; } unset($data['source']); @@ -155,9 +168,17 @@ function renew_user($data) { $data['expires'] = date_format(date_modify($data['purchased'], "+1 year"), "Y-m-d"); unset($data['purchased']); // dont save purchase date + /* Trial membership (special case, ignored if not in autumn) */ + $in_autumn = intval(date("n")) >= 8 && intval(date("n")) <= 12; + if( isset($data['membership_trial']) && $in_autumn) { + $data['expires'] = date_format(date_create("first day of january next year"), "Y-m-d"); + } + // FIXME: Decode UTF-8 values... why? foreach($data as $key=>$value) { - $data[$key] = utf8_decode($value); + if(is_string($value)) { + $data[$key] = utf8_decode($value); + } } $res = $conn->autoExecute("din_user", $data, DB_AUTOQUERY_UPDATE, "id=$user_id"); @@ -169,13 +190,17 @@ function renew_user($data) { /* Phonenumber table, set validated */ $fields_values = array('validated' => 1); - $res = $conn->autoExecute("din_userphonenumber", $fields_values, DB_AUTOQUERY_UPDATE, "user_id=$user_id AND number='$number'"); + $res = $conn->autoExecute("din_userphonenumber", $fields_values, DB_AUTOQUERY_UPDATE, "user_id=$user_id AND number='$phone'"); if( DB::isError($res) ) { throw new InsideDatabaseException($res->getMessage().". DEBUG: ".$res->getDebugInfo()); } - log_userupdate($user_id, "Medlemskap fornyet via SnappOrder ($source)."); + if( isset($data['membership_trial']) && $in_autumn) { + log_userupdate($user_id, "Medlemskap registrert via SnappOrder ($source). Prøvemedlemskap (".$data['membership_trial'].")."); + } else { + log_userupdate($user_id, "Medlemskap fornyet via SnappOrder ($source)."); + } return; } diff --git a/snapporder/migrate.sql b/snapporder/migrate.sql index 1f5d0e2..2478c09 100644 --- a/snapporder/migrate.sql +++ b/snapporder/migrate.sql @@ -3,3 +3,4 @@ ALTER TABLE `din_user` ADD `source` VARCHAR( 255 ) NOT NULL DEFAULT 'inside'; ALTER TABLE `din_user` ADD `registration_status` VARCHAR( 255 ) NOT NULL DEFAULT 'full'; ALTER TABLE `din_user` ADD `created` TIMESTAMP NULL DEFAULT CURRENT_TIMESTAMP; ALTER TABLE `din_userphonenumber` ADD `validated` INT( 1 ) NOT NULL DEFAULT '0'; +ALTER TABLE `din_user` ADD `membership_trial` VARCHAR( 255 ) NOT NULL DEFAULT ''; diff --git a/snapporder/tests/integration.php b/snapporder/tests/integration.php index bc99858..0d6eb37 100644 --- a/snapporder/tests/integration.php +++ b/snapporder/tests/integration.php @@ -18,6 +18,7 @@ function test_get_query() { if($decoded_result['phone'] === $number) { echo "OK"; + var_dump($decoded_result); } else { echo "FAIL"; } @@ -40,7 +41,7 @@ function test_post_register() { $result = $crypt->decrypt(trim($result)); $decoded_result = (array) json_decode($result); - if(isset($decoded_result['birthdate']) && $decoded_result['birthdate'] === "1983-01-01") { + if(isset($decoded_result['membership_status']) && $decoded_result['membership_status'] === 1) { echo "OK"; var_dump($decoded_result); } else { @@ -76,6 +77,64 @@ function test_post_register_renewal() { /* Register */ curl_close ($ch); } -//test_get_query(); +function test_post_register_buddy() { + $crypt = new CryptoHelper(SNAP_IV, SNAP_KEY); + $data = file_get_contents("./testuser_buddy.json"); + + $data = $crypt->encrypt($data); + $ch = curl_init(API_URL.'/snapporder/api/register.php'); + curl_setopt($ch, CURLOPT_CUSTOMREQUEST, "POST"); + curl_setopt($ch, CURLOPT_POSTFIELDS, $data); + curl_setopt($ch, CURLOPT_RETURNTRANSFER, true); + curl_setopt($ch, CURLOPT_ENCODING ,""); + curl_setopt($ch, CURLOPT_HTTPHEADER, array('Content-Type: application/json; charset=UTF-8')); + + $result = curl_exec($ch); + $result = $crypt->decrypt(trim($result)); + $decoded_result = (array) json_decode($result); + + $correct_expires = isset($decoded_result['expires']) && $decoded_result['expires'] === "2015-01-01"; + $has_param = isset($decoded_result['membership_trial']) && $decoded_result['membership_trial'] === "buddy"; + if($correct_expires && $has_param) { + echo "OK"; + var_dump($decoded_result); + } else { + echo "FAIL\n"; + var_dump($decoded_result); + } + /* Register */ + curl_close ($ch); +} +function test_post_register_buddy_renewal() { + $crypt = new CryptoHelper(SNAP_IV, SNAP_KEY); + $data = file_get_contents("./testuser_buddy_renewal.json"); + + $data = $crypt->encrypt($data); + $ch = curl_init(API_URL.'/snapporder/api/register.php'); + curl_setopt($ch, CURLOPT_CUSTOMREQUEST, "POST"); + curl_setopt($ch, CURLOPT_POSTFIELDS, $data); + curl_setopt($ch, CURLOPT_RETURNTRANSFER, true); + curl_setopt($ch, CURLOPT_ENCODING ,""); + curl_setopt($ch, CURLOPT_HTTPHEADER, array('Content-Type: application/json; charset=UTF-8')); + + $result = curl_exec($ch); + $result = $crypt->decrypt(trim($result)); + $decoded_result = (array) json_decode($result); + + $correct_expires = isset($decoded_result['expires']) && $decoded_result['expires'] === "2015-01-01"; + $has_param = isset($decoded_result['membership_trial']) && $decoded_result['membership_trial'] === "buddy"; + if($correct_expires && $has_param) { + echo "OK"; + var_dump($decoded_result); + } else { + echo "FAIL\n"; + var_dump($decoded_result); + } + /* Register */ + curl_close ($ch); +} +test_get_query(); //test_post_register(); -test_post_register_renewal(); +//test_post_register_renewal(); +//test_post_register_buddy(); +//test_post_register_buddy_renewal(); diff --git a/snapporder/tests/testuser.json b/snapporder/tests/testuser.json index fa4da36..cfd13e7 100644 --- a/snapporder/tests/testuser.json +++ b/snapporder/tests/testuser.json @@ -1,7 +1,6 @@ { "firstname": "Üve", "lastname": "Bårdvigsen Røed", - "email": "abaabazbasdfbfffaaaaaba@aaa44za.com", - "birthdate": "1983-01-01", - "phone": "+4744989787" + "email": "abaab236zzazbasdfbfffaaaaaba@aaa44za.com", + "phone": "+4749089787" } diff --git a/snapporder/tests/testuser_buddy.json b/snapporder/tests/testuser_buddy.json new file mode 100644 index 0000000..15d03cb --- /dev/null +++ b/snapporder/tests/testuser_buddy.json @@ -0,0 +1,7 @@ +{ + "firstname": "Üve Buddy", + "lastname": "Bårdvigsen Røed", + "email": "abaaba23z5zazbasdfbfffaaaaaba@aaa44za.com", + "phone": "+4749989787", + "membership_trial": "buddy" +} diff --git a/snapporder/tests/testuser_buddy_renewal.json b/snapporder/tests/testuser_buddy_renewal.json new file mode 100644 index 0000000..ec9cde9 --- /dev/null +++ b/snapporder/tests/testuser_buddy_renewal.json @@ -0,0 +1,5 @@ +{ + "type": "renewal", + "phone": "+4747052592", + "membership_trial": "buddy" +} diff --git a/snapporder/tests/testuser_renewal.json b/snapporder/tests/testuser_renewal.json index 5c5b668..cac5a81 100644 --- a/snapporder/tests/testuser_renewal.json +++ b/snapporder/tests/testuser_renewal.json @@ -1,5 +1,5 @@ { "type": "renewal", - "phone": "+4744444444", + "phone": "+4747052592", "purchased": "2014-05-12" }