From da6f41dbdf3f6a13a3f34ce9449186f0f024540c Mon Sep 17 00:00:00 2001 From: CupCakeArmy <nicco.borgioli@gmail.com> Date: Sun, 24 Apr 2016 17:11:35 +0200 Subject: [PATCH] Now With Pagination --- admin/tools/users.tool | 201 +++++++++++++++++++++++++---------------- 1 file changed, 122 insertions(+), 79 deletions(-) diff --git a/admin/tools/users.tool b/admin/tools/users.tool index 809a993..1433ad0 100644 --- a/admin/tools/users.tool +++ b/admin/tools/users.tool @@ -20,99 +20,142 @@ var users = { showInTable: ['firstname', 'lastname', 'email', 'membership'], curUserData: null, + page: { + max: Number.MAX_VALUE, + cur: function() { + return parseInt(tools.mem.session.get('curPage')); + }, + set: function(num) { + num = parseInt(num); + if (num > 0 && num < users.page.max+1) + tools.mem.session.set('curPage', num); + $('.users-cur-page-cont').html(users.page.cur()); + users.get(); + }, + inc: function() { + users.page.set(users.page.cur() + 1); + }, + dec: function() { + users.page.set(users.page.cur() - 1); + } + }, + get: function() { + amivcore.users.GET({ + data: { + 'max_results': '50', + page: users.page.cur(), + } + }, function(ret) { + + if (ret === undefined || ret['_items'].length == 0) { + tools.log('No Data', 'w'); + return; + } + + users.meta = ret['_meta']; + users.page.max = Math.ceil(users.meta.total / users.meta.max_results); + $('.users-page-max-cont').html(users.page.max); + + // Clear table from previous contentent + $('.users-table thead, .users-table tbody').html(''); + + users.showInTable.forEach(function(i) { + $('.users-table thead tr').append('<th>' + i + '</th>'); + }); + + for (var n in ret['_items']) { + var tmp = ''; + users.showInTable.forEach(function(i) { + tmp += '<td>' + ret['_items'][n][i] + '</td>'; + }); + $('.users-table tbody').append('<tr data-id="' + ret['_items'][n]['id'] + '">' + tmp + '</tr>'); + } + $('.users-table tbody tr').click(users.showDetails); + }); + }, + + // Make Modal with editable table data + showDetails: function() { + amivcore.users.GET({ + id: $(this).attr('data-id') + }, function(ret) { + curUserData = ret; + var tmp = '<table class="table table-hover users-user-edit-table" data-etag="' + ret['_etag'] + '"><tbody>'; + for (var cur in ret) + if (cur.charAt(0) != '_') + tmp += '<tr><td>' + cur + '</td><td contenteditable>' + ret[cur] + '</td></tr>' + tmp += '</tbody></table>'; + + tools.modal({ + head: ret.firstname + ' ' + ret.lastname, + body: tmp, + button: 'OK', + success: users.inspectUser + }); + + });; + }, + + // Check wether changes were maid and saves it in that case + inspectUser: function() { + var newUserData = {}; + $('.users-user-edit-table tr').each(function() { + newUserData[$(this).children('td:nth-child(1)').html()] = $(this).children('td:nth-child(2)').html(); + }); + var changed = false, + curUserDataChanged = {}; + for (var i in newUserData) { + if (newUserData[i] != String(curUserData[i])) { + changed = true; + curUserDataChanged[i] = newUserData[i]; + } + } + if (changed) { + amivcore.users.PATCH({ + id: curUserData.id, + header: { + 'If-Match': $('.users-user-edit-table').attr('data-etag') + }, + data: curUserDataChanged + }, function() { + tools.log('User Updated', 's'); + users.get(); + }); + } + } }; + // Setup Menu tools.ui.menu({ '<span class="glyphicon glyphicon-user" aria-hidden="true"></span>': { callback: function() {} }, '<span class="glyphicon glyphicon-arrow-left" aria-hidden="true"></span>': { - callback: function() {} + callback: users.page.dec }, - '<span class="users-cur-page" aria-hidden="true">0</span>': { - callback: function() {} + '<span class="users-cur-page-cont" aria-hidden="true"></span> / <span class="users-page-max-cont" aria-hidden="true"></span>': { + callback: function() { + tools.modal({ + head: 'Go To Page:', + body: '<div class="form-group"><input type="number" value="' + users.page.cur() + '" class="form-control users-go-page"></div>', + button: 'GO', + success: function() { + users.page.set($('.users-go-page').val()); + } + }) + } }, '<span class="glyphicon glyphicon-arrow-right" aria-hidden="true"></span>': { - callback: function() {} + callback: users.page.inc }, '<span class="glyphicon glyphicon-search" aria-hidden="true"></span>': { callback: function() {} } }); - function inspectUser() { - var newUserData = {}; - $('.users-user-edit-table tr').each(function() { - newUserData[$(this).children('td:nth-child(1)').html()] = $(this).children('td:nth-child(2)').html(); - }); - var changed = false, - curUserDataChanged = {}; - for (var i in newUserData) { - if (newUserData[i] != String(curUserData[i])) { - changed = true; - curUserDataChanged[i] = newUserData[i]; - } - } - if (changed) { - amivcore.users.PATCH({ - id: curUserData.id, - header: { - 'If-Match': $('.users-user-edit-table').attr('data-etag') - }, - data: curUserDataChanged - }, function(){ - tools.log('User Updated', 's'); - tools.getTool('users'); - }); - } - } - - function showDetails() { - amivcore.users.GET({ - id: $(this).attr('data-id') - }, function(ret) { - curUserData = ret; - var tmp = '<table class="table table-hover users-user-edit-table" data-etag="' + ret['_etag'] + '"><tbody>'; - for (var cur in ret) - if (cur.charAt(0) != '_') - tmp += '<tr><td>' + cur + '</td><td contenteditable>' + ret[cur] + '</td></tr>' - tmp += '</tbody></table>'; - - tools.modal({ - head: ret.firstname + ' ' + ret.lastname, - body: tmp, - button: 'OK', - success: inspectUser, - cancel: function() { - console.log('Canceled'); - } - }); - - });; - } - - amivcore.users.GET({ - data: { - //'max_results': '50' - } - }, function(ret) { - - if (ret === undefined || ret['_items'].length == 0) { - tools.log('No Data', 'w'); - return; - } - - users.showInTable.forEach(function(i) { - $('.users-table thead tr').append('<th>' + i + '</th>'); - }); - - for (var n in ret['_items']) { - var tmp = ''; - users.showInTable.forEach(function(i) { - tmp += '<td>' + ret['_items'][n][i] + '</td>'; - }); - $('.users-table tbody').append('<tr data-id="' + ret['_items'][n]['id'] + '">' + tmp + '</tr>'); - } - $('.users-table tbody tr').click(showDetails); - }); + // Set Initail Page and get first users + if (users.page.cur() === null || isNaN(users.page.cur())) + users.page.set(1); + else + users.page.set(users.page.cur()); </script> -- GitLab