mirror of
https://github.com/gitbucket/gitbucket.git
synced 2025-11-09 06:55:54 +01:00
Add issue pagination.
This commit is contained in:
@@ -107,6 +107,13 @@ trait IssuesControllerBase extends ControllerBase {
|
||||
val userName = if(filter != "all") Some(params("userName")) else None
|
||||
val sessionKey = "%s/%s/issues".format(owner, repository)
|
||||
|
||||
val page = try {
|
||||
val i = params.getOrElse("page", "1").toInt
|
||||
if(i <= 0) 1 else i
|
||||
} catch {
|
||||
case e: NumberFormatException => 1
|
||||
}
|
||||
|
||||
// retrieve search condition
|
||||
val condition = if(request.getQueryString == null){
|
||||
session.get(sessionKey).getOrElse(IssueSearchCondition()).asInstanceOf[IssueSearchCondition]
|
||||
@@ -115,7 +122,9 @@ trait IssuesControllerBase extends ControllerBase {
|
||||
session.put(sessionKey, condition)
|
||||
|
||||
getRepository(owner, repository, baseUrl).map { repositoryInfo =>
|
||||
issues.html.issues(searchIssue(owner, repository, condition, filter, userName),
|
||||
issues.html.issues(
|
||||
searchIssue(owner, repository, condition, filter, userName, (page - 1) * IssueLimit, IssueLimit),
|
||||
page,
|
||||
getLabels(owner, repository),
|
||||
getMilestones(owner, repository).filter(_.closedDate.isEmpty),
|
||||
countIssue(owner, repository, condition.copy(state = "open"), filter, userName),
|
||||
@@ -124,7 +133,10 @@ trait IssuesControllerBase extends ControllerBase {
|
||||
context.loginAccount.map(x => countIssue(owner, repository, condition, "assigned", Some(x.userName))),
|
||||
context.loginAccount.map(x => countIssue(owner, repository, condition, "created_by", Some(x.userName))),
|
||||
countIssueGroupByLabels(owner, repository, condition, filter, userName),
|
||||
condition, filter, repositoryInfo, isWritable(owner, repository, context.loginAccount))
|
||||
condition,
|
||||
filter,
|
||||
repositoryInfo,
|
||||
isWritable(owner, repository, context.loginAccount))
|
||||
|
||||
} getOrElse NotFound
|
||||
}
|
||||
|
||||
@@ -93,9 +93,12 @@ trait IssuesService {
|
||||
* @param condition the search condition
|
||||
* @param filter the filter type ("all", "assigned" or "created_by")
|
||||
* @param userName the filter user name required for "assigned" and "created_by"
|
||||
* @param offset the offset for pagination
|
||||
* @param limit the limit for pagination
|
||||
* @return the count of the search result
|
||||
*/
|
||||
def searchIssue(owner: String, repository: String, condition: IssueSearchCondition, filter: String, userName: Option[String]) =
|
||||
def searchIssue(owner: String, repository: String, condition: IssueSearchCondition,
|
||||
filter: String, userName: Option[String], offset: Int, limit: Int): List[Issue] =
|
||||
searchIssueQuery(owner, repository, condition, filter, userName).sortBy { t =>
|
||||
(condition.sort match {
|
||||
case "created" => t.registeredDate
|
||||
@@ -107,7 +110,7 @@ trait IssuesService {
|
||||
case "desc" => sort desc
|
||||
}
|
||||
}
|
||||
} list
|
||||
} drop(offset) take(limit) list
|
||||
|
||||
/**
|
||||
* Assembles query for conditional issue searching.
|
||||
@@ -164,6 +167,8 @@ object IssuesService {
|
||||
import java.net.URLEncoder
|
||||
import javax.servlet.http.HttpServletRequest
|
||||
|
||||
val IssueLimit = 1
|
||||
|
||||
case class IssueSearchCondition(
|
||||
labels: Set[String] = Set.empty,
|
||||
milestoneId: Option[Int] = None,
|
||||
|
||||
Reference in New Issue
Block a user