mirror of
https://github.com/go-gitea/gitea.git
synced 2025-07-19 19:18:43 +02:00
UI
This commit is contained in:
parent
540c3f00eb
commit
4f31cd88f7
@ -35,7 +35,7 @@ func AddFineGrainedActionsNotificationSettings(x *xorm.Engine) error {
|
||||
if err := db.Iterate(context.Background(), nil, func(ctx context.Context, user *User) error {
|
||||
settings = append(settings, NotificationSettings{
|
||||
UserID: user.ID,
|
||||
Actions: user_model.NotificationActionsFailureOnly,
|
||||
Actions: user_model.NotificationGiteaActionsFailureOnly,
|
||||
})
|
||||
if len(settings) >= 100 {
|
||||
_, err := x.Insert(&settings)
|
||||
|
@ -9,10 +9,11 @@ import (
|
||||
"code.gitea.io/gitea/models/db"
|
||||
)
|
||||
|
||||
// Actions email preference
|
||||
const (
|
||||
NotificationActionsAll = "all"
|
||||
NotificationActionsFailureOnly = "failureonly"
|
||||
NotificationActionsDisabled = "disabled"
|
||||
NotificationGiteaActionsAll = "all"
|
||||
NotificationGiteaActionsFailureOnly = "failureonly"
|
||||
NotificationGiteaActionsDisabled = "disabled"
|
||||
)
|
||||
|
||||
type NotificationSettings struct {
|
||||
|
@ -17,21 +17,21 @@ func TestUserNotificationSettings(t *testing.T) {
|
||||
|
||||
settings, err := GetUserNotificationSettings(db.DefaultContext, 1)
|
||||
assert.NoError(t, err)
|
||||
assert.Equal(t, NotificationActionsFailureOnly, settings.Actions)
|
||||
assert.Equal(t, NotificationGiteaActionsFailureOnly, settings.Actions)
|
||||
|
||||
assert.NoError(t, UpdateUserNotificationSettings(db.DefaultContext, &NotificationSettings{
|
||||
UserID: 1,
|
||||
Actions: NotificationActionsAll,
|
||||
Actions: NotificationGiteaActionsAll,
|
||||
}))
|
||||
settings, err = GetUserNotificationSettings(db.DefaultContext, 1)
|
||||
assert.NoError(t, err)
|
||||
assert.Equal(t, NotificationActionsAll, settings.Actions)
|
||||
assert.Equal(t, NotificationGiteaActionsAll, settings.Actions)
|
||||
|
||||
assert.NoError(t, UpdateUserNotificationSettings(db.DefaultContext, &NotificationSettings{
|
||||
UserID: 1,
|
||||
Actions: NotificationActionsDisabled,
|
||||
Actions: NotificationGiteaActionsDisabled,
|
||||
}))
|
||||
settings, err = GetUserNotificationSettings(db.DefaultContext, 1)
|
||||
assert.NoError(t, err)
|
||||
assert.Equal(t, NotificationActionsDisabled, settings.Actions)
|
||||
assert.Equal(t, NotificationGiteaActionsDisabled, settings.Actions)
|
||||
}
|
||||
|
@ -29,6 +29,13 @@ func Notifications(ctx *context.Context) {
|
||||
ctx.Data["PageIsSettingsNotifications"] = true
|
||||
ctx.Data["EmailNotificationsPreference"] = ctx.Doer.EmailNotificationsPreference
|
||||
|
||||
fineGrainedPreference, err := user_model.GetUserNotificationSettings(ctx, ctx.Doer.ID)
|
||||
if err != nil {
|
||||
ctx.ServerError("GetUserNotificationSettings", err)
|
||||
return
|
||||
}
|
||||
ctx.Data["ActionsEmailNotificationsPreference"] = fineGrainedPreference.Actions
|
||||
|
||||
ctx.HTML(http.StatusOK, tplSettingsNotifications)
|
||||
}
|
||||
|
||||
@ -45,7 +52,7 @@ func NotificationsEmailPost(ctx *context.Context) {
|
||||
preference == user_model.EmailNotificationsDisabled ||
|
||||
preference == user_model.EmailNotificationsAndYourOwn) {
|
||||
log.Error("Email notifications preference change returned unrecognized option %s: %s", preference, ctx.Doer.Name)
|
||||
ctx.ServerError("SetEmailPreference", errors.New("option unrecognized"))
|
||||
ctx.ServerError("NotificationsEmailPost", errors.New("option unrecognized"))
|
||||
return
|
||||
}
|
||||
opts := &user.UpdateOptions{
|
||||
@ -60,3 +67,31 @@ func NotificationsEmailPost(ctx *context.Context) {
|
||||
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 !ctx.GetContextValue("EnableActions").(bool) {
|
||||
ctx.NotFound(nil)
|
||||
return
|
||||
}
|
||||
|
||||
preference := ctx.FormString("preference")
|
||||
if !(preference == user_model.NotificationGiteaActionsAll ||
|
||||
preference == user_model.NotificationGiteaActionsDisabled ||
|
||||
preference == user_model.NotificationGiteaActionsFailureOnly) {
|
||||
log.Error("Actions Email notifications preference change returned unrecognized option %s: %s", preference, ctx.Doer.Name)
|
||||
ctx.ServerError("NotificationsActionsEmailPost", errors.New("option unrecognized"))
|
||||
return
|
||||
}
|
||||
opts := &user.UpdateNotificationSettingsOptions{
|
||||
Actions: optional.Some(preference),
|
||||
}
|
||||
if err := user.UpdateNotificationSettings(ctx, new(user_model.NotificationSettings), opts); err != nil {
|
||||
log.Error("Cannot set actions email notifications preference: %v", err)
|
||||
ctx.ServerError("UpdateNotificationSettings", err)
|
||||
return
|
||||
}
|
||||
log.Trace("Actions email notifications preference made %s: %s", preference, ctx.Doer.Name)
|
||||
ctx.Flash.Success(ctx.Tr("settings.email_preference_set_success"))
|
||||
ctx.Redirect(setting.AppSubURL + "/user/settings/notifications")
|
||||
}
|
||||
|
@ -598,6 +598,7 @@ func registerWebRoutes(m *web.Router) {
|
||||
m.Group("/notifications", func() {
|
||||
m.Get("", user_setting.Notifications)
|
||||
m.Post("/email", user_setting.NotificationsEmailPost)
|
||||
m.Post("/actions", user_setting.NotificationsActionsEmailPost)
|
||||
})
|
||||
m.Group("/security", func() {
|
||||
m.Get("", security.Security)
|
||||
|
@ -133,14 +133,14 @@ func TestUpdateNotificationSettings(t *testing.T) {
|
||||
settingsCopy := *settings
|
||||
|
||||
assert.NoError(t, UpdateNotificationSettings(db.DefaultContext, settings, &UpdateNotificationSettingsOptions{
|
||||
Actions: optional.Some(user_model.NotificationActionsAll),
|
||||
Actions: optional.Some(user_model.NotificationGiteaActionsAll),
|
||||
}))
|
||||
assert.Equal(t, user_model.NotificationActionsAll, settings.Actions)
|
||||
assert.Equal(t, user_model.NotificationGiteaActionsAll, settings.Actions)
|
||||
assert.NotEqual(t, settingsCopy.Actions, settings.Actions)
|
||||
|
||||
assert.NoError(t, UpdateNotificationSettings(db.DefaultContext, settings, &UpdateNotificationSettingsOptions{
|
||||
Actions: optional.Some(user_model.NotificationActionsDisabled),
|
||||
Actions: optional.Some(user_model.NotificationGiteaActionsDisabled),
|
||||
}))
|
||||
assert.Equal(t, user_model.NotificationActionsDisabled, settings.Actions)
|
||||
assert.Equal(t, user_model.NotificationGiteaActionsDisabled, settings.Actions)
|
||||
assert.NotEqual(t, settingsCopy.Actions, settings.Actions)
|
||||
}
|
||||
|
@ -29,6 +29,37 @@
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
{{if .EnableActions}}
|
||||
<h4 class="ui top attached header">
|
||||
Actions
|
||||
</h4>
|
||||
<div class="ui attached segment">
|
||||
<div class="ui list flex-items-block">
|
||||
<div class="item">
|
||||
<form class="ui form tw-w-full" action="{{AppSubUrl}}/user/settings/notifications/actions" method="post">
|
||||
{{$.CsrfTokenHtml}}
|
||||
<div class="field">
|
||||
<label>Set email preference on Gitea Actions</label>
|
||||
<div class="ui selection dropdown">
|
||||
<input name="preference" type="hidden" value="{{.ActionsEmailNotificationsPreference}}">
|
||||
{{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="disabled" class="{{if eq .ActionsEmailNotificationsPreference "disabled"}}active selected {{end}}item">{{ctx.Locale.Tr "disabled"}}</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<div class="field">
|
||||
<button class="ui primary button">{{ctx.Locale.Tr "settings.email_notifications.submit"}}</button>
|
||||
</div>
|
||||
</form>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
{{end}}
|
||||
</div>
|
||||
|
||||
{{template "user/settings/layout_footer" .}}
|
||||
|
Loading…
x
Reference in New Issue
Block a user