Working register.php
This commit is contained in:
1 parent
b80b058249
commit
34b36c2308
9 files changed
+91
-43
No files matched your search
@@ -5,5 +5,6 @@ snapporder/config.php
|
||||
migration.log
|
||||
error_log
|
||||
*.swp
|
||||
*.swo
|
||||
.htaccess
|
||||
payex_defines.php
|
||||
@@ -10,14 +10,15 @@
|
||||
*
|
||||
* {
|
||||
* "phone": "+4742345678",
|
||||
* "membership_status": 1, // 0 - ikke medlem, 1 - medlem, 2 - aktiv
|
||||
* "membership_status": 1, // 0: registrert, 1: medlem, 2: aktivt medlem
|
||||
* "expires": "2015-04-23",
|
||||
* "memberid": "4331",
|
||||
* "cardno": "12345",
|
||||
* "firstName": "Jon",
|
||||
* "lastName": "Hansen",
|
||||
* "firstname": "Jon",
|
||||
* "lastname": "Hansen",
|
||||
* "email": "jon@uio.no",
|
||||
* "registration_status": "partial" // "partial" means show link
|
||||
* "register_url": "/snapporder/register_partial.php?id=4331&hmac=lol"
|
||||
* }
|
||||
*
|
||||
*/
|
||||
|
||||
+34
-15
@@ -7,27 +7,28 @@
|
||||
* $ curl /snapporder/api/register.php
|
||||
* {
|
||||
* "phone":12345678,
|
||||
* "firstName": "Jon",
|
||||
* "lastName": "Hansen",
|
||||
* "email": "jon@uio.no"
|
||||
* "firstname": "Jon",
|
||||
* "lastname": "Hansen",
|
||||
* "email": "jon@uio.no",
|
||||
* "purchased": "2004-02-12" // optional, format: ISO-8601 date
|
||||
* }
|
||||
*
|
||||
* Response:
|
||||
*
|
||||
* {
|
||||
* "phone":12345678,
|
||||
* "memberStatus":1,
|
||||
* "endDate": "2015-04-23" ,
|
||||
* "membershipNumber": "dsadsa2333",
|
||||
* "firstName": "Jon",
|
||||
* "lastName": "Hansen",
|
||||
* "phone": "+4742345678",
|
||||
* "membership_status": 1, // 0: registrert, 1: medlem, 2: aktivt medlem
|
||||
* "expires": "2015-04-23",
|
||||
* "memberid": "4331",
|
||||
* "firstname": "Jon",
|
||||
* "lastname": "Hansen",
|
||||
* "email": "jon@uio.no",
|
||||
* "registration_status": "partial" // "partial" or "full"
|
||||
* "registration_status": "partial" // "partial" means show link
|
||||
* "register_url": "/snapporder/register_partial.php?id=4331&hmac=lol"
|
||||
* }
|
||||
*
|
||||
* TODO:
|
||||
* - register user with fromSnappOrder flag
|
||||
* - return result
|
||||
* TODO register url
|
||||
* TODO maybe check $_SERVER['REQUEST_METHOD']
|
||||
*/
|
||||
|
||||
/* Pull in Inside */
|
||||
@@ -62,9 +63,11 @@ if($data === NULL) {
|
||||
}
|
||||
|
||||
/* Validate supplied data */
|
||||
$valid_keys = array('firstname', 'lastname', 'phone', 'email');
|
||||
$required_keys = array('firstname', 'lastname', 'phone', 'email');
|
||||
$valid_keys = $required_keys;
|
||||
$valid_keys[] = + 'purchased';
|
||||
|
||||
foreach($valid_keys as $key) {
|
||||
foreach($required_keys as $key) {
|
||||
if(!array_key_exists($key, $data)) {
|
||||
set_response_code(400);
|
||||
echo json_encode(array('error' => 'missing required field \''.$key.'\''));
|
||||
@@ -100,6 +103,7 @@ if(DB :: isError($conn)) {
|
||||
echo json_encode(array('error' => 'Could not connect to DB'));
|
||||
die();
|
||||
}
|
||||
$conn->setFetchMode(DB_FETCHMODE_ASSOC);
|
||||
|
||||
/* Existing user? */
|
||||
if( getUseridFromEmail($data['email']) !== false) {
|
||||
@@ -112,6 +116,7 @@ if( getUseridFromPhone($data['phone']) !== false ) {
|
||||
echo json_encode(array('error' => 'Existing user with phone: '.$data['phone']));
|
||||
die();
|
||||
}
|
||||
|
||||
/* validate firstname and lastname */
|
||||
if( strlen($data['firstname']) < 2) {
|
||||
set_response_code(400);
|
||||
@@ -124,6 +129,17 @@ if( strlen($data['lastname']) < 2) {
|
||||
die();
|
||||
}
|
||||
|
||||
/* Validate optional purchase_date */
|
||||
if( isset($data['purchased']) ) {
|
||||
$purchased = clean_date($data['purchased']) ;
|
||||
if($purchased === false) {
|
||||
set_response_code(400);
|
||||
echo json_encode(array('error' => 'Could not parse date from field purchased: '.$data['purchased']));
|
||||
die();
|
||||
}
|
||||
$data['purchased'] = $purchased;
|
||||
}
|
||||
|
||||
|
||||
/* Create user */
|
||||
$user_id = add_user($data);
|
||||
@@ -131,6 +147,9 @@ $user_id = add_user($data);
|
||||
/* Get and format user */
|
||||
$user = get_user($user_id);
|
||||
|
||||
/* Add back phone number from query */
|
||||
$user['phone'] = $data['phone'];
|
||||
|
||||
/* Return encrypted user object */
|
||||
echo json_encode($user);
|
||||
//echo $crypt->encrypt(json_encode($user));
|
||||
|
||||
Whitespace-only changes.
@@ -8,29 +8,48 @@ function set_response_code($code) {
|
||||
}
|
||||
header('X-Ignore-This: something', true, $code);
|
||||
}
|
||||
|
||||
/* Username based on firstname and lastname, max 12 chars */
|
||||
function generate_username($data) {
|
||||
// TODO improve this, not unique enough
|
||||
$firstname = preg_replace('/[^\w]/', '', $data['firstname']);
|
||||
$firstname = substr(strtolower($firstname), 0, 6);
|
||||
$firstname = substr(strtolower($firstname), 0, 5);
|
||||
|
||||
$lastname = preg_replace('/[^\w]/', '', $data['lastname']);
|
||||
$lastname = substr(strtolower($lastname), 0, 3);
|
||||
return $firstname.$lastname.substr(uniqid(), -3);
|
||||
$lastname = substr(strtolower($lastname), 0, 2);
|
||||
$rand = substr(uniqid("", true), -5);
|
||||
|
||||
return $firstname.$lastname.$rand;
|
||||
}
|
||||
|
||||
function add_user($data) {
|
||||
global $conn;
|
||||
|
||||
/* User table */
|
||||
$phone = $data['phone'];
|
||||
$phone = $data['phone']; // used later
|
||||
unset($data['phone']);
|
||||
|
||||
/* Add our own initial values */
|
||||
$data['username'] = generate_username($data);
|
||||
$data['source'] = "snapporder";
|
||||
$data['registration_status'] = "partial";
|
||||
|
||||
/* Membership expiry */
|
||||
/* One year from today (default) */
|
||||
if( !isset($data['purchased']) ) {
|
||||
$data['purchased'] = date_create();
|
||||
}
|
||||
/* ...or one year from specified date */
|
||||
$data['expires'] = date_format(date_modify($data['purchased'], "+1 year"), "Y-m-d");
|
||||
unset($data['purchased']); // dont save purchase date
|
||||
|
||||
$cols = array_keys($data);
|
||||
$values = array_values($data);
|
||||
|
||||
$sth = $conn->autoPrepare("din_user", $cols, DB_AUTOQUERY_INSERT);
|
||||
|
||||
|
||||
$res = $conn->execute($sth, $values);
|
||||
|
||||
if( DB::isError($res) ) {
|
||||
set_response_code(500);
|
||||
echo json_encode( array('error' => 'db_error', 'error_message' => $res->toString() ) );
|
||||
die();
|
||||
}
|
||||
@@ -38,10 +57,14 @@ function add_user($data) {
|
||||
$user_id = get_user_id_by_username($data['username']);
|
||||
|
||||
/* Phonenumber table */
|
||||
$sth = $conn->autoPrepare("din_userphonenumber", array('user_id', 'number'), DB_AUTOQUERY_INSERT);
|
||||
$res = $conn->execute($sth, array($user_id, $phone));
|
||||
$cols = array('user_id', 'number', 'validated');
|
||||
$values = array($user_id, $phone, 1);
|
||||
|
||||
$sth = $conn->autoPrepare("din_userphonenumber", $cols, DB_AUTOQUERY_INSERT);
|
||||
$res = $conn->execute($sth, $values);
|
||||
|
||||
if( DB::isError($res) ) {
|
||||
set_response_code(500);
|
||||
echo json_encode( array('error' => 'db_error', 'error_message' => $res->toString() ) );
|
||||
die();
|
||||
}
|
||||
@@ -59,10 +82,13 @@ function get_user($user_id) {
|
||||
* - a date >= NOW(): Valid membership
|
||||
* - NULL: Lifelong membership
|
||||
*/
|
||||
$cols = array('id', 'firstname', 'lastname', 'email', 'expires', 'cardno');
|
||||
$sql = "SELECT ".implode($cols, ",").",GROUP_CONCAT(group_id) AS group_ids,expires > NOW() OR expires IS NULL AS is_member FROM din_user AS u, din_usergrouprelationship AS ug WHERE u.id=$user_id AND u.id=ug.user_id GROUP BY user_id";
|
||||
$cols = array('id', 'firstname', 'lastname', 'email', 'expires', 'cardno', 'registration_status');
|
||||
$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";
|
||||
$res = $conn->query($sql);
|
||||
if( DB::isError($res) ) {
|
||||
set_response_code(500);
|
||||
echo json_encode( array('error' => 'db_error', 'error_message' => $res->toString() ) );
|
||||
die();
|
||||
}
|
||||
@@ -88,6 +114,8 @@ function get_user($user_id) {
|
||||
/* Clean up user object */
|
||||
unset($user['is_member']);
|
||||
unset($user['group_ids']);
|
||||
$user['memberid'] = $user['id']; // rename
|
||||
unset($user['id']);
|
||||
|
||||
return $user;
|
||||
}
|
||||
@@ -97,11 +125,11 @@ function get_user_id_by_username($username) {
|
||||
$sql = "SELECT id FROM din_user WHERE username='$username'";
|
||||
$res = $conn->query($sql);
|
||||
if( DB::isError($res) ) {
|
||||
set_response_code(500);
|
||||
echo json_encode( array('error' => 'db_error', 'error_message' => $res->toString() ) );
|
||||
die();
|
||||
}
|
||||
$res->fetchInto($data);
|
||||
var_dump($data);
|
||||
return $data['id'];
|
||||
}
|
||||
function clean_phonenumber($pn) {
|
||||
@@ -113,6 +141,11 @@ function clean_phonenumber($pn) {
|
||||
}
|
||||
return $pn;
|
||||
}
|
||||
// ISO-8601 Y-m-d
|
||||
function clean_date($date) {
|
||||
// returns a DateTime object
|
||||
return date_create_from_format('Y-m-d', $date);
|
||||
}
|
||||
// E.164
|
||||
function valid_phonenumber($phone) {
|
||||
return preg_match('/^\+?\d{8,15}$/i', $phone);
|
||||
|
||||
@@ -1,11 +0,0 @@
|
||||
<?php
|
||||
function generate_username($data) {
|
||||
/* Clean non ascii chars */
|
||||
$firstname = preg_replace('/[^\w]/', '', $data['firstname']);
|
||||
$firstname = substr(strtolower($firstname), 0, 6);
|
||||
|
||||
$lastname = preg_replace('/[^\w]/', '', $data['lastname']);
|
||||
$lastname = substr(strtolower($lastname), 0, 3);
|
||||
return $firstname.$lastname.uniqid();
|
||||
}
|
||||
var_dump(generate_username(array('firstname' => "Nikolai R", "lastname" => "Kristiansen")));
|
||||
@@ -0,0 +1,5 @@
|
||||
/* New columns */
|
||||
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';
|
||||
Binary file not shown.
@@ -1,6 +1,6 @@
|
||||
{
|
||||
"firstname": "Test",
|
||||
"lastname": "Testesen",
|
||||
"email": "assdadfzaaa2ggzasdaaz@aaaa222asdaasdf.com",
|
||||
"phone": "48115899"
|
||||
"email": "aaaadadfz@aaa222asd333a44zz.com",
|
||||
"phone": "+4745115788"
|
||||
}
|
||||
Reference in new issue
Block a user