explore.go 4.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205
  1. // Copyright 2015 The Gogs Authors. All rights reserved.
  2. // Copyright 2018 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. // ExploreTPL page template
  15. ExploreTPL = "explore/home"
  16. // ExploreReposTPL page template
  17. ExploreReposTPL = "explore/repos"
  18. // ExploreUsersTPL page template
  19. ExploreUsersTPL = "explore/users"
  20. // ExploreTrendingTPL page template
  21. ExploreTrendingTPL = "explore/trending"
  22. // ExploreOrganizationsTPL page template
  23. ExploreOrganizationsTPL = "explore/organizations"
  24. )
  25. // ExploreHome shows explore page
  26. func Explore(c *context.Context) {
  27. c.Data["Title"] = c.Tr("explore")
  28. c.Data["PageIsExplore"] = true
  29. c.Data["PageIsExploreRepositories"] = true
  30. repos, count, err := models.SearchRepositoryByName(&models.SearchRepoOptions{
  31. UserID: c.UserID(),
  32. OrderBy: "num_stars DESC",
  33. PageSize: 4,
  34. })
  35. if err != nil {
  36. c.ServerError("SearchRepositoryByName", err)
  37. return
  38. }
  39. c.Data["Total"] = count
  40. if err = models.RepositoryList(repos).LoadAttributes(); err != nil {
  41. c.ServerError("RepositoryList.LoadAttributes", err)
  42. return
  43. }
  44. c.Data["Repos"] = repos
  45. c.Success(ExploreTPL)
  46. }
  47. // ExploreRepos shows explore repositories page
  48. func ExploreRepos(c *context.Context) {
  49. c.Data["Title"] = c.Tr("explore")
  50. c.Data["PageIsExplore"] = true
  51. c.Data["PageIsExploreRepositories"] = true
  52. page := c.QueryInt("page")
  53. if page <= 0 {
  54. page = 1
  55. }
  56. keyword := c.Query("q")
  57. // Search a repository
  58. repos, count, err := models.SearchRepositoryByName(&models.SearchRepoOptions{
  59. Keyword: keyword,
  60. UserID: c.UserID(),
  61. OrderBy: "updated_unix DESC",
  62. Page: page,
  63. PageSize: setting.UI.ExplorePagingNum,
  64. })
  65. if err != nil {
  66. c.ServerError("SearchRepositoryByName", err)
  67. return
  68. }
  69. c.Data["Keyword"] = keyword
  70. c.Data["Total"] = count
  71. c.Data["Page"] = paginater.New(int(count), setting.UI.ExplorePagingNum, page, 5)
  72. if err = models.RepositoryList(repos).LoadAttributes(); err != nil {
  73. c.ServerError("RepositoryList.LoadAttributes", err)
  74. return
  75. }
  76. c.Data["Repos"] = repos
  77. c.Success(ExploreReposTPL)
  78. }
  79. // ExploreTrending shows trending repositories page
  80. func ExploreTrending(c *context.Context) {
  81. c.Data["Title"] = c.Tr("explore.trending")
  82. c.Data["PageIsTrending"] = true
  83. repos, count, err := models.SearchRepositoryByName(&models.SearchRepoOptions{
  84. UserID: c.UserID(),
  85. OrderBy: "num_stars DESC",
  86. PageSize: 15,
  87. })
  88. if err != nil {
  89. c.ServerError("SearchRepositoryByName", err)
  90. return
  91. }
  92. c.Data["Total"] = count
  93. if err = models.RepositoryList(repos).LoadAttributes(); err != nil {
  94. c.ServerError("RepositoryList.LoadAttributes", err)
  95. return
  96. }
  97. c.Data["Repos"] = repos
  98. c.Success(ExploreTrendingTPL)
  99. }
  100. // UserSearchOptions is the structure of the options choosed by the user
  101. type UserSearchOptions struct {
  102. Type models.UserType
  103. Counter func() int64
  104. Ranger func(int, int) ([]*models.User, error)
  105. PageSize int
  106. OrderBy string
  107. TplName string
  108. }
  109. // RenderUserSearch renders user search
  110. func RenderUserSearch(c *context.Context, opts *UserSearchOptions) {
  111. page := c.QueryInt("page")
  112. if page <= 1 {
  113. page = 1
  114. }
  115. var (
  116. users []*models.User
  117. count int64
  118. err error
  119. )
  120. keyword := c.Query("q")
  121. if len(keyword) == 0 {
  122. users, err = opts.Ranger(page, opts.PageSize)
  123. if err != nil {
  124. c.ServerError("Ranger", err)
  125. return
  126. }
  127. count = opts.Counter()
  128. } else {
  129. users, count, err = models.SearchUserByName(&models.SearchUserOptions{
  130. Keyword: keyword,
  131. Type: opts.Type,
  132. OrderBy: opts.OrderBy,
  133. Page: page,
  134. PageSize: opts.PageSize,
  135. })
  136. if err != nil {
  137. c.ServerError("SearchUserByName", err)
  138. return
  139. }
  140. }
  141. c.Data["Keyword"] = keyword
  142. c.Data["Total"] = count
  143. c.Data["Page"] = paginater.New(int(count), opts.PageSize, page, 5)
  144. c.Data["Users"] = users
  145. c.Success(opts.TplName)
  146. }
  147. // ExploreUsers shows explore users page
  148. func ExploreUsers(c *context.Context) {
  149. c.Data["Title"] = c.Tr("explore")
  150. c.Data["PageIsExplore"] = true
  151. c.Data["PageIsExploreUsers"] = true
  152. RenderUserSearch(c, &UserSearchOptions{
  153. Type: models.UserTypeIndividual,
  154. Counter: models.CountUsers,
  155. Ranger: models.Users,
  156. PageSize: setting.UI.ExplorePagingNum,
  157. OrderBy: "updated_unix DESC",
  158. TplName: ExploreUsersTPL,
  159. })
  160. }
  161. //ExploreOrganizations shows explore organizations page
  162. func ExploreOrganizations(c *context.Context) {
  163. c.Data["Title"] = c.Tr("explore")
  164. c.Data["PageIsExplore"] = true
  165. c.Data["PageIsExploreOrganizations"] = true
  166. RenderUserSearch(c, &UserSearchOptions{
  167. Type: models.UserTypeOrganization,
  168. Counter: models.CountOrganizations,
  169. Ranger: models.Organizations,
  170. PageSize: setting.UI.ExplorePagingNum,
  171. OrderBy: "updated_unix DESC",
  172. TplName: ExploreOrganizationsTPL,
  173. })
  174. }