0) {
// Check for code
$code = generateRandomCode(getTransferCode(), postRequestElement('code_chk'), getMemberId(), $content['max_transferable']);
$valid_code = ($code == postRequestElement('code'));
} else {
// Zero length (= disabled) is always valid!
$valid_code = true;
}
// Test password
$valid_pass = ($pass == generateHash(postRequestElement('password'), $pass));
// Test transfer amount
$valid_amount = ((isPostRequestElementSet('points')) && (postRequestElement('points') <= $content['max_transferable']));
// Test reason for transfer
$valid_reason = (isPostRequestElementSet('reason'));
// Test if a recipient is selected
$valid_recipient = isValidUserId(postRequestElement('to_userid'));
// Re-check receivers and own personal data
$result = SQL_QUERY_ESC("SELECT `userid`,`gender`,`surname`,`family`,`email` FROM `{?_MYSQL_PREFIX?}_user_data` WHERE `userid` IN ('%s','%s') AND `status`='CONFIRMED' LIMIT 2",
array(
getMemberId(),
bigintval(postRequestElement('to_userid'))
), __FILE__, __LINE__);
// Do we have two entries?
$valid_data = (SQL_NUMROWS($result) == 2);
// Final check if all is fine
if ($valid_code && $valid_data && $valid_pass && $valid_amount && $valid_reason && $valid_recipient) {
// Let's start the transfer and load user data
$content['sender'] = SQL_FETCHARRAY($result);
$content['recipient'] = SQL_FETCHARRAY($result);
// Is the nickname extension not installed?
if (!isExtensionActive('nickname')) {
// Fix empty nicknames
$content['sender']['nickname'] = '';
$content['recipient']['nickname'] = '';
} // END - if
// Prepare variables for testing
$TEST_NICK_SENDER = $content['sender']['nickname'];
$TEST_NICK_REC = $content['recipient']['nickname'];
// Default is userids for subject line
$SENDER = getMemberId();
$RECIPIENT = bigintval(postRequestElement('to_userid'));
// If nickname is installed we can set the nickname
// @TODO Rewrite this to a filter
if (isExtensionActive('nickname')) {
if (($TEST_NICK_SENDER != getMemberId()) && (!empty($TEST_NICK_SENDER))) {
$SENDER = $content['sender']['nickname'];
} // END - if
if (($TEST_NICK_REC != postRequestElement('to_userid')) && (!empty($TEST_NICK_REC))) {
$RECIPIENT = $content['recipient']['nickname'];
} // END - if
} // END - if
// Remember transfer reason
$content['reason'] = postRequestElement('reason');
// Generate tranafer id
$content['trans_id'] = bigintval(generateRandomCode('10', mt_rand(0, 99999), getMemberId(), postRequestElement('reason')));
// Add entries to both tables
SQL_QUERY_ESC("INSERT INTO `{?_MYSQL_PREFIX?}_user_transfers_in` (`userid`,`from_userid`,`points`,`reason`,`time_trans`,`trans_id`) VALUES (%s,%s,%s,'%s', UNIX_TIMESTAMP(),%s)",
array(
bigintval(postRequestElement('to_userid')),
getMemberId(),
bigintval(postRequestElement('points')),
postRequestElement('reason'),
$content['trans_id']
), __FILE__, __LINE__);
SQL_QUERY_ESC("INSERT INTO `{?_MYSQL_PREFIX?}_user_transfers_out` (`userid`,`to_userid`,`points`,`reason`,`time_trans`,`trans_id`) VALUES (%s,%s,%s,'%s', UNIX_TIMESTAMP(),%s)",
array(
getMemberId(),
bigintval(postRequestElement('to_userid')),
bigintval(postRequestElement('points')),
postRequestElement('reason'),
$content['trans_id']
), __FILE__, __LINE__);
// Add points to account *directly* ...
initReferralSystem();
addPointsThroughReferralSystem('transfer', bigintval(postRequestElement('to_userid')), bigintval(postRequestElement('points')));
// ... and add it to current user's used points and ignore return status
subtractPoints('transfer', getMemberId(), postRequestElement('points'));
// First send email to recipient
$message = loadEmailTemplate('member_transfer_recipient', $content, postRequestElement('to_userid'));
sendEmail($content['recipient']['userid'], '{--TRANSFER_MEMBER_RECIPIENT_SUBJECT--}' . ': ' . $SENDER, $message);
// Second send email to sender
$message = loadEmailTemplate('member_transfer_sender', $content, getMemberId());
sendEmail($content['sender']['userid'], '{--TRANSFER_MEMBER_SENDER_SUBJECT--}' . ': ' . $RECIPIENT, $message);
// At last send admin mail(s)
$adminSubject = sprintf("%s (%s->%s)", '{--TRANSFER_ADMIN_SUBJECT--}', $SENDER, $RECIPIENT);
sendAdminNotification($adminSubject, 'admin_transfer_points', $content);
// Transfer is completed
displayMessage('
');
} elseif ($valid_code === false) {
// Invalid Touring code!
loadTemplate('admin_settings_unsaved', false, '{--TRANSFER_INVALID_CODE--}');
unsetPostRequestElement('ok');
} elseif ($valid_pass === false) {
// Wrong password entered
loadTemplate('admin_settings_unsaved', false, '{--TRANSFER_INVALID_PASSWORD--}');
unsetPostRequestElement('ok');
} elseif ($valid_amount === false) {
// Too much points entered
loadTemplate('admin_settings_unsaved', false, '{--TRANSFER_INVALID_POINTS--}');
unsetPostRequestElement('ok');
} elseif ($valid_reason === false) {
// No transfer reason entered
loadTemplate('admin_settings_unsaved', false, '{--TRANSFER_INVALID_REASON--}');
unsetPostRequestElement('ok');
} elseif ($valid_recipient === false) {
// No recipient selected
loadTemplate('admin_settings_unsaved', false, '{--TRANSFER_INVALID_RECIPIENT--}');
unsetPostRequestElement('ok');
} elseif ($valid_data === false) {
// No recipient/sender selected
loadTemplate('admin_settings_unsaved', false, '{--TRANSFER_INVALID_DATA--}');
unsetPostRequestElement('ok');
}
// Free result
SQL_FREERESULT($result);
} // END - if
if (!isFormSent()) {
// Load member list
$result = SQL_QUERY_ESC("SELECT `userid` FROM `{?_MYSQL_PREFIX?}_user_data` WHERE `status`='CONFIRMED' AND `opt_in`='Y' AND `userid` != '%s' ORDER BY `userid` ASC",
array(getMemberId()), __FILE__, __LINE__);
if (!SQL_HASZERONUMS($result)) {
// Load list
$OUT = '';
$content['to_disabled'] = '';
// Free memory
SQL_FREERESULT($result);
} else {
// No one else is opt-in
$OUT = displayMessage('{--TRANSFER_NO_ONE_ELSE_OPT_IN--}', true);
$content['to_disabled'] = ' disabled="disabled"';
}
// Transfer output to constant for the template
$content['userid_selection'] = $OUT;
// Generate Code
if (getTransferCode() > 0) {
// Generate random number
$rand = mt_rand(0, 99999);
// Generate CAPTCHA code
$code = generateRandomCode(getTransferCode(), $rand, getMemberId(), $content['max_transferable']);
// Generate image (HTML code)
$img = generateImageOrCode($code, false);
// Add all and hidden field
$content['captcha_code'] = ' ' . $img;
} else {
$code = '00000';
$content['captcha_code'] = displayMessage('{--TRANSFER_NO_CODE--}', true);
}
// Init points/reason
$content['points'] = '';
$content['reason'] = '';
// Transfer maybe already entered valued'
if (isPostRequestElementSet('ok')) {
// Get values from form
$content['points'] = postRequestElement('points');
$content['reason'] = postRequestElement('reason');
} // END - if
// Output form
loadTemplate('member_transfer_new', false, $content);
} // END - if
break;
case 'list_in': // List only incoming transactions
case 'list_out': // List only outgoing transactions
// As you can see I put list_in and list_out together. I now do a switch() again on it for the right SQL command
$nothingMessage = '';
switch ($mode) {
case 'list_in':
$sql = 'SELECT `trans_id`,`from_userid` AS party_userid,`points`,`reason`,`time_trans` FROM `{?_MYSQL_PREFIX?}_user_transfers_in` WHERE `userid`=%s ORDER BY `time_trans` DESC LIMIT {?transfer_max?}';
$nothingMessage = '{--TRANSFER_NO_INCOMING_TRANSFERS--}';
$content['balance'] = '{--TRANSFER_TOTAL_INCOMING--}';
$content['title'] = '{--TRANSFER_LIST_INCOMING--}';
break;
case 'list_out':
$sql = 'SELECT `trans_id`,`to_userid` AS party_userid,`points`,`reason`,`time_trans` FROM `{?_MYSQL_PREFIX?}_user_transfers_out` WHERE `userid`=%s ORDER BY `time_trans` DESC LIMIT {?transfer_max?}';
$nothingMessage = '{--TRANSFER_NO_OUTGOING_TRANSFERS--}';
$content['balance'] = '{--TRANSFER_TOTAL_OUTGOING--}';
$content['title'] = '{--TRANSFER_LIST_OUTGOING--}';
break;
} // END - switch
// Run the SQL command and set total points to zero
$totalPoints = '0';
$result = SQL_QUERY_ESC($sql, array(getMemberId()), __FILE__, __LINE__);
// Do we have entries?
if (!SQL_HASZERONUMS($result)) {
$OUT = '';
while ($content = SQL_FETCHARRAY($result)) {
// Rewrite points, out is subtracted
if ($type == 'OUT') {
$content['points'] = $content['points'] * -1;
} // END - if
// Prepare content for template
$$content['time_trans'] = generateDateTime($content['time_trans'], 3);
// Load row template
$OUT .= loadTemplate('member_transfer_row2', true, $content);
// Add points and switch color
$totalPoints += $content['points'];
} // END - while
// Free memory
SQL_FREERESULT($result);
} else {
// Nothing for in or out
$OUT = '
' . displayMessage($nothingMessage, true) . '
';
}
// ... and add them to a constant for the template
$content['rows'] = $OUT;
// Remeber total amount
$content['total_points'] = $totalPoints;
// Load final template
loadTemplate('member_transfer_list', false, $content);
break;
case 'list_all': // List all transactions
/*
* Fill a temporary table with data from both tables. This is much
* easier to code and unstandable by you as sub-SELECT queries. I know
* this is not the fastest way but it shall be fine for now.
*/
// First of all create the per-user temporary table
$result = SQL_QUERY_ESC("CREATE TEMPORARY TABLE `{?_MYSQL_PREFIX?}_%s_transfers_tmp` (
`trans_id` VARCHAR(12) NOT NULL DEFAULT '',
`party_userid` BIGINT(20) UNSIGNED NOT NULL DEFAULT 0,
`points` BIGINT(20) UNSIGNED NOT NULL DEFAULT 0,
`reason` VARCHAR(255) NOT NULL DEFAULT '',
`time_trans` VARCHAR(10) NOT NULL DEFAULT 0,
`trans_type` ENUM('IN','OUT') NOT NULL DEFAULT 'IN',
INDEX (`party_userid`)
) ENGINE = HEAP COMMENT = 'Temporary transfer table'", array(getMemberId()), __FILE__, __LINE__);
// Let's begin with the incoming list
$result = SQL_QUERY_ESC("SELECT `trans_id`,`from_userid`,`points`,`reason`,`time_trans` FROM `{?_MYSQL_PREFIX?}_user_transfers_in` WHERE `userid`=%s ORDER BY `id` ASC LIMIT {?transfer_max?}",
array(getMemberId()), __FILE__, __LINE__);
while ($content = SQL_FETCHROW($result)) {
$content[] = 'IN';
$content = implode("','", $content);
$res_temp = SQL_QUERY_ESC("INSERT INTO `{?_MYSQL_PREFIX?}_%s_transfers_tmp` (`trans_id`,`party_userid`,`points`,`reason`,`time_trans`,`trans_type`) VALUES ('" . $content . "')", array(getMemberId()), __FILE__, __LINE__);
} // END - while
// Free memory
SQL_FREERESULT($result);
// As the last table transfer data from outgoing table to temporary
$result = SQL_QUERY_ESC("SELECT `trans_id`,`to_userid`,`points`,`reason`,`time_trans` FROM `{?_MYSQL_PREFIX?}_user_transfers_out` WHERE `userid`=%s ORDER BY `id` LIMIT {?transfer_max?}",
array(getMemberId()), __FILE__, __LINE__);
while ($content = SQL_FETCHROW($result)) {
$content[] = 'OUT';
$content = implode("','", $content);
$res_temp = SQL_QUERY_ESC("INSERT INTO `{?_MYSQL_PREFIX?}_%s_transfers_tmp` (`trans_id`,`party_userid`,`points`,`reason`,`time_trans`,`trans_type`) VALUES ('" . $content . "')", array(getMemberId()), __FILE__, __LINE__);
} // END - while
// Free memory
SQL_FREERESULT($result);
// Search for entries
$result = SQL_QUERY_ESC("SELECT `party_userid`,`trans_id`,`points`,`reason`,`time_trans`,`trans_type` FROM `{?_MYSQL_PREFIX?}_%s_transfers_tmp` ORDER BY `time_trans` DESC",
array(getMemberId()), __FILE__, __LINE__);
$total = '0';
if (!SQL_HASZERONUMS($result)) {
// Output rows
$OUT = '';
while ($content = SQL_FETCHARRAY($result)) {
// Rewrite points if OUT
if ($content['trans_type'] == 'OUT') {
$content['points'] = $content['points'] * -1;
} // END - if
// Prepare content for template
$content['time'] = generateDateTime($content['time_trans'], 3);
// Load row template
$OUT .= loadTemplate('member_transfer_row', true, $content);
// Add points and switch color
$total += $content['points'];
} // END - while
} else {
// Nothing for in and out
$OUT = '