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.

label.go 2.1KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081
  1. // Copyright 2019 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 issue
  5. import (
  6. "code.gitea.io/gitea/models"
  7. "code.gitea.io/gitea/modules/notification"
  8. )
  9. // ClearLabels clears all of an issue's labels
  10. func ClearLabels(issue *models.Issue, doer *models.User) (err error) {
  11. if err = issue.ClearLabels(doer); err != nil {
  12. return
  13. }
  14. notification.NotifyIssueClearLabels(doer, issue)
  15. return nil
  16. }
  17. // AddLabel adds a new label to the issue.
  18. func AddLabel(issue *models.Issue, doer *models.User, label *models.Label) error {
  19. if err := models.NewIssueLabel(issue, label, doer); err != nil {
  20. return err
  21. }
  22. notification.NotifyIssueChangeLabels(doer, issue, []*models.Label{label}, nil)
  23. return nil
  24. }
  25. // AddLabels adds a list of new labels to the issue.
  26. func AddLabels(issue *models.Issue, doer *models.User, labels []*models.Label) error {
  27. if err := models.NewIssueLabels(issue, labels, doer); err != nil {
  28. return err
  29. }
  30. notification.NotifyIssueChangeLabels(doer, issue, labels, nil)
  31. return nil
  32. }
  33. // RemoveLabel removes a label from issue by given ID.
  34. func RemoveLabel(issue *models.Issue, doer *models.User, label *models.Label) error {
  35. if err := issue.LoadRepo(); err != nil {
  36. return err
  37. }
  38. perm, err := models.GetUserRepoPermission(issue.Repo, doer)
  39. if err != nil {
  40. return err
  41. }
  42. if !perm.CanWriteIssuesOrPulls(issue.IsPull) {
  43. if label.OrgID > 0 {
  44. return models.ErrOrgLabelNotExist{}
  45. }
  46. return models.ErrRepoLabelNotExist{}
  47. }
  48. if err := models.DeleteIssueLabel(issue, label, doer); err != nil {
  49. return err
  50. }
  51. notification.NotifyIssueChangeLabels(doer, issue, nil, []*models.Label{label})
  52. return nil
  53. }
  54. // ReplaceLabels removes all current labels and add new labels to the issue.
  55. func ReplaceLabels(issue *models.Issue, doer *models.User, labels []*models.Label) error {
  56. old, err := models.GetLabelsByIssueID(issue.ID)
  57. if err != nil {
  58. return err
  59. }
  60. if err := issue.ReplaceLabels(labels, doer); err != nil {
  61. return err
  62. }
  63. notification.NotifyIssueChangeLabels(doer, issue, labels, old)
  64. return nil
  65. }