diff --git a/public/include/classes/transaction.class.php b/public/include/classes/transaction.class.php index 3f0635f3..3aba6586 100644 --- a/public/include/classes/transaction.class.php +++ b/public/include/classes/transaction.class.php @@ -7,12 +7,12 @@ if (!defined('SECURITY')) class Transaction { private $sError = ''; private $table = 'transactions'; - // This defines each block - public $account_id; + private $tableBlocks = 'blocks'; - public function __construct($debug, $mysqli) { + public function __construct($debug, $mysqli, $config) { $this->debug = $debug; $this->mysqli = $mysqli; + $this->config = $config; $this->debug->append("Instantiated Ledger class", 2); } @@ -90,6 +90,36 @@ class Transaction { } return true; } + + public function getBalance($account_id) { + $stmt = $this->mysqli->prepare(" + SELECT IFNULL(c.credit - d.debit, 0) AS balance + FROM ( + SELECT account_id, sum(t.amount) AS credit + FROM $this->table AS t + LEFT JOIN $this->tableBlocks AS b ON t.block_id = b.id + WHERE type = 'Credit' + AND b.confirmations > ? + AND account_id = ? ) AS c + LEFT JOIN ( + SELECT account_id, sum(amount) AS debit + FROM $this->table + WHERE type IN ('Debit_MP','Debit_AP') + AND account_id = ? ) AS d + ON c.account_id = d.account_id + "); + if ($this->checkStmt($stmt)) { + $stmt->bind_param("iii", $this->config['confirmations'], $account_id, $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 false; + } } -$transaction = new Transaction($debug, $mysqli); +$transaction = new Transaction($debug, $mysqli, $config); diff --git a/public/include/config/global.inc.dist.php b/public/include/config/global.inc.dist.php index ce709e47..92d21d8f 100644 --- a/public/include/config/global.inc.dist.php +++ b/public/include/config/global.inc.dist.php @@ -23,6 +23,7 @@ define('SALT', 'LJKEHFuhgu7%&¤Hg783tr7gf¤%¤fyegfredfoGHYFGYe(%/(&%6'); $config = array( 'difficulty' => '31', // Target difficulty for this pool 'reward' => '50', // Reward for finding blocks + 'confirmations' => '120', // Confirmations per block found to credit transactions 'wallet' => array( 'type' => 'http', // http or https are supported 'host' => 'localhost:9332', diff --git a/public/include/smarty_globals.inc.php b/public/include/smarty_globals.inc.php index c8c9de37..5760b7d5 100644 --- a/public/include/smarty_globals.inc.php +++ b/public/include/smarty_globals.inc.php @@ -6,6 +6,7 @@ if (!defined('SECURITY')) // Globally available variables $debug->append('Global smarty variables', 3); + $aGlobal = array( 'userdata' => $_SESSION['USERDATA']['id'] ? $user->getUserData($_SESSION['USERDATA']['id']) : array(), 'slogan' => $settings->getValue('slogan'), @@ -17,6 +18,10 @@ $aGlobal = array( 'statstime' => $settings->getValue('statstime'), 'motd' => $settings->getValue('motd') ); +// Append additional user information not from user table +$aGlobal['userdata']['balance'] = $transaction->getBalance($_SESSION['USERDATA']['id']); + +// Make it available in Smarty $smarty->assign('PATH', 'site_assets/' . THEME); $smarty->assign('GLOBAL', $aGlobal); ?> diff --git a/public/index.php b/public/index.php index ceddd9a5..0db937b5 100644 --- a/public/index.php +++ b/public/index.php @@ -73,13 +73,13 @@ if (!empty($action)) { $smarty->assign("PAGE", $page); $smarty->assign("ACTION", $action); +// Now with all loaded and processed, setup some globals we need for smarty templates +require_once(INCLUDE_DIR . '/smarty_globals.inc.php'); + // Debguger $debug->append("Loading debug information into template", 4); $smarty->assign('DebuggerInfo', $debug->getDebugInfo()); -// Now with all loaded and processed, setup some globals we need for smarty templates -require_once(INCLUDE_DIR . '/smarty_globals.inc.php'); - // Display our page if (!@$supress_master) $smarty->display("master.tpl", md5(serialize($_REQUEST)));