Mail-Queue management in admin panel.
This commit is contained in:
parent
807f3f5fb2
commit
26aaec385a
8 changed files with 376 additions and 3 deletions
admin/js
|
@ -129,6 +129,60 @@ angular.module('ffffngAdmin').config(function(NgAdminConfigurationProvider, Rest
|
|||
|
||||
admin.addEntity(nodes);
|
||||
|
||||
function mailClasses(mail) {
|
||||
if (!mail) {
|
||||
return;
|
||||
}
|
||||
|
||||
var failures = mail.values.failures;
|
||||
|
||||
if (failures === 0) {
|
||||
return 'mails-pending';
|
||||
}
|
||||
|
||||
if (failures >= 5) {
|
||||
return 'mails-failed-max';
|
||||
}
|
||||
|
||||
return 'mails-failed';
|
||||
}
|
||||
|
||||
var mails = nga.entity('mails').label('Mail-Queue');
|
||||
mails
|
||||
.listView()
|
||||
.title('Mail-Queue')
|
||||
.perPage(30)
|
||||
.sortDir('ASC')
|
||||
.sortField('id')
|
||||
.actions([])
|
||||
.batchActions([])
|
||||
.exportFields([])
|
||||
.fields([
|
||||
nga.field('id').cssClasses(mailClasses),
|
||||
nga.field('failures').cssClasses(mailClasses),
|
||||
nga.field('sender').cssClasses(mailClasses),
|
||||
nga.field('recipient').cssClasses(mailClasses),
|
||||
nga.field('email').cssClasses(mailClasses),
|
||||
nga.field('created_at').map(formatMoment).cssClasses(mailClasses),
|
||||
nga.field('modified_at').map(formatMoment).cssClasses(mailClasses)
|
||||
])
|
||||
.filters([
|
||||
nga.field('q')
|
||||
.label('')
|
||||
.pinned(true)
|
||||
.template(
|
||||
'<div class="input-group">' +
|
||||
'<input type="text" ng-model="value" placeholder="Search" class="form-control"></input>' +
|
||||
'<span class="input-group-addon"><i class="fa fa-search"></i></span></div>'),
|
||||
])
|
||||
.listActions(
|
||||
'<fa-mail-action-button disabled="entry.values.failures === 0" action="reset" icon="refresh" label="Retry" mail="entry" button="success" label="run" size="sm"></fa-mail-action-button> ' +
|
||||
'<ma-delete-button entry="entry" entity="entity" size="sm"></ma-delete-button>'
|
||||
)
|
||||
;
|
||||
|
||||
admin.addEntity(mails);
|
||||
|
||||
function taskClasses(task) {
|
||||
if (!task) {
|
||||
return;
|
||||
|
@ -178,6 +232,10 @@ angular.module('ffffngAdmin').config(function(NgAdminConfigurationProvider, Rest
|
|||
.menu(nodes)
|
||||
.icon('<i class="fa fa-dot-circle-o"></i>')
|
||||
)
|
||||
.addChild(nga
|
||||
.menu(mails)
|
||||
.icon('<span class="fa fa-envelope"></span>')
|
||||
)
|
||||
.addChild(nga
|
||||
.menu(tasks)
|
||||
.icon('<span class="fa fa-cog"></span>')
|
||||
|
|
42
admin/js/views/mailActionButton.js
Normal file
42
admin/js/views/mailActionButton.js
Normal file
|
@ -0,0 +1,42 @@
|
|||
'use strict';
|
||||
|
||||
angular.module('ffffngAdmin')
|
||||
.directive('faMailActionButton', function (Restangular, $state, notification) {
|
||||
var link = function (scope) {
|
||||
scope.label = scope.label || 'ACTION';
|
||||
scope.icon = scope.icon || 'envelope';
|
||||
scope.button = scope.button || 'default';
|
||||
|
||||
scope.perform = function () {
|
||||
var mail = scope.mail();
|
||||
|
||||
Restangular
|
||||
.one('/internal/api/mails/' + scope.action, mail.values.id).put()
|
||||
.then(function () { $state.reload() })
|
||||
.then(function () { notification.log('Done', { addnCls: 'humane-flatty-success' }); })
|
||||
.catch(function (e) {
|
||||
notification.log('Error: ' + e.data, { addnCls: 'humane-flatty-error' });
|
||||
console.error(e)
|
||||
});
|
||||
};
|
||||
};
|
||||
|
||||
return {
|
||||
'link': link,
|
||||
'restrict': 'E',
|
||||
'scope': {
|
||||
'action': '@',
|
||||
'icon': '@',
|
||||
'mail': '&',
|
||||
'size': '@',
|
||||
'label': '@',
|
||||
'button': '@',
|
||||
'disabled': '='
|
||||
},
|
||||
|
||||
'template':
|
||||
'<button class="btn btn-{{ button }}" ng-disabled="disabled" ng-class="size ? \'btn-\' + size : \'\'" ng-click="perform()">' +
|
||||
'<span class="fa fa-{{ icon }}" aria-hidden="true"></span> <span class="hidden-xs">{{ label }}</span>' +
|
||||
'</button>'
|
||||
};
|
||||
});
|
Loading…
Add table
Add a link
Reference in a new issue