View Issue Details
| ID | Project | Category | View Status | Date Submitted | Last Update |
|---|---|---|---|---|---|
| 0014510 | mantisbt | public | 2012-07-25 06:23 | 2012-08-09 16:46 | |
| Reporter | ErikRoelofs | Assigned To | atrol | ||
| Priority | normal | Severity | feature | Reproducibility | N/A |
| Status | closed | Resolution | duplicate | ||
| OS | Windows | OS Version | 7 SP1 | ||
| Product Version | 1.2.10 | ||||
| Summary | 0014510: Allowing Plugins to handle email sending | ||||
| Description | Currently Mantis emails are not customizable. Since we need the ability to change the format and layout of the emails Mantis sends to customers, we wanted the ability to allow a Plugin to handle the sending of an email, overruling Mantis' default sender. I added a new event for this (EVENT_NOTIFY_MAIL_SENDING) which works the same way as the EVENT_NOTIFY_USER_EXCLUDE event and allows a Plugin to hook into the actual sending of an email. I would like to make this (minor) change to Mantis available to the core in case other developers would also be interested in this. Patch file included. | ||||
| Tags | No tags attached. | ||||
| Attached Files | feature_branch.patch (4,030 bytes)
From d30d54762ca50f652ac701f8cf277ac94cd2e3d2 Mon Sep 17 00:00:00 2001
From: Erik Roelofs <e.roelofs@samson-it.nl>
Date: Wed, 25 Jul 2012 12:20:32 +0200
Subject: [PATCH 2/2] Addding an event to email_api that allows Plugins to
overrule the Mantis mail sender.
---
core/email_api.php | 38 +++++++++++++++++++++++++++-----------
core/events_inc.php | 1 +
2 files changed, 28 insertions(+), 11 deletions(-)
diff --git a/core/email_api.php b/core/email_api.php
index ed70dc7..71a3ece 100755
--- a/core/email_api.php
+++ b/core/email_api.php
@@ -336,7 +336,7 @@ function email_collect_recipients( $p_bug_id, $p_notify_type, $p_extra_user_ids_
user_cache_array_rows( $t_user_ids );
user_pref_cache_array_rows( $t_user_ids );
user_pref_cache_array_rows( $t_user_ids, $t_bug->project_id );
-
+
# Check whether users should receive the emails
# and put email address to $t_recipients[user_id]
foreach( $t_recipients as $t_id => $t_ignore ) {
@@ -408,7 +408,6 @@ function email_collect_recipients( $p_bug_id, $p_notify_type, $p_extra_user_ids_
$t_final_recipients[$t_id] = $t_email;
}
}
-
return $t_final_recipients;
}
@@ -566,15 +565,32 @@ function email_generic( $p_bug_id, $p_notify_type, $p_message_id = null, $p_head
if( is_array( $t_recipients ) ) {
# send email to every recipient
foreach( $t_recipients as $t_user_id => $t_user_email ) {
- log_event( LOG_EMAIL, sprintf( "Issue = #%d, Type = %s, Msg = '%s', User = @U%d, Email = '%s'.", $p_bug_id, $p_notify_type, $p_message_id, $t_user_id, $t_user_email ) );
-
- # load (push) user language here as build_visible_bug_data assumes current language
- lang_push( user_pref_get_language( $t_user_id, $t_project_id ) );
-
- $t_visible_bug_data = email_build_visible_bug_data( $t_user_id, $p_bug_id, $p_message_id );
- $t_ok = email_bug_info_to_one_user( $t_visible_bug_data, $p_message_id, $t_project_id, $t_user_id, $p_header_optional_params ) && $t_ok;
-
- lang_pop();
+
+ # check if any plugin(s) wish to handle the mail that is going to be sent
+ $t_completed = false;
+ $t_overrides = event_signal( 'EVENT_NOTIFY_MAIL_SENDING', array( $p_bug_id, $p_notify_type, $t_user_id ) );
+ foreach( $t_overrides as $t_plugin => $t_callbacks ) {
+ foreach ( $t_callbacks as $t_callback => $t_override ) {
+ if ( $t_override ) {
+ log_event( LOG_EMAIL_RECIPIENT, sprintf( 'Issue = #%d, %s plugin handled email for user @U%d', $p_bug_id, $t_plugin, $t_id ) );
+ $t_completed = true;
+ }
+ }
+ }
+ if ( $t_completed ) {
+ # this mail was handled by a plugin
+ }
+
+ # use the default mailer
+ log_event( LOG_EMAIL, sprintf( "Issue = #%d, Type = %s, Msg = '%s', User = @U%d, Email = '%s'.", $p_bug_id, $p_notify_type, $p_message_id, $t_user_id, $t_user_email ) );
+
+ # load (push) user language here as build_visible_bug_data assumes current language
+ lang_push( user_pref_get_language( $t_user_id, $t_project_id ) );
+
+ $t_visible_bug_data = email_build_visible_bug_data( $t_user_id, $p_bug_id, $p_message_id );
+ $t_ok = email_bug_info_to_one_user( $t_visible_bug_data, $p_message_id, $t_project_id, $t_user_id, $p_header_optional_params ) && $t_ok;
+
+ lang_pop();
}
}
diff --git a/core/events_inc.php b/core/events_inc.php
index 292ca1d..b373376 100755
--- a/core/events_inc.php
+++ b/core/events_inc.php
@@ -124,4 +124,5 @@ event_declare_many( array(
'PRINT_ATTACHMENT' => EVENT_TYPE_EXECUTE,
'EVENT_BLOCK_ATTACHMENT' => EVENT_TYPE_CHAIN,
'EVENT_BUG_BUTTONS' => EVENT_TYPE_EXECUTE,
+ 'EVENT_NOTIFY_MAIL_SENDING' => EVENT_TYPE_DEFAULT,
) );
--
1.7.11.msysgit.0
| ||||
| duplicate of | 0012830 | new | new HTMLMail plugin v0.1 |
|
It's a good idea :) for my office, in few days, i'll rewrite entirely the mail management (configuration and sending) it would be great if i can do it with a plugin to share it with the mantis community |
|
|
Is it ok to close this as a duplicate of 0012830 ? |
|
|
Yes, that seems like a more complete package for html mailing. Feel free to close this as a duplicate. |
|
|
I want to resolve this issues |
|