Vous ne pouvez pas sélectionner plus de 25 sujets Les noms de sujets doivent commencer par une lettre ou un nombre, peuvent contenir des tirets ('-') et peuvent comporter jusqu'à 35 caractères.

issue_timetrack.go 1.9KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687
  1. // Copyright 2017 The Gitea Authors. All rights reserved.
  2. // SPDX-License-Identifier: MIT
  3. package repo
  4. import (
  5. "net/http"
  6. "time"
  7. "code.gitea.io/gitea/models/db"
  8. issues_model "code.gitea.io/gitea/models/issues"
  9. "code.gitea.io/gitea/modules/util"
  10. "code.gitea.io/gitea/modules/web"
  11. "code.gitea.io/gitea/services/context"
  12. "code.gitea.io/gitea/services/forms"
  13. )
  14. // AddTimeManually tracks time manually
  15. func AddTimeManually(c *context.Context) {
  16. form := web.GetForm(c).(*forms.AddTimeManuallyForm)
  17. issue := GetActionIssue(c)
  18. if c.Written() {
  19. return
  20. }
  21. if !c.Repo.CanUseTimetracker(c, issue, c.Doer) {
  22. c.NotFound("CanUseTimetracker", nil)
  23. return
  24. }
  25. url := issue.Link()
  26. if c.HasError() {
  27. c.Flash.Error(c.GetErrMsg())
  28. c.Redirect(url)
  29. return
  30. }
  31. total := util.TimeEstimateFromStr(form.TimeString)
  32. if total <= 0 {
  33. c.Flash.Error(c.Tr("repo.issues.add_time_sum_to_small"))
  34. c.Redirect(url, http.StatusSeeOther)
  35. return
  36. }
  37. if _, err := issues_model.AddTime(c, c.Doer, issue, total, time.Now()); err != nil {
  38. c.ServerError("AddTime", err)
  39. return
  40. }
  41. c.Redirect(url, http.StatusSeeOther)
  42. }
  43. // DeleteTime deletes tracked time
  44. func DeleteTime(c *context.Context) {
  45. issue := GetActionIssue(c)
  46. if c.Written() {
  47. return
  48. }
  49. if !c.Repo.CanUseTimetracker(c, issue, c.Doer) {
  50. c.NotFound("CanUseTimetracker", nil)
  51. return
  52. }
  53. t, err := issues_model.GetTrackedTimeByID(c, c.ParamsInt64(":timeid"))
  54. if err != nil {
  55. if db.IsErrNotExist(err) {
  56. c.NotFound("time not found", err)
  57. return
  58. }
  59. c.Error(http.StatusInternalServerError, "GetTrackedTimeByID", err.Error())
  60. return
  61. }
  62. // only OP or admin may delete
  63. if !c.IsSigned || (!c.IsUserSiteAdmin() && c.Doer.ID != t.UserID) {
  64. c.Error(http.StatusForbidden, "not allowed")
  65. return
  66. }
  67. if err = issues_model.DeleteTime(c, t); err != nil {
  68. c.ServerError("DeleteTime", err)
  69. return
  70. }
  71. c.Flash.Success(c.Tr("repo.issues.del_time_history", util.SecToTime(t.Time)))
  72. c.Redirect(issue.Link())
  73. }