explore.go 4.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176
  1. // Copyright 2015 - Present, The Gogs Authors. All rights reserved.
  2. // Copyright 2018 - Present, Gitote. All rights reserved.
  3. //
  4. // This source code is licensed under the MIT license found in the
  5. // LICENSE file in the root directory of this source tree.
  6. package routes
  7. import (
  8. "gitote/gitote/models"
  9. "gitote/gitote/pkg/context"
  10. "gitote/gitote/pkg/setting"
  11. "gitlab.com/yoginth/paginater"
  12. )
  13. const (
  14. // ExploreReposTPL page template
  15. ExploreReposTPL = "explore/repos"
  16. // ExploreUsersTPL page template
  17. ExploreUsersTPL = "explore/users"
  18. // ExploreTrendingTPL page template
  19. ExploreTrendingTPL = "explore/trending"
  20. // ExploreOrganizationsTPL page template
  21. ExploreOrganizationsTPL = "explore/organizations"
  22. )
  23. // ExploreRepos shows explore repositories page
  24. func ExploreRepos(c *context.Context) {
  25. c.Data["Title"] = c.Tr("explore")
  26. c.Data["PageIsExplore"] = true
  27. c.Data["PageIsExploreRepositories"] = true
  28. page := c.QueryInt("page")
  29. if page <= 0 {
  30. page = 1
  31. }
  32. keyword := c.Query("q")
  33. // Search a repository
  34. repos, count, err := models.SearchRepositoryByName(&models.SearchRepoOptions{
  35. Keyword: keyword,
  36. UserID: c.UserID(),
  37. OrderBy: "updated_unix DESC",
  38. Page: page,
  39. PageSize: setting.UI.ExplorePagingNum,
  40. })
  41. if err != nil {
  42. c.ServerError("SearchRepositoryByName", err)
  43. return
  44. }
  45. c.Data["Keyword"] = keyword
  46. c.Data["Total"] = count
  47. c.Data["Page"] = paginater.New(int(count), setting.UI.ExplorePagingNum, page, 5)
  48. if err = models.RepositoryList(repos).LoadAttributes(); err != nil {
  49. c.ServerError("RepositoryList.LoadAttributes", err)
  50. return
  51. }
  52. c.Data["Repos"] = repos
  53. c.Success(ExploreReposTPL)
  54. }
  55. // ExploreTrending shows trending repositories page
  56. func ExploreTrending(c *context.Context) {
  57. c.Data["Title"] = c.Tr("explore.trending")
  58. c.Data["PageIsTrending"] = true
  59. repos, count, err := models.SearchRepositoryByName(&models.SearchRepoOptions{
  60. UserID: c.UserID(),
  61. OrderBy: "num_stars DESC",
  62. PageSize: 15,
  63. })
  64. if err != nil {
  65. c.ServerError("SearchRepositoryByName", err)
  66. return
  67. }
  68. c.Data["Total"] = count
  69. if err = models.RepositoryList(repos).LoadAttributes(); err != nil {
  70. c.ServerError("RepositoryList.LoadAttributes", err)
  71. return
  72. }
  73. c.Data["Repos"] = repos
  74. c.Success(ExploreTrendingTPL)
  75. }
  76. // UserSearchOptions is the structure of the options choosed by the user
  77. type UserSearchOptions struct {
  78. Type models.UserType
  79. Counter func() int64
  80. Ranger func(int, int) ([]*models.User, error)
  81. PageSize int
  82. OrderBy string
  83. TplName string
  84. }
  85. // RenderUserSearch renders user search
  86. func RenderUserSearch(c *context.Context, opts *UserSearchOptions) {
  87. page := c.QueryInt("page")
  88. if page <= 1 {
  89. page = 1
  90. }
  91. var (
  92. users []*models.User
  93. count int64
  94. err error
  95. )
  96. keyword := c.Query("q")
  97. if len(keyword) == 0 {
  98. users, err = opts.Ranger(page, opts.PageSize)
  99. if err != nil {
  100. c.ServerError("Ranger", err)
  101. return
  102. }
  103. count = opts.Counter()
  104. } else {
  105. users, count, err = models.SearchUserByName(&models.SearchUserOptions{
  106. Keyword: keyword,
  107. Type: opts.Type,
  108. OrderBy: opts.OrderBy,
  109. Page: page,
  110. PageSize: opts.PageSize,
  111. })
  112. if err != nil {
  113. c.ServerError("SearchUserByName", err)
  114. return
  115. }
  116. }
  117. c.Data["Keyword"] = keyword
  118. c.Data["Total"] = count
  119. c.Data["Page"] = paginater.New(int(count), opts.PageSize, page, 5)
  120. c.Data["Users"] = users
  121. c.Success(opts.TplName)
  122. }
  123. // ExploreUsers shows explore users page
  124. func ExploreUsers(c *context.Context) {
  125. c.Data["Title"] = c.Tr("explore")
  126. c.Data["PageIsExplore"] = true
  127. c.Data["PageIsExploreUsers"] = true
  128. RenderUserSearch(c, &UserSearchOptions{
  129. Type: models.UserTypeIndividual,
  130. Counter: models.CountUsers,
  131. Ranger: models.Users,
  132. PageSize: setting.UI.ExplorePagingNum,
  133. OrderBy: "updated_unix DESC",
  134. TplName: ExploreUsersTPL,
  135. })
  136. }
  137. //ExploreOrganizations shows explore organizations page
  138. func ExploreOrganizations(c *context.Context) {
  139. c.Data["Title"] = c.Tr("explore")
  140. c.Data["PageIsExplore"] = true
  141. c.Data["PageIsExploreOrganizations"] = true
  142. RenderUserSearch(c, &UserSearchOptions{
  143. Type: models.UserTypeOrganization,
  144. Counter: models.CountOrganizations,
  145. Ranger: models.Organizations,
  146. PageSize: setting.UI.ExplorePagingNum,
  147. OrderBy: "updated_unix DESC",
  148. TplName: ExploreOrganizationsTPL,
  149. })
  150. }