mirror of
https://github.com/gitbucket/gitbucket.git
synced 2025-11-03 12:05:59 +01:00
Implementing conditional issue searching.
This commit is contained in:
@@ -27,26 +27,15 @@ trait IssuesControllerBase extends ControllerBase {
|
||||
)(CommentForm.apply)
|
||||
|
||||
get("/:owner/:repository/issues"){
|
||||
val owner = params("owner")
|
||||
val repository = params("repository")
|
||||
|
||||
searchIssues(owner, repository, "all", None)
|
||||
searchIssues("all")
|
||||
}
|
||||
|
||||
get("/:owner/:repository/issues/assigned/:userName"){
|
||||
val owner = params("owner")
|
||||
val repository = params("repository")
|
||||
val userName = params("userName")
|
||||
|
||||
searchIssues(owner, repository, "assigned", Some(userName))
|
||||
searchIssues("assigned")
|
||||
}
|
||||
|
||||
get("/:owner/:repository/issues/created_by/:userName"){
|
||||
val owner = params("owner")
|
||||
val repository = params("repository")
|
||||
val userName = params("userName")
|
||||
|
||||
searchIssues(owner, repository, "created_by", Some(userName))
|
||||
searchIssues("created_by")
|
||||
}
|
||||
|
||||
get("/:owner/:repository/issues/:id"){
|
||||
@@ -85,7 +74,10 @@ trait IssuesControllerBase extends ControllerBase {
|
||||
saveComment(owner, repository, context.loginAccount.get.userName, form.issueId, form.content)))
|
||||
})
|
||||
|
||||
private def searchIssues(owner: String, repository: String, filter: String, userName: Option[String]) = {
|
||||
private def searchIssues(filter: String) = {
|
||||
val owner = params("owner")
|
||||
val repository = params("repository")
|
||||
val userName = if(filter != "all") Some(params("userName")) else None
|
||||
val sessionKey = "%s/%s/issues".format(owner, repository)
|
||||
|
||||
// retrieve search condition
|
||||
@@ -96,7 +88,7 @@ trait IssuesControllerBase extends ControllerBase {
|
||||
session.put(sessionKey, condition)
|
||||
|
||||
getRepository(owner, repository, baseUrl).map { repositoryInfo =>
|
||||
issues.html.issues(searchIssue(owner, repository, condition.state == "closed"),
|
||||
issues.html.issues(searchIssue(owner, repository, condition, filter, userName),
|
||||
getLabels(owner, repository),
|
||||
getMilestones(owner, repository).filter(_.closedDate.isEmpty),
|
||||
condition, filter, repositoryInfo, isWritable(owner, repository, context.loginAccount))
|
||||
|
||||
@@ -7,8 +7,11 @@ import Q.interpolation
|
||||
|
||||
import model._
|
||||
import Issues._
|
||||
import util.Implicits._
|
||||
|
||||
trait IssuesService {
|
||||
import IssuesService._
|
||||
|
||||
def getIssue(owner: String, repository: String, issueId: String) =
|
||||
if (issueId forall (_.isDigit))
|
||||
Query(Issues) filter { t =>
|
||||
@@ -25,13 +28,26 @@ trait IssuesService {
|
||||
(t.issueId is issueId.bind)
|
||||
} list
|
||||
|
||||
def searchIssue(owner: String, repository: String,
|
||||
// TODO It is better to have a DTO
|
||||
closed: Boolean) =
|
||||
def searchIssue(owner: String, repository: String, condition: IssueSearchCondition, filter: String, userName: Option[String]) =
|
||||
Query(Issues) filter { t =>
|
||||
(t.userName is owner.bind) &&
|
||||
(t.repositoryName is repository.bind) &&
|
||||
(t.closed is closed.bind)
|
||||
(t.userName is owner.bind) &&
|
||||
(t.repositoryName is repository.bind) &&
|
||||
(t.closed is (condition.state == "closed").bind) &&
|
||||
(t.milestoneId is condition.milestoneId.get.bind, condition.milestoneId.isDefined) &&
|
||||
//if(condition.labels.nonEmpty) Some(Query(Issue)) else None,
|
||||
(t.assignedUserName is userName.get.bind, filter == "assigned") &&
|
||||
(t.openedUserName is userName.get.bind, filter == "created_by")
|
||||
} sortBy { t =>
|
||||
(condition.sort match {
|
||||
case "created" => t.registeredDate
|
||||
case "comments" => t.updatedDate
|
||||
case "updated" => t.updatedDate
|
||||
}) match {
|
||||
case sort => condition.direction match {
|
||||
case "asc" => sort asc
|
||||
case "desc" => sort desc
|
||||
}
|
||||
}
|
||||
} list
|
||||
|
||||
def saveIssue(owner: String, repository: String, loginUser: String,
|
||||
|
||||
@@ -1,6 +1,7 @@
|
||||
package util
|
||||
|
||||
import twirl.api.Html
|
||||
import scala.slick.driver.H2Driver.simple._
|
||||
|
||||
/**
|
||||
* Provides some usable implicit conversions.
|
||||
@@ -29,4 +30,8 @@ object Implicits {
|
||||
def mkHtml(separator: scala.xml.Elem) = Html(seq.mkString(separator.toString))
|
||||
}
|
||||
|
||||
implicit def extendsColumn(c1: Column[Boolean]) = new {
|
||||
def &&(c2: => Column[Boolean], guard: => Boolean): Column[Boolean] = if(guard) c1 && c2 else c1
|
||||
}
|
||||
|
||||
}
|
||||
@@ -1,4 +1,6 @@
|
||||
@(issues: List[model.Issue], labels: List[model.Label], milestones: List[model.Milestone], condition: service.IssuesService.IssueSearchCondition, filter: String, repository: service.RepositoryService.RepositoryInfo, isWritable: Boolean)(implicit context: app.Context)
|
||||
@(issues: List[model.Issue], labels: List[model.Label], milestones: List[model.Milestone],
|
||||
condition: service.IssuesService.IssueSearchCondition, filter: String,
|
||||
repository: service.RepositoryService.RepositoryInfo, isWritable: Boolean)(implicit context: app.Context)
|
||||
@import context._
|
||||
@import view.helpers._
|
||||
@html.main("Issues - " + repository.owner + "/" + repository.name){
|
||||
|
||||
Reference in New Issue
Block a user