aboutsummaryrefslogtreecommitdiffstats
path: root/routers/web/user/setting/notifications.go
diff options
context:
space:
mode:
Diffstat (limited to 'routers/web/user/setting/notifications.go')
-rw-r--r--routers/web/user/setting/notifications.go89
1 files changed, 89 insertions, 0 deletions
diff --git a/routers/web/user/setting/notifications.go b/routers/web/user/setting/notifications.go
new file mode 100644
index 0000000000..8ff6f1d941
--- /dev/null
+++ b/routers/web/user/setting/notifications.go
@@ -0,0 +1,89 @@
+// Copyright 2025 The Gitea Authors. All rights reserved.
+// SPDX-License-Identifier: MIT
+
+package setting
+
+import (
+ "net/http"
+
+ "code.gitea.io/gitea/models/unit"
+ user_model "code.gitea.io/gitea/models/user"
+ "code.gitea.io/gitea/modules/optional"
+ "code.gitea.io/gitea/modules/setting"
+ "code.gitea.io/gitea/modules/templates"
+ "code.gitea.io/gitea/services/context"
+ "code.gitea.io/gitea/services/user"
+)
+
+const tplSettingsNotifications templates.TplName = "user/settings/notifications"
+
+// Notifications render user's notifications settings
+func Notifications(ctx *context.Context) {
+ if !setting.Service.EnableNotifyMail {
+ ctx.NotFound(nil)
+ return
+ }
+
+ ctx.Data["Title"] = ctx.Tr("notifications")
+ ctx.Data["PageIsSettingsNotifications"] = true
+ ctx.Data["EmailNotificationsPreference"] = ctx.Doer.EmailNotificationsPreference
+
+ actionsEmailPref, err := user_model.GetUserSetting(ctx, ctx.Doer.ID, user_model.SettingsKeyEmailNotificationGiteaActions, user_model.SettingEmailNotificationGiteaActionsFailureOnly)
+ if err != nil {
+ ctx.ServerError("GetUserSetting", err)
+ return
+ }
+ ctx.Data["ActionsEmailNotificationsPreference"] = actionsEmailPref
+
+ ctx.HTML(http.StatusOK, tplSettingsNotifications)
+}
+
+// NotificationsEmailPost set user's email notification preference
+func NotificationsEmailPost(ctx *context.Context) {
+ if !setting.Service.EnableNotifyMail {
+ ctx.NotFound(nil)
+ return
+ }
+
+ preference := ctx.FormString("preference")
+ if !(preference == user_model.EmailNotificationsEnabled ||
+ preference == user_model.EmailNotificationsOnMention ||
+ preference == user_model.EmailNotificationsDisabled ||
+ preference == user_model.EmailNotificationsAndYourOwn) {
+ ctx.Flash.Error(ctx.Tr("invalid_data", preference))
+ ctx.Redirect(setting.AppSubURL + "/user/settings/notifications")
+ return
+ }
+ opts := &user.UpdateOptions{
+ EmailNotificationsPreference: optional.Some(preference),
+ }
+ if err := user.UpdateUser(ctx, ctx.Doer, opts); err != nil {
+ ctx.ServerError("UpdateUser", err)
+ return
+ }
+ ctx.Flash.Success(ctx.Tr("settings.email_preference_set_success"))
+ ctx.Redirect(setting.AppSubURL + "/user/settings/notifications")
+}
+
+// NotificationsActionsEmailPost set user's email notification preference on Gitea Actions
+func NotificationsActionsEmailPost(ctx *context.Context) {
+ if !setting.Actions.Enabled || unit.TypeActions.UnitGlobalDisabled() {
+ ctx.NotFound(nil)
+ return
+ }
+
+ preference := ctx.FormString("preference")
+ if !(preference == user_model.SettingEmailNotificationGiteaActionsAll ||
+ preference == user_model.SettingEmailNotificationGiteaActionsDisabled ||
+ preference == user_model.SettingEmailNotificationGiteaActionsFailureOnly) {
+ ctx.Flash.Error(ctx.Tr("invalid_data", preference))
+ ctx.Redirect(setting.AppSubURL + "/user/settings/notifications")
+ return
+ }
+ if err := user_model.SetUserSetting(ctx, ctx.Doer.ID, user_model.SettingsKeyEmailNotificationGiteaActions, preference); err != nil {
+ ctx.ServerError("SetUserSetting", err)
+ return
+ }
+ ctx.Flash.Success(ctx.Tr("settings.email_preference_set_success"))
+ ctx.Redirect(setting.AppSubURL + "/user/settings/notifications")
+}