diff --git a/cronjobs/auto_payout.php b/cronjobs/auto_payout.php index 63b06d08..ca33dc3f 100755 --- a/cronjobs/auto_payout.php +++ b/cronjobs/auto_payout.php @@ -38,7 +38,8 @@ if (! empty($users)) { verbose("UserID\tUsername\tBalance\tThreshold\tAddress\t\t\t\t\tStatus\n\n"); foreach ($users as $aUserData) { - $dBalance = $transaction->getBalance($aUserData['id']); + $aBalance = $transaction->getBalance($aUserData['id']); + $dBalance = $aBalance['confirmed']; verbose($aUserData['id'] . "\t" . $aUserData['username'] . "\t" . $dBalance . "\t" . $aUserData['ap_threshold'] . "\t\t" . $aUserData['coin_address'] . "\t"); // Only run if balance meets threshold and can pay the potential transaction fee diff --git a/public/include/classes/transaction.class.php b/public/include/classes/transaction.class.php index 79d5ba66..d4f0b203 100644 --- a/public/include/classes/transaction.class.php +++ b/public/include/classes/transaction.class.php @@ -166,7 +166,9 @@ class Transaction { public function getBalance($account_id) { $this->debug->append("STA " . __METHOD__, 4); $stmt = $this->mysqli->prepare(" - SELECT ROUND(IFNULL(t1.credit, 0) - IFNULL(t2.debit, 0) - IFNULL(t3.other, 0), 8) AS balance + SELECT + ROUND(IFNULL(t1.credit, 0) - IFNULL(t2.debit, 0) - IFNULL(t3.other, 0), 8) AS confirmed, + ROUND(IFNULL(t4.credit, 0) - IFNULL(t5.other, 0), 8) AS unconfirmed FROM ( SELECT sum(t.amount) AS credit @@ -195,17 +197,39 @@ class Transaction { ( t.type IN ('Donation_PPS', 'Fee_PPS') ) ) AND t.account_id = ? - ) AS t3 + ) AS t3, + ( + SELECT sum(t.amount) AS credit + FROM $this->table AS t + LEFT JOIN " . $this->block->getTableName() . " AS b ON t.block_id = b.id + WHERE + ( + ( t.type = 'Credit' AND b.confirmations < ? ) OR + ( t.type = 'Credit_PPS' ) + ) + AND t.account_id = ? + ) AS t4, + ( + SELECT sum(t.amount) AS other + FROM $this->table AS t + LEFT JOIN " . $this->block->getTableName() . " AS b ON t.block_id = b.id + WHERE + ( + ( t.type IN ('Donation','Fee') AND b.confirmations < ? ) OR + ( t.type IN ('Donation_PPS', 'Fee_PPS') ) + ) + AND t.account_id = ? + ) AS t5 "); if ($this->checkStmt($stmt)) { - $stmt->bind_param("iiiii", $this->config['confirmations'], $account_id, $account_id, $this->config['confirmations'], $account_id); + $stmt->bind_param("iiiiiiiii", $this->config['confirmations'], $account_id, $account_id, $this->config['confirmations'], $account_id, $this->config['confirmations'], $account_id, $this->config['confirmations'], $account_id); if (!$stmt->execute()) { $this->debug->append("Unable to execute statement: " . $stmt->error); $this->setErrorMessage("Fetching balance failed"); } $result = $stmt->get_result(); $stmt->close(); - return $result->fetch_object()->balance; + return $result->fetch_assoc(); } return false; } diff --git a/public/include/pages/account/edit.inc.php b/public/include/pages/account/edit.inc.php index 8d8b1a3d..345816a7 100644 --- a/public/include/pages/account/edit.inc.php +++ b/public/include/pages/account/edit.inc.php @@ -18,7 +18,8 @@ if ( ! $user->checkPin($_SESSION['USERDATA']['id'], $_POST['authPin']) && $_POST } else { $setting->setValue('manual_payout_active', 1); $continue = true; - $dBalance = $transaction->getBalance($_SESSION['USERDATA']['id']); + $aBalance = $transaction->getBalance($_SESSION['USERDATA']['id']); + $dBalance = $aBalance['confirmed']; $sCoinAddress = $user->getCoinAddress($_SESSION['USERDATA']['id']); // Ensure we can cover the potential transaction fee of 0.1 LTC with the balance if ($dBalance > 0.1) { diff --git a/public/include/pages/admin/user.inc.php b/public/include/pages/admin/user.inc.php index b6dab89b..8b40ab21 100644 --- a/public/include/pages/admin/user.inc.php +++ b/public/include/pages/admin/user.inc.php @@ -20,7 +20,8 @@ if ($_POST['query']) { // This is not optimized yet, best is a proper SQL // Query against the stats table? Currently cached though. foreach ($aUsers as $iKey => $aUser) { - $aUser['balance'] = $transaction->getBalance($aUser['id']); + $aBalance = $transaction->getBalance($aUser['id']); + $aUser['balance'] = $aBalance['confirmed']; $aUser['hashrate'] = $statistics->getUserHashrate($aUser['id']); $aUser['payout']['est_block'] = round(( (int)$aUser['shares'] / (int)$aRoundShares['valid'] ) * (int)$config['reward'], 3); $aUser['payout']['est_fee'] = round(($config['fees'] / 100) * $aUser['payout']['est_block'], 3); diff --git a/public/templates/mmcFE/account/edit/default.tpl b/public/templates/mmcFE/account/edit/default.tpl index 31352e54..86f4f02d 100644 --- a/public/templates/mmcFE/account/edit/default.tpl +++ b/public/templates/mmcFE/account/edit/default.tpl @@ -23,7 +23,7 @@ - +
Account Balance:    {$GLOBAL.userdata.balance|escape} LTC
Account Balance:    {$GLOBAL.userdata.balance.confirmed|escape} LTC
Payout to:
{$GLOBAL.userdata.coin_address|escape}
4 digit PIN:
diff --git a/public/templates/mmcFE/global/sidebar.tpl b/public/templates/mmcFE/global/sidebar.tpl index e6736e1a..6049f9ac 100644 --- a/public/templates/mmcFE/global/sidebar.tpl +++ b/public/templates/mmcFE/global/sidebar.tpl @@ -70,7 +70,8 @@ {/if}   Account Balance - {$GLOBAL.userdata.balance|default:"0"} LTC + Confirmed{$GLOBAL.userdata.balance.confirmed|default:"0"} LTC + Unconfirmed{$GLOBAL.userdata.balance.unconfirmed|default:"0"} LTC