From 769ea75e82dc7925b6c0a378e0bfa277caa7373a Mon Sep 17 00:00:00 2001 From: Skylar Ittner Date: Sat, 27 May 2017 20:02:27 -0600 Subject: [PATCH] Item table now loads with AJAX --- lib/getitemtable.php | 109 +++++++++++++++++++++++++++++++++++++++++++ pages/items.php | 5 +- required.php | 1 + static/js/items.js | 26 +++++++++++ 4 files changed, 137 insertions(+), 4 deletions(-) create mode 100644 lib/getitemtable.php diff --git a/lib/getitemtable.php b/lib/getitemtable.php new file mode 100644 index 0000000..1f58cb0 --- /dev/null +++ b/lib/getitemtable.php @@ -0,0 +1,109 @@ +count('items'); +$filter = false; + +// sort +$order = null; +$sortby = "DESC"; +if ($VARS['order'][0]['dir'] == 'asc') { + $sortby = "ASC"; +} +switch ($VARS['order'][0]['column']) { + case 2: + $order = ["name" => $sortby]; + break; + case 3: + $order = ["catname" => $sortby]; + break; + case 4: + $order = ["locname" => $sortby]; + break; + case 5: + $order = ["code1" => $sortby]; + break; + case 6: + $order = ["code2" => $sortby]; + break; + case 7: + $order = ["qty" => $sortby]; + break; + // Note: We're not going to sort by assigned user. It's too hard. Maybe later. +} + +// search +if (!is_empty($VARS['search']['value'])) { + $filter = true; + $wherenolimit = [ + "OR" => [ + "name[~]" => $VARS['search']['value'], + "catname[~]" => $VARS['search']['value'], + "locname[~]" => $VARS['search']['value'], + "code1[~]" => $VARS['search']['value'], + "code2[~]" => $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; +} + + +$items = $database->select('items', [ + '[>]categories' => ['catid' => 'catid'], + '[>]locations' => ['locid' => 'locid'] + ], [ + 'itemid', + 'name', + 'catname', + 'locname', + 'loccode', + 'code1', + 'code2', + 'qty', + 'userid' + ], $where); + + +$out['status'] = "OK"; +if ($filter) { + $recordsFiltered = $database->count('items', [ + '[>]categories' => ['catid' => 'catid'], + '[>]locations' => ['locid' => 'locid'] + ], 'itemid', $wherenolimit); +} else { + $recordsFiltered = $out['recordsTotal']; +} +$out['recordsFiltered'] = $recordsFiltered; + +$usercache = []; +for ($i = 0; $i < count($items); $i++) { + $items[$i]["editbtn"] = ' ' . lang("edit", false) . ''; + if (is_null($items[$i]['userid'])) { + $items[$i]["username"] = ""; + } else { + if (!isset($usercache[$items[$i]['userid']])) { + $usercache[$items[$i]['userid']] = getUserByID($items[$i]['userid']); + } + $items[$i]["username"] = $usercache[$items[$i]['userid']]['name']; + } +} +$out['items'] = $items; + +echo json_encode($out); diff --git a/pages/items.php b/pages/items.php index a3988b2..0d5a291 100644 --- a/pages/items.php +++ b/pages/items.php @@ -35,12 +35,9 @@ redirectifnotloggedin(); 'loccode', 'code1', 'code2', - 'text1', - 'text2', - 'text3', 'qty', 'userid' - ]); + ], ["LIMIT" => 100]); $usercache = []; foreach ($items as $item) { if (is_null($item['userid'])) { diff --git a/required.php b/required.php index 0ea9e72..b9feef8 100644 --- a/required.php +++ b/required.php @@ -131,6 +131,7 @@ function lang2($key, $replace, $echo = true) { function dieifnotloggedin() { if ($_SESSION['loggedin'] != true) { sendError("Session expired. Please log out and log in again."); + die(); } } diff --git a/static/js/items.js b/static/js/items.js index 31278dc..8d1fe51 100644 --- a/static/js/items.js +++ b/static/js/items.js @@ -22,9 +22,35 @@ $('#itemtable').DataTable({ { targets: 1, orderable: false + }, + { + targets: 8, + orderable: false } ], order: [ [2, 'asc'] ], + serverSide: true, + ajax: { + url: "lib/getitemtable.php", + dataFilter: function (data) { + var json = jQuery.parseJSON(data); + json.data = []; + json.items.forEach(function (row) { + json.data.push([ + "", + row.editbtn, + row.name, + row.catname, + row.locname + " (" + row.loccode + ")", + row.code1, + row.code2, + row.qty, + row.username + ]); + }); + return JSON.stringify(json); + } + } }); \ No newline at end of file