FEATURE: add all email logs tab
This commit is contained in:
parent
3f3c9ca7cb
commit
683bf8c0a4
|
@ -0,0 +1,40 @@
|
|||
/**
|
||||
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;
|
||||
Discourse.EmailLog.findAll(this.get("filter")).then(function(logs) {
|
||||
self.set("model", logs);
|
||||
});
|
||||
}, 250).observes("filter.user", "filter.address", "filter.type", "filter.reply_key"),
|
||||
|
||||
});
|
||||
|
||||
/**
|
||||
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;
|
||||
Discourse.EmailLog.findAll(this.get("filter")).then(function(logs) {
|
||||
self.set("model", logs);
|
||||
});
|
||||
}, 250).observes("filter.user", "filter.address", "filter.type", "filter.skipped_reason"),
|
||||
|
||||
});
|
||||
|
||||
|
||||
Discourse.AdminEmailAllController = Discourse.AdminEmailSkippedController.extend({});
|
|
@ -1,20 +0,0 @@
|
|||
/**
|
||||
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"),
|
||||
|
||||
});
|
|
@ -1,20 +0,0 @@
|
|||
/**
|
||||
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"),
|
||||
|
||||
});
|
|
@ -22,7 +22,7 @@ Discourse.EmailLog.reopenClass({
|
|||
|
||||
findAll: function(filter) {
|
||||
filter = filter || {};
|
||||
var status = filter.status || "sent";
|
||||
var status = filter.status || "all";
|
||||
filter = _.omit(filter, "status");
|
||||
|
||||
return Discourse.ajax("/admin/email/" + status + ".json", { data: filter }).then(function(logs) {
|
||||
|
|
|
@ -23,5 +23,6 @@ Discourse.AdminEmailLogsRoute = Discourse.Route.extend({
|
|||
|
||||
});
|
||||
|
||||
Discourse.AdminEmailAllRoute = Discourse.AdminEmailLogsRoute.extend({ status: "all" });
|
||||
Discourse.AdminEmailSentRoute = Discourse.AdminEmailLogsRoute.extend({ status: "sent" });
|
||||
Discourse.AdminEmailSkippedRoute = Discourse.AdminEmailLogsRoute.extend({ status: "skipped" });
|
||||
|
|
|
@ -16,6 +16,7 @@ Discourse.Route.buildRoutes(function() {
|
|||
});
|
||||
|
||||
this.resource('adminEmail', { path: '/email'}, function() {
|
||||
this.route('all');
|
||||
this.route('sent');
|
||||
this.route('skipped');
|
||||
this.route('previewDigest', { path: '/preview-digest' });
|
||||
|
|
|
@ -2,6 +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.all'}}{{i18n admin.email.all}}{{/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>
|
||||
|
|
|
@ -0,0 +1,39 @@
|
|||
<table class='table'>
|
||||
<thead>
|
||||
<tr>
|
||||
<th>{{i18n admin.email.time}}</th>
|
||||
<th>{{i18n admin.email.user}}</th>
|
||||
<th>{{i18n admin.email.to_address}}</th>
|
||||
<th>{{i18n admin.email.email_type}}</th>
|
||||
<th>{{i18n admin.email.skipped_reason}}</th>
|
||||
</tr>
|
||||
</thead>
|
||||
|
||||
<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.skipped_reason placeholderKey="admin.email.logs.filters.skipped_reason_placeholder"}}</td>
|
||||
</tr>
|
||||
|
||||
{{#each model}}
|
||||
<tr>
|
||||
<td>{{unboundDate created_at}}</td>
|
||||
<td>
|
||||
{{#if user}}
|
||||
{{#link-to 'adminUser' user}}{{avatar user imageSize="tiny"}}{{/link-to}}
|
||||
{{#link-to 'adminUser' user}}{{user.username}}{{/link-to}}
|
||||
{{else}}
|
||||
—
|
||||
{{/if}}
|
||||
</td>
|
||||
<td><a href='mailto:{{unbound to_address}}'>{{to_address}}</a></td>
|
||||
<td>{{email_type}}</td>
|
||||
<td>{{skipped_reason}}</td>
|
||||
</tr>
|
||||
{{else}}
|
||||
<tr><td colspan="5">{{i18n admin.email.logs.none}}</td></tr>
|
||||
{{/each}}
|
||||
|
||||
</table>
|
|
@ -17,25 +17,23 @@
|
|||
<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>
|
||||
<td>
|
||||
{{#if user}}
|
||||
{{#link-to 'adminUser' user}}{{avatar user imageSize="tiny"}}{{/link-to}}
|
||||
{{#link-to 'adminUser' user}}{{user.username}}{{/link-to}}
|
||||
{{else}}
|
||||
—
|
||||
{{/if}}
|
||||
</td>
|
||||
<td><a href='mailto:{{unbound to_address}}'>{{to_address}}</a></td>
|
||||
<td>{{email_type}}</td>
|
||||
<td>{{reply_key}}</td>
|
||||
</tr>
|
||||
{{/groupedEach}}
|
||||
{{#each model}}
|
||||
<tr>
|
||||
<td>{{unboundDate created_at}}</td>
|
||||
<td>
|
||||
{{#if user}}
|
||||
{{#link-to 'adminUser' user}}{{avatar user imageSize="tiny"}}{{/link-to}}
|
||||
{{#link-to 'adminUser' user}}{{user.username}}{{/link-to}}
|
||||
{{else}}
|
||||
—
|
||||
{{/if}}
|
||||
</td>
|
||||
<td><a href='mailto:{{unbound to_address}}'>{{to_address}}</a></td>
|
||||
<td>{{email_type}}</td>
|
||||
<td>{{reply_key}}</td>
|
||||
</tr>
|
||||
{{else}}
|
||||
<tr><td colspan="5">{{i18n admin.email.logs.none}}</td></tr>
|
||||
{{/if}}
|
||||
{{/each}}
|
||||
|
||||
</table>
|
||||
|
|
|
@ -5,7 +5,7 @@
|
|||
<th>{{i18n admin.email.user}}</th>
|
||||
<th>{{i18n admin.email.to_address}}</th>
|
||||
<th>{{i18n admin.email.email_type}}</th>
|
||||
<th>{{i18n admin.email.skip_reason}}</th>
|
||||
<th>{{i18n admin.email.skipped_reason}}</th>
|
||||
</tr>
|
||||
</thead>
|
||||
|
||||
|
@ -14,28 +14,26 @@
|
|||
<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>
|
||||
<td>{{textField value=filter.skipped_reason placeholderKey="admin.email.logs.filters.skipped_reason_placeholder"}}</td>
|
||||
</tr>
|
||||
|
||||
{{#if model}}
|
||||
{{#groupedEach model}}
|
||||
<tr>
|
||||
<td>{{unboundDate created_at}}</td>
|
||||
<td>
|
||||
{{#if user}}
|
||||
{{#link-to 'adminUser' user}}{{avatar user imageSize="tiny"}}{{/link-to}}
|
||||
{{#link-to 'adminUser' user}}{{user.username}}{{/link-to}}
|
||||
{{else}}
|
||||
—
|
||||
{{/if}}
|
||||
</td>
|
||||
<td><a href='mailto:{{unbound to_address}}'>{{to_address}}</a></td>
|
||||
<td>{{email_type}}</td>
|
||||
<td>{{skipped_reason}}</td>
|
||||
</tr>
|
||||
{{/groupedEach}}
|
||||
{{#each model}}
|
||||
<tr>
|
||||
<td>{{unboundDate created_at}}</td>
|
||||
<td>
|
||||
{{#if user}}
|
||||
{{#link-to 'adminUser' user}}{{avatar user imageSize="tiny"}}{{/link-to}}
|
||||
{{#link-to 'adminUser' user}}{{user.username}}{{/link-to}}
|
||||
{{else}}
|
||||
—
|
||||
{{/if}}
|
||||
</td>
|
||||
<td><a href='mailto:{{unbound to_address}}'>{{to_address}}</a></td>
|
||||
<td>{{email_type}}</td>
|
||||
<td>{{skipped_reason}}</td>
|
||||
</tr>
|
||||
{{else}}
|
||||
<tr><td colspan="5">{{i18n admin.email.logs.none}}</td></tr>
|
||||
{{/if}}
|
||||
{{/each}}
|
||||
|
||||
</table>
|
||||
|
|
|
@ -13,6 +13,11 @@ class Admin::EmailController < Admin::AdminController
|
|||
render nothing: true
|
||||
end
|
||||
|
||||
def all
|
||||
email_logs = filter_email_logs(EmailLog.all, params)
|
||||
render_serialized(email_logs, EmailLogSerializer)
|
||||
end
|
||||
|
||||
def sent
|
||||
email_logs = filter_email_logs(EmailLog.sent, params)
|
||||
render_serialized(email_logs, EmailLogSerializer)
|
||||
|
@ -37,7 +42,7 @@ class Admin::EmailController < Admin::AdminController
|
|||
email_logs = email_logs.where("email_logs.to_address LIKE ?", "%#{params[:address]}%") if params[:address].present?
|
||||
email_logs = email_logs.where("email_logs.email_type LIKE ?", "%#{params[:type]}%") if params[:type].present?
|
||||
email_logs = email_logs.where("email_logs.reply_key LIKE ?", "%#{params[:reply_key]}%") if params[:reply_key].present?
|
||||
email_logs = email_logs.where("email_logs.skipped_reason LIKE ?", "%#{params[:reason]}%") if params[:reason].present?
|
||||
email_logs = email_logs.where("email_logs.skipped_reason LIKE ?", "%#{params[:skipped_reason]}%") if params[:skipped_reason].present?
|
||||
email_logs.to_a
|
||||
end
|
||||
|
||||
|
|
|
@ -1382,6 +1382,7 @@ en:
|
|||
email:
|
||||
title: "Email"
|
||||
settings: "Settings"
|
||||
all: "All"
|
||||
sent: "Sent"
|
||||
skipped: "Skipped"
|
||||
sent_at: "Sent At"
|
||||
|
@ -1401,7 +1402,7 @@ en:
|
|||
text: "text"
|
||||
last_seen_user: "Last Seen User:"
|
||||
reply_key: "Reply Key"
|
||||
skip_reason: "Skip Reason"
|
||||
skipped_reason: "Skip Reason"
|
||||
logs:
|
||||
none: "No logs found."
|
||||
filters:
|
||||
|
@ -1410,7 +1411,7 @@ en:
|
|||
address_placeholder: "em@il.com"
|
||||
type_placeholder: "digest, signup..."
|
||||
reply_key_placeholder: ""
|
||||
skip_reason_placeholder: "reason"
|
||||
skipped_reason_placeholder: "reason"
|
||||
|
||||
logs:
|
||||
title: "Logs"
|
||||
|
|
|
@ -67,6 +67,7 @@ Discourse::Application.routes.draw do
|
|||
resources :email do
|
||||
collection do
|
||||
post "test"
|
||||
get "all"
|
||||
get "sent"
|
||||
get "skipped"
|
||||
get "preview-digest" => "email#preview_digest"
|
||||
|
|
Loading…
Reference in New Issue