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 @@
- + diff --git a/src/main/twirl/gitbucket/core/search/issues.scala.html b/src/main/twirl/gitbucket/core/search/issues.scala.html index 817b47a..018c135 100644 --- a/src/main/twirl/gitbucket/core/search/issues.scala.html +++ b/src/main/twirl/gitbucket/core/search/issues.scala.html @@ -1,21 +1,27 @@ @(issues: List[gitbucket.core.service.RepositorySearchService.IssueSearchResult], + pullRequest: Boolean, query: String, page: Int, repository: gitbucket.core.service.RepositoryService.RepositoryInfo)(implicit context: gitbucket.core.controller.Context) @import gitbucket.core.view.helpers @import gitbucket.core.service.RepositorySearchService @gitbucket.core.html.main("Search Results", Some(repository)){ - @gitbucket.core.search.html.menu("issues", query, repository){ + @gitbucket.core.search.html.menu(if(pullRequest) "pulls" else "issues", query, repository){ @if(query.nonEmpty) { @if(issues.isEmpty) { -

We couldn't find any code matching '@query'

+

We couldn't find any @{if(pullRequest) "pull requests" else "issues"} matching '@query'

} else { -

We've found @issues.size @helpers.plural(issues.size, "issue")

+

We've found @issues.size @helpers.plural(issues.size, if(pullRequest) "pull request" else "issue")

} } @issues.drop((page - 1) * RepositorySearchService.IssueLimit).take(RepositorySearchService.IssueLimit).map { issue =>
-
#@issue.issueId
+
+ @if(issue.isClosed){ + Closed + } + #@issue.issueId +

@issue.title

@if(issue.highlightText.nonEmpty){
@Html(issue.highlightText)
@@ -31,6 +37,6 @@
} @gitbucket.core.helper.html.paginator(page, issues.size, RepositorySearchService.IssueLimit, 10, - s"${helpers.url(repository)}/search?q=${helpers.urlEncode(query)}&type=issue") + s"${helpers.url(repository)}/search?q=${helpers.urlEncode(query)}&type=${if(pullRequest) "pulls" else "issues"}") } -} \ No newline at end of file +} diff --git a/src/main/twirl/gitbucket/core/search/menu.scala.html b/src/main/twirl/gitbucket/core/search/menu.scala.html index d3b1d93..f576b54 100644 --- a/src/main/twirl/gitbucket/core/search/menu.scala.html +++ b/src/main/twirl/gitbucket/core/search/menu.scala.html @@ -6,7 +6,10 @@ @body -} \ No newline at end of file +} diff --git a/src/main/twirl/gitbucket/core/search/wiki.scala.html b/src/main/twirl/gitbucket/core/search/wiki.scala.html index 234784d..56228fd 100644 --- a/src/main/twirl/gitbucket/core/search/wiki.scala.html +++ b/src/main/twirl/gitbucket/core/search/wiki.scala.html @@ -8,7 +8,7 @@ @gitbucket.core.search.html.menu("wiki", query, repository){ @if(query.nonEmpty) { @if(wikis.isEmpty) { -

We could not find any code matching '@query'

+

We could not find any pages matching '@query'

} else {

We've found @wikis.size @helpers.plural(wikis.size, "page")

} @@ -23,4 +23,4 @@ @gitbucket.core.helper.html.paginator(page, wikis.size, RepositorySearchService.CodeLimit, 10, s"${helpers.url(repository)}/search?q=${helpers.urlEncode(query)}&type=wiki") } -} \ No newline at end of file +}