From da04bff3283a30a238b25429b007ff538c00df7f Mon Sep 17 00:00:00 2001 From: Roland Haeder Date: Sun, 6 Apr 2014 23:25:19 +0200 Subject: [PATCH] Continued with ext-wernis: - Added wernis_refid column which will hold the referral id from WDS66. This can be used to link a registered (through ext-wernis, not ext-register) account with this. - Added registration provider to mappedData array - Some rewrites - Added convertEmptyToNull() (generic) MIME-Version: 1.0 Content-Type: text/plain; charset=utf8 Content-Transfer-Encoding: 8bit Signed-off-by: Roland Häder --- inc/extensions/ext-wernis.php | 3 +- inc/functions.php | 12 ++++++ inc/libs/wernis_functions.php | 72 ++++++++++++++++++++++++++--------- 3 files changed, 67 insertions(+), 20 deletions(-) diff --git a/inc/extensions/ext-wernis.php b/inc/extensions/ext-wernis.php index 8e4f120424..0fbf56ee83 100644 --- a/inc/extensions/ext-wernis.php +++ b/inc/extensions/ext-wernis.php @@ -71,7 +71,8 @@ INDEX (`userid`)", addConfigAddSql('wernis_api_url', "VARCHAR(255) NOT NULL DEFAULT 'http://www.wds66.com/api/'"); // User data - addExtensionAddTableColumnSql('user_data', 'wernis_userid', "VARCHAR(6) NOT NULL DEFAULT ''"); + addExtensionAddTableColumnSql('user_data', 'wernis_userid', "VARCHAR(6) NULL DEFAULT NULL"); + addExtensionAddTableColumnSql('user_data', 'wernis_refid', "VARCHAR(6) NULL DEFAULT NULL"); // Admin menu addAdminMenuSql('wernis', NULL, 'Wernis-Management', 'Konfiguration zur WDS66-API einstellen, Auszahlungen auflisten usw..', 15); diff --git a/inc/functions.php b/inc/functions.php index 3ee3d3b1ae..4f37ac1a92 100644 --- a/inc/functions.php +++ b/inc/functions.php @@ -2192,6 +2192,18 @@ function convertZeroToNull ($number) { return $number; } +// Converts an empty string to NULL, else leaves it untouched +function convertEmptyToNull ($str) { + // Is the string empty? + if (strlen($str) == 0) { + // Is really empty + $str = NULL; + } // END - if + + // Return it + return $str; +} + // Converts a NULL|empty string|< 1 to zero function convertNullToZero ($number) { // Is it a valid username? diff --git a/inc/libs/wernis_functions.php b/inc/libs/wernis_functions.php index 50f39751be..67d20182b2 100644 --- a/inc/libs/wernis_functions.php +++ b/inc/libs/wernis_functions.php @@ -551,12 +551,11 @@ function doWernisFinishUserRegistration ($challenge, $challengeResponse, $status * update it and ignore result from function because the update * will always run. */ - updateWernisRegistrationStatusByKey('api_redirect_challenge', $challenge, 'ACCEPTED'); + updateWernisRegistrationDataByKey('api_auth_status', 'api_redirect_challenge', $challenge, 'ACCEPTED'); } // END - if // Now call "get.php" - // @TODO Hard-coded value (anrede, etc.) - $response = executeWernisApiGet($rows[0], 'data', 'anrede|vorname|name|strasse|plz|ort|birth_day|birth_month|birth_year|email'); + $response = executeWernisApiGet($rows[0], 'data', 'anrede|vorname|name|strasse|plz|ort|birth_day|birth_month|birth_year|email|werber'); // Was the status okay? if (isHttpResponseStatusOkay($response)) { @@ -571,15 +570,53 @@ function doWernisFinishUserRegistration ($challenge, $challengeResponse, $status /* * Do some checks on the decoded string, it should be a - * serialized array with 10 entries (see above + * serialized array with 11 entries (see above * executeWernisApiGet() call). */ - assert(substr($decodedData, 0, 6) == 'a:10:{'); + assert(substr($decodedData, 0, 6) == 'a:11:{'); assert(substr($decodedData, -1, 1) == '}'); // The array seems to be fine, unserialize it $userData = unserialize($decodedData); - die(__FUNCTION__.'
'.print_r($userData, TRUE).'
'); + + // All mappings WDS66->mailer + $mappings = array( + 'anrede' => 'gender', + 'vorname' => 'surname', + 'name' => 'family', + 'strasse' => 'street_nr', + 'plz' => 'zip', + 'ort' => 'city', + 'email' => 'email', + 'birth_day' => 'birth_day', + 'birth_month' => 'birth_month', + 'birth_year' => 'birth_year', + 'werber' => 'wernis_refid' + ); + + // Array for mapped data + $mappedData = array(); + + // Map all WDS66 entries into mailer entries + foreach ($mappings as $from => $to) { + // All must exist + if (!isset($userData[$from])) { + // Element $from does not exist + reportBug(__FUNCTION__, __LINE__, 'Cannot map from=' . $from . ' -> to=' . $to . ': element does not exist.'); + } // END - if + + // "Map" all + $mappedData[$to] = convertEmptyToNull($userData[$from]); + } // END - foreach + + // Both arrays must have same size + assert(count($userData) == count($mappedData)); + + // Now add userid and registration provider from WDS66 + $mappedData['wernis_userid'] = bigintval($rows[0]['wernis_userid']); + $mappedData['registration_provider'] = 'wernis'; + + die(__FUNCTION__ . '
'.print_r($mappedData, TRUE).'
'); } else { // Something bad happened displayMessage($response['message']); @@ -591,21 +628,22 @@ function doWernisFinishUserRegistration ($challenge, $challengeResponse, $status } // Updates auth status by given key/value pair -function updateWernisRegistrationStatusByKey ($key, $value, $newStatus) { +function updateWernisRegistrationDataByKey ($updatedColumn, $key, $oldValue, $newValue) { // Run the update sqlQueryEscaped("UPDATE `{?_MYSQL_PREFIX?}_wernis_regs` SET - `api_auth_status`='%s' + `%s`='%s' WHERE `%s`='%s' AND - `api_auth_status` != '%s' + `%s` != '%s' LIMIT 1", array( - $newStatus, + $updatedColumn, + $newValue, $key, - $value, - $newStatus + $updatedColumn, + $oldValue ), __FUNCTION__, __LINE__ ); @@ -692,9 +730,6 @@ function doWernisAuthPending ($args) { $challenge ), __FUNCTION__, __LINE__ ); - - // Should be inserted - assert(sqlAffectedRows() == 1); } else { // Update challenge sqlQueryEscaped("UPDATE @@ -712,11 +747,11 @@ LIMIT 1", bigintval($args['wernis_userid']) ), __FUNCTION__, __LINE__ ); - - // Should always be updated - assert(sqlAffectedRows() == 1); } + // Should always update/insert + assert(sqlAffectedRows() == 1); + // Redirect to WDS66 module=auth ... redirectToUrl(getWernisBaseUrl() . '/modules.php?module=auth&auth_key=' . $args['auth_key'] . '&params=' . urlencode(base64_encode('&module=' . getModule() . '&what=' . getWhat())) . '&challenge=' . $challenge); } @@ -729,7 +764,6 @@ function doWernisAuthAccepted ($args) { // auth_key and wernis_userid must be set assert(isset($args['auth_key'])); assert(isset($args['wernis_userid'])); - die(__FUNCTION__ . '
'.print_r($args, TRUE).'
'); } -- 2.30.2