gitea源码

org_labels.go 3.3KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117
  1. // Copyright 2020 The Gitea Authors. All rights reserved.
  2. // SPDX-License-Identifier: MIT
  3. package org
  4. import (
  5. "errors"
  6. "code.gitea.io/gitea/models/db"
  7. issues_model "code.gitea.io/gitea/models/issues"
  8. "code.gitea.io/gitea/modules/label"
  9. repo_module "code.gitea.io/gitea/modules/repository"
  10. "code.gitea.io/gitea/modules/util"
  11. "code.gitea.io/gitea/modules/web"
  12. shared_label "code.gitea.io/gitea/routers/web/shared/label"
  13. "code.gitea.io/gitea/services/context"
  14. "code.gitea.io/gitea/services/forms"
  15. )
  16. // RetrieveLabels find all the labels of an organization
  17. func RetrieveLabels(ctx *context.Context) {
  18. labels, err := issues_model.GetLabelsByOrgID(ctx, ctx.Org.Organization.ID, ctx.FormString("sort"), db.ListOptions{})
  19. if err != nil {
  20. ctx.ServerError("RetrieveLabels.GetLabels", err)
  21. return
  22. }
  23. for _, l := range labels {
  24. l.CalOpenIssues()
  25. }
  26. ctx.Data["Labels"] = labels
  27. ctx.Data["NumLabels"] = len(labels)
  28. ctx.Data["SortType"] = ctx.FormString("sort")
  29. }
  30. // NewLabel create new label for organization
  31. func NewLabel(ctx *context.Context) {
  32. form := shared_label.GetLabelEditForm(ctx)
  33. if ctx.Written() {
  34. return
  35. }
  36. l := &issues_model.Label{
  37. OrgID: ctx.Org.Organization.ID,
  38. Name: form.Title,
  39. Exclusive: form.Exclusive,
  40. Description: form.Description,
  41. Color: form.Color,
  42. ExclusiveOrder: form.ExclusiveOrder,
  43. }
  44. if err := issues_model.NewLabel(ctx, l); err != nil {
  45. ctx.ServerError("NewLabel", err)
  46. return
  47. }
  48. ctx.JSONRedirect(ctx.Org.OrgLink + "/settings/labels")
  49. }
  50. // UpdateLabel update a label's name and color
  51. func UpdateLabel(ctx *context.Context) {
  52. form := shared_label.GetLabelEditForm(ctx)
  53. if ctx.Written() {
  54. return
  55. }
  56. l, err := issues_model.GetLabelInOrgByID(ctx, ctx.Org.Organization.ID, form.ID)
  57. if errors.Is(err, util.ErrNotExist) {
  58. ctx.JSONErrorNotFound()
  59. return
  60. } else if err != nil {
  61. ctx.ServerError("GetLabelInOrgByID", err)
  62. return
  63. }
  64. l.Name = form.Title
  65. l.Exclusive = form.Exclusive
  66. l.ExclusiveOrder = form.ExclusiveOrder
  67. l.Description = form.Description
  68. l.Color = form.Color
  69. l.SetArchived(form.IsArchived)
  70. if err := issues_model.UpdateLabel(ctx, l); err != nil {
  71. ctx.ServerError("UpdateLabel", err)
  72. return
  73. }
  74. ctx.JSONRedirect(ctx.Org.OrgLink + "/settings/labels")
  75. }
  76. // DeleteLabel delete a label
  77. func DeleteLabel(ctx *context.Context) {
  78. if err := issues_model.DeleteLabel(ctx, ctx.Org.Organization.ID, ctx.FormInt64("id")); err != nil {
  79. ctx.Flash.Error("DeleteLabel: " + err.Error())
  80. } else {
  81. ctx.Flash.Success(ctx.Tr("repo.issues.label_deletion_success"))
  82. }
  83. ctx.JSONRedirect(ctx.Org.OrgLink + "/settings/labels")
  84. }
  85. // InitializeLabels init labels for an organization
  86. func InitializeLabels(ctx *context.Context) {
  87. form := web.GetForm(ctx).(*forms.InitializeLabelsForm)
  88. if ctx.HasError() {
  89. ctx.Redirect(ctx.Org.OrgLink + "/labels")
  90. return
  91. }
  92. if err := repo_module.InitializeLabels(ctx, ctx.Org.Organization.ID, form.TemplateName, true); err != nil {
  93. if label.IsErrTemplateLoad(err) {
  94. originalErr := err.(label.ErrTemplateLoad).OriginalError
  95. ctx.Flash.Error(ctx.Tr("repo.issues.label_templates.fail_to_load_file", form.TemplateName, originalErr))
  96. ctx.Redirect(ctx.Org.OrgLink + "/settings/labels")
  97. return
  98. }
  99. ctx.ServerError("InitializeLabels", err)
  100. return
  101. }
  102. ctx.Redirect(ctx.Org.OrgLink + "/settings/labels")
  103. }