diff --git a/public/include/classes/user.class.php b/public/include/classes/user.class.php index daa4a6a0..2b5f093e 100644 --- a/public/include/classes/user.class.php +++ b/public/include/classes/user.class.php @@ -58,6 +58,18 @@ class User { return $this->updateSingle($id, $field); } + /** + * Fetch all users for administrative tasks + * @param none + * @return data array All users with db columns as array fields + **/ + public function getUsers($filter='%') { + $stmt = $this->mysqli->prepare("SELECT * FROM " . $this->getTableName() . " WHERE username LIKE ?"); + if ($this->checkStmt($stmt) && $stmt->bind_param('s', $filter) && $stmt->execute() && $result = $stmt->get_result()) { + return $result->fetch_all(MYSQLI_ASSOC); + } + } + /** * Check user login * @param username string Username diff --git a/public/include/pages/admin/user.inc.php b/public/include/pages/admin/user.inc.php index 6706e547..17766283 100644 --- a/public/include/pages/admin/user.inc.php +++ b/public/include/pages/admin/user.inc.php @@ -10,10 +10,30 @@ if (!$user->isAdmin($_SESSION['USERDATA']['id'])) { die(); } +$aRoundShares = $statistics->getRoundShares(); + if ($_POST['query']) { - // Fetch all users from DB cross referencing all stats + // Fetch requested users + $aUsers = $user->getUsers($_POST['query']); + + // Add additional stats to each user + // 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']); + $aUser['hashrate'] = $statistics->getUserHashrate($aUser['id']); + $aUser['shares'] = $statistics->getUserShares($aUser['id']); + $aUser['payout']['est_block'] = round(( (int)$aUser['shares']['valid'] / (int)$aRoundShares['valid'] ) * (int)$config['reward'], 3); + $aUser['payout']['est_fee'] = round(($config['fees'] / 100) * $aUser['payout']['est_block'], 3); + $aUser['payout']['est_donation'] = round((( $aUser['donate_percent'] / 100) * ($aUser['payout']['est_block'] - $aUser['payout']['est_fee'])), 3); + $aUser['payout']['est_payout'] = round($aUser['payout']['est_block'] - $aUser['payout']['est_donation'] - $aUser['payout']['est_fee'], 3); + $aUsers[$iKey] = $aUser; + } } +// Assign our variables +$smarty->assign("USERS", $aUsers); + // Tempalte specifics $smarty->assign("CONTENT", "default.tpl"); ?> diff --git a/public/site_assets/mmcFE/css/style.css b/public/site_assets/mmcFE/css/style.css index a41aef4c..8133150a 100644 --- a/public/site_assets/mmcFE/css/style.css +++ b/public/site_assets/mmcFE/css/style.css @@ -465,6 +465,12 @@ a:hover { .block table tr th.right{ text-align: right; } +.block table tr td.center{ + text-align: center; +} +.block table tr th.center{ + text-align: center; +} .block table tr td.delete a { color: #666; } diff --git a/public/site_assets/mmcFE/images/first.png b/public/site_assets/mmcFE/images/first.png new file mode 100644 index 00000000..6f11fcb0 Binary files /dev/null and b/public/site_assets/mmcFE/images/first.png differ diff --git a/public/site_assets/mmcFE/images/last.png b/public/site_assets/mmcFE/images/last.png new file mode 100644 index 00000000..72079357 Binary files /dev/null and b/public/site_assets/mmcFE/images/last.png differ diff --git a/public/site_assets/mmcFE/images/next.png b/public/site_assets/mmcFE/images/next.png new file mode 100644 index 00000000..4a2f9d4e Binary files /dev/null and b/public/site_assets/mmcFE/images/next.png differ diff --git a/public/site_assets/mmcFE/images/prev.png b/public/site_assets/mmcFE/images/prev.png new file mode 100644 index 00000000..15d1584b Binary files /dev/null and b/public/site_assets/mmcFE/images/prev.png differ diff --git a/public/site_assets/mmcFE/js/custom.js b/public/site_assets/mmcFE/js/custom.js index 1e047555..2070bd82 100644 --- a/public/site_assets/mmcFE/js/custom.js +++ b/public/site_assets/mmcFE/js/custom.js @@ -66,6 +66,10 @@ $(function () { widgets: ['zebra'] }); + $("table.pagesort") + .tablesorter({ widgets: ['zebra'] }) + .tablesorterPager({ positionFixed: false, container: $("#pager") }); + $('.block table tr th.header').css('cursor', 'pointer'); // Check / uncheck all checkboxes diff --git a/public/templates/mmcFE/admin/user/default.tpl b/public/templates/mmcFE/admin/user/default.tpl index 8077c4a7..105fb9a2 100644 --- a/public/templates/mmcFE/admin/user/default.tpl +++ b/public/templates/mmcFE/admin/user/default.tpl @@ -2,7 +2,82 @@
- - + +
{include file="global/block_footer.tpl"} + +{include file="global/block_header.tpl" BLOCK_HEADER="User Information"} +
+
+
+ + + + + + +
+
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + +{section name=user loop=$USERS|default} + + + + + + + + + + + +{/section} + + + + + + + + + + + + + +
UsernameE-MailHashrateValidInvalidBalanceEst. DonationEst. PayoutAdmin
{$USERS[user].username}{$USERS[user].email}{$USERS[user].hashrate}{$USERS[user].shares.valid}{$USERS[user].shares.invalid}{$USERS[user].balance}{$USERS[user].payout.est_donation}{$USERS[user].payout.est_payout} + +
UsernameE-MailHashrateSharesBalanceEst. DonationEst. PayoutAdmin
+{include file="global/block_footer.tpl"} diff --git a/public/templates/mmcFE/global/navigation.tpl b/public/templates/mmcFE/global/navigation.tpl index 828ed68a..13172478 100644 --- a/public/templates/mmcFE/global/navigation.tpl +++ b/public/templates/mmcFE/global/navigation.tpl @@ -10,7 +10,7 @@ {/if} - {if $smarty.session.AUTHENTICATED|default:"0" == 1 && $GLOBAL.userdata.admin == 1}
  • Admin Panel
  • {/if} + {if $smarty.session.AUTHENTICATED|default:"0" == 1 && $GLOBAL.userdata.admin == 1}
  • Admin Panel