issue_label.go 3.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172
  1. // Copyright 2015 The Gogs Authors. All rights reserved.
  2. // Copyright 2018 Gitote. All rights reserved.
  3. //
  4. // This source code is licensed under the MIT license found in the
  5. // LICENSE file in the root directory of this source tree.
  6. package repo
  7. import (
  8. "gitote/gitote/models"
  9. "gitote/gitote/models/errors"
  10. "gitote/gitote/pkg/context"
  11. api "gitlab.com/gitote/go-gitote-client"
  12. )
  13. func ListIssueLabels(c *context.APIContext) {
  14. issue, err := models.GetIssueByIndex(c.Repo.Repository.ID, c.ParamsInt64(":index"))
  15. if err != nil {
  16. if errors.IsIssueNotExist(err) {
  17. c.Status(404)
  18. } else {
  19. c.Error(500, "GetIssueByIndex", err)
  20. }
  21. return
  22. }
  23. apiLabels := make([]*api.Label, len(issue.Labels))
  24. for i := range issue.Labels {
  25. apiLabels[i] = issue.Labels[i].APIFormat()
  26. }
  27. c.JSON(200, &apiLabels)
  28. }
  29. func AddIssueLabels(c *context.APIContext, form api.IssueLabelsOption) {
  30. if !c.Repo.IsWriter() {
  31. c.Status(403)
  32. return
  33. }
  34. issue, err := models.GetIssueByIndex(c.Repo.Repository.ID, c.ParamsInt64(":index"))
  35. if err != nil {
  36. if errors.IsIssueNotExist(err) {
  37. c.Status(404)
  38. } else {
  39. c.Error(500, "GetIssueByIndex", err)
  40. }
  41. return
  42. }
  43. labels, err := models.GetLabelsInRepoByIDs(c.Repo.Repository.ID, form.Labels)
  44. if err != nil {
  45. c.Error(500, "GetLabelsInRepoByIDs", err)
  46. return
  47. }
  48. if err = issue.AddLabels(c.User, labels); err != nil {
  49. c.Error(500, "AddLabels", err)
  50. return
  51. }
  52. labels, err = models.GetLabelsByIssueID(issue.ID)
  53. if err != nil {
  54. c.Error(500, "GetLabelsByIssueID", err)
  55. return
  56. }
  57. apiLabels := make([]*api.Label, len(labels))
  58. for i := range labels {
  59. apiLabels[i] = issue.Labels[i].APIFormat()
  60. }
  61. c.JSON(200, &apiLabels)
  62. }
  63. func DeleteIssueLabel(c *context.APIContext) {
  64. if !c.Repo.IsWriter() {
  65. c.Status(403)
  66. return
  67. }
  68. issue, err := models.GetIssueByIndex(c.Repo.Repository.ID, c.ParamsInt64(":index"))
  69. if err != nil {
  70. if errors.IsIssueNotExist(err) {
  71. c.Status(404)
  72. } else {
  73. c.Error(500, "GetIssueByIndex", err)
  74. }
  75. return
  76. }
  77. label, err := models.GetLabelOfRepoByID(c.Repo.Repository.ID, c.ParamsInt64(":id"))
  78. if err != nil {
  79. if models.IsErrLabelNotExist(err) {
  80. c.Error(422, "", err)
  81. } else {
  82. c.Error(500, "GetLabelInRepoByID", err)
  83. }
  84. return
  85. }
  86. if err := models.DeleteIssueLabel(issue, label); err != nil {
  87. c.Error(500, "DeleteIssueLabel", err)
  88. return
  89. }
  90. c.Status(204)
  91. }
  92. func ReplaceIssueLabels(c *context.APIContext, form api.IssueLabelsOption) {
  93. if !c.Repo.IsWriter() {
  94. c.Status(403)
  95. return
  96. }
  97. issue, err := models.GetIssueByIndex(c.Repo.Repository.ID, c.ParamsInt64(":index"))
  98. if err != nil {
  99. if errors.IsIssueNotExist(err) {
  100. c.Status(404)
  101. } else {
  102. c.Error(500, "GetIssueByIndex", err)
  103. }
  104. return
  105. }
  106. labels, err := models.GetLabelsInRepoByIDs(c.Repo.Repository.ID, form.Labels)
  107. if err != nil {
  108. c.Error(500, "GetLabelsInRepoByIDs", err)
  109. return
  110. }
  111. if err := issue.ReplaceLabels(labels); err != nil {
  112. c.Error(500, "ReplaceLabels", err)
  113. return
  114. }
  115. labels, err = models.GetLabelsByIssueID(issue.ID)
  116. if err != nil {
  117. c.Error(500, "GetLabelsByIssueID", err)
  118. return
  119. }
  120. apiLabels := make([]*api.Label, len(labels))
  121. for i := range labels {
  122. apiLabels[i] = issue.Labels[i].APIFormat()
  123. }
  124. c.JSON(200, &apiLabels)
  125. }
  126. func ClearIssueLabels(c *context.APIContext) {
  127. if !c.Repo.IsWriter() {
  128. c.Status(403)
  129. return
  130. }
  131. issue, err := models.GetIssueByIndex(c.Repo.Repository.ID, c.ParamsInt64(":index"))
  132. if err != nil {
  133. if errors.IsIssueNotExist(err) {
  134. c.Status(404)
  135. } else {
  136. c.Error(500, "GetIssueByIndex", err)
  137. }
  138. return
  139. }
  140. if err := issue.ClearLabels(c.User); err != nil {
  141. c.Error(500, "ClearLabels", err)
  142. return
  143. }
  144. c.Status(204)
  145. }