プロジェクト

全般

プロフィール

Vote #72299

未完了

Support hooks in mailer

Admin Redmine さんがほぼ2年前に追加. ほぼ2年前に更新.

ステータス:
New
優先度:
通常
担当者:
-
カテゴリ:
Email notifications_9
開始日:
2022/05/09
期日:
進捗率:

0%

予定工数:
category_id:
9
version_id:
32
issue_org_id:
11530
author_id:
58128
assigned_to_id:
0
comments:
19
status_id:
1
tracker_id:
2
plus1:
0
affected_version:
closed_on:
affected_version_id:
ステータス-->[New]

説明

Could you support hooks in mailer?

Views can be extended by plugin. I want to extend mail content by plugin.

I want to add newly added Wiki content to Wiki added notification mails.
I also want to add changed Wiki content diff to Wiki updated notification mails.

If Redmine supports hooks in mailer, I can write a plugin to do them.


journals

I attach a patch to support hooks in mailer.

We need to do two things to support hooks in mailer.

# Add view path of plugins to ActionView::Base
# Call @call_hook@ in template

Here is the change for view path:
<pre>
diff --git a/lib/redmine/plugin.rb b/lib/redmine/plugin.rb
index c3f4150..dae51ee 100644
--- a/lib/redmine/plugin.rb
+++ b/lib/redmine/plugin.rb
@@ -82,6 +82,7 @@ module Redmine #:nodoc:
view_path = File.join(p.directory, 'app', 'views')
if File.directory?(view_path)
ActionController::Base.prepend_view_path(view_path)
+ ActionMailer::Base.prepend_view_path(view_path)
end

# Adds the app/{controllers,helpers,models} directories of the plugin to the autoload path
</pre>

In the patch, just two @call_hook@ are only added. We need more @call_hook@ to make mailer more extensible.
--------------------------------------------------------------------------------
Here is a plugin that uses hooks in mailer:
https://github.com/kou/redmine-plugin-wiki-change-notifier

If this feature request is accepted, the plugin works.

For now, the plugin works with the attached patch.
--------------------------------------------------------------------------------
I've updated the patch because #11776 adds the following change:

<pre>
diff --git a/lib/redmine/plugin.rb b/lib/redmine/plugin.rb
index c3f4150..dae51ee 100644
--- a/lib/redmine/plugin.rb
+++ b/lib/redmine/plugin.rb
@@ -82,6 +82,7 @@ module Redmine #:nodoc:
view_path = File.join(p.directory, 'app', 'views')
if File.directory?(view_path)
ActionController::Base.prepend_view_path(view_path)
+ ActionMailer::Base.prepend_view_path(view_path)
end

# Adds the app/{controllers,helpers,models} directories of the plugin to the autoload path
</pre>
--------------------------------------------------------------------------------

