Skip to content

Commit 4f31cd8

Browse files
committed
UI
1 parent 540c3f0 commit 4f31cd8

File tree

7 files changed

+82
-14
lines changed

7 files changed

+82
-14
lines changed

models/migrations/v1_24/v321.go

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -35,7 +35,7 @@ func AddFineGrainedActionsNotificationSettings(x *xorm.Engine) error {
3535
if err := db.Iterate(context.Background(), nil, func(ctx context.Context, user *User) error {
3636
settings = append(settings, NotificationSettings{
3737
UserID: user.ID,
38-
Actions: user_model.NotificationActionsFailureOnly,
38+
Actions: user_model.NotificationGiteaActionsFailureOnly,
3939
})
4040
if len(settings) >= 100 {
4141
_, err := x.Insert(&settings)

models/user/user_notification.go

Lines changed: 4 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -9,10 +9,11 @@ import (
99
"code.gitea.io/gitea/models/db"
1010
)
1111

12+
// Actions email preference
1213
const (
13-
NotificationActionsAll = "all"
14-
NotificationActionsFailureOnly = "failureonly"
15-
NotificationActionsDisabled = "disabled"
14+
NotificationGiteaActionsAll = "all"
15+
NotificationGiteaActionsFailureOnly = "failureonly"
16+
NotificationGiteaActionsDisabled = "disabled"
1617
)
1718

1819
type NotificationSettings struct {

models/user/user_notification_test.go

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -17,21 +17,21 @@ func TestUserNotificationSettings(t *testing.T) {
1717

1818
settings, err := GetUserNotificationSettings(db.DefaultContext, 1)
1919
assert.NoError(t, err)
20-
assert.Equal(t, NotificationActionsFailureOnly, settings.Actions)
20+
assert.Equal(t, NotificationGiteaActionsFailureOnly, settings.Actions)
2121

2222
assert.NoError(t, UpdateUserNotificationSettings(db.DefaultContext, &NotificationSettings{
2323
UserID: 1,
24-
Actions: NotificationActionsAll,
24+
Actions: NotificationGiteaActionsAll,
2525
}))
2626
settings, err = GetUserNotificationSettings(db.DefaultContext, 1)
2727
assert.NoError(t, err)
28-
assert.Equal(t, NotificationActionsAll, settings.Actions)
28+
assert.Equal(t, NotificationGiteaActionsAll, settings.Actions)
2929

3030
assert.NoError(t, UpdateUserNotificationSettings(db.DefaultContext, &NotificationSettings{
3131
UserID: 1,
32-
Actions: NotificationActionsDisabled,
32+
Actions: NotificationGiteaActionsDisabled,
3333
}))
3434
settings, err = GetUserNotificationSettings(db.DefaultContext, 1)
3535
assert.NoError(t, err)
36-
assert.Equal(t, NotificationActionsDisabled, settings.Actions)
36+
assert.Equal(t, NotificationGiteaActionsDisabled, settings.Actions)
3737
}

routers/web/user/setting/notifications.go

Lines changed: 36 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -29,6 +29,13 @@ func Notifications(ctx *context.Context) {
2929
ctx.Data["PageIsSettingsNotifications"] = true
3030
ctx.Data["EmailNotificationsPreference"] = ctx.Doer.EmailNotificationsPreference
3131

32+
fineGrainedPreference, err := user_model.GetUserNotificationSettings(ctx, ctx.Doer.ID)
33+
if err != nil {
34+
ctx.ServerError("GetUserNotificationSettings", err)
35+
return
36+
}
37+
ctx.Data["ActionsEmailNotificationsPreference"] = fineGrainedPreference.Actions
38+
3239
ctx.HTML(http.StatusOK, tplSettingsNotifications)
3340
}
3441

@@ -45,7 +52,7 @@ func NotificationsEmailPost(ctx *context.Context) {
4552
preference == user_model.EmailNotificationsDisabled ||
4653
preference == user_model.EmailNotificationsAndYourOwn) {
4754
log.Error("Email notifications preference change returned unrecognized option %s: %s", preference, ctx.Doer.Name)
48-
ctx.ServerError("SetEmailPreference", errors.New("option unrecognized"))
55+
ctx.ServerError("NotificationsEmailPost", errors.New("option unrecognized"))
4956
return
5057
}
5158
opts := &user.UpdateOptions{
@@ -60,3 +67,31 @@ func NotificationsEmailPost(ctx *context.Context) {
6067
ctx.Flash.Success(ctx.Tr("settings.email_preference_set_success"))
6168
ctx.Redirect(setting.AppSubURL + "/user/settings/notifications")
6269
}
70+
71+
// NotificationsActionsEmailPost set user's email notification preference on Gitea Actions
72+
func NotificationsActionsEmailPost(ctx *context.Context) {
73+
if !ctx.GetContextValue("EnableActions").(bool) {
74+
ctx.NotFound(nil)
75+
return
76+
}
77+
78+
preference := ctx.FormString("preference")
79+
if !(preference == user_model.NotificationGiteaActionsAll ||
80+
preference == user_model.NotificationGiteaActionsDisabled ||
81+
preference == user_model.NotificationGiteaActionsFailureOnly) {
82+
log.Error("Actions Email notifications preference change returned unrecognized option %s: %s", preference, ctx.Doer.Name)
83+
ctx.ServerError("NotificationsActionsEmailPost", errors.New("option unrecognized"))
84+
return
85+
}
86+
opts := &user.UpdateNotificationSettingsOptions{
87+
Actions: optional.Some(preference),
88+
}
89+
if err := user.UpdateNotificationSettings(ctx, new(user_model.NotificationSettings), opts); err != nil {
90+
log.Error("Cannot set actions email notifications preference: %v", err)
91+
ctx.ServerError("UpdateNotificationSettings", err)
92+
return
93+
}
94+
log.Trace("Actions email notifications preference made %s: %s", preference, ctx.Doer.Name)
95+
ctx.Flash.Success(ctx.Tr("settings.email_preference_set_success"))
96+
ctx.Redirect(setting.AppSubURL + "/user/settings/notifications")
97+
}

routers/web/web.go

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -598,6 +598,7 @@ func registerWebRoutes(m *web.Router) {
598598
m.Group("/notifications", func() {
599599
m.Get("", user_setting.Notifications)
600600
m.Post("/email", user_setting.NotificationsEmailPost)
601+
m.Post("/actions", user_setting.NotificationsActionsEmailPost)
601602
})
602603
m.Group("/security", func() {
603604
m.Get("", security.Security)

services/user/update_test.go

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -133,14 +133,14 @@ func TestUpdateNotificationSettings(t *testing.T) {
133133
settingsCopy := *settings
134134

135135
assert.NoError(t, UpdateNotificationSettings(db.DefaultContext, settings, &UpdateNotificationSettingsOptions{
136-
Actions: optional.Some(user_model.NotificationActionsAll),
136+
Actions: optional.Some(user_model.NotificationGiteaActionsAll),
137137
}))
138-
assert.Equal(t, user_model.NotificationActionsAll, settings.Actions)
138+
assert.Equal(t, user_model.NotificationGiteaActionsAll, settings.Actions)
139139
assert.NotEqual(t, settingsCopy.Actions, settings.Actions)
140140

141141
assert.NoError(t, UpdateNotificationSettings(db.DefaultContext, settings, &UpdateNotificationSettingsOptions{
142-
Actions: optional.Some(user_model.NotificationActionsDisabled),
142+
Actions: optional.Some(user_model.NotificationGiteaActionsDisabled),
143143
}))
144-
assert.Equal(t, user_model.NotificationActionsDisabled, settings.Actions)
144+
assert.Equal(t, user_model.NotificationGiteaActionsDisabled, settings.Actions)
145145
assert.NotEqual(t, settingsCopy.Actions, settings.Actions)
146146
}

templates/user/settings/notifications.tmpl

Lines changed: 31 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -29,6 +29,37 @@
2929
</div>
3030
</div>
3131
</div>
32+
33+
{{if .EnableActions}}
34+
<h4 class="ui top attached header">
35+
Actions
36+
</h4>
37+
<div class="ui attached segment">
38+
<div class="ui list flex-items-block">
39+
<div class="item">
40+
<form class="ui form tw-w-full" action="{{AppSubUrl}}/user/settings/notifications/actions" method="post">
41+
{{$.CsrfTokenHtml}}
42+
<div class="field">
43+
<label>Set email preference on Gitea Actions</label>
44+
<div class="ui selection dropdown">
45+
<input name="preference" type="hidden" value="{{.ActionsEmailNotificationsPreference}}">
46+
{{svg "octicon-triangle-down" 14 "dropdown icon"}}
47+
<div class="text"></div>
48+
<div class="menu">
49+
<div data-value="enabled" class="{{if eq .ActionsEmailNotificationsPreference "all"}}active selected {{end}}item">{{ctx.Locale.Tr "all"}}</div>
50+
<div data-value="andyourown" class="{{if eq .ActionsEmailNotificationsPreference "failureonly"}}active selected {{end}}item">Failure only</div>
51+
<div data-value="disabled" class="{{if eq .ActionsEmailNotificationsPreference "disabled"}}active selected {{end}}item">{{ctx.Locale.Tr "disabled"}}</div>
52+
</div>
53+
</div>
54+
</div>
55+
<div class="field">
56+
<button class="ui primary button">{{ctx.Locale.Tr "settings.email_notifications.submit"}}</button>
57+
</div>
58+
</form>
59+
</div>
60+
</div>
61+
</div>
62+
{{end}}
3263
</div>
3364

3465
{{template "user/settings/layout_footer" .}}

0 commit comments

Comments
 (0)