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.

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263
  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. return models.ErrLabelNotExist{}
  44. }
  45. if err := models.DeleteIssueLabel(issue, label, doer); err != nil {
  46. return err
  47. }
  48. notification.NotifyIssueChangeLabels(doer, issue, nil, []*models.Label{label})
  49. return nil
  50. }