diff --git a/server-core/src/main/java/io/onedev/server/data/migration/DataMigrator.java b/server-core/src/main/java/io/onedev/server/data/migration/DataMigrator.java index 3e7685b5c9..9b8b820ffc 100644 --- a/server-core/src/main/java/io/onedev/server/data/migration/DataMigrator.java +++ b/server-core/src/main/java/io/onedev/server/data/migration/DataMigrator.java @@ -6838,5 +6838,33 @@ private void migrate172(File dataDir, Stack versions) { } } } + + private void migrate173(File dataDir, Stack 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); + } + } + } } \ No newline at end of file diff --git a/server-core/src/main/java/io/onedev/server/data/migration/migrate173_default_notification.tpl b/server-core/src/main/java/io/onedev/server/data/migration/migrate173_default_notification.tpl new file mode 100644 index 0000000000..541e6b513f --- /dev/null +++ b/server-core/src/main/java/io/onedev/server/data/migration/migrate173_default_notification.tpl @@ -0,0 +1,27 @@ +<% + if (htmlVersion) { + print """ + ${eventSummary} +
+
+ """ + + if (eventBody != null) { + print """ + ${eventBody} +
+ """ + } + + print """ +
Click this link for details
+ """ + } else { + print "${eventSummary}\n\n" + + if (eventBody != null) + print "${eventBody}\n\n" + + print "Visit ${eventUrl} for details" + } +%> diff --git a/server-core/src/main/java/io/onedev/server/model/support/administration/emailtemplates/EmailTemplates.java b/server-core/src/main/java/io/onedev/server/model/support/administration/emailtemplates/EmailTemplates.java index e0eb879bac..39cea3d7db 100644 --- a/server-core/src/main/java/io/onedev/server/model/support/administration/emailtemplates/EmailTemplates.java +++ b/server-core/src/main/java/io/onedev/server/model/support/administration/emailtemplates/EmailTemplates.java @@ -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; @@ -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"; @@ -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"); @@ -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; @@ -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) @@ -165,7 +183,7 @@ public String getPullRequestNotificationUnsubscribed() { public void setPullRequestNotificationUnsubscribed(String pullRequestNotificationUnsubscribed) { this.pullRequestNotificationUnsubscribed = pullRequestNotificationUnsubscribed; } - + @Editable(order=400) @Code(language=Code.GROOVY_TEMPLATE) @OmitName @@ -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 diff --git a/server-core/src/main/java/io/onedev/server/model/support/administration/emailtemplates/default-simple-notification.tpl b/server-core/src/main/java/io/onedev/server/model/support/administration/emailtemplates/default-simple-notification.tpl new file mode 100644 index 0000000000..541e6b513f --- /dev/null +++ b/server-core/src/main/java/io/onedev/server/model/support/administration/emailtemplates/default-simple-notification.tpl @@ -0,0 +1,27 @@ +<% + if (htmlVersion) { + print """ + ${eventSummary} +
+
+ """ + + if (eventBody != null) { + print """ + ${eventBody} +
+ """ + } + + print """ +
Click this link for details
+ """ + } else { + print "${eventSummary}\n\n" + + if (eventBody != null) + print "${eventBody}\n\n" + + print "Visit ${eventUrl} for details" + } +%> diff --git a/server-core/src/main/java/io/onedev/server/notification/BuildNotificationManager.java b/server-core/src/main/java/io/onedev/server/notification/BuildNotificationManager.java index cd8a059b15..73810f03bb 100644 --- a/server-core/src/main/java/io/onedev/server/notification/BuildNotificationManager.java +++ b/server-core/src/main/java/io/onedev/server/notification/BuildNotificationManager.java @@ -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; @@ -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); @@ -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> subscribedQueryStrings, diff --git a/server-core/src/main/java/io/onedev/server/notification/CodeCommentNotificationManager.java b/server-core/src/main/java/io/onedev/server/notification/CodeCommentNotificationManager.java index 7ca1ce8b09..6bf520c9da 100644 --- a/server-core/src/main/java/io/onedev/server/notification/CodeCommentNotificationManager.java +++ b/server-core/src/main/java/io/onedev/server/notification/CodeCommentNotificationManager.java @@ -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; @@ -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; @@ -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; diff --git a/server-core/src/main/java/io/onedev/server/notification/CommitNotificationManager.java b/server-core/src/main/java/io/onedev/server/notification/CommitNotificationManager.java index 5f944881cc..82e1fc1a18 100644 --- a/server-core/src/main/java/io/onedev/server/notification/CommitNotificationManager.java +++ b/server-core/src/main/java/io/onedev/server/notification/CommitNotificationManager.java @@ -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; @@ -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); @@ -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; } diff --git a/server-core/src/main/java/io/onedev/server/notification/IssueNotificationManager.java b/server-core/src/main/java/io/onedev/server/notification/IssueNotificationManager.java index 48c4c889a8..a16ba9eddd 100644 --- a/server-core/src/main/java/io/onedev/server/notification/IssueNotificationManager.java +++ b/server-core/src/main/java/io/onedev/server/notification/IssueNotificationManager.java @@ -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; @@ -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; @@ -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) { diff --git a/server-core/src/main/java/io/onedev/server/notification/AbstractNotificationManager.java b/server-core/src/main/java/io/onedev/server/notification/NotificationUtils.java similarity index 53% rename from server-core/src/main/java/io/onedev/server/notification/AbstractNotificationManager.java rename to server-core/src/main/java/io/onedev/server/notification/NotificationUtils.java index 0523626a0c..c455651a34 100644 --- a/server-core/src/main/java/io/onedev/server/notification/AbstractNotificationManager.java +++ b/server-core/src/main/java/io/onedev/server/notification/NotificationUtils.java @@ -1,10 +1,13 @@ package io.onedev.server.notification; +import io.onedev.server.OneDev; import io.onedev.server.entitymanager.SettingManager; import io.onedev.server.event.Event; +import io.onedev.server.event.project.RefUpdated; +import io.onedev.server.event.project.build.BuildEvent; import io.onedev.server.event.project.issue.IssueEvent; +import io.onedev.server.event.project.pack.PackEvent; import io.onedev.server.event.project.pullrequest.PullRequestEvent; -import io.onedev.server.markdown.MarkdownManager; import io.onedev.server.model.EmailAddress; import io.onedev.server.model.User; import io.onedev.server.model.support.administration.emailtemplates.EmailTemplates; @@ -15,47 +18,50 @@ import java.util.HashMap; import java.util.Map; -public abstract class AbstractNotificationManager { +public class NotificationUtils { - protected final MarkdownManager markdownManager; - - protected final SettingManager settingManager; - - public AbstractNotificationManager(MarkdownManager markdownManager, SettingManager settingManager) { - this.markdownManager = markdownManager; - this.settingManager = settingManager; - } - - protected String getEmailBody(boolean htmlVersion, Event event, String eventSummary, @Nullable String eventBody, - String eventUrl, boolean replyable, @Nullable Unsubscribable unsubscribable) { + public static String getEmailBody(boolean htmlVersion, Event event, String eventSummary, @Nullable String eventBody, + String eventUrl, boolean replyable, @Nullable Unsubscribable unsubscribable) { String template = null; - + Map bindings = new HashMap<>(); if (htmlVersion) eventSummary = HtmlEscape.escapeHtml5(eventSummary); - + bindings.put("event", event); bindings.put("eventSummary", eventSummary); bindings.put("eventBody", eventBody); bindings.put("eventUrl", eventUrl); bindings.put("replyable", replyable); bindings.put("unsubscribable", unsubscribable); - - if (event instanceof IssueEvent) { - template = settingManager.getEmailTemplates().getIssueNotification(); + + var templates = OneDev.getInstance(SettingManager.class).getEmailTemplates(); + if (event instanceof IssueEvent) { + template = templates.getIssueNotification(); bindings.put("issue", ((IssueEvent) event).getIssue()); } else if (event instanceof PullRequestEvent) { - template = settingManager.getEmailTemplates().getPullRequestNotification(); + template = templates.getPullRequestNotification(); bindings.put("pullRequest", ((PullRequestEvent) event).getRequest()); - } + } else if (event instanceof BuildEvent) { + template = templates.getBuildNotification(); + bindings.put("build", ((BuildEvent) event).getBuild()); + } else if (event instanceof PackEvent) { + template = templates.getPackNotification(); + bindings.put("pack", ((PackEvent) event).getPack()); + } else if (event instanceof RefUpdated) { + var refUpdated = (RefUpdated) event; + template = templates.getCommitNotification(); + var commit = refUpdated.getProject().getRevCommit(refUpdated.getNewCommitId(), true); + bindings.put("commit", commit); + } if (template == null) template = EmailTemplates.DEFAULT_NOTIFICATION; - + return EmailTemplates.evalTemplate(htmlVersion, template, bindings); } - protected boolean isNotified(Collection notifiedEmailAddresses, User user) { + public static boolean isNotified(Collection notifiedEmailAddresses, User user) { for (EmailAddress emailAddress: user.getEmailAddresses()) { if (emailAddress.isVerified() && notifiedEmailAddresses.contains(emailAddress.getValue())) return true; diff --git a/server-core/src/main/java/io/onedev/server/notification/PackNotificationManager.java b/server-core/src/main/java/io/onedev/server/notification/PackNotificationManager.java index 70b131b610..1eabfb868f 100644 --- a/server-core/src/main/java/io/onedev/server/notification/PackNotificationManager.java +++ b/server-core/src/main/java/io/onedev/server/notification/PackNotificationManager.java @@ -6,7 +6,6 @@ import io.onedev.server.event.Listen; import io.onedev.server.event.project.pack.PackEvent; 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; @@ -26,10 +25,11 @@ import java.util.HashSet; import java.util.Map; +import static io.onedev.server.notification.NotificationUtils.getEmailBody; import static java.util.stream.Collectors.toList; @Singleton -public class PackNotificationManager extends AbstractNotificationManager { +public class PackNotificationManager { private static final Logger logger = LoggerFactory.getLogger(PackNotificationManager.class); @@ -39,14 +39,15 @@ public class PackNotificationManager extends AbstractNotificationManager { private final UserManager userManager; + private final SettingManager settingManager; + @Inject public PackNotificationManager(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> subscribedQueryStrings, diff --git a/server-core/src/main/java/io/onedev/server/notification/PullRequestNotificationManager.java b/server-core/src/main/java/io/onedev/server/notification/PullRequestNotificationManager.java index 1eb649a0dc..2b97aaf752 100644 --- a/server-core/src/main/java/io/onedev/server/notification/PullRequestNotificationManager.java +++ b/server-core/src/main/java/io/onedev/server/notification/PullRequestNotificationManager.java @@ -8,10 +8,7 @@ import io.onedev.server.entitymanager.UserManager; import io.onedev.server.event.Listen; import io.onedev.server.event.project.pullrequest.*; -import io.onedev.server.web.asset.emoji.Emojis; -import io.onedev.server.xodus.VisitInfoManager; import io.onedev.server.mail.MailManager; -import io.onedev.server.markdown.MarkdownManager; import io.onedev.server.markdown.MentionParser; import io.onedev.server.model.*; import io.onedev.server.model.PullRequestReview.Status; @@ -28,6 +25,8 @@ import io.onedev.server.security.permission.ProjectPermission; import io.onedev.server.security.permission.ReadCode; import io.onedev.server.util.commenttext.MarkdownText; +import io.onedev.server.web.asset.emoji.Emojis; +import io.onedev.server.xodus.VisitInfoManager; import org.apache.commons.lang3.StringUtils; import org.apache.commons.text.WordUtils; import org.apache.shiro.authz.Permission; @@ -37,8 +36,11 @@ import java.util.*; import java.util.stream.Collectors; +import static io.onedev.server.notification.NotificationUtils.getEmailBody; +import static io.onedev.server.notification.NotificationUtils.isNotified; + @Singleton -public class PullRequestNotificationManager extends AbstractNotificationManager { +public class PullRequestNotificationManager { private final MailManager mailManager; @@ -49,19 +51,19 @@ public class PullRequestNotificationManager extends AbstractNotificationManager private final UserManager userManager; private final PullRequestMentionManager mentionManager; + + private final SettingManager settingManager; @Inject - public PullRequestNotificationManager(MailManager mailManager, MarkdownManager markdownManager, - PullRequestWatchManager watchManager, - VisitInfoManager userInfoManager, - UserManager userManager, SettingManager settingManager, - PullRequestMentionManager mentionManager) { - super(markdownManager, settingManager); + public PullRequestNotificationManager(MailManager mailManager, PullRequestWatchManager watchManager, + VisitInfoManager userInfoManager, UserManager userManager, + PullRequestMentionManager mentionManager, SettingManager settingManager) { this.mailManager = mailManager; this.watchManager = watchManager; this.userInfoManager = userInfoManager; this.userManager = userManager; this.mentionManager = mentionManager; + this.settingManager = settingManager; } @Transactional diff --git a/server-core/src/main/java/io/onedev/server/web/mapper/BaseUrlMapper.java b/server-core/src/main/java/io/onedev/server/web/mapper/BaseUrlMapper.java index 196d77cf05..b430c50b97 100644 --- a/server-core/src/main/java/io/onedev/server/web/mapper/BaseUrlMapper.java +++ b/server-core/src/main/java/io/onedev/server/web/mapper/BaseUrlMapper.java @@ -254,6 +254,12 @@ private void addAdministrationPages() { IssueNotificationTemplatePage.class)); add(new BasePageMapper("~administration/settings/email-templates/pull-request-notification", PullRequestNotificationTemplatePage.class)); + add(new BasePageMapper("~administration/settings/email-templates/build-notification", + BuildNotificationTemplatePage.class)); + add(new BasePageMapper("~administration/settings/email-templates/pack-notification", + PackNotificationTemplatePage.class)); + add(new BasePageMapper("~administration/settings/email-templates/commit-notification", + CommitNotificationTemplatePage.class)); add(new BasePageMapper("~administration/settings/email-templates/issue-notification-unsubscribed", IssueNotificationUnsubscribedTemplatePage.class)); add(new BasePageMapper("~administration/settings/email-templates/pull-request-notification-unsubscribed", diff --git a/server-core/src/main/java/io/onedev/server/web/page/admin/emailtemplates/AbstractSimpleNotificationTemplatePage.java b/server-core/src/main/java/io/onedev/server/web/page/admin/emailtemplates/AbstractSimpleNotificationTemplatePage.java new file mode 100644 index 0000000000..6857cf6271 --- /dev/null +++ b/server-core/src/main/java/io/onedev/server/web/page/admin/emailtemplates/AbstractSimpleNotificationTemplatePage.java @@ -0,0 +1,34 @@ +package io.onedev.server.web.page.admin.emailtemplates; + +import io.onedev.server.model.support.administration.emailtemplates.EmailTemplates; +import io.onedev.server.util.CollectionUtils; +import org.apache.wicket.request.mapper.parameter.PageParameters; + +import java.util.Map; + +@SuppressWarnings("serial") +public abstract class AbstractSimpleNotificationTemplatePage extends AbstractTemplatePage { + + public AbstractSimpleNotificationTemplatePage(PageParameters params) { + super(params); + } + + @Override + protected String getDefaultTemplate() { + return EmailTemplates.DEFAULT_SIMPLE_NOTIFICATION; + } + + @Override + protected String getTemplateHelp(String helpText, Map variableHelp) { + var currentVaribaleHelp = CollectionUtils.newLinkedHashMap( + "event", "event object triggering the notification", + "eventSummary", "a string representing summary of the event", + "eventBody", "a string representing body of the event. May be null", + "eventUrl", "a string representing event detail url" + ); + currentVaribaleHelp.putAll(variableHelp); + + return super.getTemplateHelp(helpText, currentVaribaleHelp); + } + +} \ No newline at end of file diff --git a/server-core/src/main/java/io/onedev/server/web/page/admin/emailtemplates/BuildNotificationTemplatePage.java b/server-core/src/main/java/io/onedev/server/web/page/admin/emailtemplates/BuildNotificationTemplatePage.java new file mode 100644 index 0000000000..f10b6d6da3 --- /dev/null +++ b/server-core/src/main/java/io/onedev/server/web/page/admin/emailtemplates/BuildNotificationTemplatePage.java @@ -0,0 +1,40 @@ +package io.onedev.server.web.page.admin.emailtemplates; + +import io.onedev.server.util.CollectionUtils; +import org.apache.wicket.Component; +import org.apache.wicket.markup.html.basic.Label; +import org.apache.wicket.request.mapper.parameter.PageParameters; + +import java.util.Map; + +import static io.onedev.server.model.support.administration.emailtemplates.EmailTemplates.PROP_BUILD_NOTIFICATION; + +@SuppressWarnings("serial") +public class BuildNotificationTemplatePage extends AbstractSimpleNotificationTemplatePage { + + public BuildNotificationTemplatePage(PageParameters params) { + super(params); + } + + @Override + protected String getPropertyName() { + return PROP_BUILD_NOTIFICATION; + } + + @Override + protected String getHelpText() { + return "A " + GROOVY_TEMPLATE_LINK + " used as body of build notification email"; + } + + @Override + protected Map getVariableHelp() { + return CollectionUtils.newLinkedHashMap("build", + "represents the build object to be notified"); + } + + @Override + protected Component newTopbarTitle(String componentId) { + return new Label(componentId, "Build Notification Template"); + } + +} \ No newline at end of file diff --git a/server-core/src/main/java/io/onedev/server/web/page/admin/emailtemplates/CommitNotificationTemplatePage.java b/server-core/src/main/java/io/onedev/server/web/page/admin/emailtemplates/CommitNotificationTemplatePage.java new file mode 100644 index 0000000000..4752ae30d1 --- /dev/null +++ b/server-core/src/main/java/io/onedev/server/web/page/admin/emailtemplates/CommitNotificationTemplatePage.java @@ -0,0 +1,40 @@ +package io.onedev.server.web.page.admin.emailtemplates; + +import io.onedev.server.util.CollectionUtils; +import org.apache.wicket.Component; +import org.apache.wicket.markup.html.basic.Label; +import org.apache.wicket.request.mapper.parameter.PageParameters; + +import java.util.Map; + +import static io.onedev.server.model.support.administration.emailtemplates.EmailTemplates.PROP_COMMIT_NOTIFICATION; + +@SuppressWarnings("serial") +public class CommitNotificationTemplatePage extends AbstractSimpleNotificationTemplatePage { + + public CommitNotificationTemplatePage(PageParameters params) { + super(params); + } + + @Override + protected String getPropertyName() { + return PROP_COMMIT_NOTIFICATION; + } + + @Override + protected String getHelpText() { + return "A " + GROOVY_TEMPLATE_LINK + " used as body of commit notification email"; + } + + @Override + protected Map getVariableHelp() { + return CollectionUtils.newLinkedHashMap("commit", + "represents the commit object to be notified"); + } + + @Override + protected Component newTopbarTitle(String componentId) { + return new Label(componentId, "Commit Notification Template"); + } + +} \ No newline at end of file diff --git a/server-core/src/main/java/io/onedev/server/web/page/admin/emailtemplates/PackNotificationTemplatePage.java b/server-core/src/main/java/io/onedev/server/web/page/admin/emailtemplates/PackNotificationTemplatePage.java new file mode 100644 index 0000000000..29053db490 --- /dev/null +++ b/server-core/src/main/java/io/onedev/server/web/page/admin/emailtemplates/PackNotificationTemplatePage.java @@ -0,0 +1,40 @@ +package io.onedev.server.web.page.admin.emailtemplates; + +import io.onedev.server.util.CollectionUtils; +import org.apache.wicket.Component; +import org.apache.wicket.markup.html.basic.Label; +import org.apache.wicket.request.mapper.parameter.PageParameters; + +import java.util.Map; + +import static io.onedev.server.model.support.administration.emailtemplates.EmailTemplates.PROP_PACK_NOTIFICATION; + +@SuppressWarnings("serial") +public class PackNotificationTemplatePage extends AbstractSimpleNotificationTemplatePage { + + public PackNotificationTemplatePage(PageParameters params) { + super(params); + } + + @Override + protected String getPropertyName() { + return PROP_PACK_NOTIFICATION; + } + + @Override + protected String getHelpText() { + return "A " + GROOVY_TEMPLATE_LINK + " used as body of package notification email"; + } + + @Override + protected Map getVariableHelp() { + return CollectionUtils.newLinkedHashMap("pack", + "represents the package object to be notified"); + } + + @Override + protected Component newTopbarTitle(String componentId) { + return new Label(componentId, "Package Notification Template"); + } + +} \ No newline at end of file diff --git a/server-core/src/main/java/io/onedev/server/web/page/layout/LayoutPage.java b/server-core/src/main/java/io/onedev/server/web/page/layout/LayoutPage.java index a487d3ba2a..7fc183e27f 100644 --- a/server-core/src/main/java/io/onedev/server/web/page/layout/LayoutPage.java +++ b/server-core/src/main/java/io/onedev/server/web/page/layout/LayoutPage.java @@ -265,10 +265,18 @@ protected List load() { } emailTemplatesMenuItems.add(new SidebarMenuItem.Page(null, "Pull Request Notification", PullRequestNotificationTemplatePage.class, new PageParameters())); - emailTemplatesMenuItems.add(new SidebarMenuItem.Page(null, "Pull Request Notification Unsubscribed", PullRequestNotificationUnsubscribedTemplatePage.class, new PageParameters())); + + emailTemplatesMenuItems.add(new SidebarMenuItem.Page(null, "Build Notification", + BuildNotificationTemplatePage.class, new PageParameters())); + + emailTemplatesMenuItems.add(new SidebarMenuItem.Page(null, "Package Notification", + PackNotificationTemplatePage.class, new PageParameters())); + emailTemplatesMenuItems.add(new SidebarMenuItem.Page(null, "Commit Notification", + CommitNotificationTemplatePage.class, new PageParameters())); + emailTemplatesMenuItems.add(new SidebarMenuItem.Page(null, "User Invitation", UserInvitationTemplatePage.class, new PageParameters())); emailTemplatesMenuItems.add(new SidebarMenuItem.Page(null, "Email Verification",