diff --git a/data/interfaces/default/current_activity.html b/data/interfaces/default/current_activity.html
index 5241d10e..4cea9945 100644
--- a/data/interfaces/default/current_activity.html
+++ b/data/interfaces/default/current_activity.html
@@ -25,7 +25,7 @@
% if a['type'] == 'episode':
diff --git a/data/interfaces/default/js/script.js b/data/interfaces/default/js/script.js
index 98b34a40..6237e963 100644
--- a/data/interfaces/default/js/script.js
+++ b/data/interfaces/default/js/script.js
@@ -207,4 +207,14 @@ function getPlatformImagePath(platformName) {
} else {
return 'interfaces/default/images/platforms/default.png';
}
+}
+
+function isPrivateIP(ip_address) {
+ var parts = ip_address.split('.');
+ if (parts[0] === '10' ||
+ (parts[0] === '172' && (parseInt(parts[1], 10) >= 16 && parseInt(parts[1], 10) <= 31)) ||
+ (parts[0] === '192' && parts[1] === '168')) {
+ return true;
+ }
+ return false;
}
\ No newline at end of file
diff --git a/data/interfaces/default/js/tables/history_table.js b/data/interfaces/default/js/tables/history_table.js
index fc02822a..634d4bf5 100644
--- a/data/interfaces/default/js/tables/history_table.js
+++ b/data/interfaces/default/js/tables/history_table.js
@@ -20,7 +20,7 @@ history_table_options = {
"infoFiltered":"(filtered from _MAX_ total entries)",
"emptyTable": "No data in table",
},
- "stateSave": true,
+ "stateSave": false,
"sPaginationType": "bootstrap",
"processing": false,
"serverSide": true,
@@ -48,7 +48,14 @@ history_table_options = {
},
{
"targets": [2],
- "data":"user"
+ "data":"user",
+ "createdCell": function (td, cellData, rowData, row, col) {
+ if (cellData !== '') {
+ $(td).html('
' + cellData + ' ');
+ } else {
+ $(td).html(cellData);
+ }
+ },
},
{
"targets": [3],
diff --git a/data/interfaces/default/js/tables/logs.js b/data/interfaces/default/js/tables/logs.js
new file mode 100644
index 00000000..5fa6e8df
--- /dev/null
+++ b/data/interfaces/default/js/tables/logs.js
@@ -0,0 +1,41 @@
+$('#log_table').dataTable( {
+ "processing": false,
+ "serverSide": true,
+ "ajax": {
+ "url": "getLog"
+ },
+ "sPaginationType": "bootstrap",
+ "order": [ 0, 'desc'],
+ "pageLength": 10,
+ "stateSave": true,
+ "language": {
+ "search":"Search: ",
+ "lengthMenu":"Show _MENU_ lines per page",
+ "emptyTable": "No log information available",
+ "info":"Showing _START_ to _END_ of _TOTAL_ lines",
+ "infoEmpty":"Showing 0 to 0 of 0 lines",
+ "infoFiltered":"(filtered from _MAX_ total lines)"},
+ "columnDefs": [
+ {
+ "targets": [0],
+ "width": "15%"
+ },
+ {
+ "targets": [1],
+ "width": "10%"
+ },
+ {
+ "targets": [2],
+ "width": "75%"
+ }
+ ],
+ "drawCallback": function (settings) {
+ // Jump to top of page
+ $('html,body').scrollTop(0);
+ $('#ajaxMsg').addClass('success').fadeOut();
+ },
+ "preDrawCallback": function(settings) {
+ $('#ajaxMsg').html("
Fetching rows...
");
+ $('#ajaxMsg').addClass('success').fadeIn();
+ }
+});
diff --git a/data/interfaces/default/js/tables/user_ips.js b/data/interfaces/default/js/tables/user_ips.js
new file mode 100644
index 00000000..99314278
--- /dev/null
+++ b/data/interfaces/default/js/tables/user_ips.js
@@ -0,0 +1,105 @@
+user_ip_table_options = {
+ "destroy": true,
+ "language": {
+ "search": "Search: ",
+ "lengthMenu":"Show _MENU_ entries per page",
+ "info":"Showing _START_ to _END_ of _TOTAL_ results",
+ "infoEmpty":"Showing 0 to 0 of 0 entries",
+ "infoFiltered":"(filtered from _MAX_ total entries)",
+ "emptyTable": "No data in table",
+ },
+ "stateSave": false,
+ "sPaginationType": "bootstrap",
+ "processing": false,
+ "serverSide": true,
+ "pageLength": 10,
+ "order": [ 0, 'desc'],
+ "autoWidth": false,
+ "columnDefs": [
+ {
+ "targets": [0],
+ "data":"last_seen",
+ "render": function ( data, type, full ) {
+ return moment(data, "X").fromNow();
+ },
+ "searchable": false,
+ "width": "15%"
+ },
+ {
+ "targets": [1],
+ "data":"ip_address",
+ "width": "15%",
+ "className": "modal-control",
+ "createdCell": function (td, cellData, rowData, row, col) {
+ if (isPrivateIP(cellData)) {
+ $(td).html(cellData);
+ } else {
+ $(td).html('
 ' + cellData +'');
+ }
+ },
+ "width": "15%"
+ },
+ {
+ "targets": [2],
+ "data":"play_count",
+ "width": "10%"
+ },
+ {
+ "targets": [3],
+ "data":"platform",
+ "width": "15%"
+ },
+ {
+ "targets": [4],
+ "data":"last_watched",
+ "width": "30%"
+ }
+ ],
+ "drawCallback": function (settings) {
+ // Jump to top of page
+ // $('html,body').scrollTop(0);
+ $('#ajaxMsg').addClass('success').fadeOut();
+ },
+ "preDrawCallback": function(settings) {
+ $('#ajaxMsg').html("
Fetching rows...
");
+ $('#ajaxMsg').addClass('success').fadeIn();
+ }
+}
+
+$('#user_ip_table').on('mouseenter', 'td.modal-control span', function () {
+ $(this).tooltip();
+});
+
+$('#user_ip_table').on('click', 'td.modal-control', function () {
+ var tr = $(this).parents('tr');
+ var row = user_ip_table.row( tr );
+ var rowData = row.data();
+
+ function getUserLocation(ip_address) {
+ if (isPrivateIP(ip_address)) {
+ return "n/a"
+ } else {
+ $.ajax({
+ url: 'http://ip-api.com/json/' + ip_address,
+ cache: true,
+ async: true,
+ type: 'GET',
+ dataType: 'json',
+ success: function(data) {
+ $('#ip_address').html(ip_address);
+ $('#country').html(data.country);
+ $('#city').html(data.city);
+ $('#region').html(data.regionName);
+ $('#timezone').html(data.timezone);
+ $('#lat').html(data.lat);
+ $('#lon').html(data.lon);
+ $('#isp').html(data.isp);
+ $('#org').html(data.org);
+ $('#as').html(data.as);
+ }
+ });
+ }
+ }
+
+ getUserLocation(rowData['ip_address']);
+});
\ No newline at end of file
diff --git a/data/interfaces/default/js/tables/users.js b/data/interfaces/default/js/tables/users.js
new file mode 100644
index 00000000..cbde3b2e
--- /dev/null
+++ b/data/interfaces/default/js/tables/users.js
@@ -0,0 +1,77 @@
+users_list_table_options = {
+ "language": {
+ "search": "Search: ",
+ "lengthMenu":"Show _MENU_ entries per page",
+ "info":"Showing _START_ to _END_ of _TOTAL_ active users",
+ "infoEmpty":"Showing 0 to 0 of 0 entries",
+ "infoFiltered":"",
+ "emptyTable": "No data in table",
+ },
+ "destroy": true,
+ "processing": false,
+ "serverSide": true,
+ "pageLength": 10,
+ "order": [ 0, 'asc'],
+ "ajax": {
+ "url": "get_user_list"
+ },
+ "bLengthChange": true,
+ "bInfo": true,
+ "bAutoWidth": true,
+ "aaSorting": [[ 0, "asc" ]],
+ "bStateSave": true,
+ "bSortClasses": true,
+ "sPaginationType": "bootstrap",
+ "columnDefs": [
+ {
+ "targets": [0],
+ "data": null,
+ "createdCell": function (td, cellData, rowData, row, col) {
+ //if (rowData['user_thumb'] === '') {
+ $(td).html('
');
+ //} else {
+ // $(td).html('
');
+ //}
+ },
+ "orderable": false,
+ "className": "users-poster-face",
+ "width": "40px"
+ },
+ {
+ "targets": [1],
+ "data": "user",
+ "createdCell": function (td, cellData, rowData, row, col) {
+ if (cellData !== '') {
+ $(td).html('
' + cellData + ' ');
+ } else {
+ $(td).html(cellData);
+ }
+ },
+ },
+ {
+ "targets": [2],
+ "data": "time",
+ "render": function ( data, type, full ) {
+ return moment(data, "X").fromNow();
+ }
+ },
+ {
+ "targets": [3],
+ "data": "ip_address",
+ "searchable": false
+ },
+ {
+ "targets": [4],
+ "data": "plays"
+ }
+ ],
+ "drawCallback": function (settings) {
+ // Jump to top of page
+ $('html,body').scrollTop(0);
+ $('#ajaxMsg').addClass('success').fadeOut();
+ },
+ "preDrawCallback": function(settings) {
+ $('#ajaxMsg').html("
Fetching rows...
");
+ $('#ajaxMsg').addClass('success').fadeIn();
+ }
+}
diff --git a/data/interfaces/default/logs.html b/data/interfaces/default/logs.html
index fb8c866a..c153abf5 100644
--- a/data/interfaces/default/logs.html
+++ b/data/interfaces/default/logs.html
@@ -24,7 +24,12 @@
@@ -68,69 +73,23 @@
<%def name="javascriptIncludes()">
-
+
-
%def>
diff --git a/data/interfaces/default/user.html b/data/interfaces/default/user.html
index 46d36fdf..aeebf954 100644
--- a/data/interfaces/default/user.html
+++ b/data/interfaces/default/user.html
@@ -7,218 +7,214 @@
%def>
-<%def name="body()">
-
-
-
-
-
-
-
-
- Username
-
-
-
-
-
-
-
-
-
-
-
-
-
-
+% if user != None:
+ <%def name="body()">
+
+
+
+
+
+
-
-
-
-