From cade08459d7a07aaf311401822d0bf413cb83ee3 Mon Sep 17 00:00:00 2001 From: Skylar Ittner Date: Sat, 27 May 2017 19:47:27 -0600 Subject: [PATCH] Add server-side loading to users table --- lib/getusertable.php | 92 ++++++++++++++++++++++++++++++++++++++++++++ pages/users.php | 4 +- static/js/users.js | 20 ++++++++++ 3 files changed, 114 insertions(+), 2 deletions(-) create mode 100644 lib/getusertable.php diff --git a/lib/getusertable.php b/lib/getusertable.php new file mode 100644 index 0000000..5000c42 --- /dev/null +++ b/lib/getusertable.php @@ -0,0 +1,92 @@ +count('accounts'); +$filter = false; + +// sort +$order = null; +$sortby = "DESC"; +if ($VARS['order'][0]['dir'] == 'asc') { + $sortby = "ASC"; +} +switch ($VARS['order'][0]['column']) { + case 2: + $order = ["realname" => $sortby]; + break; + case 3: + $order = ["username" => $sortby]; + break; + case 4: + $order = ["email" => $sortby]; + break; + case 5: + $order = ["statuscode" => $sortby]; + break; + case 6: + $order = ["typecode" => $sortby]; + break; +} + +// search +if (!is_empty($VARS['search']['value'])) { + $filter = true; + $wherenolimit = [ + "OR" => [ + "username[~]" => $VARS['search']['value'], + "realname[~]" => $VARS['search']['value'], + "email[~]" => $VARS['search']['value'], + "statuscode[~]" => $VARS['search']['value'], + "typecode[~]" => $VARS['search']['value'] + ] + ]; + $where = $wherenolimit; + $where["LIMIT"] = [$VARS['start'], $VARS['length']]; +} else { + $where = ["LIMIT" => [$VARS['start'], $VARS['length']]]; +} +if (!is_null($order)) { + $where["ORDER"] = $order; +} + + +$users = $database->select('accounts', [ + "[>]acctstatus" => ['acctstatus' => 'statusid'], + "[>]accttypes" => ['accttype' => 'typeid'] + ], [ + 'uid', + 'username', + 'realname', + 'email', + 'acctstatus', + 'statuscode', + 'accttype', + 'typecode' + ], $where); + + +$out['status'] = "OK"; +if ($filter) { + $recordsFiltered = $database->count('accounts', [ + "[>]acctstatus" => ['acctstatus' => 'statusid'], + "[>]accttypes" => ['accttype' => 'typecode'] + ], 'uid', $wherenolimit); +} else { + $recordsFiltered = $out['recordsTotal']; +} +$out['recordsFiltered'] = $recordsFiltered; +for ($i = 0; $i < count($users); $i++) { + $users[$i]["editbtn"] = ' ' . lang("edit", false) . ''; +} +$out['users'] = $users; + +echo json_encode($out); diff --git a/pages/users.php b/pages/users.php index 2756dbf..14972b7 100644 --- a/pages/users.php +++ b/pages/users.php @@ -20,7 +20,7 @@ redirectifnotloggedin(); select('accounts', [ + /*$users = $database->select('accounts', [ "[>]acctstatus" => ['acctstatus' => 'statusid'], "[>]accttypes" => ['accttype' => 'typeid'] ], [ @@ -47,7 +47,7 @@ redirectifnotloggedin(); diff --git a/static/js/users.js b/static/js/users.js index 5098572..fa42843 100644 --- a/static/js/users.js +++ b/static/js/users.js @@ -27,4 +27,24 @@ $('#usertable').DataTable({ order: [ [2, 'asc'] ], + serverSide: true, + ajax: { + url: "lib/getusertable.php", + dataFilter: function (data) { + var json = jQuery.parseJSON(data); + json.data = []; + json.users.forEach(function (row) { + json.data.push([ + "", + row.editbtn, + row.realname, + row.username, + row.email, + row.statuscode, + row.typecode + ]); + }); + return JSON.stringify(json); + } + } }); \ No newline at end of file