From 87229cb5d7b5396793e85fd0b4172d473195835c Mon Sep 17 00:00:00 2001 From: =?utf8?q?Roland=20H=C3=A4der?= Date: Sun, 1 Sep 2013 20:13:27 +0000 Subject: [PATCH] Rewrote 2 str_replace() calls to one with array() --- .gitattributes | 1 + inc/extensions/ext-wernis.php | 5 +- inc/extensions/wernis/mode-update.php | 21 ++ inc/filter/wernis_filter.php | 1 + inc/functions.php | 5 +- inc/install-functions.php | 3 +- inc/language/order_de.php | 2 +- inc/language/wernis_de.php | 27 ++- inc/libs/wernis_functions.php | 204 ++++++++++++++++-- inc/modules/admin/what-config_wernis.php | 40 ++-- inc/modules/guest/what-wernis_portal.php | 4 +- inc/modules/member/what-wernis.php | 14 +- inc/wrapper-functions.php | 22 ++ .../de/html/admin/admin_config_wernis.tpl | 8 + .../de/html/guest/guest_confirm_link.tpl | 47 ++-- templates/de/html/guest/guest_stats_table.tpl | 4 +- templates/de/html/guest/guest_top10.tpl | 3 +- .../guest/guest_wernis_registration_form.tpl | 45 ++++ 18 files changed, 372 insertions(+), 84 deletions(-) create mode 100644 templates/de/html/guest/guest_wernis_registration_form.tpl diff --git a/.gitattributes b/.gitattributes index edd6d170ad..c23039256f 100644 --- a/.gitattributes +++ b/.gitattributes @@ -1877,6 +1877,7 @@ templates/de/html/guest/guest_top10_row_earner.tpl svneol=native#text/plain templates/de/html/guest/guest_top10_row_login.tpl svneol=native#text/plain templates/de/html/guest/guest_top10_row_refs.tpl svneol=native#text/plain templates/de/html/guest/guest_wernis_news.tpl svneol=native#text/plain +templates/de/html/guest/guest_wernis_registration_form.tpl svneol=native#text/plain templates/de/html/impressum.tpl svneol=native#text/plain templates/de/html/index.tpl svneol=native#text/plain templates/de/html/index_forward.tpl svneol=native#text/plain diff --git a/inc/extensions/ext-wernis.php b/inc/extensions/ext-wernis.php index 3c5e659fcb..8e4f120424 100644 --- a/inc/extensions/ext-wernis.php +++ b/inc/extensions/ext-wernis.php @@ -41,10 +41,10 @@ if (!defined('__SECURITY')) { } // END - if // Version of this extension -setThisExtensionVersion('0.0.7'); +setThisExtensionVersion('0.0.8'); // Version history array (add more with , '0.0.1' and so on) -setExtensionVersionHistory(array('0.0.0', '0.0.1', '0.0.2', '0.0.3', '0.0.4', '0.0.5', '0.0.6', '0.0.7')); +setExtensionVersionHistory(array('0.0.0', '0.0.1', '0.0.2', '0.0.3', '0.0.4', '0.0.5', '0.0.6', '0.0.7', '0.0.8')); switch (getExtensionMode()) { case 'setup': // Do stuff when installation is running @@ -88,6 +88,7 @@ INDEX (`userid`)", case 'remove': // Do stuff when removing extension // SQL commands to run addDropTableSql('user_wernis'); + addDropTableSql('wernis_regs'); addExtensionSql("DELETE LOW_PRIORITY FROM `{?_MYSQL_PREFIX?}_admin_menu` WHERE `action`='wernis'"); addExtensionSql("DELETE LOW_PRIORITY FROM `{?_MYSQL_PREFIX?}_member_menu` WHERE `what`='wernis' LIMIT 1"); addExtensionSql("DELETE LOW_PRIORITY FROM `{?_MYSQL_PREFIX?}_guest_menu` WHERE `what`='wernis_portal' LIMIT 1"); diff --git a/inc/extensions/wernis/mode-update.php b/inc/extensions/wernis/mode-update.php index 6be7b14ec7..4f431d409d 100644 --- a/inc/extensions/wernis/mode-update.php +++ b/inc/extensions/wernis/mode-update.php @@ -113,6 +113,27 @@ switch (getCurrentExtensionVersion()) { // Update notes setExtensionUpdateNotes("Anmeldung ürber WDS66 API angefangen: Filter registriert."); break; + + case '0.0.8': // SQL queries for v0.0.8 + addConfigAddSql('wernis_base_url', "VARCHAR(255) NOT NULL DEFAULT 'http://www.wds66.com'"); + + // SQL commands to run + addDropTableSql('wernis_regs'); + addCreateTableSql('wernis_regs', " +`id` BIGINT(20) UNSIGNED NOT NULL AUTO_INCREMENT, +`local_userid` BIGINT(20) UNSIGNED NULL DEFAULT NULL, +`wernis_userid` BIGINT(20) UNSIGNED NOT NULL DEFAULT 0, +`api_auth_status` VARCHAR(255) NOT NULL DEFAULT 'UNKNOWN', +`api_auth_key` VARCHAR(255) NOT NULL DEFAULT 'INVALID', +`api_redirect_challenge` VARCHAR(255) NOT NULL DEFAULT 'INVALID', +`record_inserted` TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP, +PRIMARY KEY (`id`), +INDEX (`wernis_userid`)", + 'Registrations (also pending) over WDS66 API'); + + // Update notes (these will be set as task text!) + setExtensionUpdateNotes("Basis-URL für alle Scripte (Referral-Link, auth.php-Umleitung usw. nicht aber API) und Tabelle für API-Aufrufe von auth.php hinzugefügt."); + break; } // END - switch // [EOF] diff --git a/inc/filter/wernis_filter.php b/inc/filter/wernis_filter.php index 5264ed0232..0de661bac3 100644 --- a/inc/filter/wernis_filter.php +++ b/inc/filter/wernis_filter.php @@ -102,6 +102,7 @@ function FILTER_WERNIS_USER_REGISTRATION_FORM () { // Is WDS66 user registration selected? if (((isGetRequestElementSet('provider')) && (getRequestElement('provider') == 'wernis')) || ((!isGetRequestElementSet('provider')) && (getDefaultRegistrationProvider() == 'wernis'))) { // Run it + doDisplayWernisUserRegistrationForm(); // Interrupt filter chain interruptFilterChain(); diff --git a/inc/functions.php b/inc/functions.php index f7c2247656..f08e83420e 100644 --- a/inc/functions.php +++ b/inc/functions.php @@ -466,7 +466,7 @@ function redirectToUrl ($url, $allowSpider = TRUE) { // Three different ways to debug... //* DEBUG: */ reportBug(__FUNCTION__, __LINE__, 'URL=' . $url); //* DEBUG: */ logDebugMessage(__FUNCTION__, __LINE__, 'URL=' . $url); - //* DEBUG: */ die($url); + /* DEBUG: */ die($url); // We should not sent a redirect if headers are already sent if (!headers_sent()) { @@ -2742,6 +2742,9 @@ function hashSha256 ($str) { $hex .= padLeftZero(dechex(ord(substr($hash, $i, 1))), 2); } // END - if + // Make sure 'length modulo 2' = 0 + assert((strlen($hex) % 2) == 0); + // Return it return $hex; } diff --git a/inc/install-functions.php b/inc/install-functions.php index 4222ee2e95..5f027b3f7e 100644 --- a/inc/install-functions.php +++ b/inc/install-functions.php @@ -164,8 +164,7 @@ function readSqlDump ($FQFN) { $content = readFromFile($FQFN); // Remove some unwanted chars - $content = str_replace(chr(13), '', $content); - $content = str_replace(PHP_EOL . PHP_EOL, PHP_EOL, $content); + $content = str_replace(array(chr(13), PHP_EOL . PHP_EOL), array('', PHP_EOL), $content); // Return the content return $content; diff --git a/inc/language/order_de.php b/inc/language/order_de.php index 47a9d6a37d..b7af735d5e 100644 --- a/inc/language/order_de.php +++ b/inc/language/order_de.php @@ -85,7 +85,7 @@ addMessages(array( // Member strings 'MEMBER_ORDER_ALLOWED_RECEIVE' => "Sie können heute noch %s von %s Mailbuchungen aufgeben.", 'MEMBER_ORDER_ALLOWED_MAX' => "Sie können solange Mailbuchungen aufgeben, bis alle Mitglieder nicht mehr empfangsbereit sind.", - 'MEMBER_ORDER_ALLOWED_UNKNOWN' => "Fehler in Konfiguration erkannt! cfg={?order_max_full?} Bitte den Administrator benachrichtigen.", + 'MEMBER_ORDER_ALLOWED_UNKNOWN' => "Fehler in Konfiguration erkannt. cfg={?order_max_full?} Bitte den Administrator benachrichtigen.", 'MEMBER_ORDER_MAX_ALLOWED' => "Maximale Mailbuchungen", 'MEMBER_ORDER_ALLOWED_EXHAUSTED' => "Sie können keine weiteren Mails mehr versenden, oder stellen Sie bitte den Empfang höher ein.", 'MEMBER_ENTER_INVALID_URL' => "Ungültige URL eingegeben.", diff --git a/inc/language/wernis_de.php b/inc/language/wernis_de.php index 72179cc472..50972a09a1 100644 --- a/inc/language/wernis_de.php +++ b/inc/language/wernis_de.php @@ -59,7 +59,7 @@ addMessages(array( 'ADMIN_CONFIG_WERNIS_API_URL' => "Basis-URL der API-Skripte", 'ADMIN_CONFIG_WERNIS_REFID' => "Ihre Referral-Id bei WDS66-Portal (= Ihr Username!)", 'ADMIN_CONFIG_WERNIS_WPASS' => "Wernis-Passwort (nicht Account-Passwort!)", - 'ADMIN_CONFIG_WERNIS_NOTICE' => "[Hier] können Sie schon für einmalig kostenlos 25.000 Abfragen ein API-Account beantragen (dazu ist ein kostenloses Wernis-Account dennoch nötig!) Geben Sie immer Ihren Usernamen von WDS66-Hauptaccount ein und überprüfen Sie diesen mehrmals! Er wird zum Überweisen von und nach WDS66-Wernis-Portal benötigt. Die Betreibergebühren und Umrechnungsfaktoren sind für den Betrieb Ihres {?mt_word2?} komplett in Wernis ausgelegt, diese müssen Sie also noch anpassen, wenn Sie z.B. Punkte haben und in Wernis auszahlen lassen wollen. Sollten Sie sowohl einen feste als auch eine prozentuale Betreibergebühr eingestellt haben, gilt die prozentuale.", + 'ADMIN_CONFIG_WERNIS_NOTICE' => "[Hier] können Sie schon für einmalig kostenlos 25.000 Abfragen ein API-Account beantragen (dazu ist ein kostenloses Wernis-Account dennoch nötig!) Geben Sie immer Ihren Usernamen von WDS66-Hauptaccount ein und überprüfen Sie diesen mehrmals! Er wird zum Überweisen von und nach WDS66-Wernis-Portal benötigt. Die Betreibergebühren und Umrechnungsfaktoren sind für den Betrieb Ihres {?mt_word2?} komplett in Wernis ausgelegt, diese müssen Sie also noch anpassen, wenn Sie z.B. Punkte haben und in Wernis auszahlen lassen wollen. Sollten Sie sowohl einen feste als auch eine prozentuale Betreibergebühr eingestellt haben, gilt die prozentuale.", 'ADMIN_WERNIS_NO_TRANSFERS' => "Derzeit keine Wernis transferiert.", 'ADMIN_WERNIS_WDS66_ACCOUNT' => "Account bei WDS66-Portal", 'ADMIN_WERNIS_TRANSFERED' => "Wernis transferiert", @@ -86,7 +86,7 @@ addMessages(array( 'WERNIS_API_REQUEST_ERROR' => "Abfragefehler: %s", 'WERNIS_API_REQUEST_PROBLEM' => "Abfrageproblem: Status=%s, Rückmeldung=%s", 'WERNIS_API_REQUEST_FAILED' => "Unbekannter Fehler %s von API erhalten! Bitte im [Bug-Tracker posten], den Fehlercode nennen und wie es dazu gekommen ist.", - 'WERNIS_API_REQUEST_FAILED_AUTH' => "Authorisierung an API fehlgeschlagen! Bitte API-Id und Key überprüfen. [Hier] direkt zum Export-Account. Sie benötigen Ihren Usernamen und Passwort.", + 'WERNIS_API_REQUEST_FAILED_AUTH' => "Authorisierung an API fehlgeschlagen! Bitte API-Id und Key überprüfen. [Hier] direkt zum Export-Account. Sie benötigen Ihren Usernamen und Passwort.", 'WERNIS_API_REQUEST_FAILED_USER' => "Useraccount nicht gefunden oder Wernis-Passwort ist ungültig.", 'WERNIS_API_REQUEST_FAILED_OWN' => "Überweisung an eigenes Account nicht möglich.", 'WERNIS_API_REQUEST_FAILED_AMOUNT' => "Konto weist nicht genügend Deckung auf.", @@ -114,10 +114,10 @@ addMessages(array( 'MEMBER_WERNIS_PAYOUT_MIN_POINTS' => "Mindestens auszuzahlendes Wernis-Guthaben", 'MEMBER_WERNIS_PAYOUT_SUBMIT' => "Auszahlung durchführen", 'MEMBER_WERNIS_PAYOUT_NOTICE' => "Ihr Wernis-Passwort wird bei {?MAIN_TITLE?} nicht gespeichert. Bitte bei Wernis-Betrag nur gerade Beträge eingeben! Überprüfen Sie vor dem Absenden Ihren WDS66-Usernamen.", - 'MEMBER_WERNIS_WDS66_ID' => "Username bei WDS66-Portal: [Vergessen?]", - 'MEMBER_WERNIS_WDS66_PASSWORD' => "Wernis-Passwort (nicht Accountpasswort!): [Vergessen?]", + 'MEMBER_WERNIS_WDS66_ID' => "Username bei WDS66-Portal: [Vergessen?]", + 'MEMBER_WERNIS_WDS66_PASSWORD' => "Wernis-Passwort (nicht Accountpasswort): [Vergessen?]", 'MEMBER_WERNIS_WDS66_AMOUNT' => "Zu überweisenden Betrag eingeben:", - 'MEMBER_WERNIS_MODE_INVALID' => "Ungültiger Modus %s erkannt! Bitte links im Menü fortfahren.", + 'MEMBER_WERNIS_MODE_INVALID' => "Ungültiger Modus %s erkannt. Bitte links im Menü fortfahren.", 'MEMBER_WERNIS_EMPTY_USERNAME' => "Sie haben Ihren WDS66-Usernamen nicht eingegeben.", 'MEMBER_WERNIS_EMPTY_PASSWORD' => "Sieh haben kein Wernis-Passwort eingegeben.", 'MEMBER_WERNIS_EMPTY_AMOUNT' => "Sie haben keine zu überweisende Betrag angegeben.", @@ -125,9 +125,9 @@ addMessages(array( 'MEMBER_WERNIS_INVALID_AMOUNT' => "Bitte nur Zahlen für den zu überweisenden Betrag eingeben.", 'MEMBER_WERNIS_WITHDRAW_AMOUNT_SMALLER_MIN' => "Bitte geben Sie mindestens {OPEN_TEMPLATE}config,translateComma=wernis_min_withdraw{CLOSE_TEMPLATE} Wernis für die Einzahlung an.", 'MEMBER_WERNIS_PAYOUT_AMOUNT_SMALLER_MIN' => "Bitte geben Sie mindestens {OPEN_TEMPLATE}config,translateComma=wernis_min_payout{CLOSE_TEMPLATE} Wernis für die Auszahlung an.", - 'MEMBER_WERNIS_WITHDRAW_FAILED' => "Die Einzahlung hat nicht geklappt! Rückmeldung für den Support: {OPEN_TEMPLATE}pipe,GET_WERNIS_ERROR_MESSAGE{CLOSE_TEMPLATE}.", + 'MEMBER_WERNIS_WITHDRAW_FAILED' => "Die Einzahlung hat nicht geklappt! Rückmeldung für den Support: {OPEN_TEMPLATE}pipe,getWernisErrorMessage{CLOSE_TEMPLATE}.", 'MEMBER_WERNIS_WITHDRAW_DONE' => "Einzahlung auf Ihr {?MAIN_TITLE?} Konto erfolgreich abgeschlossen. :-)", - 'MEMBER_WERNIS_PAYOUT_FAILED' => "Die Auszahlung hat nicht geklappt! Rückmeldung für den Support: {OPEN_TEMPLATE}pipe,GET_WERNIS_ERROR_MESSAGE{CLOSE_TEMPLATE}.", + 'MEMBER_WERNIS_PAYOUT_FAILED' => "Die Auszahlung hat nicht geklappt! Rückmeldung für den Support: {OPEN_TEMPLATE}pipe,getWernisErrorMessage{CLOSE_TEMPLATE}.", 'MEMBER_WERNIS_PAYOUT_DONE' => "Auszahlung auf WDS66-Hauptaccount erfolgreich abgeschlossen. :-)", 'MEMBER_WERNIS_PAYOUT_POINTS_DEPLETED' => "Sie können nicht %s Wernis auszahlen, da Sie nur %s übrig haben.", 'MEMBER_WERNIS_STATUS' => "Überweisungsart", @@ -137,6 +137,19 @@ addMessages(array( 'MEMBER_WERNIS_MODE_PAYOUT' => "Wernis auszahlen", 'MEMBER_WERNIS_LIST_WERNIS' => "Überweisungsliste von/an WDS66-Hauptaccount", + // Guest messages - registration + 'GUEST_WERNIS_REGISTRATION_TITLE' => "Anmelung mit WDS66", + 'GUEST_WERNIS_REGISTRATION_LEGEND' => "Bitte geben Sie Ihre WDS66 Mitgliedsnummer und das Wernis-Passwort ein:", + 'GUEST_ENTER_WERNIS_ID' => "Ihre WDS66 Mitgliedsnummer:", + 'GUEST_ENTER_WERNIS_PASSWORD' => "Ihr Wernis-Passwort:", + 'GUEST_WERNIS_REGISTRATION_SUBMIT' => "Mit WDS66 anmelden", + 'GUEST_WERNIS_REGISTRATION_NOTICE' => "Bitte verwenden Sie Ihr Wernis-Passwort zur Anmeldung, Ihr Accountpasswort wird hier nicht funktionieren, da dieses zum Anmelden an WDS66 gedacht ist.", + 'GUEST_WERNIS_SIGNUP_NOTICE' => "Sie haben noch keinen WDS66-Account? Hier geht es zur kostenlosen Anmeldung.", + 'GUEST_WERNIS_RESTORE_PASSWORD_NOTICE' => "Sie haben kein Wernis-Passwort oder haben es vergessen? Hier ein neues einstellen.", + 'GUEST_WERNIS_REGISTRATION_ID_NOT_SET' => "Bitte geben Sie Ihre Wernis-Id ein. Tipp: Mit dieser Id-Nummer melden Sie sich auch bei WDS66 an.", + 'GUEST_WERNIS_REGISTRATION_PASSWORD_NOT_SET' => "Bitte geben Sie Ihr Wernis-Passwort ein. Tipp: Dies ist nicht Ihr Account-Passwort.", + 'GUEST_WERNIS_REGISTRATION_INVALID_CHALLENGE_RESPONSE' => "Es ist beim Anmeldeversuch ein Fehler unterlaufen: Falsche Challenge-Response", + // Points accounts - subject 'POINTS_SUBJECT_WERNIS_WITHDRAW' => "Einzahlung vom WDS66-Account", diff --git a/inc/libs/wernis_functions.php b/inc/libs/wernis_functions.php index 1e8dc19800..ff782fac56 100644 --- a/inc/libs/wernis_functions.php +++ b/inc/libs/wernis_functions.php @@ -41,13 +41,13 @@ if (!defined('__SECURITY')) { } // END - if // Sets a status message and code -function WERNIS_STATUS_MESSAGE ($message, $status) { +function setWernisStatusMessage ($message, $status) { $GLOBALS['wernis_data']['message'] = $message; $GLOBALS['wernis_data']['status'] = $status; } // Get the status message -function GET_WERNIS_ERROR_MESSAGE () { +function getWernisErrorMessage () { if (isset($GLOBALS['wernis_data']['message'])) { // Use raw message return $GLOBALS['wernis_data']['message']; @@ -61,7 +61,7 @@ function GET_WERNIS_ERROR_MESSAGE () { } // Get the status code -function GET_WERNIS_ERROR_CODE () { +function getWernisErrorCode () { if (isset($GLOBALS['wernis_data']['status'])) { // Use raw message return $GLOBALS['wernis_data']['status']; @@ -72,7 +72,7 @@ function GET_WERNIS_ERROR_CODE () { } // Sends out a request to the API and returns it's result -function WERNIS_SEND_REQUEST ($scriptName, $requestData = array()) { +function sendWernisApiRequest ($scriptName, $requestData = array()) { // Is the requestData an array? if (!is_array($requestData)) { // Then abort here! @@ -210,7 +210,7 @@ function WERNIS_SEND_REQUEST ($scriptName, $requestData = array()) { } // Tests the function by calling balance.php on the API -function WERNIS_TEST_API () { +function doAdminTestWernisApi () { // Only as admin assert(isAdmin()); @@ -224,7 +224,7 @@ function WERNIS_TEST_API () { ); // Return the result from the lower functions - $return = WERNIS_SEND_REQUEST('balance.php', $requestData); + $return = sendWernisApiRequest('balance.php', $requestData); // Did it went smoothly? if ($return['status'] == 'OK') { @@ -232,7 +232,7 @@ function WERNIS_TEST_API () { $result = TRUE; } else { // Status failure text - WERNIS_STATUS_MESSAGE($return['message'], $return['status']); + setWernisStatusMessage($return['message'], $return['status']); } // Return result @@ -240,7 +240,7 @@ function WERNIS_TEST_API () { } // Widthdraw this amount -function WERNIS_EXECUTE_WITHDRAW ($wdsId, $userMd5, $amount) { +function executeWernisWithdraw ($wdsId, $userMd5, $amount) { // Is the sponsor extension installed? if (!isWernisWithdrawActive()) { if (!isExtensionActive('sponsor')) { @@ -266,29 +266,28 @@ function WERNIS_EXECUTE_WITHDRAW ($wdsId, $userMd5, $amount) { ); // Return the result from the lower functions - $return = WERNIS_SEND_REQUEST('book.php', $requestData); + $return = sendWernisApiRequest('book.php', $requestData); if ($return['status'] == 'OK') { // All fine! $result = TRUE; // Log the transfer - WERNIS_LOG_TRANSFER($wdsId, $amount, 'WITHDRAW'); + logWernisTransfer($wdsId, $amount, 'WITHDRAW'); } else { // Status failure text - WERNIS_STATUS_MESSAGE($return['message'], $return['status']); + setWernisStatusMessage($return['message'], $return['status']); // Log the transfer - WERNIS_LOG_TRANSFER($wdsId, $amount, 'FAILED', $return['message'], $return['status']); + logWernisTransfer($wdsId, $amount, 'FAILED', $return['message'], $return['status']); } // Return result return $result; } - // Payout this amount -function WERNIS_EXECUTE_PAYOUT ($wdsId, $amount) { +function executeWernisPayout ($wdsId, $amount) { // Default is failed attempt $result = FALSE; @@ -303,26 +302,41 @@ function WERNIS_EXECUTE_PAYOUT ($wdsId, $amount) { ); // Return the result from the lower functions - $return = WERNIS_SEND_REQUEST('book.php', $requestData); + $return = sendWernisApiRequest('book.php', $requestData); if ($return['status'] == 'OK') { // All fine! $result = TRUE; // Log the transfer - WERNIS_LOG_TRANSFER($wdsId, $amount, 'PAYOUT'); + logWernisTransfer($wdsId, $amount, 'PAYOUT'); } else { // Status failure text - WERNIS_STATUS_MESSAGE($return['message'], $return['status']); + setWernisStatusMessage($return['message'], $return['status']); // Log the transfer - WERNIS_LOG_TRANSFER($wdsId, $amount, 'FAILED', $return['message'], $return['status']); + logWernisTransfer($wdsId, $amount, 'FAILED', $return['message'], $return['status']); } // Return result return $result; } +// Execute auth.php request +function executeWernisAuth ($wernisId, $wernisPassword) { + // Prepare request data + $requestData = array( + 't_uid' => bigintval($wernisId), + 't_md5' => hashSha256($wernisPassword), + ); + + // Call auth.php + $return = sendWernisApiRequest('auth.php', $requestData); + + // Return full array + return $return; +} + // Translate the status IN/OUT function translateWernisTransferStatus ($status) { // Default status is unknown @@ -342,7 +356,7 @@ function translateWernisTransferStatus ($status) { } // Log the transfer -function WERNIS_LOG_TRANSFER ($wdsId, $amount, $type = 'FAILED', $message = '', $status = '') { +function logWernisTransfer ($wdsId, $amount, $type = 'FAILED', $message = '', $status = '') { // Register this wernis movement sqlQueryEscaped("INSERT INTO `{?_MYSQL_PREFIX?}_user_wernis` (`userid`, `wernis_account`, `wernis_amount`, `wernis_timestamp`, `wernis_type`, `wernis_api_message`, `wernis_api_status`) VALUES (%s, %s, %s, UNIX_TIMESTAMP(), '%s', '%s', '%s')", array( @@ -355,8 +369,8 @@ function WERNIS_LOG_TRANSFER ($wdsId, $amount, $type = 'FAILED', $message = '', ), __FUNCTION__, __LINE__); } -// Take fees and factor -function WERNIS_TAKE_FEE ($points, $mode) { +// Calulcate fees and factor +function calculateWernisFee ($points, $mode) { // Payout or withdraw are allowed modes! //* DEBUG: */ debugOutput('mode=' . $mode . ',points=' . $points); if (!in_array($mode, array('payout', 'withdraw'))) { @@ -389,7 +403,8 @@ function WERNIS_TAKE_FEE ($points, $mode) { } // Add withdraw fees and factor -function WERNIS_ADD_WITHDRAW_FEE ($points) { +// @TODO Unused? +function calulcateWernisWithdrawFee ($points) { // Is there a percentage or fixed fee? if (getWernisWithdrawFeePercent() > 0) { // Percentage fee @@ -403,6 +418,139 @@ function WERNIS_ADD_WITHDRAW_FEE ($points) { return $points; } +// Displays registration form for WDS66 registration +function doDisplayWernisUserRegistrationForm () { + // Is the form sent? + if (isFormSent('register')) { + // Is wernis_id set? + if (!isPostRequestElementSet('wernis_id')) { + // Id not set + displayMessage('{--GUEST_WERNIS_REGISTRATION_ID_NOT_SET--}'); + } elseif (!isPostRequestElementSet('wernis_password')) { + // Password not set + displayMessage('{--GUEST_WERNIS_REGISTRATION_PASSWORD_NOT_SET--}'); + } else { + // So far, all fine, then let's do the call-back on auth.php ... + $response = executeWernisAuth(postRequestElement('wernis_id'), postRequestElement('wernis_password')); + + // Was the status okay? + if ((isset($response['status'])) && ($response['status'] == 'OK') && (!empty($response['response']))) { + // All fine, then analyze response + $args = convertApiResponseToArray($response['response'], '&', '='); + + // Is status set? + assert(isset($args['auth_status'])); + + // Add WDS66 userid + $args['wernis_userid'] = postRequestElement('wernis_id'); + + // "Detect" auth status + $callbackFunction = 'doWernisAuth' . capitalizeUnderscoreString($args['auth_status']); + + // Is the call-back there? + if (!is_callable($callbackFunction, FALSE, $callableName)) { + // Not there, could be bad. :( + reportBug(__FUNCTION__, __LINE__, 'Unsupported auth_status=' . $args['auth_status'] . ',args()=' . count($args) . ',callbackFunction=' . $callbackFunction . ' detected.'); + } // END - if + + // Then call it + $status = call_user_func($callbackFunction, $args); + die(__FUNCTION__ . ': status[' . gettype($status) . ']=' . $status); + } else { + // Something bad happened + displayMessage($response['message']); + } + } + } // END - if + + // Is the form not sent? (E.g. missing form fields) + if ((isGetRequestElementSet('status')) && (isGetRequestElementSet('challenge')) && (isGetRequestElementSet('__challenge_response'))) { + // Redirect from modules.php?module=auth, so validate challenge response ... + // 1) Get first 24 characters = salt + $salt = substr(getRequestElement('__challenge_response'), 0, 24); + + // 2) Generate hash again + $response = $salt . hashSha256($salt . getWernisApiMd5() . getRequestElement('challenge')); + + // Is the response valid? + if ($response != getRequestElement('__challenge_response')) { + // Not valid + displayMessage('{--GUEST_WERNIS_REGISTRATION_INVALID_CHALLENGE_RESPONSE--}'); + return; + } // END - if + + /* + * Now, that the challenge-response is the same, the challenge itself + * is also the same. So get.php can be called. + */ + die('!ojk'); + } elseif (!isFormSent('register')) { + // Form not send, so load form template + loadTemplate('guest_wernis_registration_form'); + } // END - if +} + +//----------------------------------------------------------------------------- +// Auth status callback functions +//----------------------------------------------------------------------------- + +// Handler for auth_status=PENDING +function doWernisAuthPending ($args) { + // auth_key must be set + assert(isset($args['auth_key'])); + + // Generate a challenge that will be added to the URL + $challenge = hashSha256(generatePassword(128)); + + // Search entry in database by auth_key + if (countSumTotalData($args['auth_key'], 'wernis_regs', 'id', 'api_auth_key', TRUE) == 0) { + // "Register" this call + sqlQueryEscaped("INSERT INTO `{?_MYSQL_PREFIX?}_wernis_regs` ( + `wernis_userid`, + `api_auth_status`, + `api_auth_key`, + `api_redirect_challenge` +) VALUES ( + %s, + 'PENDING', + '%s', + '%s' +)", + array( + bigintval($args['wernis_userid']), + $args['auth_key'], + $challenge + ), __FUNCTION__, __LINE__ + ); + + // Should be inserted + assert(sqlAffectedRows() == 1); + } else { + // Update challenge + sqlQueryEscaped("UPDATE + `{?_MYSQL_PREFIX?}_wernis_regs` +SET + `api_redirect_challenge`='%s' +WHERE + `api_auth_key`='%s' AND + `wernis_userid`=%s + `api_auth_status`='PENDING' +LIMIT 1", + array( + $challenge, + $args['auth_key'], + bigintval($args['wernis_userid']) + ), __FUNCTION__, __LINE__ + ); + + // Should always be updated + 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); +} + //----------------------------------------------------------------------------- // Wrapper functions //----------------------------------------------------------------------------- @@ -611,5 +759,17 @@ function getWernisMinWithdraw () { return $GLOBALS[__FUNCTION__]; } +// Wrapper function for 'wernis_base_url' +function getWernisBaseUrl () { + // Is there cache? + if (!isset($GLOBALS[__FUNCTION__])) { + // Get config entry + $GLOBALS[__FUNCTION__] = getConfig('wernis_base_url'); + } // END - if + + // Return cache + return $GLOBALS[__FUNCTION__]; +} + // [EOF] ?> diff --git a/inc/modules/admin/what-config_wernis.php b/inc/modules/admin/what-config_wernis.php index 7acf89891c..a5fb7df054 100644 --- a/inc/modules/admin/what-config_wernis.php +++ b/inc/modules/admin/what-config_wernis.php @@ -43,30 +43,40 @@ if ((!defined('__SECURITY')) || (!isAdmin())) { // Add description as navigation point addYouAreHereLink('admin', __FILE__); +// Form sent? if (isFormSent('save_config')) { - // Hash the password and remove clear-text - setPostRequestElement('wernis_pass_md5', hashSha256(postRequestElement('wernis_pass'))); + // Is wernis_pass set? + if (isPostRequestElementSet('wernis_pass')) { + // Hash the password and remove clear-text + setPostRequestElement('wernis_pass_md5', hashSha256(postRequestElement('wernis_pass'))); - // First merge temporarily the new API data into the current config - mergeConfig(postRequestArray()); + // First merge temporarily the new API data into the current config + mergeConfig(postRequestArray()); - // Let's test the API first (hold your horses here, cowboy! Thank you. :) ) - if (WERNIS_TEST_API()) { - // Revert german commata - foreach (array('payout_factor', 'withdraw_factor', 'payout_fee_percent', 'withdraw_fee_percent') as $revert) { - setPostRequestElement('wernis_' . $revert, postRequestElement('wernis_' . $revert)); - } // END - if + // Let's test the API first (hold your horses here, cowboy! Thank you. :) ) + if (doAdminTestWernisApi()) { + // Revert german commata + foreach (array('payout_factor', 'withdraw_factor', 'payout_fee_percent', 'withdraw_fee_percent') as $revert) { + setPostRequestElement('wernis_' . $revert, postRequestElement('wernis_' . $revert)); + } // END - if + // Remove clear password + unsetPostRequestElement('wernis_pass'); + + // Save settings + adminSaveSettingsFromPostData(); + } else { + // Failed to test the API! + displayMessage(getWernisErrorMessage()); + } + } else { // Remove clear password unsetPostRequestElement('wernis_pass'); - // Save settings + // Save it, anyway adminSaveSettingsFromPostData(); - } else { - // Failed to test the API! - displayMessage(GET_WERNIS_ERROR_MESSAGE()); } -} else { +} else { // Load template loadTemplate('admin_config_wernis'); } diff --git a/inc/modules/guest/what-wernis_portal.php b/inc/modules/guest/what-wernis_portal.php index b886468a0e..05532dd76d 100644 --- a/inc/modules/guest/what-wernis_portal.php +++ b/inc/modules/guest/what-wernis_portal.php @@ -62,7 +62,7 @@ $rdf->set_max_item(10); $rdf->set_Options( array( 'textinput' => 'hidden', - 'sitelink' => 'http://www.wds66.com', + 'sitelink' => getWernisBaseUrl(), 'refid' => getWernisRefid(), 'reflink' => '/ref.php?refid=', ) @@ -80,7 +80,7 @@ if (isProxyUsed()) { } // END - if } // END - if -$rdf->parse_RDF('http://www.wds66.com/rss.xml'); +$rdf->parse_RDF(getWernisBaseUrl() . '/rss.xml'); // Load template loadTemplate('guest_wernis_news', FALSE, $rdf->finish(TRUE)); diff --git a/inc/modules/member/what-wernis.php b/inc/modules/member/what-wernis.php index b5d5e31cfd..f3b54ec8a2 100644 --- a/inc/modules/member/what-wernis.php +++ b/inc/modules/member/what-wernis.php @@ -117,7 +117,7 @@ if ((!isGetRequestElementSet('do')) || (getRequestElement('do') == 'choose')) { $points = getTotalPoints(getMemberId()) - getPointsRegister(); // Is there a percentage or fixed fee? - $points = WERNIS_TAKE_FEE($points, 'payout'); + $points = calculateWernisFee($points, 'payout'); // Is this enougth for a payout? if ($points < getConfig('wernis_min_payout')) { @@ -172,7 +172,7 @@ if ((isFormSent()) && (isGetRequestElementSet('do'))) { displayMessage('{--MEMBER_WERNIS_WITHDRAW_AMOUNT_SMALLER_MIN--}'); } else { // All is fine here so do the withdraw - $success = WERNIS_EXECUTE_WITHDRAW(postRequestElement('wernis_userid'), hashSha256(postRequestElement('wds66_password')), postRequestElement('amount')); + $success = executeWernisWithdraw(postRequestElement('wernis_userid'), hashSha256(postRequestElement('wds66_password')), postRequestElement('amount')); if ($success === TRUE) { // Add it to this amount initReferralSystem(); @@ -185,9 +185,9 @@ if ((isFormSent()) && (isGetRequestElementSet('do'))) { // All done! displayMessage('{--MEMBER_WERNIS_WITHDRAW_DONE--}'); return; - } elseif ((GET_WERNIS_ERROR_CODE() == 'user_failed') || (GET_WERNIS_ERROR_CODE() == 'own_failed') || (GET_WERNIS_ERROR_CODE() == 'amount_failed')) { + } elseif ((getWernisErrorCode() == 'user_failed') || (getWernisErrorCode() == 'own_failed') || (getWernisErrorCode() == 'amount_failed')) { // Wrong login data - displayMessage(GET_WERNIS_ERROR_MESSAGE()); + displayMessage(getWernisErrorMessage()); } else { // Something went wrong displayMessage('{--MEMBER_WERNIS_WITHDRAW_FAILED--}'); @@ -204,7 +204,7 @@ if ((isFormSent()) && (isGetRequestElementSet('do'))) { displayMessage(sprintf(getMessage('MEMBER_WERNIS_PAYOUT_POINTS_DEPLETED'), bigintval(postRequestElement('amount')), bigintval($points))); } else { // All is fine here so do the withdraw - $success = WERNIS_EXECUTE_PAYOUT(postRequestElement('wernis_userid'), postRequestElement('amount')); + $success = executeWernisPayout(postRequestElement('wernis_userid'), postRequestElement('amount')); if ($success === TRUE) { // Sub points and ignore return status subtractPoints('wernis_payout', getMemberId(), postRequestElement('amount')); @@ -216,9 +216,9 @@ if ((isFormSent()) && (isGetRequestElementSet('do'))) { // All done! displayMessage('{--MEMBER_WERNIS_PAYOUT_DONE--}'); return; - } elseif ((GET_WERNIS_ERROR_CODE() == 'user_failed') || (GET_WERNIS_ERROR_CODE() == 'own_failed') || (GET_WERNIS_ERROR_CODE() == 'amount_failed') || (GET_WERNIS_ERROR_CODE() == 'api_amount_failed')) { + } elseif ((getWernisErrorCode() == 'user_failed') || (getWernisErrorCode() == 'own_failed') || (getWernisErrorCode() == 'amount_failed') || (getWernisErrorCode() == 'api_amount_failed')) { // Wrong login data - displayMessage(GET_WERNIS_ERROR_MESSAGE()); + displayMessage(getWernisErrorMessage()); } else { // Something went wrong displayMessage('{--MEMBER_WERNIS_PAYOUT_FAILED--}'); diff --git a/inc/wrapper-functions.php b/inc/wrapper-functions.php index 135f3d3dc4..e20a4abd21 100644 --- a/inc/wrapper-functions.php +++ b/inc/wrapper-functions.php @@ -3556,5 +3556,27 @@ function ifSubjectHasReferralSuffix ($subject) { return $GLOBALS[__FUNCTION__][$subject]; } +// Converts an API response to an associative array +function convertApiResponseToArray ($responseString, $keyDelimiter, $valueDelimiter) { + // Explode for key delimiter + $keys = explode($keyDelimiter, $responseString); + + // Init returned array and "walk" through all entries + $returned = array(); + foreach ($keys as $keyValue) { + // Explode it + $parts = explode($valueDelimiter, $keyValue); + + // Count must be 2 + assert(count($parts) == 2); + + // Then add both: 0=key, 1=value + $returned[sqlEscapeString($parts[0])] = sqlEscapeString($parts[1]); + } // END - if + + // Return finished array + return $returned; +} + // [EOF] ?> diff --git a/templates/de/html/admin/admin_config_wernis.tpl b/templates/de/html/admin/admin_config_wernis.tpl index 4590b60618..c03b6a841a 100644 --- a/templates/de/html/admin/admin_config_wernis.tpl +++ b/templates/de/html/admin/admin_config_wernis.tpl @@ -30,6 +30,14 @@ + + + {--ADMIN_CONFIG_WERNIS_BASE_URL--} + + + + + {--ADMIN_CONFIG_WERNIS_REFID--} diff --git a/templates/de/html/guest/guest_confirm_link.tpl b/templates/de/html/guest/guest_confirm_link.tpl index 4f1407d618..0238402eb1 100644 --- a/templates/de/html/guest/guest_confirm_link.tpl +++ b/templates/de/html/guest/guest_confirm_link.tpl @@ -1,28 +1,31 @@
{%form,formMethodPost=modules.php?module=index&what=confirm%} - - - - - - - - - - - - - + + + + + + + + + + + + + + + +
- {--GUEST_REQUEST_CONFIRM_LINK_TITLE--} -
- {--GUEST_CONFIRM_LINK_NOTICE--} -
{--GUEST_ENTER_EMAIL--}: - -
+ {--GUEST_REQUEST_CONFIRM_LINK_TITLE--} +
+ {--GUEST_CONFIRM_LINK_NOTICE--} +
{--GUEST_ENTER_EMAIL--}: + +
{%form_close%}
diff --git a/templates/de/html/guest/guest_stats_table.tpl b/templates/de/html/guest/guest_stats_table.tpl index 5b00eca011..64ce2dd561 100644 --- a/templates/de/html/guest/guest_stats_table.tpl +++ b/templates/de/html/guest/guest_stats_table.tpl @@ -1,11 +1,13 @@
- +
+ $content[rows] +
{--GUEST_TOPTEN_STATS--}