Dependency Graph
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 | |
 related to
					related to				 child of
					child of				 duplicate of
					duplicate of				