gitea源码

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990
  1. // Copyright 2025 The Gitea Authors. All rights reserved.
  2. // SPDX-License-Identifier: MIT
  3. package setting
  4. import (
  5. "net/http"
  6. "code.gitea.io/gitea/models/unit"
  7. user_model "code.gitea.io/gitea/models/user"
  8. "code.gitea.io/gitea/modules/optional"
  9. "code.gitea.io/gitea/modules/setting"
  10. "code.gitea.io/gitea/modules/templates"
  11. "code.gitea.io/gitea/services/context"
  12. "code.gitea.io/gitea/services/user"
  13. )
  14. const tplSettingsNotifications templates.TplName = "user/settings/notifications"
  15. // Notifications render user's notifications settings
  16. func Notifications(ctx *context.Context) {
  17. if !setting.Service.EnableNotifyMail {
  18. ctx.NotFound(nil)
  19. return
  20. }
  21. ctx.Data["Title"] = ctx.Tr("notifications")
  22. ctx.Data["PageIsSettingsNotifications"] = true
  23. ctx.Data["EmailNotificationsPreference"] = ctx.Doer.EmailNotificationsPreference
  24. actionsEmailPref, err := user_model.GetUserSetting(ctx, ctx.Doer.ID, user_model.SettingsKeyEmailNotificationGiteaActions, user_model.SettingEmailNotificationGiteaActionsFailureOnly)
  25. if err != nil {
  26. ctx.ServerError("GetUserSetting", err)
  27. return
  28. }
  29. ctx.Data["ActionsEmailNotificationsPreference"] = actionsEmailPref
  30. ctx.HTML(http.StatusOK, tplSettingsNotifications)
  31. }
  32. // NotificationsEmailPost set user's email notification preference
  33. func NotificationsEmailPost(ctx *context.Context) {
  34. if !setting.Service.EnableNotifyMail {
  35. ctx.NotFound(nil)
  36. return
  37. }
  38. preference := ctx.FormString("preference")
  39. if !(preference == user_model.EmailNotificationsEnabled ||
  40. preference == user_model.EmailNotificationsOnMention ||
  41. preference == user_model.EmailNotificationsDisabled ||
  42. preference == user_model.EmailNotificationsAndYourOwn) {
  43. ctx.Flash.Error(ctx.Tr("invalid_data", preference))
  44. ctx.Redirect(setting.AppSubURL + "/user/settings/notifications")
  45. return
  46. }
  47. opts := &user.UpdateOptions{
  48. EmailNotificationsPreference: optional.Some(preference),
  49. }
  50. if err := user.UpdateUser(ctx, ctx.Doer, opts); err != nil {
  51. ctx.ServerError("UpdateUser", err)
  52. return
  53. }
  54. ctx.Flash.Success(ctx.Tr("settings.email_preference_set_success"))
  55. ctx.Redirect(setting.AppSubURL + "/user/settings/notifications")
  56. }
  57. // NotificationsActionsEmailPost set user's email notification preference on Gitea Actions
  58. func NotificationsActionsEmailPost(ctx *context.Context) {
  59. if !setting.Actions.Enabled || unit.TypeActions.UnitGlobalDisabled() {
  60. ctx.NotFound(nil)
  61. return
  62. }
  63. preference := ctx.FormString("preference")
  64. if !(preference == user_model.SettingEmailNotificationGiteaActionsAll ||
  65. preference == user_model.SettingEmailNotificationGiteaActionsDisabled ||
  66. preference == user_model.SettingEmailNotificationGiteaActionsFailureOnly) {
  67. ctx.Flash.Error(ctx.Tr("invalid_data", preference))
  68. ctx.Redirect(setting.AppSubURL + "/user/settings/notifications")
  69. return
  70. }
  71. if err := user_model.SetUserSetting(ctx, ctx.Doer.ID, user_model.SettingsKeyEmailNotificationGiteaActions, preference); err != nil {
  72. ctx.ServerError("SetUserSetting", err)
  73. return
  74. }
  75. ctx.Flash.Success(ctx.Tr("settings.email_preference_set_success"))
  76. ctx.Redirect(setting.AppSubURL + "/user/settings/notifications")
  77. }