#330 Email templates

This commit is contained in:
Karel Pičman 2023-12-14 15:36:28 +01:00
parent f3644a5d49
commit 8faae7fa46
4 changed files with 41 additions and 7 deletions

View File

@ -4,6 +4,16 @@ Changelog for Custom Workflows
2.1.1 *????-??-??*
------------------
IMPORTANT: Parameters of *CustomWorkflowMailer.deliver_custom_email* method has changed.
before: `CustomWorkflowMailer.deliver_custom_email(user, subject, text)`
now: `CustomWorkflowMailer.deliver_custom_email(user, headers = {})`
To achieve the same behaviour you have to modify an existing callig as follows
`CustomWorkflowMailer.deliver_custom_email(user, subject: subject, text_body: text)`
2.1.0 *2023-11-15*
------------------
Member as an observable object

View File

@ -122,6 +122,14 @@ E.g.:
self.custom_workflow_env[:remote_ip]
```
An email can be sent from within a script.
E.g.:
```ruby
CustomWorkflowMailer.deliver_custom_email(user, subject: subject, text_body: text)
```
Enabling custom workflows for projects
--------------------------------------

View File

@ -25,13 +25,29 @@ require 'mailer'
class CustomWorkflowMailer < Mailer
layout 'mailer'
def self.deliver_custom_email(user, subject, text)
custom_email(user, subject, text).deliver_later
def self.deliver_custom_email(user, headers = {})
custom_email(user, headers).deliver_later
end
def custom_email(user, subject, text)
set_language_if_valid user.language
@text = text
mail to: user, subject: subject
def custom_email(user, headers)
headers[:to] = user.mail if user
text_body = headers.delete :text_body
html_body = headers.delete :html_body
template_name = headers.delete :template_name
template_params = headers.delete(:template_params) || {}
if text_body || html_body
mail headers do |format|
format.text { render text: text_body } if text_body
format.html { render text: html_body } if html_body
end
elsif template_name
template_params.each { |k, v| instance_variable_set("@#{k}", v) }
mail headers do |format|
format.text { render template_name }
format.html { render template_name } unless Setting.plain_text_mail?
end
else
raise 'Not :text_body, :html_body or :template_name specified'
end
end
end

View File

@ -40,7 +40,7 @@ class CustomWorkflowMailerTest < RedmineCustomWorkflows::Test::UnitTest
end
def test_custom_email
CustomWorkflowMailer.deliver_custom_email @user2, 'Subject', 'Body'
CustomWorkflowMailer.deliver_custom_email @user2, subject: 'Subject', text_body: 'Body', html_body: 'Body'
email = last_email
assert text_part(email).body.include? 'Body'
assert html_part(email).body.include? 'Body'