mirror of
https://github.com/discourse/discourse.git
synced 2024-11-26 18:03:38 +08:00
FEATURE: send digest preview to an email address
This commit is contained in:
parent
b8c88dbfe0
commit
47aa3d94aa
|
@ -1,7 +1,12 @@
|
|||
import EmailPreview from 'admin/models/email-preview';
|
||||
import { popupAjaxError } from 'discourse/lib/ajax-error';
|
||||
|
||||
export default Ember.Controller.extend({
|
||||
|
||||
emailEmpty: Em.computed.empty('email'),
|
||||
sendEmailDisabled: Em.computed.or('emailEmpty', 'sendingEmail'),
|
||||
showSendEmailForm: Em.computed.notEmpty('model.html_content'),
|
||||
|
||||
actions: {
|
||||
refresh() {
|
||||
const model = this.get('model');
|
||||
|
@ -15,6 +20,23 @@ export default Ember.Controller.extend({
|
|||
|
||||
toggleShowHtml() {
|
||||
this.toggleProperty('showHtml');
|
||||
},
|
||||
|
||||
sendEmail() {
|
||||
this.set('sendingEmail', true);
|
||||
this.set('sentEmail', false);
|
||||
|
||||
const self = this;
|
||||
|
||||
EmailPreview.sendDigest(this.get('lastSeen'), this.get('username'), this.get('email')).then(result => {
|
||||
if (result.errors) {
|
||||
bootbox.alert(result.errors);
|
||||
} else {
|
||||
self.set('sentEmail', true);
|
||||
}
|
||||
}).catch(popupAjaxError).finally(function() {
|
||||
self.set('sendingEmail', false);
|
||||
});
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
@ -17,6 +17,20 @@ EmailPreview.reopenClass({
|
|||
}).then(function (result) {
|
||||
return EmailPreview.create(result);
|
||||
});
|
||||
},
|
||||
|
||||
sendDigest: function(lastSeenAt, username, email) {
|
||||
if (Em.isEmpty(lastSeenAt)) {
|
||||
lastSeenAt = moment().subtract(7, 'days').format('YYYY-MM-DD');
|
||||
}
|
||||
|
||||
if (Em.isEmpty(username)) {
|
||||
username = Discourse.User.current().username;
|
||||
}
|
||||
|
||||
return ajax("/admin/email/send-digest.json", {
|
||||
data: { last_seen_at: lastSeenAt, username: username, email: email }
|
||||
});
|
||||
}
|
||||
});
|
||||
|
||||
|
|
|
@ -19,6 +19,24 @@
|
|||
</div>
|
||||
|
||||
{{#conditional-loading-spinner condition=loading}}
|
||||
|
||||
{{#if showSendEmailForm}}
|
||||
<br/>
|
||||
<div>
|
||||
{{#if sendingEmail}}
|
||||
{{i18n 'admin.email.sending_test'}}
|
||||
{{else}}
|
||||
<label style="display: inline;">{{i18n 'admin.email.send_digest_label'}}</label>
|
||||
{{text-field value=email placeholderKey="admin.email.test_email_address"}}
|
||||
<button class='btn' {{action "sendEmail"}} disabled={{sendEmailDisabled}}>{{i18n 'admin.email.send_digest'}}</button>
|
||||
{{#if sentEmail}}
|
||||
<span class='result-message'>{{i18n 'admin.email.sent_test'}}</span>
|
||||
{{/if}}
|
||||
{{/if}}
|
||||
</div>
|
||||
<br/>
|
||||
{{/if}}
|
||||
|
||||
{{#if showHtml}}
|
||||
{{{model.html_content}}}
|
||||
{{else}}
|
||||
|
|
|
@ -50,6 +50,25 @@ class Admin::EmailController < Admin::AdminController
|
|||
render json: MultiJson.dump(html_content: renderer.html, text_content: renderer.text)
|
||||
end
|
||||
|
||||
def send_digest
|
||||
params.require(:last_seen_at)
|
||||
params.require(:username)
|
||||
params.require(:email)
|
||||
user = User.find_by_username(params[:username])
|
||||
message, skip_reason = UserNotifications.send(:digest, user, {since: params[:last_seen_at]})
|
||||
if message
|
||||
message.to = params[:email]
|
||||
begin
|
||||
Email::Sender.new(message, :digest).send
|
||||
render nothing: true
|
||||
rescue => e
|
||||
render json: {errors: [e.message]}, status: 422
|
||||
end
|
||||
else
|
||||
render json: {errors: skip_reason}
|
||||
end
|
||||
end
|
||||
|
||||
def handle_mail
|
||||
params.require(:email)
|
||||
Email::Processor.process!(params[:email])
|
||||
|
|
|
@ -2762,6 +2762,9 @@ en:
|
|||
delivery_method: "Delivery Method"
|
||||
preview_digest_desc: "Preview the content of the digest emails sent to inactive users."
|
||||
refresh: "Refresh"
|
||||
send_digest_label: "Send this result to:"
|
||||
send_digest: "Send"
|
||||
sending_email: "Sending email..."
|
||||
format: "Format"
|
||||
html: "html"
|
||||
text: "text"
|
||||
|
|
|
@ -151,6 +151,7 @@ Discourse::Application.routes.draw do
|
|||
get "/incoming/:id/raw" => "email#raw_email"
|
||||
get "/incoming/:id" => "email#incoming"
|
||||
get "preview-digest" => "email#preview_digest"
|
||||
get "send-digest" => "email#send_digest"
|
||||
post "handle_mail"
|
||||
end
|
||||
end
|
||||
|
|
Loading…
Reference in New Issue
Block a user