--------------------------------------------------------------------------------
I've updated the patch for r14648.
--------------------------------------------------------------------------------
Thank you for submitting patches.
Although the patch updates app/views/mailer/wiki_content_*.erb, I think other app/views/mailer/*.erb files should also have hooks for consistency.
--------------------------------------------------------------------------------
Thanks for your response.
I'll also update other files when a developer accepts this request.
--------------------------------------------------------------------------------
I've updated the patch for r16963.
This patch also includes changes for adding hooks to app/views/mailer/*.erb same as app/views/mailer/wiki_content_*.erb.

I hope that next major release includes this patch.
--------------------------------------------------------------------------------
okkez _ wrote:
> I've updated the patch for r16963.
> This patch also includes changes for adding hooks to app/views/mailer/*.erb same as app/views/mailer/wiki_content_*.erb.

It looks good to me. I am setting target version to 4.1.0.
Thank you for posting the patch.
--------------------------------------------------------------------------------

--------------------------------------------------------------------------------
We need to provide a way for the hook to know if we're rendering a html or plain text email.
--------------------------------------------------------------------------------
It's already provided.
If we're rendering a HTML email, @XXX.html.erb@ is used.
If we're rendering a plain text email, @XXX.text.erb@ is used.
--------------------------------------------------------------------------------
Kouhei Sutou wrote:
> It's already provided.
> If we're rendering a HTML email, @XXX.html.erb@ is used.
> If we're rendering a plain text email, @XXX.text.erb@ is used.

Sure, but how does the hook that is called know about this?
--------------------------------------------------------------------------------
We can get @:text@ in @XXX.text.erb@ and @:html@ in @XXX.html.erb@ by calling @lookup_context.rendered_format@.
We can also get @[:text]@ in @XXX.text.erb@ and @[:html]@ in @XXX.html.erb@ by calling @formats@.
--------------------------------------------------------------------------------
I've updated the patch for r18899.
--------------------------------------------------------------------------------
I added more hooks to `app/views/mailer/issue_edit*`:

<pre><code class="diff">
--- support-hooks-in-mailer-for-r18899.patch 2019-11-05 16:44:11.906980336 +0900
+++ support-hooks-in-mailer-for-r18899-2.patch 2019-11-05 18:46:16.355343392 +0900
@@ -132,28 +132,68 @@
===================================================================
--- app/views/mailer/issue_edit.html.erb (revision 18899)
+++ app/views/mailer/issue_edit.html.erb (working copy)
-@@ -13,3 +13,8 @@
+@@ -10,6 +10,28 @@
+ <% end %>
+ </ul>
+
++<%= call_hook(:view_mailer_issue_edit_after_details,
++ :issue => @issue,
++ :journal => @journal,
++ :journal_details => @journal_details,
++ :users => @users,
++ :issue_url => @issue_url) %>
++
<%= textilizable(@journal, :notes, :only_path => false) %>
++
++<%= call_hook(:view_mailer_issue_edit_after_notes,
++ :issue => @issue,
++ :journal => @journal,
++ :journal_details => @journal_details,
++ :users => @users,
++ :issue_url => @issue_url) %>
++
<hr />
<%= render :partial => 'issue', :formats => [:html], :locals => { :issue => @issue, :user => @user, :issue_url => @issue_url } %>
+
+<%= call_hook(:view_mailer_issue_edit_bottom,
+ :issue => @issue,
++ :journal => @journal,
++ :journal_details => @journal_details,
+ :users => @users,
+ :issue_url => @issue_url) %>
Index: app/views/mailer/issue_edit.text.erb
===================================================================
--- app/views/mailer/issue_edit.text.erb (revision 18899)
+++ app/views/mailer/issue_edit.text.erb (working copy)
-@@ -10,3 +10,8 @@
+@@ -3,10 +3,27 @@
+ <% details_to_strings(@journal_details, true).each do |string| -%>
+ <%= string %>
+ <% end -%>
+-
++<%= call_hook(:view_mailer_issue_edit_after_details,
++ :issue => @issue,
++ :journal => @journal,
++ :journal_details => @journal_details,
++ :users => @users,
++ :issue_url => @issue_url) -%>
+ <% if @journal.notes? -%>
+ <%= @journal.notes %>
+
<% end -%>
++<%= call_hook(:view_mailer_issue_edit_after_notes,
++ :issue => @issue,
++ :journal => @journal,
++ :journal_details => @journal_details,
++ :users => @users,
++ :issue_url => @issue_url) -%>
----------------------------------------
<%= render :partial => 'issue', :formats => [:text], :locals => { :issue => @issue, :user => @user, :issue_url => @issue_url } %>
-+
+<%= call_hook(:view_mailer_issue_edit_bottom,
+ :issue => @issue,
++ :journal => @journal,
++ :journal_details => @journal_details,
+ :users => @users,
-+ :issue_url => @issue_url) %>
++ :issue_url => @issue_url) -%>
Index: app/views/mailer/lost_password.html.erb
===================================================================
--- app/views/mailer/lost_password.html.erb (revision 18899)
</code></pre>
--------------------------------------------------------------------------------
Sorry... I added one more cosmetic fix...
--------------------------------------------------------------------------------
I've updated the patch for r21217.
--------------------------------------------------------------------------------
Could someone take a look at this?
We use this maintained patch in almost 10 years. We use this patch with Redmine 5.0.0 now.
--------------------------------------------------------------------------------


related_issues

relates,New,12508,Add diff to wiki change notification
relates,New,26839,Inline Email Diff For Issue 'Description' Changes

Admin Redmine さんがほぼ2年前に更新

  • カテゴリEmail notifications_9 にセット
  • 対象バージョンCandidate for next major release_32 にセット

他の形式にエクスポート: Atom PDF

いいね!0
いいね!0