mirror of
https://github.com/gitbucket/gitbucket.git
synced 2025-11-01 02:56:08 +01:00
116 lines
4.2 KiB
Scala
116 lines
4.2 KiB
Scala
package app
|
|
|
|
import service._
|
|
import util.UsersAuthenticator
|
|
import util.Implicits._
|
|
|
|
class DashboardController extends DashboardControllerBase
|
|
with IssuesService with PullRequestService with RepositoryService with AccountService
|
|
with UsersAuthenticator
|
|
|
|
trait DashboardControllerBase extends ControllerBase {
|
|
self: IssuesService with PullRequestService with RepositoryService with UsersAuthenticator =>
|
|
|
|
get("/dashboard/issues/repos")(usersOnly {
|
|
searchIssues("all")
|
|
})
|
|
|
|
get("/dashboard/issues/assigned")(usersOnly {
|
|
searchIssues("assigned")
|
|
})
|
|
|
|
get("/dashboard/issues/created_by")(usersOnly {
|
|
searchIssues("created_by")
|
|
})
|
|
|
|
get("/dashboard/pulls")(usersOnly {
|
|
searchPullRequests("created_by", None)
|
|
})
|
|
|
|
get("/dashboard/pulls/owned")(usersOnly {
|
|
searchPullRequests("created_by", None)
|
|
})
|
|
|
|
get("/dashboard/pulls/public")(usersOnly {
|
|
searchPullRequests("not_created_by", None)
|
|
})
|
|
|
|
get("/dashboard/pulls/for/:owner/:repository")(usersOnly {
|
|
searchPullRequests("all", Some(params("owner") + "/" + params("repository")))
|
|
})
|
|
|
|
private def searchIssues(filter: String) = {
|
|
import IssuesService._
|
|
|
|
// condition
|
|
val sessionKey = "dashboard/issues"
|
|
val condition = session.putAndGet(sessionKey,
|
|
if(request.hasQueryString) IssueSearchCondition(request)
|
|
else session.get(sessionKey).getOrElse(IssueSearchCondition()).asInstanceOf[IssueSearchCondition]
|
|
)
|
|
|
|
val userName = context.loginAccount.get.userName
|
|
val repositories = getUserRepositories(userName, baseUrl).map(repo => repo.owner -> repo.name)
|
|
val filterUser = Map(filter -> userName)
|
|
val page = IssueSearchCondition.page(request)
|
|
//
|
|
dashboard.html.issues(
|
|
issues.html.listparts(
|
|
searchIssue(condition, filterUser, false, (page - 1) * IssueLimit, IssueLimit, repositories: _*),
|
|
page,
|
|
countIssue(condition.copy(state = "open"), filterUser, false, repositories: _*),
|
|
countIssue(condition.copy(state = "closed"), filterUser, false, repositories: _*),
|
|
condition),
|
|
countIssue(condition, Map.empty, false, repositories: _*),
|
|
countIssue(condition, Map("assigned" -> userName), false, repositories: _*),
|
|
countIssue(condition, Map("created_by" -> userName), false, repositories: _*),
|
|
countIssueGroupByRepository(condition, filterUser, false, repositories: _*),
|
|
condition,
|
|
filter)
|
|
|
|
}
|
|
|
|
private def searchPullRequests(filter: String, repository: Option[String]) = {
|
|
import IssuesService._
|
|
import PullRequestService._
|
|
|
|
// condition
|
|
val sessionKey = "dashboard/pulls"
|
|
val condition = session.putAndGet(sessionKey, {
|
|
if(request.hasQueryString) IssueSearchCondition(request)
|
|
else session.getAs[IssueSearchCondition](sessionKey).getOrElse(IssueSearchCondition())
|
|
}.copy(repo = repository))
|
|
|
|
val userName = context.loginAccount.get.userName
|
|
val repositories = getUserRepositories(userName, baseUrl).map(repo => repo.owner -> repo.name)
|
|
val filterUser = Map(filter -> userName)
|
|
val page = IssueSearchCondition.page(request)
|
|
|
|
val counts = countIssueGroupByRepository(
|
|
IssueSearchCondition().copy(state = condition.state), Map.empty, true, repositories: _*)
|
|
|
|
getRepositoryNamesOfUser(userName).map { repoName =>
|
|
(userName, repoName, counts.collectFirst { case (_, repoName, count) => count })
|
|
}
|
|
|
|
dashboard.html.pulls(
|
|
pulls.html.listparts(
|
|
searchIssue(condition, filterUser, true, (page - 1) * PullRequestLimit, PullRequestLimit, repositories: _*),
|
|
page,
|
|
countIssue(condition.copy(state = "open"), filterUser, true, repositories: _*),
|
|
countIssue(condition.copy(state = "closed"), filterUser, true, repositories: _*),
|
|
condition,
|
|
None,
|
|
false),
|
|
getPullRequestCountGroupByUser(condition.state == "closed", userName, None),
|
|
getRepositoryNamesOfUser(userName).map { RepoName =>
|
|
(userName, RepoName, counts.collectFirst { case (_, RepoName, count) => count }.getOrElse(0))
|
|
}.sortBy(_._3).reverse,
|
|
condition,
|
|
filter)
|
|
|
|
}
|
|
|
|
|
|
}
|