mirror of
https://github.com/gitbucket/gitbucket.git
synced 2025-11-03 03:55:58 +01:00
138 lines
5.2 KiB
Scala
138 lines
5.2 KiB
Scala
package app
|
|
|
|
import service._
|
|
import util.{StringUtil, UsersAuthenticator, Keys}
|
|
import util.Implicits._
|
|
import service.IssuesService.IssueSearchCondition
|
|
|
|
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 AccountService
|
|
with UsersAuthenticator =>
|
|
|
|
get("/dashboard/issues")(usersOnly {
|
|
val q = request.getParameter("q")
|
|
val account = context.loginAccount.get
|
|
Option(q).map { q =>
|
|
val condition = IssueSearchCondition(q, Map[String, Int]())
|
|
q match {
|
|
case q if(q.contains("is:pr")) => redirect(s"/dashboard/pulls?q=${StringUtil.urlEncode(q)}")
|
|
case q if(q.contains(s"author:${account.userName}")) => redirect(s"/dashboard/issues/created_by${condition.toURL}")
|
|
case q if(q.contains(s"assignee:${account.userName}")) => redirect(s"/dashboard/issues/assigned${condition.toURL}")
|
|
case q if(q.contains(s"mentions:${account.userName}")) => redirect(s"/dashboard/issues/mentioned${condition.toURL}")
|
|
case _ => searchIssues("created_by")
|
|
}
|
|
} getOrElse {
|
|
searchIssues("created_by")
|
|
}
|
|
})
|
|
|
|
get("/dashboard/issues/assigned")(usersOnly {
|
|
searchIssues("assigned")
|
|
})
|
|
|
|
get("/dashboard/issues/created_by")(usersOnly {
|
|
searchIssues("created_by")
|
|
})
|
|
|
|
get("/dashboard/issues/mentioned")(usersOnly {
|
|
searchIssues("mentioned")
|
|
})
|
|
|
|
get("/dashboard/pulls")(usersOnly {
|
|
val q = request.getParameter("q")
|
|
val account = context.loginAccount.get
|
|
Option(q).map { q =>
|
|
val condition = IssueSearchCondition(q, Map[String, Int]())
|
|
q match {
|
|
case q if(q.contains("is:issue")) => redirect(s"/dashboard/issues?q=${StringUtil.urlEncode(q)}")
|
|
case q if(q.contains(s"author:${account.userName}")) => redirect(s"/dashboard/pulls/created_by${condition.toURL}")
|
|
case q if(q.contains(s"assignee:${account.userName}")) => redirect(s"/dashboard/pulls/assigned${condition.toURL}")
|
|
case q if(q.contains(s"mentions:${account.userName}")) => redirect(s"/dashboard/pulls/mentioned${condition.toURL}")
|
|
case _ => searchPullRequests("created_by")
|
|
}
|
|
} getOrElse {
|
|
searchPullRequests("created_by")
|
|
}
|
|
})
|
|
|
|
get("/dashboard/pulls/created_by")(usersOnly {
|
|
searchPullRequests("created_by")
|
|
})
|
|
|
|
get("/dashboard/pulls/assigned")(usersOnly {
|
|
searchPullRequests("assigned")
|
|
})
|
|
|
|
get("/dashboard/pulls/mentioned")(usersOnly {
|
|
searchPullRequests("mentioned")
|
|
})
|
|
|
|
private def getOrCreateCondition(key: String, filter: String, userName: String) = {
|
|
val condition = session.putAndGet(key, if(request.hasQueryString){
|
|
val q = request.getParameter("q")
|
|
if(q == null){
|
|
IssueSearchCondition(request)
|
|
} else {
|
|
IssueSearchCondition(q, Map[String, Int]())
|
|
}
|
|
} else session.getAs[IssueSearchCondition](key).getOrElse(IssueSearchCondition()))
|
|
|
|
filter match {
|
|
case "assigned" => condition.copy(assigned = Some(userName), author = None , mentioned = None)
|
|
case "mentioned" => condition.copy(assigned = None , author = None , mentioned = Some(userName))
|
|
case _ => condition.copy(assigned = None , author = Some(userName), mentioned = None)
|
|
}
|
|
}
|
|
|
|
private def searchIssues(filter: String) = {
|
|
import IssuesService._
|
|
|
|
val userName = context.loginAccount.get.userName
|
|
val condition = getOrCreateCondition(Keys.Session.DashboardIssues, filter, userName)
|
|
val userRepos = getUserRepositories(userName, context.baseUrl, true).map(repo => repo.owner -> repo.name)
|
|
val page = IssueSearchCondition.page(request)
|
|
|
|
dashboard.html.issues(
|
|
searchIssue(condition, false, (page - 1) * IssueLimit, IssueLimit, userRepos: _*),
|
|
page,
|
|
countIssue(condition.copy(state = "open" ), false, userRepos: _*),
|
|
countIssue(condition.copy(state = "closed"), false, userRepos: _*),
|
|
filter match {
|
|
case "assigned" => condition.copy(assigned = Some(userName))
|
|
case "mentioned" => condition.copy(mentioned = Some(userName))
|
|
case _ => condition.copy(author = Some(userName))
|
|
},
|
|
filter,
|
|
getGroupNames(userName))
|
|
}
|
|
|
|
private def searchPullRequests(filter: String) = {
|
|
import IssuesService._
|
|
import PullRequestService._
|
|
|
|
val userName = context.loginAccount.get.userName
|
|
val condition = getOrCreateCondition(Keys.Session.DashboardPulls, filter, userName)
|
|
val allRepos = getAllRepositories(userName)
|
|
val page = IssueSearchCondition.page(request)
|
|
|
|
dashboard.html.pulls(
|
|
searchIssue(condition, true, (page - 1) * PullRequestLimit, PullRequestLimit, allRepos: _*),
|
|
page,
|
|
countIssue(condition.copy(state = "open" ), true, allRepos: _*),
|
|
countIssue(condition.copy(state = "closed"), true, allRepos: _*),
|
|
filter match {
|
|
case "assigned" => condition.copy(assigned = Some(userName))
|
|
case "mentioned" => condition.copy(mentioned = Some(userName))
|
|
case _ => condition.copy(author = Some(userName))
|
|
},
|
|
filter,
|
|
getGroupNames(userName))
|
|
}
|
|
|
|
|
|
}
|