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.

123 lines
3.4 KiB

Feature: Timetracking (#2211) * Added comment's hashtag to url for mail notifications. * Added explanation to return statement + documentation. * Replacing in-line link generation with HTMLURL. (+gofmt) * Replaced action-based model with nil-based model. (+gofmt) * Replaced mailIssueActionToParticipants with mailIssueCommentToParticipants. * Updating comment for mailIssueCommentToParticipants * Added link to comment in "Dashboard" * Deleting feed entry if a comment is going to be deleted * Added migration * Added improved migration to add a CommentID column to action. * Added improved links to comments in feed entries. * Fixes #1956 by filtering for deleted comments that are referenced in actions. * Introducing "IsDeleted" column to action. * Adding design draft (not functional) * Adding database models for stopwatches and trackedtimes * See go-gitea/gitea#967 * Adding design draft (not functional) * Adding translations and improving design * Implementing stopwatch (for timetracking) * Make UI functional * Add hints in timeline for time tracking events * Implementing timetracking feature * Adding "Add time manual" option * Improved stopwatch * Created report of total spent time by user * Only showing total time spent if theire is something to show. * Adding license headers. * Improved error handling for "Add Time Manual" * Adding @sapks 's changes, refactoring * Adding API for feature tracking * Adding unit test * Adding DISABLE/ENABLE option to Repository settings page * Improving translations * Applying @sapk 's changes * Removing repo_unit and using IssuesSetting for disabling/enabling timetracker * Adding DEFAULT_ENABLE_TIMETRACKER to config, installation and admin menu * Improving documentation * Fixing vendor/ folder * Changing timtracking routes by adding subgroups /times and /times/stopwatch (Proposed by @lafriks ) * Restricting write access to timetracking based on the repo settings (Proposed by @lafriks ) * Fixed minor permissions bug. * Adding CanUseTimetracker and IsTimetrackerEnabled in ctx.Repo * Allow assignees and authors to track there time too. * Fixed some build-time-errors + logical errors. * Removing unused Get...ByID functions * Moving IsTimetrackerEnabled from context.Repository to models.Repository * Adding a seperate file for issue related repo functions * Adding license headers * Fixed GetUserByParams return 404 * Moving /users/:username/times to /repos/:username/:reponame/times/:username for security reasons * Adding /repos/:username/times to get all tracked times of the repo * Updating sdk-dependency * Updating swagger.v1.json * Adding warning if user has already a running stopwatch (auto-timetracker) * Replacing GetTrackedTimesBy... with GetTrackedTimes(options FindTrackedTimesOptions) * Changing code.gitea.io/sdk back to code.gitea.io/sdk * Correcting spelling mistake * Updating vendor.json * Changing GET stopwatch/toggle to POST stopwatch/toggle * Changing GET stopwatch/cancel to POST stopwatch/cancel * Added migration for stopwatches/timetracking * Fixed some access bugs for read-only users * Added default allow only contributors to track time value to config * Fixed migration by chaging x.Iterate to x.Find * Resorted imports * Moved Add Time Manually form to repo_form.go * Removed "Seconds" field from Add Time Manually * Resorted imports * Improved permission checking * Fixed some bugs * Added integration test * gofmt * Adding integration test by @lafriks * Added created_unix to comment fixtures * Using last event instead of a fixed event * Adding another integration test by @lafriks * Fixing bug Timetracker enabled causing error 500 at sidebar.tpl * Fixed a refactoring bug that resulted in hiding "HasUserStopwatch" warning. * Returning TrackedTime instead of AddTimeOption at AddTime. * Updating SDK from go-gitea/go-sdk#69 * Resetting Go-SDK back to default repository * Fixing test-vendor by changing ini back to original repository * Adding "tags" to swagger spec * govendor sync * Removed duplicate * Formatting templates * Adding IsTimetrackingEnabled checks to API * Improving translations / english texts * Improving documentation * Updating swagger spec * Fixing integration test caused be translation-changes * Removed encoding issues in local_en-US.ini. * "Added" copyright line * Moved unit.IssuesConfig().EnableTimetracker into a != nil check * Removed some other encoding issues in local_en-US.ini * Improved javascript by checking if data-context exists * Replaced manual comment creation with CreateComment * Removed unnecessary code * Improved error checking * Small cosmetic changes * Replaced int>string>duration parsing with int>duration parsing * Fixed encoding issues * Removed unused imports Signed-off-by: Jonas Franz <info@jonasfranz.software>
7 years ago
  1. // Copyright 2017 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 migrations
  5. import (
  6. "fmt"
  7. "time"
  8. "code.gitea.io/gitea/modules/markup"
  9. "github.com/go-xorm/xorm"
  10. )
  11. // Enumerate all the unit types
  12. const (
  13. V16UnitTypeCode = iota + 1 // 1 code
  14. V16UnitTypeIssues // 2 issues
  15. V16UnitTypePRs // 3 PRs
  16. V16UnitTypeCommits // 4 Commits
  17. V16UnitTypeReleases // 5 Releases
  18. V16UnitTypeWiki // 6 Wiki
  19. V16UnitTypeSettings // 7 Settings
  20. V16UnitTypeExternalWiki // 8 ExternalWiki
  21. V16UnitTypeExternalTracker // 9 ExternalTracker
  22. )
  23. func addUnitsToTables(x *xorm.Engine) error {
  24. // RepoUnit describes all units of a repository
  25. type RepoUnit struct {
  26. ID int64
  27. RepoID int64 `xorm:"INDEX(s)"`
  28. Type int `xorm:"INDEX(s)"`
  29. Index int
  30. Config map[string]interface{} `xorm:"JSON"`
  31. CreatedUnix int64 `xorm:"INDEX CREATED"`
  32. Created time.Time `xorm:"-"`
  33. }
  34. // Repo describes a repository
  35. type Repo struct {
  36. ID int64
  37. EnableWiki, EnableExternalWiki, EnableIssues, EnableExternalTracker, EnablePulls bool
  38. ExternalWikiURL, ExternalTrackerURL, ExternalTrackerFormat, ExternalTrackerStyle string
  39. }
  40. var repos []Repo
  41. err := x.Table("repository").Select("*").Find(&repos)
  42. if err != nil {
  43. return fmt.Errorf("Query repositories: %v", err)
  44. }
  45. sess := x.NewSession()
  46. defer sess.Close()
  47. if err := sess.Begin(); err != nil {
  48. return err
  49. }
  50. var repoUnit RepoUnit
  51. if exist, err := sess.IsTableExist(&repoUnit); err != nil {
  52. return fmt.Errorf("IsExist RepoUnit: %v", err)
  53. } else if exist {
  54. return nil
  55. }
  56. if err := sess.CreateTable(&repoUnit); err != nil {
  57. return fmt.Errorf("CreateTable RepoUnit: %v", err)
  58. }
  59. if err := sess.CreateUniques(&repoUnit); err != nil {
  60. return fmt.Errorf("CreateUniques RepoUnit: %v", err)
  61. }
  62. if err := sess.CreateIndexes(&repoUnit); err != nil {
  63. return fmt.Errorf("CreateIndexes RepoUnit: %v", err)
  64. }
  65. for _, repo := range repos {
  66. for i := 1; i <= 9; i++ {
  67. if (i == V16UnitTypeWiki || i == V16UnitTypeExternalWiki) && !repo.EnableWiki {
  68. continue
  69. }
  70. if i == V16UnitTypeExternalWiki && !repo.EnableExternalWiki {
  71. continue
  72. }
  73. if i == V16UnitTypePRs && !repo.EnablePulls {
  74. continue
  75. }
  76. if (i == V16UnitTypeIssues || i == V16UnitTypeExternalTracker) && !repo.EnableIssues {
  77. continue
  78. }
  79. if i == V16UnitTypeExternalTracker && !repo.EnableExternalTracker {
  80. continue
  81. }
  82. var config = make(map[string]interface{})
  83. switch i {
  84. case V16UnitTypeExternalTracker:
  85. config["ExternalTrackerURL"] = repo.ExternalTrackerURL
  86. config["ExternalTrackerFormat"] = repo.ExternalTrackerFormat
  87. if len(repo.ExternalTrackerStyle) == 0 {
  88. repo.ExternalTrackerStyle = markup.IssueNameStyleNumeric
  89. }
  90. config["ExternalTrackerStyle"] = repo.ExternalTrackerStyle
  91. case V16UnitTypeExternalWiki:
  92. config["ExternalWikiURL"] = repo.ExternalWikiURL
  93. }
  94. if _, err = sess.Insert(&RepoUnit{
  95. RepoID: repo.ID,
  96. Type: i,
  97. Index: i,
  98. Config: config,
  99. }); err != nil {
  100. return fmt.Errorf("Insert repo unit: %v", err)
  101. }
  102. }
  103. }
  104. return sess.Commit()
  105. }