From 065f5e6d164d5c14ede0697838dcc7299b723c37 Mon Sep 17 00:00:00 2001 From: Sebastian Grewe Date: Tue, 4 Jun 2013 11:34:22 +0200 Subject: [PATCH] Adding working user admin panel to query user DB * Users are all fetched from the DB * Each user is assigned special stats * Hashrate * Shares * Balance * Est. Payout * Est. Donation * Display in sortable and paginated table This is not well optimized. Each user stats are grabbed individually via the stats and transaction classes. It would probably make sense to expand the statistics class to list a full user list with all statistics available instead to cover this in a single SQL query. --- public/include/classes/user.class.php | 12 +++ public/include/pages/admin/user.inc.php | 22 ++++- public/site_assets/mmcFE/css/style.css | 6 ++ public/site_assets/mmcFE/images/first.png | Bin 0 -> 720 bytes public/site_assets/mmcFE/images/last.png | Bin 0 -> 737 bytes public/site_assets/mmcFE/images/next.png | Bin 0 -> 736 bytes public/site_assets/mmcFE/images/prev.png | Bin 0 -> 745 bytes public/site_assets/mmcFE/js/custom.js | 4 + public/templates/mmcFE/admin/user/default.tpl | 79 +++++++++++++++++- public/templates/mmcFE/global/navigation.tpl | 2 +- 10 files changed, 121 insertions(+), 4 deletions(-) create mode 100644 public/site_assets/mmcFE/images/first.png create mode 100644 public/site_assets/mmcFE/images/last.png create mode 100644 public/site_assets/mmcFE/images/next.png create mode 100644 public/site_assets/mmcFE/images/prev.png 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 0000000000000000000000000000000000000000..6f11fcb086b1bfa51bc5070ca45fac0a988c624c GIT binary patch literal 720 zcmV;>0x$iEP)ITpohD^Ctgf=H~o==W*|y0)VM;-LQd9lR=YF)677| z!Jh8V_;KSkP5LJrlF9S+j0qkk+2iPm7~x{#{$ZSbvzK9J-4zqYVC)27V7~717pTZd znit9v$VwYJS3ROyLxp^?0)a!0U)oMn7(0Xv0eUoZ@gH)t)d5_J+J%bT22oSJ)g^nf zqQZVCEIYOm2+rB;rB+cID%~N1o%g50=A<=fWgC_GFUb) z%s4&22M=t~3G+RMgR^pz#KbcfK)ZtsdJ$j@d{400GnQJeAz+sPu#&f$`6hKh0J%~V zq(%oWs|qZyzh}{lfSK@dRK#JSxg@DDP3^*cD+kP0j(npKkSQvp3bk_uYtD5My##O+ z;RpcDs9R5c#9;NFP5{z^GN_^r%PX%(0OOZ~7+aNFP*XZk{E2|i#E`vI`YjCrsfz|V zndEsDXoqvug2CxaF}ZvhdOaY6!{9q~KO+jO!o5Vk0qt%NcD}`cvVR;6QTNzYGWq-= zUX+?7V0e7VLW2m6_>T!vT6W8eRsOC$*+0hNMWWwDsLfA)S*X-WV71;M{bCzza-4I45g$8m^55K?|L?r+odSTVNnJ96LXt|7TGI4L>d~Fz z&-h8>1xd<>>vgSt=Y;X^$Jv9(As-4y`R%SPp?5wYYBW2LD^|g`7v>f>k`%^{A!C3N&EeR0q1EmI9?j zT<^fuCti3LD9UEdoCoe2BcvKUvD7KhHa~-21gL%Aj#%s&OGVR_$6iSuSoaqp%eN%J z76DWmU8pyEP^yWrwDz7wF9N262N52Jg#ie_jHv7Leqfv#&`?`&#}Fpfom5)T>7B!> zWsOHK0qlpu1b_k9E1Iu8-65F`u4B0T$PKrdAs|z3NmX=VY5BDbP=DEtvNfR%4Y5Zu z5VMpOD@qkb3GkT!aIm-Gn* z`85iZ>7zVE#RF?u>-GjXzTT2IfyTsX6XN-%yiPPHr0n_^E8Hzpe7MH(L!#e?D90zS zP^g}fN@{04Qcb!flJ%iEo~?q;Y!zl{=dXt}`IHwd0cyqO;QYY^WD0dM6YM#f=E3C+ z!2-R=&FDY;{gfv^)4f+|?c7Tj^US!+(gqX%T+i_HIx{<~voklC*uOv1|9t14Z-oeY T_TF$F*h9sL-j zNpc$weSXQZ6Gag%5kOy9HfA1@g zVA*&|VjFHeVhIV!`DzQM7F-a@NRTNvNlYYp4z%6NAQuJno^MeOJ!7dzy8e(=;etr6 z4q2h83Vb36o=G4!6u79$u)6u4LoN!;_)kItHmh9g5CP1HxVh+sSiS*Mlqx_uVfwL~ z+}p|}Y*;r1{g* z9DE4_W&SW~qUN5hWN@-RUJ#q3Ngxr&iJp;+4aEd;HM{A>I)B?7>yL4`Nc6h^we^ve z3YC6fwXTqAQWr8=Cd?emR={YnNptkhuSFVP{Q?6Lt^ zqF4A?)Arx1JpP&Pyh<4sUhXnam)AJ@xmkE-VuVGbg_|=vm|INb-=FD!zVlDxJ_uiv SXLQ>D0000yhD literal 0 HcmV?d00001 diff --git a/public/site_assets/mmcFE/images/prev.png b/public/site_assets/mmcFE/images/prev.png new file mode 100644 index 0000000000000000000000000000000000000000..15d1584bdbb2c26a9fc4c8269aa54615a58a4657 GIT binary patch literal 745 zcmV1hlor z)=Ec^h7>5J3?Bj(D6|X+0|UcQj&m*_Qg!D|-c07sd7pF6opXl(U}#WhWg0W$d_xV%ATb~UcS*dC+@kfS*m{?64KBH-eM78JQAu#&2c z7TM!?0X98;&a@msh@1ehFDx4~_smCS0rm@Z$dv@5Y^ec>Jl}_`uDh5!i#cpZh5&_) z{y|~cgJzZ1d%`?CxkdJIg%by0u(~PqB0%Zdj?maMmYO=M!=;B#0>~5_5YO>&?w*4H z@LRbi!eNPrxg`gUUIeK8JG(3%R{o~|7so$K+8_qZe0Iz($pKd%d&oOhA&AGYXkKE` zO8~w=kN^smCS05H!-WT*2mpbXAJK6B{s*`+;U?8|s%XO8{Hs1d`DH6am$(L0coEX9 z)c+Ho)WS9-4?6~g4NrO@c2FaKCYmmR!DQ~YpfIn+s8pr^?KThtmU&}3Kr*7R^y^Rk z5Xsb_*=oc3w-9KI@B4=+yK6a8uQ@#oTkf1PnlL+NjAm=Zh)+xqld|idFEF=^(avw| z4U*w)Kx6;tnV0ZXQD@SHtHr7{`Y12 bpX>Y!%!CO%>C8GV00000NkvXXu0mjfJYGkQ literal 0 HcmV?d00001 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