FEATURE: add filters on email logs
This commit is contained in:
@@ -0,0 +1,20 @@
|
||||
/**
|
||||
This controller supports email logs functionality.
|
||||
|
||||
@class AdminEmailSkippedController
|
||||
@extends Discourse.Controller
|
||||
@namespace Discourse
|
||||
@module Discourse
|
||||
**/
|
||||
Discourse.AdminEmailSkippedController = Discourse.Controller.extend({
|
||||
|
||||
filterEmailLogs: Discourse.debounce(function() {
|
||||
var self = this;
|
||||
this.set("loading", true);
|
||||
Discourse.EmailLog.findAll(this.get("filter")).then(function(logs) {
|
||||
self.set("model", false);
|
||||
self.set("model", logs);
|
||||
});
|
||||
}, 250).observes("filter.user", "filter.address", "filter.type", "filter.reason"),
|
||||
|
||||
});
|
||||
@@ -0,0 +1,20 @@
|
||||
/**
|
||||
This controller supports email logs functionality.
|
||||
|
||||
@class AdminEmailSentController
|
||||
@extends Discourse.Controller
|
||||
@namespace Discourse
|
||||
@module Discourse
|
||||
**/
|
||||
Discourse.AdminEmailSentController = Discourse.Controller.extend({
|
||||
|
||||
filterEmailLogs: Discourse.debounce(function() {
|
||||
var self = this;
|
||||
this.set("loading", true);
|
||||
Discourse.EmailLog.findAll(this.get("filter")).then(function(logs) {
|
||||
self.set("loading", false);
|
||||
self.set("model", logs);
|
||||
});
|
||||
}, 250).observes("filter.user", "filter.address", "filter.type", "filter.reply_key"),
|
||||
|
||||
});
|
||||
@@ -9,25 +9,27 @@
|
||||
Discourse.EmailLog = Discourse.Model.extend({});
|
||||
|
||||
Discourse.EmailLog.reopenClass({
|
||||
|
||||
create: function(attrs) {
|
||||
attrs = attrs || {};
|
||||
|
||||
if (attrs.user) {
|
||||
attrs.user = Discourse.AdminUser.create(attrs.user);
|
||||
}
|
||||
|
||||
return this._super(attrs);
|
||||
},
|
||||
|
||||
findAll: function(filter) {
|
||||
var result = Em.A();
|
||||
Discourse.ajax("/admin/email/" + (filter === 'skipped' ? 'skipped' : 'logs') + ".json", {
|
||||
data: { filter: filter }
|
||||
}).then(function(logs) {
|
||||
_.each(logs,function(log) {
|
||||
result.pushObject(Discourse.EmailLog.create(log));
|
||||
filter = filter || {};
|
||||
var status = filter.status || "sent";
|
||||
filter = _.omit(filter, "status");
|
||||
|
||||
return Discourse.ajax("/admin/email/" + status + ".json", { data: filter }).then(function(logs) {
|
||||
return _.map(logs, function (log) {
|
||||
return Discourse.EmailLog.create(log);
|
||||
});
|
||||
});
|
||||
return result;
|
||||
}
|
||||
});
|
||||
|
||||
|
||||
@@ -8,13 +8,11 @@
|
||||
**/
|
||||
Discourse.AdminEmailIndexRoute = Discourse.Route.extend({
|
||||
|
||||
setupController: function(controller) {
|
||||
Discourse.EmailSettings.find().then(function (model) {
|
||||
controller.set('model', model);
|
||||
});
|
||||
model: function() {
|
||||
return Discourse.EmailSettings.find();
|
||||
},
|
||||
|
||||
renderTemplate: function() {
|
||||
this.render('admin/templates/email_index', {into: 'adminEmail'});
|
||||
this.render('admin/templates/email_index', { into: 'adminEmail' });
|
||||
}
|
||||
});
|
||||
|
||||
@@ -1,17 +0,0 @@
|
||||
/**
|
||||
Handles routes related to viewing email logs.
|
||||
|
||||
@class AdminEmailLogsRoute
|
||||
@extends Discourse.Route
|
||||
@namespace Discourse
|
||||
@module Discourse
|
||||
**/
|
||||
Discourse.AdminEmailLogsRoute = Discourse.Route.extend({
|
||||
model: function() {
|
||||
return Discourse.EmailLog.findAll();
|
||||
},
|
||||
|
||||
renderTemplate: function() {
|
||||
this.render('admin/templates/email_logs', {into: 'adminEmail'});
|
||||
}
|
||||
});
|
||||
@@ -0,0 +1,27 @@
|
||||
/**
|
||||
Handles routes related to viewing email logs.
|
||||
|
||||
@class AdminEmailSentRoute
|
||||
@extends Discourse.Route
|
||||
@namespace Discourse
|
||||
@module Discourse
|
||||
**/
|
||||
Discourse.AdminEmailLogsRoute = Discourse.Route.extend({
|
||||
|
||||
model: function() {
|
||||
return Discourse.EmailLog.findAll({ status: this.get("status") });
|
||||
},
|
||||
|
||||
setupController: function(controller) {
|
||||
// resets the filters
|
||||
controller.set("filter", { status: this.get("status") });
|
||||
},
|
||||
|
||||
renderTemplate: function() {
|
||||
this.render("admin/templates/email_" + this.get("status"), { into: "adminEmail" });
|
||||
}
|
||||
|
||||
});
|
||||
|
||||
Discourse.AdminEmailSentRoute = Discourse.AdminEmailLogsRoute.extend({ status: "sent" });
|
||||
Discourse.AdminEmailSkippedRoute = Discourse.AdminEmailLogsRoute.extend({ status: "skipped" });
|
||||
@@ -1,17 +0,0 @@
|
||||
/**
|
||||
Handles routes related to viewing email logs of emails that were NOT sent.
|
||||
|
||||
@class AdminEmailSkippedRoute
|
||||
@extends Discourse.Route
|
||||
@namespace Discourse
|
||||
@module Discourse
|
||||
**/
|
||||
Discourse.AdminEmailSkippedRoute = Discourse.Route.extend({
|
||||
model: function() {
|
||||
return Discourse.EmailLog.findAll('skipped');
|
||||
},
|
||||
|
||||
renderTemplate: function() {
|
||||
this.render('admin/templates/email_skipped', {into: 'adminEmail'});
|
||||
}
|
||||
});
|
||||
@@ -16,7 +16,7 @@ Discourse.Route.buildRoutes(function() {
|
||||
});
|
||||
|
||||
this.resource('adminEmail', { path: '/email'}, function() {
|
||||
this.route('logs');
|
||||
this.route('sent');
|
||||
this.route('skipped');
|
||||
this.route('previewDigest', { path: '/preview-digest' });
|
||||
});
|
||||
|
||||
@@ -2,7 +2,7 @@
|
||||
<div class='span15'>
|
||||
<ul class="nav nav-pills">
|
||||
<li>{{#link-to 'adminEmail.index'}}{{i18n admin.email.settings}}{{/link-to}}</li>
|
||||
<li>{{#link-to 'adminEmail.logs'}}{{i18n admin.email.logs}}{{/link-to}}</li>
|
||||
<li>{{#link-to 'adminEmail.sent'}}{{i18n admin.email.sent}}{{/link-to}}</li>
|
||||
<li>{{#link-to 'adminEmail.skipped'}}{{i18n admin.email.skipped}}{{/link-to}}</li>
|
||||
<li>{{#link-to 'adminEmail.previewDigest'}}{{i18n admin.email.preview_digest}}{{/link-to}}</li>
|
||||
</ul>
|
||||
|
||||
+11
-1
@@ -9,7 +9,15 @@
|
||||
</tr>
|
||||
</thead>
|
||||
|
||||
{{#if model.length}}
|
||||
<tr class="filters">
|
||||
<td>{{i18n admin.email.logs.filters.title}}</td>
|
||||
<td>{{textField value=filter.user placeholderKey="admin.email.logs.filters.user_placeholder"}}</td>
|
||||
<td>{{textField value=filter.address placeholderKey="admin.email.logs.filters.address_placeholder"}}</td>
|
||||
<td>{{textField value=filter.type placeholderKey="admin.email.logs.filters.type_placeholder"}}</td>
|
||||
<td>{{textField value=filter.reply_key placeholderKey="admin.email.logs.filters.reply_key_placeholder"}}</td>
|
||||
</tr>
|
||||
|
||||
{{#if model}}
|
||||
{{#groupedEach model}}
|
||||
<tr>
|
||||
<td>{{unboundDate created_at}}</td>
|
||||
@@ -26,6 +34,8 @@
|
||||
<td>{{reply_key}}</td>
|
||||
</tr>
|
||||
{{/groupedEach}}
|
||||
{{else}}
|
||||
<tr><td colspan="5">{{i18n admin.email.logs.none}}</td></tr>
|
||||
{{/if}}
|
||||
|
||||
</table>
|
||||
@@ -9,7 +9,15 @@
|
||||
</tr>
|
||||
</thead>
|
||||
|
||||
{{#if model.length}}
|
||||
<tr class="filters">
|
||||
<td>{{i18n admin.email.logs.filters.title}}</td>
|
||||
<td>{{textField value=filter.user placeholderKey="admin.email.logs.filters.user_placeholder"}}</td>
|
||||
<td>{{textField value=filter.address placeholderKey="admin.email.logs.filters.address_placeholder"}}</td>
|
||||
<td>{{textField value=filter.type placeholderKey="admin.email.logs.filters.type_placeholder"}}</td>
|
||||
<td>{{textField value=filter.skipReason placeholderKey="admin.email.logs.filters.skip_reason_placeholder"}}</td>
|
||||
</tr>
|
||||
|
||||
{{#if model}}
|
||||
{{#groupedEach model}}
|
||||
<tr>
|
||||
<td>{{unboundDate created_at}}</td>
|
||||
@@ -23,11 +31,11 @@
|
||||
</td>
|
||||
<td><a href='mailto:{{unbound to_address}}'>{{to_address}}</a></td>
|
||||
<td>{{email_type}}</td>
|
||||
<td>
|
||||
{{skipped_reason}}
|
||||
</td>
|
||||
<td>{{skipped_reason}}</td>
|
||||
</tr>
|
||||
{{/groupedEach}}
|
||||
{{else}}
|
||||
<tr><td colspan="5">{{i18n admin.email.logs.none}}</td></tr>
|
||||
{{/if}}
|
||||
|
||||
</table>
|
||||
|
||||
Reference in New Issue
Block a user