From c2188a840bc4153ae92112b04b2e06a90d3944aa Mon Sep 17 00:00:00 2001
From: Paul Martin <paul@paulsputer.com>
Date: Wed, 27 Apr 2016 18:58:06 -0400
Subject: [PATCH] Ticket Reference handling #1048

---
 src/main/java/com/gitblit/tickets/TicketNotifier.java |   31 +++++++++++++++++++++++++++++--
 1 files changed, 29 insertions(+), 2 deletions(-)

diff --git a/src/main/java/com/gitblit/tickets/TicketNotifier.java b/src/main/java/com/gitblit/tickets/TicketNotifier.java
index 9a5e4e1..8c7fe6d 100644
--- a/src/main/java/com/gitblit/tickets/TicketNotifier.java
+++ b/src/main/java/com/gitblit/tickets/TicketNotifier.java
@@ -135,6 +135,7 @@
 			StringBuilder html = new StringBuilder();
 			html.append("<head>");
 			html.append(readStyle());
+			html.append(readViewTicketAction(ticket));
 			html.append("</head>");
 			html.append("<body>");
 			html.append(MarkdownUtils.transformGFM(settings, markdown, ticket.repository));
@@ -316,6 +317,19 @@
 			// comment update
 			sb.append(MessageFormat.format("**{0}** commented on this ticket.", user.getDisplayName()));
 			sb.append(HARD_BRK);
+		} else if (lastChange.hasReference()) {
+			// reference update
+			String type = "?";
+
+			switch (lastChange.reference.getSourceType()) {
+				case Commit: { type = "commit"; } break;
+				case Ticket: { type = "ticket"; } break;
+				default: { } break;
+			}
+				
+			sb.append(MessageFormat.format("**{0}** referenced this ticket in {1} {2}", type, lastChange.toString())); 
+			sb.append(HARD_BRK);
+			
 		} else {
 			// general update
 			pattern = "**{0}** has updated this ticket.";
@@ -545,7 +559,6 @@
 				}
 			}
 		}
-		mailing.setRecipients(toAddresses);
 
 		//
 		// CC recipients
@@ -554,7 +567,7 @@
 
 		// repository owners
 		if (!ArrayUtils.isEmpty(repository.owners)) {
-			tos.addAll(repository.owners);
+			ccs.addAll(repository.owners);
 		}
 
 		// cc users mentioned in last comment
@@ -595,6 +608,14 @@
 		}
 		ccAddresses.addAll(settings.getStrings(Keys.mail.mailingLists));
 
+		// respect the author's email preference
+		UserModel lastAuthor = userManager.getUserModel(lastChange.author);
+		if (lastAuthor != null && !lastAuthor.getPreferences().isEmailMeOnMyTicketChanges()) {
+			toAddresses.remove(lastAuthor.emailAddress);
+			ccAddresses.remove(lastAuthor.emailAddress);
+		}
+
+		mailing.setRecipients(toAddresses);
 		mailing.setCCs(ccAddresses);
 	}
 
@@ -606,6 +627,12 @@
 		return sb.toString();
 	}
 
+	protected String readViewTicketAction(TicketModel ticket) {
+		String action = readResource("viewTicket.html");
+		action = action.replace("${url}", ticketService.getTicketUrl(ticket));
+		return action;
+	}
+
 	protected String readResource(String resource) {
 		StringBuilder sb = new StringBuilder();
 		InputStream is = null;

--
Gitblit v1.9.1