Skip to content

Commit

Permalink
feat: More custom email templates (OD-2009)
Browse files Browse the repository at this point in the history
  • Loading branch information
robinshine committed Aug 3, 2024
1 parent 96ce8df commit d9936a0
Show file tree
Hide file tree
Showing 17 changed files with 375 additions and 66 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -6838,5 +6838,33 @@ private void migrate172(File dataDir, Stack<Integer> versions) {
}
}
}

private void migrate173(File dataDir, Stack<Integer> versions) {
String template;
try (InputStream is = getClass().getResourceAsStream("migrate173_default_notification.tpl")) {
Preconditions.checkNotNull(is);
template = IOUtils.toString(is, UTF_8);
} catch (IOException e) {
throw new RuntimeException(e);
}

for (File file : dataDir.listFiles()) {
if (file.getName().startsWith("Settings.xml")) {
VersionedXmlDoc dom = VersionedXmlDoc.fromFile(file);
for (Element element : dom.getRootElement().elements()) {
String key = element.elementTextTrim("key");
if (key.equals("EMAIL_TEMPLATES")) {
Element valueElement = element.element("value");
if (valueElement != null) {
valueElement.addElement("buildNotification").setText(template);
valueElement.addElement("packNotification").setText(template);
valueElement.addElement("commitNotification").setText(template);
}
}
}
dom.writeToFile(file, false);
}
}
}

}
Original file line number Diff line number Diff line change
@@ -0,0 +1,27 @@
<%
if (htmlVersion) {
print """
<b>${eventSummary}</b>
<br>
<br>
"""
if (eventBody != null) {
print """
${eventBody}
<br>
"""
}

print """
<div>Click <a href='${eventUrl}'>this link</a> for details</div>
"""
} else {
print "${eventSummary}\n\n"
if (eventBody != null)
print "${eventBody}\n\n"
print "Visit ${eventUrl} for details"
}
%>
Original file line number Diff line number Diff line change
Expand Up @@ -19,6 +19,8 @@ public class EmailTemplates implements Serializable {

private static final long serialVersionUID = 1L;

public static final String DEFAULT_SIMPLE_NOTIFICATION;

public static final String DEFAULT_NOTIFICATION;

public static final String DEFAULT_ISSUE_NOTIFICATION_UNSUBSCRIBED;
Expand All @@ -42,7 +44,13 @@ public class EmailTemplates implements Serializable {
public static final String PROP_ISSUE_NOTIFICATION = "issueNotification";

public static final String PROP_PULL_REQUEST_NOTIFICATION = "pullRequestNotification";

public static final String PROP_BUILD_NOTIFICATION = "buildNotification";

public static final String PROP_PACK_NOTIFICATION = "packNotification";

public static final String PROP_COMMIT_NOTIFICATION = "commitNotification";

public static final String PROP_ISSUE_NOTIFICATION_UNSUBSCRIBED = "issueNotificationUnsubscribed";

public static final String PROP_PULL_REQUEST_NOTIFICATION_UNSUBSCRIBED = "pullRequestNotificationUnsubscribed";
Expand All @@ -63,7 +71,10 @@ public class EmailTemplates implements Serializable {

static {
try {
URL url = Resources.getResource(EmailTemplates.class, "default-notification.tpl");
URL url = Resources.getResource(EmailTemplates.class, "default-simple-notification.tpl");
DEFAULT_SIMPLE_NOTIFICATION = Resources.toString(url, StandardCharsets.UTF_8);

url = Resources.getResource(EmailTemplates.class, "default-notification.tpl");
DEFAULT_NOTIFICATION = Resources.toString(url, StandardCharsets.UTF_8);

url = Resources.getResource(EmailTemplates.class, "default-service-desk-issue-opened.tpl");
Expand Down Expand Up @@ -101,6 +112,12 @@ public class EmailTemplates implements Serializable {

private String pullRequestNotification = DEFAULT_NOTIFICATION;

private String buildNotification = DEFAULT_SIMPLE_NOTIFICATION;

private String packNotification = DEFAULT_SIMPLE_NOTIFICATION;

private String commitNotification = DEFAULT_SIMPLE_NOTIFICATION;

private String issueNotificationUnsubscribed = DEFAULT_ISSUE_NOTIFICATION_UNSUBSCRIBED;

private String pullRequestNotificationUnsubscribed = DEFAULT_PULL_REQUEST_NOTIFICATION_UNSUBSCRIBED;
Expand All @@ -116,6 +133,7 @@ public class EmailTemplates implements Serializable {
private String passwordReset = DEFAULT_PASSWORD_RESET;

private String stopwatchOverdue = DEFAULT_STOPWATCH_OVERDUE;

private String alert = DEFAULT_ALERT;

@Editable(order=200)
Expand Down Expand Up @@ -165,7 +183,7 @@ public String getPullRequestNotificationUnsubscribed() {
public void setPullRequestNotificationUnsubscribed(String pullRequestNotificationUnsubscribed) {
this.pullRequestNotificationUnsubscribed = pullRequestNotificationUnsubscribed;
}

@Editable(order=400)
@Code(language=Code.GROOVY_TEMPLATE)
@OmitName
Expand All @@ -190,6 +208,42 @@ public void setServiceDeskIssueOpenFailed(String serviceDeskIssueOpenFailed) {
this.serviceDeskIssueOpenFailed = serviceDeskIssueOpenFailed;
}

@Editable(order=550)
@Code(language=Code.GROOVY_TEMPLATE)
@OmitName
@NotEmpty
public String getBuildNotification() {
return buildNotification;
}

public void setBuildNotification(String buildNotification) {
this.buildNotification = buildNotification;
}

@Editable(order=560)
@Code(language=Code.GROOVY_TEMPLATE)
@OmitName
@NotEmpty
public String getPackNotification() {
return packNotification;
}

public void setPackNotification(String packNotification) {
this.packNotification = packNotification;
}

@Editable(order=570)
@Code(language=Code.GROOVY_TEMPLATE)
@OmitName
@NotEmpty
public String getCommitNotification() {
return commitNotification;
}

public void setCommitNotification(String commitNotification) {
this.commitNotification = commitNotification;
}

@Editable(order=600)
@Code(language=Code.GROOVY_TEMPLATE)
@OmitName
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,27 @@
<%
if (htmlVersion) {
print """
<b>${eventSummary}</b>
<br>
<br>
"""
if (eventBody != null) {
print """
${eventBody}
<br>
"""
}

print """
<div>Click <a href='${eventUrl}'>this link</a> for details</div>
"""
} else {
print "${eventSummary}\n\n"
if (eventBody != null)
print "${eventBody}\n\n"
print "Visit ${eventUrl} for details"
}
%>
Original file line number Diff line number Diff line change
Expand Up @@ -8,7 +8,6 @@
import io.onedev.server.event.project.build.BuildEvent;
import io.onedev.server.event.project.build.BuildUpdated;
import io.onedev.server.mail.MailManager;
import io.onedev.server.markdown.MarkdownManager;
import io.onedev.server.model.*;
import io.onedev.server.model.support.NamedQuery;
import io.onedev.server.persistence.annotation.Sessional;
Expand All @@ -29,11 +28,12 @@
import java.util.HashSet;
import java.util.Map;

import static io.onedev.server.notification.NotificationUtils.getEmailBody;
import static java.lang.String.format;
import static java.util.stream.Collectors.toList;

@Singleton
public class BuildNotificationManager extends AbstractNotificationManager {
public class BuildNotificationManager {

private static final Logger logger = LoggerFactory.getLogger(BuildNotificationManager.class);

Expand All @@ -43,14 +43,15 @@ public class BuildNotificationManager extends AbstractNotificationManager {

private final UserManager userManager;

private final SettingManager settingManager;

@Inject
public BuildNotificationManager(MailManager mailManager, UrlManager urlManager,
UserManager userManager, SettingManager settingManager,
MarkdownManager markdownManager) {
super(markdownManager, settingManager);
UserManager userManager, SettingManager settingManager) {
this.mailManager = mailManager;
this.urlManager = urlManager;
this.userManager = userManager;
this.settingManager = settingManager;
}

private void fillSubscribedQueryStrings(Map<User, Collection<String>> subscribedQueryStrings,
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -3,13 +3,11 @@
import com.google.common.collect.Lists;
import io.onedev.commons.utils.StringUtils;
import io.onedev.server.entitymanager.CodeCommentMentionManager;
import io.onedev.server.entitymanager.SettingManager;
import io.onedev.server.entitymanager.UserManager;
import io.onedev.server.event.Listen;
import io.onedev.server.event.project.codecomment.CodeCommentEdited;
import io.onedev.server.event.project.codecomment.CodeCommentEvent;
import io.onedev.server.mail.MailManager;
import io.onedev.server.markdown.MarkdownManager;
import io.onedev.server.markdown.MentionParser;
import io.onedev.server.model.CodeComment;
import io.onedev.server.model.CodeCommentStatusChange;
Expand All @@ -23,12 +21,12 @@
import java.util.Collection;
import java.util.HashSet;
import java.util.Set;
import java.util.stream.Collectors;

import static io.onedev.server.notification.NotificationUtils.getEmailBody;
import static java.util.stream.Collectors.toSet;

@Singleton
public class CodeCommentNotificationManager extends AbstractNotificationManager {
public class CodeCommentNotificationManager {

private final MailManager mailManager;

Expand All @@ -37,10 +35,8 @@ public class CodeCommentNotificationManager extends AbstractNotificationManager
private final CodeCommentMentionManager mentionManager;

@Inject
public CodeCommentNotificationManager(MailManager mailManager, MarkdownManager markdownManager,
UserManager userManager, SettingManager settingManager,
public CodeCommentNotificationManager(MailManager mailManager, UserManager userManager,
CodeCommentMentionManager mentionManager) {
super(markdownManager, settingManager);
this.mailManager = mailManager;
this.userManager = userManager;
this.mentionManager = mentionManager;
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -2,12 +2,10 @@

import com.google.common.collect.Lists;
import io.onedev.commons.utils.StringUtils;
import io.onedev.server.entitymanager.SettingManager;
import io.onedev.server.event.Listen;
import io.onedev.server.event.project.RefUpdated;
import io.onedev.server.git.GitUtils;
import io.onedev.server.mail.MailManager;
import io.onedev.server.markdown.MarkdownManager;
import io.onedev.server.model.CommitQueryPersonalization;
import io.onedev.server.model.EmailAddress;
import io.onedev.server.model.Project;
Expand All @@ -31,8 +29,10 @@
import java.util.HashSet;
import java.util.Map;

import static io.onedev.server.notification.NotificationUtils.getEmailBody;

@Singleton
public class CommitNotificationManager extends AbstractNotificationManager {
public class CommitNotificationManager {

private static final Logger logger = LoggerFactory.getLogger(CommitNotificationManager.class);

Expand All @@ -41,9 +41,7 @@ public class CommitNotificationManager extends AbstractNotificationManager {
private final UrlManager urlManager;

@Inject
public CommitNotificationManager(MarkdownManager markdownManager, MailManager mailManager, UrlManager urlManager,
SettingManager settingManager) {
super(markdownManager, settingManager);
public CommitNotificationManager(MailManager mailManager, UrlManager urlManager) {
this.mailManager = mailManager;
this.urlManager = urlManager;
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -39,12 +39,13 @@
import io.onedev.server.search.entity.issue.IssueQueryParseOption;
import io.onedev.server.security.SecurityUtils;
import io.onedev.server.util.commenttext.MarkdownText;
import org.unbescape.html.HtmlEscape;

import static io.onedev.server.notification.NotificationUtils.getEmailBody;
import static io.onedev.server.notification.NotificationUtils.isNotified;
import static org.unbescape.html.HtmlEscape.escapeHtml5;

@Singleton
public class IssueNotificationManager extends AbstractNotificationManager {
public class IssueNotificationManager {

private final MailManager mailManager;

Expand All @@ -64,15 +65,14 @@ public class IssueNotificationManager extends AbstractNotificationManager {

private final UrlManager urlManager;

private final SettingManager settingManager;

@Inject
public IssueNotificationManager(MarkdownManager markdownManager, MailManager mailManager,
IssueWatchManager watchManager, VisitInfoManager userInfoManager,
UserManager userManager, SettingManager settingManager,
public IssueNotificationManager(MailManager mailManager, IssueWatchManager watchManager,
VisitInfoManager userInfoManager, UserManager userManager,
IssueAuthorizationManager authorizationManager, IssueMentionManager mentionManager,
IssueQueryPersonalizationManager queryPersonalizationManager,
IssueManager issueManager, UrlManager urlManager) {
super(markdownManager, settingManager);

IssueManager issueManager, UrlManager urlManager, SettingManager settingManager) {
this.mailManager = mailManager;
this.watchManager = watchManager;
this.userInfoManager = userInfoManager;
Expand All @@ -82,6 +82,7 @@ public IssueNotificationManager(MarkdownManager markdownManager, MailManager mai
this.queryPersonalizationManager = queryPersonalizationManager;
this.issueManager = issueManager;
this.urlManager = urlManager;
this.settingManager = settingManager;
}

private void setupWatches(Issue issue) {
Expand Down
Loading

0 comments on commit d9936a0

Please sign in to comment.