Skip to content
Snippets Groups Projects
Commit eea59a31 authored by scmoritz's avatar scmoritz
Browse files

changed file encoding to unix

parent e706ea14
No related branches found
No related tags found
No related merge requests found
<div>
<table class="table table-hover groups-table">
<thead>
<tr>
</tr>
</thead>
<tbody>
</tbody>
</table>
</div>
<script type="text/javascript">
var groups = {
showInTable: ['name'],
curUserData: null,
// Page
page: {
max: Number.MAX_VALUE,
cur: function() {
return parseInt(tools.mem.session.get('curPage'));
},
set: function(num) {
num = parseInt(num);
if (num > 0 && num < groups.page.max + 1)
tools.mem.session.set('curPage', num);
$('.groups-cur-page-cont').html(groups.page.cur());
groups.get();
},
inc: function() {
groups.page.set(groups.page.cur() + 1);
},
dec: function() {
groups.page.set(groups.page.cur() - 1);
}
},
//Sorting
sort: {
cur: function() {
return tools.mem.session.get('curSort');
},
set: function(sort) {
tools.mem.session.set('curSort', sort);
groups.get();
},
inv: function() {
var tmp = groups.sort.cur();
if (tmp.charAt(0) == '-')
groups.sort.set(tmp.slice(1));
else
groups.sort.set('-' + tmp);
}
},
//Searching
search: {
cur: function() {
return tools.mem.session.get('search');
},
set: function(dom, val) {
tools.mem.session.set('search', dom + '==' + val);
groups.page.set(1);
},
clr: function() {
tools.mem.session.set('search', '');
groups.page.set(1);
},
},
// Get groups
get: function() {
amivcore.groups.GET({
data: {
'max_results': '50',
page: groups.page.cur(),
sort: groups.sort.cur(),
where: groups.search.cur(),
}
}, function(ret) {
console.log(ret);
if (ret === undefined || ret['_items'].length == 0) {
tools.log('No Data', 'w');
return;
}
groups.meta = ret['_meta'];
groups.page.max = Math.ceil(groups.meta.total / groups.meta.max_results);
$('.groups-page-max-cont').html(groups.page.max);
// Clear table from previous contentent
$('.groups-table thead tr, .groups-table tbody').html('');
groups.showInTable.forEach(function(i) {
$('.groups-table thead tr').append('<th>' + i + '</th>');
});
for (var n in ret['_items']) {
var tmp = '';
groups.showInTable.forEach(function(i) {
tmp += '<td>' + ret['_items'][n][i] + '</td>';
});
$('.groups-table tbody').append('<tr data-id="' + ret['_items'][n]['_id'] + '">' + tmp + '</tr>');
}
$('.groups-table tbody tr').click(groups.showDetails);
});
},
// Make Modal with editable table data
showDetails: function() {
amivcore.groups.GET({
id: $(this).attr('data-id')
}, function(ret) {
console.log(ret);
curUserData = ret;
var tmp = '<div class="groups-edit-cont" data-etag="' + ret['_etag'] + '" data-id="' + ret['_id'] + '">';
for (var cur in ret)
if (cur.charAt(0) != '_')
if (cur == 'user_subscribers') {
tmp += '<p><strong>Subscribed: <kbd>' + ret[cur].length + '</kbd> <kbd class="groups-show-users"><span class="glyphicon glyphicon-edit" aria-hidden="true"></span></kbd></strong></p>';
} else {
switch (amivcore.getParamType('groups', cur)) {
case 'boolean':
tmp += '<div class="checkbox"><label><input type="checkbox" value="' + ret[cur] + '" name="' + cur + '">' + cur + '</label></div>';
break;
case 'integer':
tmp += '<div class="form-group"><label>' + cur + ':</label><input type="number" value="' + ret[cur] + '" class="form-control" name="' + cur + '" min="0" step="1"></div>';
break;
default:
tmp += '<div class="form-group"><label>' + cur + ':</label><input type="text" value="' + ret[cur] + '" class="form-control" name="' + cur + '"></div>';
break;
}
}
tmp += '</div>';
tools.modal({
head: ret.firstname + ' ' + ret.lastname,
body: tmp,
button: {
'Delete': {
type: 'danger',
callback: function() {
if (confirm('Fo\' shizzle my nizzle? U fo\' real?'))
amivcore.groups.DELETE({
id: $('.groups-edit-cont').first().attr('data-id'),
header: {
'If-Match': $('.groups-edit-cont').attr('data-etag')
},
}, function(ret) {
if (ret === undefined) {
tools.log('Group successfully deleted', 's');
groups.get();
tools.modalClose();
} else {
tools.log('Error', 'e');
}
});
}
},
'Update': {
type: 'success',
close: true,
callback: groups.inspect,
},
}
});
});
$('.groups-show-users').off('click').on('click', function() {
console.log($('groups-edit-cont').first().attr('data-id'));
});
},
// Check wether changes were maid and saves it in that case
inspect: function() {
var newUserData = {};
$('.groups-edit-cont 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.groups.PATCH({
id: curUserData._ id,
header: {
'If-Match': $('.groups-edit-cont').attr('data-etag')
},
data: curUserDataChanged
}, function() {
tools.log('User Updated', 's');
groups.get();
});
}
},
//Make new user
add: function() {
var tmp = '<div class="row groups-user-add-form">' +
'<div class="form-group"><label for="groups-name">Name:</label><input type="text" class="form-control" name="name" id="groups-name"></div>' +
'<div class="form-group"><label for="groups-moderator">Group Admin:</label><input type="text" class="form-control" id="groups-moderator" name="moderator_id"></div>' +
'<label class="checkbox-inline"><input type="checkbox" name="has_zoidberg_share">Has Zoidberg share</label>' +
'<label class="checkbox-inline pull-right"><input type="checkbox" name="allow_self_enrollment">Self-Enrollment</label>' +
'</div>';
tools.modal({
head: 'Create Group',
body: tmp,
button: {
'Add': {
type: 'success',
callback: function() {
var modName = $('#groups-moderator').val().trim().split(' ');
if (modName.length != 2) {
tools.log('Wrong input for Moderator', 'w');
return;
}
amivcore.users.GET({
data: {
where: 'firstname==' + modName[0] + ';lastname==' + modName[1]
}
}, function(ret) {
if (ret['_items'].length !== 1) {
tools.log('Moderator not found', 'w');
return;
}
var newUserData = {};
$('.groups-user-add-form input').each(function() {
newUserData[$(this).attr('name')] = $(this).val();
});
newUserData['moderator_id'] = ret['_items'][0]['_id'];
console.log(newUserData);
amivcore.groups.POST({
data: newUserData
}, function(ret) {
if (!ret.hasOwnProperty('_status') || ret['_status'] != 'OK')
tools.log(JSON.stringify(ret.responseJSON['_issues']), 'e');
else {
tools.modalClose();
tools.log('Group Created', 's');
groups.get();
}
});
});
}
}
}
});
}
};
// Setup Menu
tools.ui.menu({
'<span class="glyphicon glyphicon-plus" aria-hidden="true" data-toggle="tooltip" data-placement="bottom" title="New Group"></span>': {
callback: groups.add
},
'<span class="glyphicon glyphicon-arrow-left" aria-hidden="true" data-toggle="tooltip" data-placement="bottom" title="Previous Page"></span>': {
callback: groups.page.dec
},
'<span data-toggle="tooltip" data-placement="bottom" title="Set Page"><span class="groups-cur-page-cont" aria-hidden="true"></span> / <span class="groups-page-max-cont" aria-hidden="true"></span></span>': {
callback: function() {
tools.modal({
head: 'Go To Page:',
body: '<div class="form-group"><input type="number" value="' + groups.page.cur() + '" class="form-control groups-go-page"></div>',
button: {
'Go': {
type: 'success',
close: true,
callback: function() {
groups.page.set($('.groups-go-page').val());
},
}
}
});
}
},
'<span class="glyphicon glyphicon-arrow-right" aria-hidden="true" data-toggle="tooltip" data-placement="bottom" title="Next Page"></span>': {
callback: groups.page.inc
},
'<span class="glyphicon glyphicon-sort" aria-hidden="true" data-toggle="tooltip" data-placement="bottom" title="Sort"></span>': {
callback: function() {
var tmp = '<div class="form-group"><select class="form-control groups-sort-select">';
var cur = groups.sort.cur();
['name'].forEach(function(i) {
tmp += '<option value="' + i + '"' + ((i == cur) ? ' selected' : '') + '>&#8673; ' + i + '</option>';
tmp += '<option value="-' + i + '"' + (('-' + i == cur) ? ' selected' : '') + '>&#8675; ' + i + '</option>';
});
tmp += '</select></div>';
tools.modal({
head: 'Sort',
body: tmp,
button: {
'Sort': {
type: 'success',
close: true,
callback: function() {
groups.sort.set($('.groups-sort-select').val());
}
}
}
});
}
},
'<span class="glyphicon glyphicon-search" aria-hidden="true" data-toggle="tooltip" data-placement="bottom" title="Search"></span>': {
callback: function() {
var tmp = '<div class="form-group"><select class="form-control groups-search-select">';
var cur = groups.search.cur();
if (cur === null || cur == '')
cur = '';
else
cur = cur.split('==')[1];
['name'].forEach(function(i) {
tmp += '<option value="' + i + '"' + ((i == cur) ? ' selected' : '') + '>' + i + '</option>';
});
tmp += '</select><br><input type="text" value="' + cur + '" class="form-control groups-search-val"></div>';
tools.modal({
head: 'Search',
body: tmp,
button: {
'Clear': {
type: 'warning',
close: true,
callback: groups.search.clr,
},
'Search': {
type: 'success',
close: true,
callback: function() {
groups.search.set($('.groups-search-select').val(), $('.groups-search-val').val());
}
},
}
})
}
}
});
//Set Toolpit
$('[data-toggle="tooltip"]').tooltip()
// Set Initail Page and get first groups
if (groups.page.cur() === null || isNaN(groups.page.cur()))
groups.page.set(1);
else
groups.page.set(groups.page.cur());
</script>
<div>
<table class="table table-hover groups-table">
<thead>
<tr>
</tr>
</thead>
<tbody>
</tbody>
</table>
</div>
<script type="text/javascript">
var groups = {
showInTable: ['name'],
curUserData: null,
// Page
page: {
max: Number.MAX_VALUE,
cur: function() {
return parseInt(tools.mem.session.get('curPage'));
},
set: function(num) {
num = parseInt(num);
if (num > 0 && num < groups.page.max + 1)
tools.mem.session.set('curPage', num);
$('.groups-cur-page-cont').html(groups.page.cur());
groups.get();
},
inc: function() {
groups.page.set(groups.page.cur() + 1);
},
dec: function() {
groups.page.set(groups.page.cur() - 1);
}
},
//Sorting
sort: {
cur: function() {
return tools.mem.session.get('curSort');
},
set: function(sort) {
tools.mem.session.set('curSort', sort);
groups.get();
},
inv: function() {
var tmp = groups.sort.cur();
if (tmp.charAt(0) == '-')
groups.sort.set(tmp.slice(1));
else
groups.sort.set('-' + tmp);
}
},
//Searching
search: {
cur: function() {
return tools.mem.session.get('search');
},
set: function(dom, val) {
tools.mem.session.set('search', dom + '==' + val);
groups.page.set(1);
},
clr: function() {
tools.mem.session.set('search', '');
groups.page.set(1);
},
},
// Get groups
get: function() {
amivcore.groups.GET({
data: {
'max_results': '50',
page: groups.page.cur(),
sort: groups.sort.cur(),
where: groups.search.cur(),
}
}, function(ret) {
console.log(ret);
if (ret === undefined || ret['_items'].length == 0) {
tools.log('No Data', 'w');
return;
}
groups.meta = ret['_meta'];
groups.page.max = Math.ceil(groups.meta.total / groups.meta.max_results);
$('.groups-page-max-cont').html(groups.page.max);
// Clear table from previous contentent
$('.groups-table thead tr, .groups-table tbody').html('');
groups.showInTable.forEach(function(i) {
$('.groups-table thead tr').append('<th>' + i + '</th>');
});
for (var n in ret['_items']) {
var tmp = '';
groups.showInTable.forEach(function(i) {
tmp += '<td>' + ret['_items'][n][i] + '</td>';
});
$('.groups-table tbody').append('<tr data-id="' + ret['_items'][n]['_id'] + '">' + tmp + '</tr>');
}
$('.groups-table tbody tr').click(groups.showDetails);
});
},
// Make Modal with editable table data
showDetails: function() {
amivcore.groups.GET({
id: $(this).attr('data-id')
}, function(ret) {
console.log(ret);
curUserData = ret;
var tmp = '<div class="groups-edit-cont" data-etag="' + ret['_etag'] + '" data-id="' + ret['_id'] + '">';
for (var cur in ret)
if (cur.charAt(0) != '_')
if (cur == 'user_subscribers') {
tmp += '<p><strong>Subscribed: <kbd>' + ret[cur].length + '</kbd> <kbd class="groups-show-users"><span class="glyphicon glyphicon-edit" aria-hidden="true"></span></kbd></strong></p>';
} else {
switch (amivcore.getParamType('groups', cur)) {
case 'boolean':
tmp += '<div class="checkbox"><label><input type="checkbox" value="' + ret[cur] + '" name="' + cur + '">' + cur + '</label></div>';
break;
case 'integer':
tmp += '<div class="form-group"><label>' + cur + ':</label><input type="number" value="' + ret[cur] + '" class="form-control" name="' + cur + '" min="0" step="1"></div>';
break;
default:
tmp += '<div class="form-group"><label>' + cur + ':</label><input type="text" value="' + ret[cur] + '" class="form-control" name="' + cur + '"></div>';
break;
}
}
tmp += '</div>';
tools.modal({
head: ret.firstname + ' ' + ret.lastname,
body: tmp,
button: {
'Delete': {
type: 'danger',
callback: function() {
if (confirm('Fo\' shizzle my nizzle? U fo\' real?'))
amivcore.groups.DELETE({
id: $('.groups-edit-cont').first().attr('data-id'),
header: {
'If-Match': $('.groups-edit-cont').attr('data-etag')
},
}, function(ret) {
if (ret === undefined) {
tools.log('Group successfully deleted', 's');
groups.get();
tools.modalClose();
} else {
tools.log('Error', 'e');
}
});
}
},
'Update': {
type: 'success',
close: true,
callback: groups.inspect,
},
}
});
});
$('.groups-show-users').off('click').on('click', function() {
console.log($('groups-edit-cont').first().attr('data-id'));
});
},
// Check wether changes were maid and saves it in that case
inspect: function() {
var newUserData = {};
$('.groups-edit-cont 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.groups.PATCH({
id: curUserData._ id,
header: {
'If-Match': $('.groups-edit-cont').attr('data-etag')
},
data: curUserDataChanged
}, function() {
tools.log('User Updated', 's');
groups.get();
});
}
},
//Make new user
add: function() {
var tmp = '<div class="row groups-user-add-form">' +
'<div class="form-group"><label for="groups-name">Name:</label><input type="text" class="form-control" name="name" id="groups-name"></div>' +
'<div class="form-group"><label for="groups-moderator">Group Admin:</label><input type="text" class="form-control" id="groups-moderator" name="moderator_id"></div>' +
'<label class="checkbox-inline"><input type="checkbox" name="has_zoidberg_share">Has Zoidberg share</label>' +
'<label class="checkbox-inline pull-right"><input type="checkbox" name="allow_self_enrollment">Self-Enrollment</label>' +
'</div>';
tools.modal({
head: 'Create Group',
body: tmp,
button: {
'Add': {
type: 'success',
callback: function() {
var modName = $('#groups-moderator').val().trim().split(' ');
if (modName.length != 2) {
tools.log('Wrong input for Moderator', 'w');
return;
}
amivcore.users.GET({
data: {
where: 'firstname==' + modName[0] + ';lastname==' + modName[1]
}
}, function(ret) {
if (ret['_items'].length !== 1) {
tools.log('Moderator not found', 'w');
return;
}
var newUserData = {};
$('.groups-user-add-form input').each(function() {
newUserData[$(this).attr('name')] = $(this).val();
});
newUserData['moderator_id'] = ret['_items'][0]['_id'];
console.log(newUserData);
amivcore.groups.POST({
data: newUserData
}, function(ret) {
if (!ret.hasOwnProperty('_status') || ret['_status'] != 'OK')
tools.log(JSON.stringify(ret.responseJSON['_issues']), 'e');
else {
tools.modalClose();
tools.log('Group Created', 's');
groups.get();
}
});
});
}
}
}
});
}
};
// Setup Menu
tools.ui.menu({
'<span class="glyphicon glyphicon-plus" aria-hidden="true" data-toggle="tooltip" data-placement="bottom" title="New Group"></span>': {
callback: groups.add
},
'<span class="glyphicon glyphicon-arrow-left" aria-hidden="true" data-toggle="tooltip" data-placement="bottom" title="Previous Page"></span>': {
callback: groups.page.dec
},
'<span data-toggle="tooltip" data-placement="bottom" title="Set Page"><span class="groups-cur-page-cont" aria-hidden="true"></span> / <span class="groups-page-max-cont" aria-hidden="true"></span></span>': {
callback: function() {
tools.modal({
head: 'Go To Page:',
body: '<div class="form-group"><input type="number" value="' + groups.page.cur() + '" class="form-control groups-go-page"></div>',
button: {
'Go': {
type: 'success',
close: true,
callback: function() {
groups.page.set($('.groups-go-page').val());
},
}
}
});
}
},
'<span class="glyphicon glyphicon-arrow-right" aria-hidden="true" data-toggle="tooltip" data-placement="bottom" title="Next Page"></span>': {
callback: groups.page.inc
},
'<span class="glyphicon glyphicon-sort" aria-hidden="true" data-toggle="tooltip" data-placement="bottom" title="Sort"></span>': {
callback: function() {
var tmp = '<div class="form-group"><select class="form-control groups-sort-select">';
var cur = groups.sort.cur();
['name'].forEach(function(i) {
tmp += '<option value="' + i + '"' + ((i == cur) ? ' selected' : '') + '>&#8673; ' + i + '</option>';
tmp += '<option value="-' + i + '"' + (('-' + i == cur) ? ' selected' : '') + '>&#8675; ' + i + '</option>';
});
tmp += '</select></div>';
tools.modal({
head: 'Sort',
body: tmp,
button: {
'Sort': {
type: 'success',
close: true,
callback: function() {
groups.sort.set($('.groups-sort-select').val());
}
}
}
});
}
},
'<span class="glyphicon glyphicon-search" aria-hidden="true" data-toggle="tooltip" data-placement="bottom" title="Search"></span>': {
callback: function() {
var tmp = '<div class="form-group"><select class="form-control groups-search-select">';
var cur = groups.search.cur();
if (cur === null || cur == '')
cur = '';
else
cur = cur.split('==')[1];
['name'].forEach(function(i) {
tmp += '<option value="' + i + '"' + ((i == cur) ? ' selected' : '') + '>' + i + '</option>';
});
tmp += '</select><br><input type="text" value="' + cur + '" class="form-control groups-search-val"></div>';
tools.modal({
head: 'Search',
body: tmp,
button: {
'Clear': {
type: 'warning',
close: true,
callback: groups.search.clr,
},
'Search': {
type: 'success',
close: true,
callback: function() {
groups.search.set($('.groups-search-select').val(), $('.groups-search-val').val());
}
},
}
})
}
}
});
//Set Toolpit
$('[data-toggle="tooltip"]').tooltip()
// Set Initail Page and get first groups
if (groups.page.cur() === null || isNaN(groups.page.cur()))
groups.page.set(1);
else
groups.page.set(groups.page.cur());
</script>
<div class="users-table-wrapper">
<table class="table table-hover users-table">
<thead>
<tr>
</tr>
</thead>
<tbody>
</tbody>
</table>
</div>
<script type="text/javascript">
var users = {
showInTable: ['firstname', 'lastname', 'nethz', 'legi', 'membership'],
curUserData: null,
// Page
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);
}
},
//Sorting
sort: {
cur: function() {
return tools.mem.session.get('curSort');
},
set: function(sort) {
tools.mem.session.set('curSort', sort);
users.get();
},
inv: function() {
var tmp = users.sort.cur();
if (tmp.charAt(0) == '-')
users.sort.set(tmp.slice(1));
else
users.sort.set('-' + tmp);
}
},
//Searching
search: {
cur: function() {
return tools.mem.session.get('search');
},
set: function(dom, val) {
tools.mem.session.set('search', dom + '==' + val);
users.page.set(1);
},
clr: function() {
tools.mem.session.set('search', '');
users.page.set(1);
},
},
// Get users
get: function() {
amivcore.users.GET({
data: {
'max_results': '50',
page: users.page.cur(),
sort: users.sort.cur(),
where: users.search.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 tr, .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'] + '" data-id="' + ret._id + '"><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: {
'Delete': {
type: 'danger',
callback: function() {
if (confirm('Fo\' shizzle my nizzle? U fo\' real?'))
amivcore.users.DELETE({
id: $('.users-user-edit-table').first().attr('data-id'),
header: {
'If-Match': $('.users-user-edit-table').attr('data-etag')
},
}, function(ret) {
if (ret === undefined) {
tools.log('User successfully deleted', 's');
users.get();
tools.modalClose();
} else {
tools.log('Error', 'e');
}
});
}
},
'Update': {
type: 'success',
close: true,
callback: 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();
});
}
},
//Make new user
add: function() {
var tmp = '<div class="row users-user-add-form"><div class="form-group col-xs-6"><label for="users-fn">Firstname:</label><input type="text" class="form-control" name="firstname" id="users-fn"></div>' +
'<div class="form-group col-xs-6"><label for="users-ln">Lastname:</label><input type="text" class="form-control" id="users-ln" name="lastname"></div>' +
'<div class="form-group"><label for="users-email">E-Mail:</label><input type="email" class="form-control" id="users-email" name="email"></div>' +
'<div class="form-group col-xs-6"><label for="users-membership">Membership:</label><select class="form-control" id="users-membership" name="membership"><option>regular</option><option>honorary</option><option>extraordinary</option></select></div>' +
'<div class="form-group col-xs-6"><label for="users-gender">Gender:</label><select class="form-control" id="users-gender" name="gender"><option>male</option><option>female</option></select></div>' +
'</div>';
tools.modal({
head: 'Spawn new AMIV slave',
body: tmp,
button: {
'Add': {
type: 'success',
callback: function() {
var newUserData = {};
$('.users-user-add-form input, .users-user-add-form select').each(function() {
newUserData[$(this).attr('name')] = $(this).val();
});
amivcore.users.POST({
data: newUserData
}, function(ret) {
if (!ret.hasOwnProperty('_status') || ret['_status'] != 'OK')
tools.log(JSON.stringify(ret.responseJSON['_issues']), 'e');
else {
tools.modalClose();
tools.log('User Added', 's');
users.get();
}
});
}
}
}
});
}
};
// Setup Menu
tools.ui.menu({
'<span class="glyphicon glyphicon-plus" aria-hidden="true" data-toggle="tooltip" data-placement="bottom" title="Create User"></span>': {
callback: users.add
},
'<span class="glyphicon glyphicon-arrow-left" aria-hidden="true" data-toggle="tooltip" data-placement="bottom" title="Previous Page"></span>': {
callback: users.page.dec
},
'<span data-toggle="tooltip" data-placement="bottom" title="Set Page"><span class="users-cur-page-cont" aria-hidden="true"></span> / <span class="users-page-max-cont" aria-hidden="true"></span></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': {
type: 'success',
close: true,
callback: function() {
users.page.set($('.users-go-page').val());
},
}
}
});
}
},
'<span class="glyphicon glyphicon-arrow-right" aria-hidden="true" data-toggle="tooltip" data-placement="bottom" title="Next Page"></span>': {
callback: users.page.inc
},
'<span class="glyphicon glyphicon-sort" aria-hidden="true" data-toggle="tooltip" data-placement="bottom" title="Sort"></span>': {
callback: function() {
var tmp = '<div class="form-group"><select class="form-control users-sort-select">';
var cur = users.sort.cur();
['_id', 'firstname', 'lastname', 'membership', 'nethz'].forEach(function(i) {
tmp += '<option value="' + i + '"' + ((i == cur) ? ' selected' : '') + '>&#8673; ' + i + '</option>';
tmp += '<option value="-' + i + '"' + (('-' + i == cur) ? ' selected' : '') + '>&#8675; ' + i + '</option>';
});
tmp += '</select></div>';
tools.modal({
head: 'Sort',
body: tmp,
button: {
'Sort': {
type: 'success',
close: true,
callback: function() {
users.sort.set($('.users-sort-select').val());
}
}
}
});
}
},
'<span class="glyphicon glyphicon-search" aria-hidden="true" data-toggle="tooltip" data-placement="bottom" title="Search"></span>': {
callback: function() {
var tmp = '<div class="form-group"><select class="form-control users-search-select">';
var cur = users.search.cur();
if (cur === null || cur == '')
cur = '';
else
cur = cur.split('==')[1];
['_id', 'firstname', 'lastname'].forEach(function(i) {
tmp += '<option value="' + i + '"' + ((i == cur) ? ' selected' : '') + '>' + i + '</option>';
});
tmp += '</select><br><input type="text" value="' + cur + '" class="form-control users-search-val"></div>';
tools.modal({
head: 'Search',
body: tmp,
button: {
'Clear': {
type: 'warning',
close: true,
callback: users.search.clr,
},
'Search': {
type: 'success',
close: true,
callback: function() {
users.search.set($('.users-search-select').val(), $('.users-search-val').val());
}
},
}
})
}
}
});
//Set Toolpit
$('[data-toggle="tooltip"]').tooltip()
// 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>
<div class="users-table-wrapper">
<table class="table table-hover users-table">
<thead>
<tr>
</tr>
</thead>
<tbody>
</tbody>
</table>
</div>
<script type="text/javascript">
var users = {
showInTable: ['firstname', 'lastname', 'nethz', 'legi', 'membership'],
curUserData: null,
// Page
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);
}
},
//Sorting
sort: {
cur: function() {
return tools.mem.session.get('curSort');
},
set: function(sort) {
tools.mem.session.set('curSort', sort);
users.get();
},
inv: function() {
var tmp = users.sort.cur();
if (tmp.charAt(0) == '-')
users.sort.set(tmp.slice(1));
else
users.sort.set('-' + tmp);
}
},
//Searching
search: {
cur: function() {
return tools.mem.session.get('search');
},
set: function(dom, val) {
tools.mem.session.set('search', dom + '==' + val);
users.page.set(1);
},
clr: function() {
tools.mem.session.set('search', '');
users.page.set(1);
},
},
// Get users
get: function() {
amivcore.users.GET({
data: {
'max_results': '50',
page: users.page.cur(),
sort: users.sort.cur(),
where: users.search.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 tr, .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'] + '" data-id="' + ret._id + '"><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: {
'Delete': {
type: 'danger',
callback: function() {
if (confirm('Fo\' shizzle my nizzle? U fo\' real?'))
amivcore.users.DELETE({
id: $('.users-user-edit-table').first().attr('data-id'),
header: {
'If-Match': $('.users-user-edit-table').attr('data-etag')
},
}, function(ret) {
if (ret === undefined) {
tools.log('User successfully deleted', 's');
users.get();
tools.modalClose();
} else {
tools.log('Error', 'e');
}
});
}
},
'Update': {
type: 'success',
close: true,
callback: 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();
});
}
},
//Make new user
add: function() {
var tmp = '<div class="row users-user-add-form"><div class="form-group col-xs-6"><label for="users-fn">Firstname:</label><input type="text" class="form-control" name="firstname" id="users-fn"></div>' +
'<div class="form-group col-xs-6"><label for="users-ln">Lastname:</label><input type="text" class="form-control" id="users-ln" name="lastname"></div>' +
'<div class="form-group"><label for="users-email">E-Mail:</label><input type="email" class="form-control" id="users-email" name="email"></div>' +
'<div class="form-group col-xs-6"><label for="users-membership">Membership:</label><select class="form-control" id="users-membership" name="membership"><option>regular</option><option>honorary</option><option>extraordinary</option></select></div>' +
'<div class="form-group col-xs-6"><label for="users-gender">Gender:</label><select class="form-control" id="users-gender" name="gender"><option>male</option><option>female</option></select></div>' +
'</div>';
tools.modal({
head: 'Spawn new AMIV slave',
body: tmp,
button: {
'Add': {
type: 'success',
callback: function() {
var newUserData = {};
$('.users-user-add-form input, .users-user-add-form select').each(function() {
newUserData[$(this).attr('name')] = $(this).val();
});
amivcore.users.POST({
data: newUserData
}, function(ret) {
if (!ret.hasOwnProperty('_status') || ret['_status'] != 'OK')
tools.log(JSON.stringify(ret.responseJSON['_issues']), 'e');
else {
tools.modalClose();
tools.log('User Added', 's');
users.get();
}
});
}
}
}
});
}
};
// Setup Menu
tools.ui.menu({
'<span class="glyphicon glyphicon-plus" aria-hidden="true" data-toggle="tooltip" data-placement="bottom" title="Create User"></span>': {
callback: users.add
},
'<span class="glyphicon glyphicon-arrow-left" aria-hidden="true" data-toggle="tooltip" data-placement="bottom" title="Previous Page"></span>': {
callback: users.page.dec
},
'<span data-toggle="tooltip" data-placement="bottom" title="Set Page"><span class="users-cur-page-cont" aria-hidden="true"></span> / <span class="users-page-max-cont" aria-hidden="true"></span></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': {
type: 'success',
close: true,
callback: function() {
users.page.set($('.users-go-page').val());
},
}
}
});
}
},
'<span class="glyphicon glyphicon-arrow-right" aria-hidden="true" data-toggle="tooltip" data-placement="bottom" title="Next Page"></span>': {
callback: users.page.inc
},
'<span class="glyphicon glyphicon-sort" aria-hidden="true" data-toggle="tooltip" data-placement="bottom" title="Sort"></span>': {
callback: function() {
var tmp = '<div class="form-group"><select class="form-control users-sort-select">';
var cur = users.sort.cur();
['_id', 'firstname', 'lastname', 'membership', 'nethz'].forEach(function(i) {
tmp += '<option value="' + i + '"' + ((i == cur) ? ' selected' : '') + '>&#8673; ' + i + '</option>';
tmp += '<option value="-' + i + '"' + (('-' + i == cur) ? ' selected' : '') + '>&#8675; ' + i + '</option>';
});
tmp += '</select></div>';
tools.modal({
head: 'Sort',
body: tmp,
button: {
'Sort': {
type: 'success',
close: true,
callback: function() {
users.sort.set($('.users-sort-select').val());
}
}
}
});
}
},
'<span class="glyphicon glyphicon-search" aria-hidden="true" data-toggle="tooltip" data-placement="bottom" title="Search"></span>': {
callback: function() {
var tmp = '<div class="form-group"><select class="form-control users-search-select">';
var cur = users.search.cur();
if (cur === null || cur == '')
cur = '';
else
cur = cur.split('==')[1];
['_id', 'firstname', 'lastname'].forEach(function(i) {
tmp += '<option value="' + i + '"' + ((i == cur) ? ' selected' : '') + '>' + i + '</option>';
});
tmp += '</select><br><input type="text" value="' + cur + '" class="form-control users-search-val"></div>';
tools.modal({
head: 'Search',
body: tmp,
button: {
'Clear': {
type: 'warning',
close: true,
callback: users.search.clr,
},
'Search': {
type: 'success',
close: true,
callback: function() {
users.search.set($('.users-search-select').val(), $('.users-search-val').val());
}
},
}
})
}
}
});
//Set Toolpit
$('[data-toggle="tooltip"]').tooltip()
// 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>
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment