mirror of
				https://github.com/go-gitea/gitea
				synced 2025-11-04 05:18:25 +00:00 
			
		
		
		
	Closes #23725   /claim #23725 --------- Signed-off-by: NorthRealm <155140859+NorthRealm@users.noreply.github.com> Co-authored-by: wxiaoguang <wxiaoguang@gmail.com> Co-authored-by: ChristopherHX <christopher.homberger@web.de>
		
			
				
	
	
		
			90 lines
		
	
	
		
			3.1 KiB
		
	
	
	
		
			Go
		
	
	
	
	
	
			
		
		
	
	
			90 lines
		
	
	
		
			3.1 KiB
		
	
	
	
		
			Go
		
	
	
	
	
	
// 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")
 | 
						|
}
 |