0
0
mirror of https://github.com/go-gitea/gitea.git synced 2025-07-20 16:58:31 +02:00
This commit is contained in:
NorthRealm 2025-07-11 18:02:07 +08:00
parent 32ad9ba89c
commit 07602a0921
7 changed files with 28 additions and 13 deletions

View File

@ -800,6 +800,7 @@ func createUser(ctx context.Context, u *User, meta *Meta, createdByAdmin bool, o
if err := db.Insert(ctx, &NotificationSettings{
UserID: u.ID,
Actions: NotificationGiteaActionsFailureOnly,
}); err != nil {
return err
}

View File

@ -17,6 +17,8 @@ func TestUserNotificationSettings(t *testing.T) {
settings, err := GetUserNotificationSettings(db.DefaultContext, 1)
assert.NoError(t, err)
assert.NotNil(t, settings.User)
assert.Equal(t, settings.User.ID, settings.UserID)
assert.Equal(t, NotificationGiteaActionsFailureOnly, settings.Actions)
assert.NoError(t, UpdateUserNotificationSettings(db.DefaultContext, &NotificationSettings{
@ -25,6 +27,8 @@ func TestUserNotificationSettings(t *testing.T) {
}))
settings, err = GetUserNotificationSettings(db.DefaultContext, 1)
assert.NoError(t, err)
assert.NotNil(t, settings.User)
assert.Equal(t, settings.User.ID, settings.UserID)
assert.Equal(t, NotificationGiteaActionsAll, settings.Actions)
assert.NoError(t, UpdateUserNotificationSettings(db.DefaultContext, &NotificationSettings{
@ -33,5 +37,7 @@ func TestUserNotificationSettings(t *testing.T) {
}))
settings, err = GetUserNotificationSettings(db.DefaultContext, 1)
assert.NoError(t, err)
assert.NotNil(t, settings.User)
assert.Equal(t, settings.User.ID, settings.UserID)
assert.Equal(t, NotificationGiteaActionsDisabled, settings.Actions)
}

View File

@ -7,6 +7,7 @@ import (
"errors"
"net/http"
"code.gitea.io/gitea/models/unit"
user_model "code.gitea.io/gitea/models/user"
"code.gitea.io/gitea/modules/log"
"code.gitea.io/gitea/modules/optional"
@ -70,7 +71,7 @@ func NotificationsEmailPost(ctx *context.Context) {
// NotificationsActionsEmailPost set user's email notification preference on Gitea Actions
func NotificationsActionsEmailPost(ctx *context.Context) {
if !ctx.GetContextValue("EnableActions").(bool) {
if !setting.Actions.Enabled || unit.TypeActions.UnitGlobalDisabled() {
ctx.NotFound(nil)
return
}
@ -86,7 +87,7 @@ func NotificationsActionsEmailPost(ctx *context.Context) {
opts := &user.UpdateNotificationSettingsOptions{
Actions: optional.Some(preference),
}
if err := user.UpdateNotificationSettings(ctx, new(user_model.NotificationSettings), opts); err != nil {
if err := user.UpdateNotificationSettings(ctx, ctx.Doer.ID, opts); err != nil {
log.Error("Cannot set actions email notifications preference: %v", err)
ctx.ServerError("UpdateNotificationSettings", err)
return

View File

@ -160,11 +160,10 @@ func SendActionsWorkflowRunStatusEmail(ctx context.Context, sender *user_model.U
}
sendActionsWorkflowRunStatusEmail(ctx, repo, run, sender, recipients)
return
} else if notifyPref.Actions != user_model.EmailNotificationsDisabled {
} else if notifyPref.Actions != user_model.NotificationGiteaActionsDisabled {
recipients = append(recipients, sender)
}
}
// TODO: Any other recipient?
sendActionsWorkflowRunStatusEmail(ctx, repo, run, sender, recipients)
}

View File

@ -249,7 +249,10 @@ type UpdateNotificationSettingsOptions struct {
Actions optional.Option[string]
}
func UpdateNotificationSettings(ctx context.Context, settings *user_model.NotificationSettings, opts *UpdateNotificationSettingsOptions) error {
func UpdateNotificationSettings(ctx context.Context, userID int64, opts *UpdateNotificationSettingsOptions) error {
settings := &user_model.NotificationSettings{
UserID: userID,
}
if opts.Actions.Has() {
settings.Actions = opts.Actions.Value()
}

View File

@ -130,17 +130,22 @@ func TestUpdateNotificationSettings(t *testing.T) {
exists, err := db.GetEngine(db.DefaultContext).Get(settings)
assert.NoError(t, err)
assert.True(t, exists)
settingsCopy := *settings
assert.NoError(t, UpdateNotificationSettings(db.DefaultContext, settings, &UpdateNotificationSettingsOptions{
assert.NoError(t, UpdateNotificationSettings(db.DefaultContext, settings.UserID, &UpdateNotificationSettingsOptions{
Actions: optional.Some(user_model.NotificationGiteaActionsAll),
}))
settings, err = user_model.GetUserNotificationSettings(db.DefaultContext, settings.UserID)
assert.NoError(t, err)
assert.NotNil(t, settings)
assert.Equal(t, user_model.NotificationGiteaActionsAll, settings.Actions)
assert.NotEqual(t, settingsCopy.Actions, settings.Actions)
assert.NotEqual(t, user_model.NotificationGiteaActionsFailureOnly, settings.Actions)
assert.NoError(t, UpdateNotificationSettings(db.DefaultContext, settings, &UpdateNotificationSettingsOptions{
assert.NoError(t, UpdateNotificationSettings(db.DefaultContext, settings.UserID, &UpdateNotificationSettingsOptions{
Actions: optional.Some(user_model.NotificationGiteaActionsDisabled),
}))
settings, err = user_model.GetUserNotificationSettings(db.DefaultContext, settings.UserID)
assert.NoError(t, err)
assert.NotNil(t, settings)
assert.Equal(t, user_model.NotificationGiteaActionsDisabled, settings.Actions)
assert.NotEqual(t, settingsCopy.Actions, settings.Actions)
assert.NotEqual(t, user_model.NotificationGiteaActionsFailureOnly, settings.Actions)
}

View File

@ -46,8 +46,8 @@
{{svg "octicon-triangle-down" 14 "dropdown icon"}}
<div class="text"></div>
<div class="menu">
<div data-value="enabled" class="{{if eq .ActionsEmailNotificationsPreference "all"}}active selected {{end}}item">{{ctx.Locale.Tr "all"}}</div>
<div data-value="andyourown" class="{{if eq .ActionsEmailNotificationsPreference "failureonly"}}active selected {{end}}item">Failure only</div>
<div data-value="all" class="{{if eq .ActionsEmailNotificationsPreference "all"}}active selected {{end}}item">{{ctx.Locale.Tr "all"}}</div>
<div data-value="failureonly" class="{{if eq .ActionsEmailNotificationsPreference "failureonly"}}active selected {{end}}item">Failure only</div>
<div data-value="disabled" class="{{if eq .ActionsEmailNotificationsPreference "disabled"}}active selected {{end}}item">{{ctx.Locale.Tr "disabled"}}</div>
</div>
</div>