diff --git a/src/main/scala/gitbucket/core/controller/IndexController.scala b/src/main/scala/gitbucket/core/controller/IndexController.scala index 7770ccc..e553864 100644 --- a/src/main/scala/gitbucket/core/controller/IndexController.scala +++ b/src/main/scala/gitbucket/core/controller/IndexController.scala @@ -237,9 +237,19 @@ } target.toLowerCase match { - case "issue" => + case "issues" => gitbucket.core.search.html.issues( - if (query.nonEmpty) searchIssues(repository.owner, repository.name, query) else Nil, + if (query.nonEmpty) searchIssues(repository.owner, repository.name, query, false) else Nil, + false, + query, + page, + repository + ) + + case "pulls" => + gitbucket.core.search.html.issues( + if (query.nonEmpty) searchIssues(repository.owner, repository.name, query, true) else Nil, + true, query, page, repository diff --git a/src/main/scala/gitbucket/core/service/IssuesService.scala b/src/main/scala/gitbucket/core/service/IssuesService.scala index 05255c4..24a0566 100644 --- a/src/main/scala/gitbucket/core/service/IssuesService.scala +++ b/src/main/scala/gitbucket/core/service/IssuesService.scala @@ -630,7 +630,7 @@ * @param query the keywords separated by whitespace. * @return issues with comment count and matched content of issue or comment */ - def searchIssuesByKeyword(owner: String, repository: String, query: String)( + def searchIssuesByKeyword(owner: String, repository: String, query: String, pullRequest: Boolean)( implicit s: Session ): List[(Issue, Int, String)] = { //import slick.driver.JdbcDriver.likeEncode @@ -638,7 +638,9 @@ // Search Issue val issues = Issues - .filter(_.byRepository(owner, repository)) + .filter { t => + t.byRepository(owner, repository) && t.pullRequest === pullRequest.bind + } .join(IssueOutline) .on { case (t1, t2) => @@ -673,11 +675,12 @@ } .filter { case ((t1, t2), t3) => - keywords - .map { query => - t1.content.toLowerCase like (s"%${likeEncode(query)}%", '^') - } - .reduceLeft(_ && _) + t2.pullRequest === pullRequest.bind && + keywords + .map { query => + t1.content.toLowerCase like (s"%${likeEncode(query)}%", '^') + } + .reduceLeft(_ && _) } .map { case ((t1, t2), t3) => @@ -688,7 +691,7 @@ .union(comments) .sortBy { case (issue, commentId, _, _) => - issue.issueId -> commentId + issue.issueId.desc -> commentId } .list .splitWith { diff --git a/src/main/scala/gitbucket/core/service/RepositorySearchService.scala b/src/main/scala/gitbucket/core/service/RepositorySearchService.scala index 4c53792..a06af1d 100644 --- a/src/main/scala/gitbucket/core/service/RepositorySearchService.scala +++ b/src/main/scala/gitbucket/core/service/RepositorySearchService.scala @@ -14,18 +14,21 @@ trait RepositorySearchService { self: IssuesService => import RepositorySearchService._ - def countIssues(owner: String, repository: String, query: String)(implicit session: Session): Int = - searchIssuesByKeyword(owner, repository, query).length + def countIssues(owner: String, repository: String, query: String, pullRequest: Boolean)( + implicit session: Session + ): Int = + searchIssuesByKeyword(owner, repository, query, pullRequest).length - def searchIssues(owner: String, repository: String, query: String)( + def searchIssues(owner: String, repository: String, query: String, pullRequest: Boolean)( implicit session: Session ): List[IssueSearchResult] = - searchIssuesByKeyword(owner, repository, query).map { + searchIssuesByKeyword(owner, repository, query, pullRequest).map { case (issue, commentCount, content) => IssueSearchResult( issue.issueId, issue.isPullRequest, issue.title, + issue.closed, issue.openedUserName, issue.registeredDate, commentCount, @@ -142,6 +145,7 @@ issueId: Int, isPullRequest: Boolean, title: String, + isClosed: Boolean, openedUserName: String, registeredDate: java.util.Date, commentCount: Int, diff --git a/src/main/twirl/gitbucket/core/issues/list.scala.html b/src/main/twirl/gitbucket/core/issues/list.scala.html index f36f274..755be28 100644 --- a/src/main/twirl/gitbucket/core/issues/list.scala.html +++ b/src/main/twirl/gitbucket/core/issues/list.scala.html @@ -25,7 +25,7 @@