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