diff --git a/src/js/index.js b/src/js/index.js index 56578a0fa..646ce8051 100644 --- a/src/js/index.js +++ b/src/js/index.js @@ -81,6 +81,9 @@ app.config(['$routeProvider', function ($routeProvider) { }).when('/email', { controller: 'EmailsController', templateUrl: 'views/emails.html?<%= revision %>' + }).when('/emails-eventlog', { + controller: 'EmailsEventlogController', + templateUrl: 'views/emails-eventlog.html?<%= revision %>' }).when('/email/:domain', { controller: 'EmailController', templateUrl: 'views/email.html?<%= revision %>' diff --git a/src/theme.scss b/src/theme.scss index b3339951d..2c8c7414c 100644 --- a/src/theme.scss +++ b/src/theme.scss @@ -557,6 +557,9 @@ multiselect { .maillog-filter { display: inline-block; + padding-left: 0; + margin: 20px 0; + border-radius: 2px; .form-control { display: inline-block; diff --git a/src/views/emails-eventlog.html b/src/views/emails-eventlog.html new file mode 100644 index 000000000..09ccdc947 --- /dev/null +++ b/src/views/emails-eventlog.html @@ -0,0 +1,87 @@ +
+ {{ 'email.backAction' | tr }} + +
+

+ {{ 'emails.eventlog.title' | tr }} + + Raw Logs +

+
+
+ +
+
+
+ + + +
+ +
+
+ +
+
+
+
+

+ + + + + + + + + + + + + + + + + + + + + + + +
{{ 'emails.eventlog.time' | tr }}{{ 'emails.eventlog.details' | tr }}
+
+
+ {{ 'emails.eventlog.empty' | tr }} +
+
+
+ + + + + + + + {{ eventlog.ts | prettyDate }} + {{ 'emails.eventlog.type.bounceInfo' | tr:eventlog }} + {{ 'emails.eventlog.type.deferredInfo' | tr:eventlog }} + + {{ 'emails.eventlog.type.inboundInfo' | tr:eventlog }} + {{ 'emails.eventlog.type.outboundInfo' | tr:eventlog }} + + {{ 'emails.eventlog.type.receivedInfo' | tr:eventlog }} + {{ 'emails.eventlog.type.deliveredInfo' | tr:eventlog }} + {{ 'emails.eventlog.type.deniedInfo' | tr:eventlog }} + {{ 'emails.eventlog.type.spamFilterTrainedInfo' | tr:eventlog }} +
+
{{ eventlog | json }}
+
+
+
+
+
diff --git a/src/views/emails-eventlog.js b/src/views/emails-eventlog.js new file mode 100644 index 000000000..d9df4c245 --- /dev/null +++ b/src/views/emails-eventlog.js @@ -0,0 +1,81 @@ +'use strict'; + +/* global $ */ +/* global angular */ + +angular.module('Application').controller('EmailsEventlogController', ['$scope', '$location', '$translate', '$timeout', 'Client', function ($scope, $location, $translate, $timeout, Client) { + Client.onReady(function () { if (!Client.getUserInfo().isAtLeastOwner) $location.path('/'); }); + + $scope.ready = false; + $scope.config = Client.getConfig(); + $scope.user = Client.getUserInfo(); + + $scope.pageItemCount = [ + { name: $translate.instant('main.pagination.perPageSelector', { n: 20 }), value: 20 }, + { name: $translate.instant('main.pagination.perPageSelector', { n: 50 }), value: 50 }, + { name: $translate.instant('main.pagination.perPageSelector', { n: 100 }), value: 100 } + ]; + + $scope.activityTypes = [ + { name: 'Bounce', value: 'bounce' }, + { name: 'Deferred', value: 'deferred' }, + { name: 'Delivered', value: 'delivered' }, + { name: 'Denied', value: 'denied' }, + { name: 'Queued', value: 'queued' }, + { name: 'Received', value: 'received' }, + ]; + + $scope.activity = { + busy: true, + eventLogs: [], + activeEventLog: null, + currentPage: 1, + perPage: 20, + pageItems: $scope.pageItemCount[0], + selectedTypes: [], + search: '', + + refresh: function () { + $scope.activity.busy = true; + + var types = $scope.activity.selectedTypes.map(function (a) { return a.value; }).join(','); + + Client.getMailEventLogs($scope.activity.search, types, $scope.activity.currentPage, $scope.activity.pageItems.value, function (error, result) { + if (error) return console.error('Failed to fetch mail eventlogs.', error); + + $scope.activity.busy = false; + + $scope.activity.eventLogs = result; + }); + }, + + showNextPage: function () { + $scope.activity.currentPage++; + $scope.activity.refresh(); + }, + + showPrevPage: function () { + if ($scope.activity.currentPage > 1) $scope.activity.currentPage--; + else $scope.activity.currentPage = 1; + $scope.activity.refresh(); + }, + + showEventLogDetails: function (eventLog) { + if ($scope.activity.activeEventLog === eventLog) $scope.activity.activeEventLog = null; + else $scope.activity.activeEventLog = eventLog; + }, + + updateFilter: function (fresh) { + if (fresh) $scope.activity.currentPage = 1; + $scope.activity.refresh(); + } + }; + + Client.onReady(function () { + $scope.ready = true; + + $scope.activity.refresh(); + }); + + $('.modal-backdrop').remove(); +}]); diff --git a/src/views/emails.html b/src/views/emails.html index d378888a4..0f6dbd1f2 100644 --- a/src/views/emails.html +++ b/src/views/emails.html @@ -166,7 +166,7 @@ {{ 'emails.title' | tr }}
- +
@@ -275,95 +275,4 @@ -
- -
-

{{ 'emails.eventlog.title' | tr }}

-
- -
-
-
- - - -
-
- - - -
-
-
- -
-
-
-

-
-
-
-
- - - - - - - - - - - - - - - - - - - - - - - - - - - - -
{{ 'emails.eventlog.time' | tr }}{{ 'emails.eventlog.details' | tr }}
- -
-
-
- {{ 'emails.eventlog.empty' | tr }} -
-
-
- - - - - - - - {{ eventlog.ts | prettyDate }} - {{ 'emails.eventlog.type.bounceInfo' | tr:eventlog }} - {{ 'emails.eventlog.type.deferredInfo' | tr:eventlog }} - - {{ 'emails.eventlog.type.inboundInfo' | tr:eventlog }} - {{ 'emails.eventlog.type.outboundInfo' | tr:eventlog }} - - {{ 'emails.eventlog.type.receivedInfo' | tr:eventlog }} - {{ 'emails.eventlog.type.deliveredInfo' | tr:eventlog }} - {{ 'emails.eventlog.type.deniedInfo' | tr:eventlog }} - {{ 'emails.eventlog.type.spamFilterTrainedInfo' | tr:eventlog }} -
-
{{ eventlog | json }}
-
-
-
-
- diff --git a/src/views/emails.js b/src/views/emails.js index fdfefe9e9..d7ce487c6 100644 --- a/src/views/emails.js +++ b/src/views/emails.js @@ -10,67 +10,6 @@ angular.module('Application').controller('EmailsController', ['$scope', '$locati $scope.user = Client.getUserInfo(); $scope.domains = []; - $scope.pageItemCount = [ - { name: $translate.instant('main.pagination.perPageSelector', { n: 20 }), value: 20 }, - { name: $translate.instant('main.pagination.perPageSelector', { n: 50 }), value: 50 }, - { name: $translate.instant('main.pagination.perPageSelector', { n: 100 }), value: 100 } - ]; - - $scope.activityTypes = [ - { name: 'Bounce', value: 'bounce' }, - { name: 'Deferred', value: 'deferred' }, - { name: 'Delivered', value: 'delivered' }, - { name: 'Denied', value: 'denied' }, - { name: 'Queued', value: 'queued' }, - { name: 'Received', value: 'received' }, - ]; - - $scope.activity = { - busy: true, - eventLogs: [], - activeEventLog: null, - currentPage: 1, - perPage: 20, - pageItems: $scope.pageItemCount[0], - selectedTypes: [], - search: '', - - refresh: function () { - $scope.activity.busy = true; - - var types = $scope.activity.selectedTypes.map(function (a) { return a.value; }).join(','); - - Client.getMailEventLogs($scope.activity.search, types, $scope.activity.currentPage, $scope.activity.pageItems.value, function (error, result) { - if (error) return console.error('Failed to fetch mail eventlogs.', error); - - $scope.activity.busy = false; - - $scope.activity.eventLogs = result; - }); - }, - - showNextPage: function () { - $scope.activity.currentPage++; - $scope.activity.refresh(); - }, - - showPrevPage: function () { - if ($scope.activity.currentPage > 1) $scope.activity.currentPage--; - else $scope.activity.currentPage = 1; - $scope.activity.refresh(); - }, - - showEventLogDetails: function (eventLog) { - if ($scope.activity.activeEventLog === eventLog) $scope.activity.activeEventLog = null; - else $scope.activity.activeEventLog = eventLog; - }, - - updateFilter: function (fresh) { - if (fresh) $scope.activity.currentPage = 1; - $scope.activity.refresh(); - } - }; - // this is required because we need to rewrite the MAIL_SERVER_NAME env var $scope.reconfigureEmailApps = function () { var installedApps = Client.getInstalledApps(); @@ -421,8 +360,6 @@ angular.module('Application').controller('EmailsController', ['$scope', '$locati $scope.domains = domains; $scope.ready = true; - if ($scope.user.role === 'owner') $scope.activity.refresh(); - $scope.mailLocation.refresh(); $scope.maxEmailSize.refresh(); $scope.spamConfig.refresh();