Du kan inte välja fler än 25 ämnen Ämnen måste starta med en bokstav eller siffra, kan innehålla bindestreck ('-') och vara max 35 tecken långa.

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. "net/http"
  6. "code.gitea.io/gitea/models/db"
  7. issues_model "code.gitea.io/gitea/models/issues"
  8. "code.gitea.io/gitea/modules/context"
  9. "code.gitea.io/gitea/modules/label"
  10. repo_module "code.gitea.io/gitea/modules/repository"
  11. "code.gitea.io/gitea/modules/web"
  12. "code.gitea.io/gitea/services/forms"
  13. )
  14. // RetrieveLabels find all the labels of an organization
  15. func RetrieveLabels(ctx *context.Context) {
  16. labels, err := issues_model.GetLabelsByOrgID(ctx, ctx.Org.Organization.ID, ctx.FormString("sort"), db.ListOptions{})
  17. if err != nil {
  18. ctx.ServerError("RetrieveLabels.GetLabels", err)
  19. return
  20. }
  21. for _, l := range labels {
  22. l.CalOpenIssues()
  23. }
  24. ctx.Data["Labels"] = labels
  25. ctx.Data["NumLabels"] = len(labels)
  26. ctx.Data["SortType"] = ctx.FormString("sort")
  27. }
  28. // NewLabel create new label for organization
  29. func NewLabel(ctx *context.Context) {
  30. form := web.GetForm(ctx).(*forms.CreateLabelForm)
  31. ctx.Data["Title"] = ctx.Tr("repo.labels")
  32. ctx.Data["PageIsLabels"] = true
  33. ctx.Data["PageIsOrgSettings"] = true
  34. if ctx.HasError() {
  35. ctx.Flash.Error(ctx.Data["ErrorMsg"].(string))
  36. ctx.Redirect(ctx.Org.OrgLink + "/settings/labels")
  37. return
  38. }
  39. l := &issues_model.Label{
  40. OrgID: ctx.Org.Organization.ID,
  41. Name: form.Title,
  42. Exclusive: form.Exclusive,
  43. Description: form.Description,
  44. Color: form.Color,
  45. }
  46. if err := issues_model.NewLabel(ctx, l); err != nil {
  47. ctx.ServerError("NewLabel", err)
  48. return
  49. }
  50. ctx.Redirect(ctx.Org.OrgLink + "/settings/labels")
  51. }
  52. // UpdateLabel update a label's name and color
  53. func UpdateLabel(ctx *context.Context) {
  54. form := web.GetForm(ctx).(*forms.CreateLabelForm)
  55. l, err := issues_model.GetLabelInOrgByID(ctx, ctx.Org.Organization.ID, form.ID)
  56. if err != nil {
  57. switch {
  58. case issues_model.IsErrOrgLabelNotExist(err):
  59. ctx.Error(http.StatusNotFound)
  60. default:
  61. ctx.ServerError("UpdateLabel", err)
  62. }
  63. return
  64. }
  65. l.Name = form.Title
  66. l.Exclusive = form.Exclusive
  67. l.Description = form.Description
  68. l.Color = form.Color
  69. if err := issues_model.UpdateLabel(l); err != nil {
  70. ctx.ServerError("UpdateLabel", err)
  71. return
  72. }
  73. ctx.Redirect(ctx.Org.OrgLink + "/settings/labels")
  74. }
  75. // DeleteLabel delete a label
  76. func DeleteLabel(ctx *context.Context) {
  77. if err := issues_model.DeleteLabel(ctx.Org.Organization.ID, ctx.FormInt64("id")); err != nil {
  78. ctx.Flash.Error("DeleteLabel: " + err.Error())
  79. } else {
  80. ctx.Flash.Success(ctx.Tr("repo.issues.label_deletion_success"))
  81. }
  82. ctx.JSON(http.StatusOK, map[string]any{
  83. "redirect": ctx.Org.OrgLink + "/settings/labels",
  84. })
  85. }
  86. // InitializeLabels init labels for an organization
  87. func InitializeLabels(ctx *context.Context) {
  88. form := web.GetForm(ctx).(*forms.InitializeLabelsForm)
  89. if ctx.HasError() {
  90. ctx.Redirect(ctx.Org.OrgLink + "/labels")
  91. return
  92. }
  93. if err := repo_module.InitializeLabels(ctx, ctx.Org.Organization.ID, form.TemplateName, true); err != nil {
  94. if label.IsErrTemplateLoad(err) {
  95. originalErr := err.(label.ErrTemplateLoad).OriginalError
  96. ctx.Flash.Error(ctx.Tr("repo.issues.label_templates.fail_to_load_file", form.TemplateName, originalErr))
  97. ctx.Redirect(ctx.Org.OrgLink + "/settings/labels")
  98. return
  99. }
  100. ctx.ServerError("InitializeLabels", err)
  101. return
  102. }
  103. ctx.Redirect(ctx.Org.OrgLink + "/settings/labels")
  104. }