2 /************************************************************************
3 * Mailer v0.2.1-FINAL Start: 10/19/2003 *
4 * =================== Last change: 08/12/2004 *
6 * -------------------------------------------------------------------- *
7 * File : what-points.php *
8 * -------------------------------------------------------------------- *
9 * Short description : All your collected points... *
10 * -------------------------------------------------------------------- *
11 * Kurzbeschreibung : Alle Ihrer gesammelten Punkte *
12 * -------------------------------------------------------------------- *
15 * $Tag:: 0.2.1-FINAL $ *
17 * -------------------------------------------------------------------- *
18 * Copyright (c) 2003 - 2009 by Roland Haeder *
19 * Copyright (c) 2009 - 2013 by Mailer Developer Team *
20 * For more information visit: http://mxchange.org *
22 * This program is free software; you can redistribute it and/or modify *
23 * it under the terms of the GNU General Public License as published by *
24 * the Free Software Foundation; either version 2 of the License, or *
25 * (at your option) any later version. *
27 * This program is distributed in the hope that it will be useful, *
28 * but WITHOUT ANY WARRANTY; without even the implied warranty of *
29 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the *
30 * GNU General Public License for more details. *
32 * You should have received a copy of the GNU General Public License *
33 * along with this program; if not, write to the Free Software *
34 * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, *
36 ************************************************************************/
38 // Some security stuff...
39 if (!defined('__SECURITY')) {
43 // Sets a status message and code
44 function WERNIS_STATUS_MESSAGE ($message, $status) {
45 $GLOBALS['wernis_data']['message'] = $message;
46 $GLOBALS['wernis_data']['status'] = $status;
49 // Get the status message
50 function GET_WERNIS_ERROR_MESSAGE () {
51 if (isset($GLOBALS['wernis_data']['message'])) {
53 return $GLOBALS['wernis_data']['message'];
54 } elseif (isset($GLOBALS['wernis_data']['status'])) {
55 // Fall-back to status
56 return '{%message,WERNIS_ERROR_STATUS=' . $GLOBALS['wernis_data']['status'] . '%}';
58 // Something bad happend
59 return '{--WERNIS_UNKNOWN_ERROR--}';
63 // Get the status code
64 function GET_WERNIS_ERROR_CODE () {
65 if (isset($GLOBALS['wernis_data']['status'])) {
67 return $GLOBALS['wernis_data']['status'];
69 // Something bad happend
70 return '{--WERNIS_UNKNOWN_ERROR--}';
74 // Sends out a request to the API and returns it's result
75 function WERNIS_SEND_REQUEST ($scriptName, $requestData = array()) {
76 // Is the requestData an array?
77 if (!is_array($requestData)) {
80 'status' => 'failed_general',
81 'message' => '{--WERNIS_API_REQUEST_DATA_INVALID--}'
85 // Is the API id and MD5 hash there?
86 if ((getWernisApiId() == '') || (getWernisApiMd5() == '')) {
89 'status' => 'failed_general',
90 'message' => '{--WERNIS_API_REQUEST_DATA_MISSING--}'
94 // Add more request data
95 $requestData['api_id'] = getWernisApiId();
96 $requestData['api_key'] = getWernisApiMd5();
98 // Is a purpose there?
99 if (!empty($requestData['purpose'])) {
101 eval('$purpose = "' . doFinalCompilation($requestData['purpose'], FALSE) . '";');
103 // Prepare the purpose, it needs encoding
104 $requestData['purpose'] = encodeString($purpose);
107 // Construct the request string
108 $requestString = getWernisApiUrl() . $scriptName;
110 // Get the raw response from the lower function
111 $response = sendHttpPostRequest($requestString, $requestData);
113 // Check the response header if all is fine
114 if (!isHttpStatusOkay($response[0])) {
115 // Something bad happend... :(
117 'status' => 'request_error',
118 'message' => '{%message,WERNIS_API_REQUEST_ERROR=' . $response[0] . '%}'
122 // All (maybe) fine so remove the response header from server
123 $responseLine = '*INVALID*';
124 for ($idx = (count($response) - 1); $idx > 1; $idx--) {
125 $line = trim($response[$idx]);
127 $responseLine = $line;
132 // Is the response leaded by a & symbol?
133 if (substr($responseLine, 0, 1) != '&') {
134 // Something badly happened on server-side
136 'status' => 'request_problem',
137 'message' => sprintf(getMessage('WERNIS_API_REQUEST_PROBLEM'), $response[0], secureString($responseLine))
141 // Remove the leading & (which can be used in Flash)
142 $responseLine = substr($responseLine, 1);
144 // Bring back the response
145 $data = explode('=', $responseLine);
147 // Default return array (should not stay empty)
150 // We use only the first two entries (which shall be fine)
151 if ($data[0] === 'error') {
152 // The request has failed... :(
154 case '404': // Invalid API id
155 case 'AUTH': // Authorization has failed
157 'status' => 'auth_failed',
158 'message' => '{--WERNIS_API_REQUEST_FAILED_AUTH--}'
162 case 'LOCKED': // User account is locked!
163 case 'PASS': // Bad passphrase entered
164 case 'USER': // Missing account or invalid password
166 'status' => 'user_failed',
167 'message' => '{--WERNIS_API_REQUEST_FAILED_USER--}'
171 case 'OWN': // Transfer to own account
173 'status' => 'own_failed',
174 'message' => '{--WERNIS_API_REQUEST_FAILED_OWN--}'
178 case 'AMOUNT': // Amount is depleted
180 'status' => 'amount_failed',
181 'message' => '{--WERNIS_API_REQUEST_FAILED_AMOUNT--}'
185 case 'AMOUNT-SEND': // API amount is depleted
187 'status' => 'api_amount_failed',
188 'message' => '{--WERNIS_API_REQUEST_FAILED_API_AMOUNT--}'
192 default: // Unknown error (maybe new?)
193 logDebugMessage(__FUNCTION__, __LINE__, sprintf('Unknown error %s from WDS66 API received.', $data[1]));
195 'status' => 'request_failed',
196 'message' => '{%message,WERNIS_API_REQUEST_FAILED=' . $data[1] . '%}'
204 'response' => $responseLine
212 // Tests the function by calling balance.php on the API
213 function WERNIS_TEST_API () {
217 // Result is always failed
220 // Prepare the request data
221 $requestData = array(
222 't_uid' => getWernisRefid(),
223 't_md5' => getWernisPassMd5()
226 // Return the result from the lower functions
227 $return = WERNIS_SEND_REQUEST('balance.php', $requestData);
229 // Did it went smoothly?
230 if ($return['status'] == 'OK') {
234 // Status failure text
235 WERNIS_STATUS_MESSAGE($return['message'], $return['status']);
242 // Widthdraw this amount
243 function WERNIS_EXECUTE_WITHDRAW ($wdsId, $userMd5, $amount) {
244 // Is the sponsor extension installed?
245 if (!isWernisWithdrawActive()) {
246 if (!isExtensionActive('sponsor')) {
249 } elseif (!isSponsor()) {
250 // No sponsor, not allowed to withdraw!
255 // Default is failed attempt
258 // Prepare the request data
259 $requestData = array(
260 'sub_request' => 'receive',
261 't_uid' => bigintval($wdsId),
263 'r_uid' => getWernisRefid(),
264 'amount' => bigintval($amount),
265 'purpose' => getMaskedMessage('WERNIS_API_PURPOSE_WITHDRAW', getMemberId())
268 // Return the result from the lower functions
269 $return = WERNIS_SEND_REQUEST('book.php', $requestData);
271 if ($return['status'] == 'OK') {
276 WERNIS_LOG_TRANSFER($wdsId, $amount, 'WITHDRAW');
278 // Status failure text
279 WERNIS_STATUS_MESSAGE($return['message'], $return['status']);
282 WERNIS_LOG_TRANSFER($wdsId, $amount, 'FAILED', $return['message'], $return['status']);
290 // Payout this amount
291 function WERNIS_EXECUTE_PAYOUT ($wdsId, $amount) {
292 // Default is failed attempt
295 // Prepare the request data
296 $requestData = array(
297 'sub_request' => 'send',
298 't_uid' => getWernisRefid(),
299 't_md5' => getWernisPassMd5(),
300 'r_uid' => bigintval($wdsId),
301 'amount' => bigintval($amount),
302 'purpose' => getMaskedMessage('WERNIS_API_PURPOSE_PAYOUT', getMemberId())
305 // Return the result from the lower functions
306 $return = WERNIS_SEND_REQUEST('book.php', $requestData);
308 if ($return['status'] == 'OK') {
313 WERNIS_LOG_TRANSFER($wdsId, $amount, 'PAYOUT');
315 // Status failure text
316 WERNIS_STATUS_MESSAGE($return['message'], $return['status']);
319 WERNIS_LOG_TRANSFER($wdsId, $amount, 'FAILED', $return['message'], $return['status']);
326 // Translate the status IN/OUT
327 function translateWernisTransferStatus ($status) {
328 // Default status is unknown
329 $return = '{%message,WERNIS_STATUS_UNKNWOWN=' . $status . '%}';
331 // Construct message id
332 $messageId = 'WERNIS_STATUS_' . $status;
335 if (isMessageIdValid($messageId)) {
336 // Then use it as message string
337 $return = '{--' . $messageId . '--}';
345 function WERNIS_LOG_TRANSFER ($wdsId, $amount, $type = 'FAILED', $message = '', $status = '') {
346 // Register this wernis movement
347 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')",
355 ), __FUNCTION__, __LINE__);
358 // Take fees and factor
359 function WERNIS_TAKE_FEE ($points, $mode) {
360 // Payout or withdraw are allowed modes!
361 //* DEBUG: */ debugOutput('mode=' . $mode . ',points=' . $points);
362 if (!in_array($mode, array('payout', 'withdraw'))) {
363 // Log error and abort
364 logDebugMessage(__FUNCTION__, __LINE__, 'userid=' . getMemberId() . ',mode=' . $mode . ',points=' . $points . ' - unknown mode detected.');
368 // Is there a percentage or fixed fee?
369 if (getConfig('wernis_' . $mode . '_fee_percent') > 0) {
371 $points -= $points * getConfig('wernis_'.$mode.'_fee_percent') / 100;
372 } elseif (getConfig('wernis_' . $mode . '_fee_fix') > 0) {
374 $points -= getConfig('wernis_' . $mode . '_fee_fix');
377 // Divide/multiply the factor
378 if ($mode == 'payout') {
380 $points = $points / getWernisPayoutFactor();
382 // Multiply for withdraw
383 $points = $points * getWernisWithdrawFactor();
387 //* DEBUG: */ debugOutput('mode=' . $mode . ',points=' . $points);
391 // Add withdraw fees and factor
392 function WERNIS_ADD_WITHDRAW_FEE ($points) {
393 // Is there a percentage or fixed fee?
394 if (getWernisWithdrawFeePercent() > 0) {
396 $points += $points * getWernisWithdrawFeePercent() / 100;
397 } elseif (getWernisWithdrawFeeFix() > 0) {
399 $points += getWernisWithdrawFeeFix();
406 //-----------------------------------------------------------------------------
408 //-----------------------------------------------------------------------------
410 // Wrapper function for 'wernis_refid'
411 function getWernisRefid () {
413 if (!isset($GLOBALS[__FUNCTION__])) {
415 $GLOBALS[__FUNCTION__] = getConfig('wernis_refid');
419 return $GLOBALS[__FUNCTION__];
422 // Wrapper function for 'wernis_pass_md5'
423 function getWernisPassMd5 () {
425 if (!isset($GLOBALS[__FUNCTION__])) {
427 $GLOBALS[__FUNCTION__] = getConfig('wernis_pass_md5');
431 return $GLOBALS[__FUNCTION__];
434 // Wrapper function for 'wernis_api_id'
435 function getWernisApiId () {
437 if (!isset($GLOBALS[__FUNCTION__])) {
439 $GLOBALS[__FUNCTION__] = getConfig('wernis_api_id');
443 return $GLOBALS[__FUNCTION__];
446 // Wrapper function for 'wernis_api_md5'
447 function getWernisApiMd5 () {
449 if (!isset($GLOBALS[__FUNCTION__])) {
451 $GLOBALS[__FUNCTION__] = getConfig('wernis_api_md5');
455 return $GLOBALS[__FUNCTION__];
458 // Wrapper function for 'wernis_api_url'
459 function getWernisApiUrl () {
461 if (!isset($GLOBALS[__FUNCTION__])) {
463 $GLOBALS[__FUNCTION__] = getConfig('wernis_api_url');
467 return $GLOBALS[__FUNCTION__];
470 // Wrapper function for 'wernis_withdraw_active'
471 function getWernisWithdrawActive () {
473 if (!isset($GLOBALS[__FUNCTION__])) {
475 $GLOBALS[__FUNCTION__] = getConfig('wernis_withdraw_active');
479 return $GLOBALS[__FUNCTION__];
482 // Wrapper function for 'wernis_payout_active'
483 function getWernisPayoutActive () {
485 if (!isset($GLOBALS[__FUNCTION__])) {
487 $GLOBALS[__FUNCTION__] = getConfig('wernis_payout_active');
491 return $GLOBALS[__FUNCTION__];
494 // Wrapper function for 'wernis_withdraw_active'
495 function isWernisWithdrawActive () {
497 if (!isset($GLOBALS[__FUNCTION__])) {
499 $GLOBALS[__FUNCTION__] = (getConfig('wernis_withdraw_active') == 'Y');
503 return $GLOBALS[__FUNCTION__];
506 // Wrapper function for 'wernis_payout_active'
507 function isWernisPayoutActive () {
509 if (!isset($GLOBALS[__FUNCTION__])) {
511 $GLOBALS[__FUNCTION__] = (getConfig('wernis_payout_active') == 'Y');
515 return $GLOBALS[__FUNCTION__];
518 // Wrapper function for 'wernis_withdraw_factor'
519 function getWernisWithdrawFactor () {
521 if (!isset($GLOBALS[__FUNCTION__])) {
523 $GLOBALS[__FUNCTION__] = getConfig('wernis_withdraw_factor');
527 return $GLOBALS[__FUNCTION__];
530 // Wrapper function for 'wernis_payout_factor'
531 function getWernisPayoutFactor () {
533 if (!isset($GLOBALS[__FUNCTION__])) {
535 $GLOBALS[__FUNCTION__] = getConfig('wernis_payout_factor');
539 return $GLOBALS[__FUNCTION__];
542 // Wrapper function for 'wernis_withdraw_fee_percent'
543 function getWernisWithdrawFeePercent () {
545 if (!isset($GLOBALS[__FUNCTION__])) {
547 $GLOBALS[__FUNCTION__] = getConfig('wernis_withdraw_fee_percent');
551 return $GLOBALS[__FUNCTION__];
554 // Wrapper function for 'wernis_withdraw_fee_fix'
555 function getWernisWithdrawFeeFix () {
557 if (!isset($GLOBALS[__FUNCTION__])) {
559 $GLOBALS[__FUNCTION__] = getConfig('wernis_withdraw_fee_fix');
563 return $GLOBALS[__FUNCTION__];
566 // Wrapper function for 'wernis_payout_fee_percent'
567 function getWernisPayoutFeePercent () {
569 if (!isset($GLOBALS[__FUNCTION__])) {
571 $GLOBALS[__FUNCTION__] = getConfig('wernis_payout_fee_percent');
575 return $GLOBALS[__FUNCTION__];
578 // Wrapper function for 'wernis_payout_fee_fix'
579 function getWernisPayoutFeeFix () {
581 if (!isset($GLOBALS[__FUNCTION__])) {
583 $GLOBALS[__FUNCTION__] = getConfig('wernis_payout_fee_fix');
587 return $GLOBALS[__FUNCTION__];
590 // Wrapper function for 'wernis_min_payout'
591 function getWernisMinPayout () {
593 if (!isset($GLOBALS[__FUNCTION__])) {
595 $GLOBALS[__FUNCTION__] = getConfig('wernis_min_payout');
599 return $GLOBALS[__FUNCTION__];
602 // Wrapper function for 'wernis_min_withdraw'
603 function getWernisMinWithdraw () {
605 if (!isset($GLOBALS[__FUNCTION__])) {
607 $GLOBALS[__FUNCTION__] = getConfig('wernis_min_withdraw');
611 return $GLOBALS[__FUNCTION__];