[IMPROVED] Auto/Manual Payout Disabled
This will re-add the ability to disable auto or manual payouts. Option to disable the entire cronjob is left intact. Fixes #1034 when merged.
This commit is contained in:
parent
f14fd17b2b
commit
0d6ee6d821
@ -35,130 +35,137 @@ if ($bitcoin->can_connect() !== true) {
|
|||||||
$monitoring->endCronjob($cron_name, 'E0006', 1, true);
|
$monitoring->endCronjob($cron_name, 'E0006', 1, true);
|
||||||
}
|
}
|
||||||
|
|
||||||
// Fetch outstanding payout requests
|
if ($setting->getValue('disable_manual_payouts') != 1) {
|
||||||
$aPayouts = $oPayout->getUnprocessedPayouts();
|
// Fetch outstanding payout requests
|
||||||
if (count($aPayouts > 0)) $log->logDebug(" found " . count($aPayouts) . " queued manual payout requests");
|
$aPayouts = $oPayout->getUnprocessedPayouts();
|
||||||
|
if (count($aPayouts > 0)) $log->logDebug(" found " . count($aPayouts) . " queued manual payout requests");
|
||||||
|
|
||||||
if (count($aPayouts) > 0) {
|
if (count($aPayouts) > 0) {
|
||||||
$log->logInfo("\tAccount ID\tUsername\tBalance\t\tCoin Address");
|
$log->logInfo("\tAccount ID\tUsername\tBalance\t\tCoin Address");
|
||||||
foreach ($aPayouts as $aData) {
|
foreach ($aPayouts as $aData) {
|
||||||
$aBalance = $transaction->getBalance($aData['account_id']);
|
$aBalance = $transaction->getBalance($aData['account_id']);
|
||||||
$dBalance = $aBalance['confirmed'];
|
$dBalance = $aBalance['confirmed'];
|
||||||
$aData['coin_address'] = $user->getCoinAddress($aData['account_id']);
|
$aData['coin_address'] = $user->getCoinAddress($aData['account_id']);
|
||||||
$aData['username'] = $user->getUserName($aData['account_id']);
|
$aData['username'] = $user->getUserName($aData['account_id']);
|
||||||
if ($dBalance > $config['txfee']) {
|
if ($dBalance > $config['txfee']) {
|
||||||
// To ensure we don't run this transaction again, lets mark it completed
|
// To ensure we don't run this transaction again, lets mark it completed
|
||||||
if (!$oPayout->setProcessed($aData['id'])) {
|
if (!$oPayout->setProcessed($aData['id'])) {
|
||||||
$log->logFatal('unable to mark transactions ' . $aData['id'] . ' as processed.');
|
$log->logFatal('unable to mark transactions ' . $aData['id'] . ' as processed.');
|
||||||
$monitoring->endCronjob($cron_name, 'E0010', 1, true);
|
$monitoring->endCronjob($cron_name, 'E0010', 1, true);
|
||||||
}
|
}
|
||||||
|
|
||||||
$log->logInfo("\t" . $aData['account_id'] . "\t\t" . $aData['username'] . "\t" . $dBalance . "\t\t" . $aData['coin_address']);
|
$log->logInfo("\t" . $aData['account_id'] . "\t\t" . $aData['username'] . "\t" . $dBalance . "\t\t" . $aData['coin_address']);
|
||||||
try {
|
try {
|
||||||
$aStatus = $bitcoin->validateaddress($aData['coin_address']);
|
$aStatus = $bitcoin->validateaddress($aData['coin_address']);
|
||||||
if (!$aStatus['isvalid']) {
|
if (!$aStatus['isvalid']) {
|
||||||
|
$log->logError('Failed to verify this users coin address, skipping payout');
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
} catch (BitcoinClientException $e) {
|
||||||
$log->logError('Failed to verify this users coin address, skipping payout');
|
$log->logError('Failed to verify this users coin address, skipping payout');
|
||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
} catch (BitcoinClientException $e) {
|
try {
|
||||||
$log->logError('Failed to verify this users coin address, skipping payout');
|
$txid = $bitcoin->sendtoaddress($aData['coin_address'], $dBalance - $config['txfee']);
|
||||||
continue;
|
} catch (BitcoinClientException $e) {
|
||||||
}
|
$log->logError('Failed to send requested balance to coin address, please check payout process');
|
||||||
try {
|
|
||||||
$txid = $bitcoin->sendtoaddress($aData['coin_address'], $dBalance - $config['txfee']);
|
|
||||||
} catch (BitcoinClientException $e) {
|
|
||||||
$log->logError('Failed to send requested balance to coin address, please check payout process');
|
|
||||||
continue;
|
|
||||||
}
|
|
||||||
|
|
||||||
if ($transaction->addTransaction($aData['account_id'], $dBalance - $config['txfee'], 'Debit_MP', NULL, $aData['coin_address'], $txid) && $transaction->addTransaction($aData['account_id'], $config['txfee'], 'TXFee', NULL, $aData['coin_address'])) {
|
|
||||||
// Mark all older transactions as archived
|
|
||||||
if (!$transaction->setArchived($aData['account_id'], $transaction->insert_id))
|
|
||||||
$log->logError('Failed to mark transactions for #' . $aData['account_id'] . ' prior to #' . $transaction->insert_id . ' as archived');
|
|
||||||
// Notify user via mail
|
|
||||||
$aMailData['email'] = $user->getUserEmail($user->getUserName($aData['account_id']));
|
|
||||||
$aMailData['subject'] = 'Manual Payout Completed';
|
|
||||||
$aMailData['amount'] = $dBalance;
|
|
||||||
$aMailData['payout_id'] = $aData['id'];
|
|
||||||
if (!$notification->sendNotification($aData['account_id'], 'manual_payout', $aMailData))
|
|
||||||
$log->logError('Failed to send notification email to users address: ' . $aMailData['email']);
|
|
||||||
// Recheck the users balance to make sure it is now 0
|
|
||||||
$aBalance = $transaction->getBalance($aData['account_id']);
|
|
||||||
if ($aBalance['confirmed'] > 0) {
|
|
||||||
$log->logFatal('User has a remaining balance of ' . $aBalance['confirmed'] . ' after a successful payout!');
|
|
||||||
$monitoring->endCronjob($cron_name, 'E0065', 1, true);
|
|
||||||
}
|
|
||||||
} else {
|
|
||||||
$log->logFatal('Failed to add new Debit_MP transaction in database for user ' . $user->getUserName($aData['account_id']));
|
|
||||||
$monitoring->endCronjob($cron_name, 'E0064', 1, true);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
// Fetch all users with setup AP
|
|
||||||
$users = $user->getAllAutoPayout();
|
|
||||||
if (count($users) > 0) $log->logDebug(" found " . count($users) . " queued payout(s)");
|
|
||||||
|
|
||||||
// Go through users and run transactions
|
|
||||||
if (! empty($users)) {
|
|
||||||
$log->logInfo("\tUserID\tUsername\tBalance\tThreshold\tAddress");
|
|
||||||
|
|
||||||
foreach ($users as $aUserData) {
|
|
||||||
$aBalance = $transaction->getBalance($aUserData['id']);
|
|
||||||
$dBalance = $aBalance['confirmed'];
|
|
||||||
$log->logInfo("\t" . $aUserData['id'] . "\t" . $aUserData['username'] . "\t" . $dBalance . "\t" . $aUserData['ap_threshold'] . "\t\t" . $aUserData['coin_address']);
|
|
||||||
|
|
||||||
// Only run if balance meets threshold and can pay the potential transaction fee
|
|
||||||
if ($dBalance > $aUserData['ap_threshold'] && $dBalance > $config['txfee']) {
|
|
||||||
// Validate address against RPC
|
|
||||||
try {
|
|
||||||
$aStatus = $bitcoin->validateaddress($aUserData['coin_address']);
|
|
||||||
if (!$aStatus['isvalid']) {
|
|
||||||
$log->logError('Failed to verify this users coin address, skipping payout');
|
|
||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
} catch (BitcoinClientException $e) {
|
|
||||||
$log->logError('Failed to verifu this users coin address, skipping payout');
|
|
||||||
continue;
|
|
||||||
}
|
|
||||||
|
|
||||||
// Send balance, fees are reduced later by RPC Server
|
if ($transaction->addTransaction($aData['account_id'], $dBalance - $config['txfee'], 'Debit_MP', NULL, $aData['coin_address'], $txid) && $transaction->addTransaction($aData['account_id'], $config['txfee'], 'TXFee', NULL, $aData['coin_address'])) {
|
||||||
try {
|
// Mark all older transactions as archived
|
||||||
$txid = $bitcoin->sendtoaddress($aUserData['coin_address'], $dBalance - $config['txfee']);
|
if (!$transaction->setArchived($aData['account_id'], $transaction->insert_id))
|
||||||
} catch (BitcoinClientException $e) {
|
$log->logError('Failed to mark transactions for #' . $aData['account_id'] . ' prior to #' . $transaction->insert_id . ' as archived');
|
||||||
$log->logError('Failed to send requested balance to coin address, please check payout process');
|
// Notify user via mail
|
||||||
continue;
|
$aMailData['email'] = $user->getUserEmail($user->getUserName($aData['account_id']));
|
||||||
}
|
$aMailData['subject'] = 'Manual Payout Completed';
|
||||||
|
$aMailData['amount'] = $dBalance;
|
||||||
// Create transaction record
|
$aMailData['payout_id'] = $aData['id'];
|
||||||
if ($transaction->addTransaction($aUserData['id'], $dBalance - $config['txfee'], 'Debit_AP', NULL, $aUserData['coin_address'], $txid) && $transaction->addTransaction($aUserData['id'], $config['txfee'], 'TXFee', NULL, $aUserData['coin_address'])) {
|
if (!$notification->sendNotification($aData['account_id'], 'manual_payout', $aMailData))
|
||||||
// Mark all older transactions as archived
|
$log->logError('Failed to send notification email to users address: ' . $aMailData['email']);
|
||||||
if (!$transaction->setArchived($aUserData['id'], $transaction->insert_id))
|
// Recheck the users balance to make sure it is now 0
|
||||||
$log->logError('Failed to mark transactions for user #' . $aUserData['id'] . ' prior to #' . $transaction->insert_id . ' as archived');
|
$aBalance = $transaction->getBalance($aData['account_id']);
|
||||||
// Notify user via mail
|
if ($aBalance['confirmed'] > 0) {
|
||||||
$aMailData['email'] = $user->getUserEmail($user->getUserName($aUserData['id']));
|
$log->logFatal('User has a remaining balance of ' . $aBalance['confirmed'] . ' after a successful payout!');
|
||||||
$aMailData['subject'] = 'Auto Payout Completed';
|
$monitoring->endCronjob($cron_name, 'E0065', 1, true);
|
||||||
$aMailData['amount'] = $dBalance;
|
}
|
||||||
if (!$notification->sendNotification($aUserData['id'], 'auto_payout', $aMailData))
|
} else {
|
||||||
$log->logError('Failed to send notification email to users address: ' . $aMailData['email']);
|
$log->logFatal('Failed to add new Debit_MP transaction in database for user ' . $user->getUserName($aData['account_id']));
|
||||||
// Recheck the users balance to make sure it is now 0
|
$monitoring->endCronjob($cron_name, 'E0064', 1, true);
|
||||||
$aBalance = $transaction->getBalance($aUserData['id']);
|
|
||||||
if ($aBalance['confirmed'] > 0) {
|
|
||||||
$log->logFatal('User has a remaining balance of ' . $aBalance['confirmed'] . ' after a successful payout!');
|
|
||||||
$monitoring->endCronjob($cron_name, 'E0065', 1, true);
|
|
||||||
}
|
}
|
||||||
} else {
|
|
||||||
$log->logFatal('Failed to add new Debit_AP transaction in database for user ' . $user->getUserName($aUserData['id']));
|
|
||||||
$monitoring->endCronjob($cron_name, 'E0064', 1, true);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
$log->logDebug(" no user has configured their AP > 0");
|
$log->logDebug("Manual payouts are disabled via admin panel");
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if ($setting->getValue('disable_auto_payouts') != 1) {
|
||||||
|
// Fetch all users with setup AP
|
||||||
|
$users = $user->getAllAutoPayout();
|
||||||
|
if (count($users) > 0) $log->logDebug(" found " . count($users) . " queued payout(s)");
|
||||||
|
|
||||||
|
// Go through users and run transactions
|
||||||
|
if (! empty($users)) {
|
||||||
|
$log->logInfo("\tUserID\tUsername\tBalance\tThreshold\tAddress");
|
||||||
|
|
||||||
|
foreach ($users as $aUserData) {
|
||||||
|
$aBalance = $transaction->getBalance($aUserData['id']);
|
||||||
|
$dBalance = $aBalance['confirmed'];
|
||||||
|
$log->logInfo("\t" . $aUserData['id'] . "\t" . $aUserData['username'] . "\t" . $dBalance . "\t" . $aUserData['ap_threshold'] . "\t\t" . $aUserData['coin_address']);
|
||||||
|
|
||||||
|
// Only run if balance meets threshold and can pay the potential transaction fee
|
||||||
|
if ($dBalance > $aUserData['ap_threshold'] && $dBalance > $config['txfee']) {
|
||||||
|
// Validate address against RPC
|
||||||
|
try {
|
||||||
|
$aStatus = $bitcoin->validateaddress($aUserData['coin_address']);
|
||||||
|
if (!$aStatus['isvalid']) {
|
||||||
|
$log->logError('Failed to verify this users coin address, skipping payout');
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
} catch (BitcoinClientException $e) {
|
||||||
|
$log->logError('Failed to verifu this users coin address, skipping payout');
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
|
||||||
|
// Send balance, fees are reduced later by RPC Server
|
||||||
|
try {
|
||||||
|
$txid = $bitcoin->sendtoaddress($aUserData['coin_address'], $dBalance - $config['txfee']);
|
||||||
|
} catch (BitcoinClientException $e) {
|
||||||
|
$log->logError('Failed to send requested balance to coin address, please check payout process');
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
|
||||||
|
// Create transaction record
|
||||||
|
if ($transaction->addTransaction($aUserData['id'], $dBalance - $config['txfee'], 'Debit_AP', NULL, $aUserData['coin_address'], $txid) && $transaction->addTransaction($aUserData['id'], $config['txfee'], 'TXFee', NULL, $aUserData['coin_address'])) {
|
||||||
|
// Mark all older transactions as archived
|
||||||
|
if (!$transaction->setArchived($aUserData['id'], $transaction->insert_id))
|
||||||
|
$log->logError('Failed to mark transactions for user #' . $aUserData['id'] . ' prior to #' . $transaction->insert_id . ' as archived');
|
||||||
|
// Notify user via mail
|
||||||
|
$aMailData['email'] = $user->getUserEmail($user->getUserName($aUserData['id']));
|
||||||
|
$aMailData['subject'] = 'Auto Payout Completed';
|
||||||
|
$aMailData['amount'] = $dBalance;
|
||||||
|
if (!$notification->sendNotification($aUserData['id'], 'auto_payout', $aMailData))
|
||||||
|
$log->logError('Failed to send notification email to users address: ' . $aMailData['email']);
|
||||||
|
// Recheck the users balance to make sure it is now 0
|
||||||
|
$aBalance = $transaction->getBalance($aUserData['id']);
|
||||||
|
if ($aBalance['confirmed'] > 0) {
|
||||||
|
$log->logFatal('User has a remaining balance of ' . $aBalance['confirmed'] . ' after a successful payout!');
|
||||||
|
$monitoring->endCronjob($cron_name, 'E0065', 1, true);
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
$log->logFatal('Failed to add new Debit_AP transaction in database for user ' . $user->getUserName($aUserData['id']));
|
||||||
|
$monitoring->endCronjob($cron_name, 'E0064', 1, true);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
$log->logDebug(" no user has configured their AP > 0");
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
$log->logDebug("Auto payouts disabled via admin panel");
|
||||||
|
}
|
||||||
// Cron cleanup and monitoring
|
// Cron cleanup and monitoring
|
||||||
require_once('cron_end.inc.php');
|
require_once('cron_end.inc.php');
|
||||||
?>
|
?>
|
||||||
|
|||||||
@ -232,11 +232,25 @@ $aSettings['system'][] = array(
|
|||||||
'tooltip' => 'Enable or Disable invitations. Users will not be able to invite new users via email if disabled.'
|
'tooltip' => 'Enable or Disable invitations. Users will not be able to invite new users via email if disabled.'
|
||||||
);
|
);
|
||||||
$aSettings['system'][] = array(
|
$aSettings['system'][] = array(
|
||||||
'display' => 'Disable Payouts', 'type' => 'select',
|
'display' => 'Disable Payout Cron', 'type' => 'select',
|
||||||
'options' => array( 0 => 'No', 1 => 'Yes' ),
|
'options' => array( 0 => 'No', 1 => 'Yes' ),
|
||||||
'default' => 0,
|
'default' => 0,
|
||||||
'name' => 'disable_payouts', 'value' => $setting->getValue('disable_payouts'),
|
'name' => 'disable_payouts', 'value' => $setting->getValue('disable_payouts'),
|
||||||
'tooltip' => 'Enable or Disable the payout processing. Users will not be able to withdraw any funds if disabled.'
|
'tooltip' => 'Enable or Disable the payout cronjob. Users will not be able to withdraw any funds if disabled. Will be logged in monitoring page.'
|
||||||
|
);
|
||||||
|
$aSettings['system'][] = array(
|
||||||
|
'display' => 'Disable Manual Payouts', 'type' => 'select',
|
||||||
|
'options' => array( 0 => 'No', 1 => 'Yes' ),
|
||||||
|
'default' => 0,
|
||||||
|
'name' => 'disable_manual_payouts', 'value' => $setting->getValue('disable_manual_payouts'),
|
||||||
|
'tooltip' => 'Enable or Disable manual payouts. Users will not be able to withdraw any funds manually if disabled. Will NOT be logged in monitoring page.'
|
||||||
|
);
|
||||||
|
$aSettings['system'][] = array(
|
||||||
|
'display' => 'Disable Auto Payout', 'type' => 'select',
|
||||||
|
'options' => array( 0 => 'No', 1 => 'Yes' ),
|
||||||
|
'default' => 0,
|
||||||
|
'name' => 'disable_auto_payouts', 'value' => $setting->getValue('disable_auto_payouts'),
|
||||||
|
'tooltip' => 'Enable or Disable the payout cronjob. Users will not be able to withdraw any funds automatically if disabled. Will NOT be logged in monitoring page.'
|
||||||
);
|
);
|
||||||
$aSettings['system'][] = array(
|
$aSettings['system'][] = array(
|
||||||
'display' => 'Disable notifications', 'type' => 'select',
|
'display' => 'Disable notifications', 'type' => 'select',
|
||||||
|
|||||||
@ -10,7 +10,7 @@ if ($user->isAuthenticated()) {
|
|||||||
} else {
|
} else {
|
||||||
switch (@$_POST['do']) {
|
switch (@$_POST['do']) {
|
||||||
case 'cashOut':
|
case 'cashOut':
|
||||||
if ($setting->getValue('disable_payouts') == 1) {
|
if ($setting->getValue('disable_payouts') == 1 || $setting->getValue('disable_manual_payouts') == 1) {
|
||||||
$_SESSION['POPUP'][] = array('CONTENT' => 'Manual payouts are disabled.', 'TYPE' => 'info');
|
$_SESSION['POPUP'][] = array('CONTENT' => 'Manual payouts are disabled.', 'TYPE' => 'info');
|
||||||
} else {
|
} else {
|
||||||
$aBalance = $transaction->getBalance($_SESSION['USERDATA']['id']);
|
$aBalance = $transaction->getBalance($_SESSION['USERDATA']['id']);
|
||||||
|
|||||||
@ -63,8 +63,10 @@ $aGlobal = array(
|
|||||||
'confirmations' => $config['confirmations'],
|
'confirmations' => $config['confirmations'],
|
||||||
'reward' => $config['reward'],
|
'reward' => $config['reward'],
|
||||||
'price' => $setting->getValue('price'),
|
'price' => $setting->getValue('price'),
|
||||||
'disable_payouts' => $setting->getValue('disable_payouts'),
|
|
||||||
'config' => array(
|
'config' => array(
|
||||||
|
'disable_payouts' => $setting->getValue('disable_payouts'),
|
||||||
|
'disable_manual_payouts' => $setting->getValue('disable_manual_payouts'),
|
||||||
|
'disable_auto_payouts' => $setting->getValue('disable_auto_payouts'),
|
||||||
'algorithm' => $config['algorithm'],
|
'algorithm' => $config['algorithm'],
|
||||||
'target_bits' => $config['target_bits'],
|
'target_bits' => $config['target_bits'],
|
||||||
'accounts' => $config['accounts'],
|
'accounts' => $config['accounts'],
|
||||||
|
|||||||
@ -60,7 +60,7 @@
|
|||||||
</article>
|
</article>
|
||||||
</form>
|
</form>
|
||||||
|
|
||||||
{if !$GLOBAL.disable_payouts}
|
{if !$GLOBAL.config.disable_payouts && !$GLOBAL.config.disable_manual_payouts}
|
||||||
<form action="{$smarty.server.PHP_SELF}" method="post">
|
<form action="{$smarty.server.PHP_SELF}" method="post">
|
||||||
<input type="hidden" name="page" value="{$smarty.request.page|escape}">
|
<input type="hidden" name="page" value="{$smarty.request.page|escape}">
|
||||||
<input type="hidden" name="action" value="{$smarty.request.action|escape}">
|
<input type="hidden" name="action" value="{$smarty.request.action|escape}">
|
||||||
|
|||||||
Loading…
Reference in New Issue
Block a user