You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

org_labels.go 3.1KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112
  1. // Copyright 2020 The Gitea Authors. All rights reserved.
  2. // Use of this source code is governed by a MIT-style
  3. // license that can be found in the LICENSE file.
  4. package org
  5. import (
  6. "net/http"
  7. "code.gitea.io/gitea/models"
  8. "code.gitea.io/gitea/modules/context"
  9. auth "code.gitea.io/gitea/modules/forms"
  10. "code.gitea.io/gitea/modules/web"
  11. )
  12. // RetrieveLabels find all the labels of an organization
  13. func RetrieveLabels(ctx *context.Context) {
  14. labels, err := models.GetLabelsByOrgID(ctx.Org.Organization.ID, ctx.Query("sort"), models.ListOptions{})
  15. if err != nil {
  16. ctx.ServerError("RetrieveLabels.GetLabels", err)
  17. return
  18. }
  19. for _, l := range labels {
  20. l.CalOpenIssues()
  21. }
  22. ctx.Data["Labels"] = labels
  23. ctx.Data["NumLabels"] = len(labels)
  24. ctx.Data["SortType"] = ctx.Query("sort")
  25. }
  26. // NewLabel create new label for organization
  27. func NewLabel(ctx *context.Context) {
  28. form := web.GetForm(ctx).(*auth.CreateLabelForm)
  29. ctx.Data["Title"] = ctx.Tr("repo.labels")
  30. ctx.Data["PageIsLabels"] = true
  31. if ctx.HasError() {
  32. ctx.Flash.Error(ctx.Data["ErrorMsg"].(string))
  33. ctx.Redirect(ctx.Org.OrgLink + "/settings/labels")
  34. return
  35. }
  36. l := &models.Label{
  37. OrgID: ctx.Org.Organization.ID,
  38. Name: form.Title,
  39. Description: form.Description,
  40. Color: form.Color,
  41. }
  42. if err := models.NewLabel(l); err != nil {
  43. ctx.ServerError("NewLabel", err)
  44. return
  45. }
  46. ctx.Redirect(ctx.Org.OrgLink + "/settings/labels")
  47. }
  48. // UpdateLabel update a label's name and color
  49. func UpdateLabel(ctx *context.Context) {
  50. form := web.GetForm(ctx).(*auth.CreateLabelForm)
  51. l, err := models.GetLabelInOrgByID(ctx.Org.Organization.ID, form.ID)
  52. if err != nil {
  53. switch {
  54. case models.IsErrOrgLabelNotExist(err):
  55. ctx.Error(http.StatusNotFound)
  56. default:
  57. ctx.ServerError("UpdateLabel", err)
  58. }
  59. return
  60. }
  61. l.Name = form.Title
  62. l.Description = form.Description
  63. l.Color = form.Color
  64. if err := models.UpdateLabel(l); err != nil {
  65. ctx.ServerError("UpdateLabel", err)
  66. return
  67. }
  68. ctx.Redirect(ctx.Org.OrgLink + "/settings/labels")
  69. }
  70. // DeleteLabel delete a label
  71. func DeleteLabel(ctx *context.Context) {
  72. if err := models.DeleteLabel(ctx.Org.Organization.ID, ctx.QueryInt64("id")); err != nil {
  73. ctx.Flash.Error("DeleteLabel: " + err.Error())
  74. } else {
  75. ctx.Flash.Success(ctx.Tr("repo.issues.label_deletion_success"))
  76. }
  77. ctx.JSON(http.StatusOK, map[string]interface{}{
  78. "redirect": ctx.Org.OrgLink + "/settings/labels",
  79. })
  80. }
  81. // InitializeLabels init labels for an organization
  82. func InitializeLabels(ctx *context.Context) {
  83. form := web.GetForm(ctx).(*auth.InitializeLabelsForm)
  84. if ctx.HasError() {
  85. ctx.Redirect(ctx.Repo.RepoLink + "/labels")
  86. return
  87. }
  88. if err := models.InitializeLabels(models.DefaultDBContext(), ctx.Org.Organization.ID, form.TemplateName, true); err != nil {
  89. if models.IsErrIssueLabelTemplateLoad(err) {
  90. originalErr := err.(models.ErrIssueLabelTemplateLoad).OriginalError
  91. ctx.Flash.Error(ctx.Tr("repo.issues.label_templates.fail_to_load_file", form.TemplateName, originalErr))
  92. ctx.Redirect(ctx.Org.OrgLink + "/settings/labels")
  93. return
  94. }
  95. ctx.ServerError("InitializeLabels", err)
  96. return
  97. }
  98. ctx.Redirect(ctx.Org.OrgLink + "/settings/labels")
  99. }