diff --git a/src/main/scala/app/IssuesController.scala b/src/main/scala/app/IssuesController.scala index 1aca48a..630b595 100644 --- a/src/main/scala/app/IssuesController.scala +++ b/src/main/scala/app/IssuesController.scala @@ -29,22 +29,24 @@ get("/:owner/:repository/issues"){ val owner = params("owner") val repository = params("repository") - val sessionKey = "%s/%s/issues".format(owner, repository) - // retreive search condition - val condition = if(request.getQueryString == null){ - session.get(sessionKey).getOrElse(IssueSearchCondition()).asInstanceOf[IssueSearchCondition] - } else IssueSearchCondition(request) + searchIssues(owner, repository, "all", None) + } - session.put(sessionKey, condition) + get("/:owner/:repository/issues/assigned/:userName"){ + val owner = params("owner") + val repository = params("repository") + val userName = params("userName") - getRepository(owner, repository, baseUrl).map { repositoryInfo => - issues.html.issues(searchIssue(owner, repository, condition.state == "closed"), - getLabels(owner, repository), - getMilestones(owner, repository).filter(_.closedDate.isEmpty), - condition, repositoryInfo, isWritable(owner, repository, context.loginAccount)) + searchIssues(owner, repository, "assigned", Some(userName)) + } - } getOrElse NotFound + 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)) } get("/:owner/:repository/issues/:id"){ @@ -83,4 +85,23 @@ saveComment(owner, repository, context.loginAccount.get.userName, form.issueId, form.content))) }) + private def searchIssues(owner: String, repository: String, filter: String, userName: Option[String]) = { + val sessionKey = "%s/%s/issues".format(owner, repository) + + // retrieve search condition + val condition = if(request.getQueryString == null){ + session.get(sessionKey).getOrElse(IssueSearchCondition()).asInstanceOf[IssueSearchCondition] + } else IssueSearchCondition(request) + + session.put(sessionKey, condition) + + getRepository(owner, repository, baseUrl).map { repositoryInfo => + issues.html.issues(searchIssue(owner, repository, condition.state == "closed"), + getLabels(owner, repository), + getMilestones(owner, repository).filter(_.closedDate.isEmpty), + condition, filter, repositoryInfo, isWritable(owner, repository, context.loginAccount)) + + } getOrElse NotFound + } + } diff --git a/src/main/scala/service/IssuesService.scala b/src/main/scala/service/IssuesService.scala index eaa536b..67a3c60 100644 --- a/src/main/scala/service/IssuesService.scala +++ b/src/main/scala/service/IssuesService.scala @@ -84,16 +84,14 @@ import IssueSearchCondition._ - def toURL(repository: service.RepositoryService.RepositoryInfo)(implicit context: app.Context): String = { - val params = List( + def toURL: String = + "?" + List( if(labels.isEmpty) None else Some("labels=" + urlEncode(labels.mkString(" "))), milestoneId.map("milestone=" + _), Some("state=" + urlEncode(state)), Some("sort=" + urlEncode(sort)), - Some("direction=" + urlEncode(direction)) - ) - "%s/%s/%s/issues?%s".format(context.path, repository.owner, repository.name, params.flatten.mkString("&")) - } + Some("direction=" + urlEncode(direction))).flatten.mkString("&") + } object IssueSearchCondition { diff --git a/src/main/twirl/issues/issues.scala.html b/src/main/twirl/issues/issues.scala.html index 556907a..e6a99be 100644 --- a/src/main/twirl/issues/issues.scala.html +++ b/src/main/twirl/issues/issues.scala.html @@ -1,4 +1,4 @@ -@(issues: List[model.Issue], labels: List[model.Label], milestones: List[model.Milestone], condition: service.IssuesService.IssueSearchCondition, 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){ @@ -7,21 +7,21 @@
@@ -52,7 +52,7 @@
@if(condition.labels.nonEmpty || condition.milestoneId.isDefined){ - + Clear milestone and label filters } @@ -89,8 +89,8 @@
- 1 Open - 1 Closed + 1 Open + 1 Closed