diff --git a/src/main/scala/app/DashboardController.scala b/src/main/scala/app/DashboardController.scala index 9a3c28f..4e0ffb2 100644 --- a/src/main/scala/app/DashboardController.scala +++ b/src/main/scala/app/DashboardController.scala @@ -74,29 +74,16 @@ val userName = context.loginAccount.get.userName val allRepos = getAllRepositories(userName) - val userRepos = getUserRepositories(userName, context.baseUrl, true).map(repo => repo.owner -> repo.name) val filterUser = Map(filter -> userName) val page = IssueSearchCondition.page(request) - val counts = countIssueGroupByRepository( - IssueSearchCondition().copy(state = condition.state), filterUser, true, userRepos: _*) - dashboard.html.pulls( - dashboard.html.pullslist( - searchIssue(condition, filterUser, true, (page - 1) * PullRequestLimit, PullRequestLimit, allRepos: _*), - page, - countIssue(condition.copy(state = "open" ), filterUser, true, allRepos: _*), - countIssue(condition.copy(state = "closed"), filterUser, true, allRepos: _*), - condition, - None, - false), - getAllPullRequestCountGroupByUser(condition.state == "closed", userName), - userRepos.map { case (userName, repoName) => - (userName, repoName, counts.find { x => x._1 == userName && x._2 == repoName }.map(_._3).getOrElse(0)) - }.sortBy(_._3).reverse, + searchIssue(condition, filterUser, true, (page - 1) * PullRequestLimit, PullRequestLimit, allRepos: _*), + page, + countIssue(condition.copy(state = "open" ), filterUser, true, allRepos: _*), + countIssue(condition.copy(state = "closed"), filterUser, true, allRepos: _*), condition, filter) - } diff --git a/src/main/scala/service/IssuesService.scala b/src/main/scala/service/IssuesService.scala index 5688fc7..e563b9c 100644 --- a/src/main/scala/service/IssuesService.scala +++ b/src/main/scala/service/IssuesService.scala @@ -77,28 +77,29 @@ } .toMap } - /** - * Returns list which contains issue count for each repository. - * If the issue does not exist, its repository is not included in the result. - * - * @param condition the search condition - * @param onlyPullRequest if true then returns only pull request, false then returns both of issue and pull request. - * @param repos Tuple of the repository owner and the repository name - * @return list which contains issue count for each repository - */ - def countIssueGroupByRepository( - condition: IssueSearchCondition, filterUser: Map[String, String], onlyPullRequest: Boolean, - repos: (String, String)*)(implicit s: Session): List[(String, String, Int)] = { - searchIssueQuery(repos, condition.copy(repo = None), filterUser, onlyPullRequest) - .groupBy { t => - t.userName -> t.repositoryName - } - .map { case (repo, t) => - (repo._1, repo._2, t.length) - } - .sortBy(_._3 desc) - .list - } + +// /** +// * Returns list which contains issue count for each repository. +// * If the issue does not exist, its repository is not included in the result. +// * +// * @param condition the search condition +// * @param onlyPullRequest if true then returns only pull request, false then returns both of issue and pull request. +// * @param repos Tuple of the repository owner and the repository name +// * @return list which contains issue count for each repository +// */ +// def countIssueGroupByRepository( +// condition: IssueSearchCondition, filterUser: Map[String, String], onlyPullRequest: Boolean, +// repos: (String, String)*)(implicit s: Session): List[(String, String, Int)] = { +// searchIssueQuery(repos, condition.copy(repo = None), filterUser, onlyPullRequest) +// .groupBy { t => +// t.userName -> t.repositoryName +// } +// .map { case (repo, t) => +// (repo._1, repo._2, t.length) +// } +// .sortBy(_._3 desc) +// .list +// } /** * Returns the search result against issues. @@ -181,7 +182,11 @@ (t3.byRepository(t1.userName, t1.repositoryName)) && (t3.labelName inSetBind condition.labels) } map(_.labelId))) - } exists, condition.labels.nonEmpty) + } exists, condition.labels.nonEmpty) && + (Repositories filter { t3 => + (t3.byRepository(t1.userName, t1.repositoryName)) && + (t3.isPrivate === (condition.visibility == Some("private")).bind) + } exists, condition.visibility.nonEmpty) } def createIssue(owner: String, repository: String, loginUser: String, title: String, content: Option[String], @@ -343,11 +348,12 @@ repo: Option[String] = None, state: String = "open", sort: String = "created", - direction: String = "desc"){ + direction: String = "desc", + visibility: Option[String] = None){ def isEmpty: Boolean = { labels.isEmpty && milestoneId.isEmpty && author.isEmpty && assigned.isEmpty && - state == "open" && sort == "created" && direction == "desc" + state == "open" && sort == "created" && direction == "desc" && visibility.isEmpty } def nonEmpty: Boolean = !isEmpty @@ -364,7 +370,9 @@ repo.map("for=" + urlEncode(_)), Some("state=" + urlEncode(state)), Some("sort=" + urlEncode(sort)), - Some("direction=" + urlEncode(direction))).flatten.mkString("&") + Some("direction=" + urlEncode(direction)), + visibility.map(x => "visibility=" + urlEncode(x)) + ).flatten.mkString("&") } @@ -378,7 +386,7 @@ def apply(request: HttpServletRequest): IssueSearchCondition = IssueSearchCondition( param(request, "labels").map(_.split(",").toSet).getOrElse(Set.empty), - param(request, "milestone").map{ + param(request, "milestone").map { case "none" => None case x => x.toIntOpt }, @@ -387,7 +395,9 @@ param(request, "for"), param(request, "state", Seq("open", "closed")).getOrElse("open"), param(request, "sort", Seq("created", "comments", "updated")).getOrElse("created"), - param(request, "direction", Seq("asc", "desc")).getOrElse("desc")) + param(request, "direction", Seq("asc", "desc")).getOrElse("desc"), + param(request, "visibility") + ) def page(request: HttpServletRequest) = try { val i = param(request, "page").getOrElse("1").toInt diff --git a/src/main/scala/service/PullRequestService.scala b/src/main/scala/service/PullRequestService.scala index d5bcb0b..9a3239b 100644 --- a/src/main/scala/service/PullRequestService.scala +++ b/src/main/scala/service/PullRequestService.scala @@ -36,23 +36,23 @@ .list .map { x => PullRequestCount(x._1, x._2) } - def getAllPullRequestCountGroupByUser(closed: Boolean, userName: String)(implicit s: Session): List[PullRequestCount] = - PullRequests - .innerJoin(Issues).on { (t1, t2) => t1.byPrimaryKey(t2.userName, t2.repositoryName, t2.issueId) } - .innerJoin(Repositories).on { case ((t1, t2), t3) => t2.byRepository(t3.userName, t3.repositoryName) } - .filter { case ((t1, t2), t3) => - (t2.closed === closed.bind) && - ( - (t3.isPrivate === false.bind) || - (t3.userName === userName.bind) || - (Collaborators.filter { t4 => t4.byRepository(t3.userName, t3.repositoryName) && (t4.collaboratorName === userName.bind)} exists) - ) - } - .groupBy { case ((t1, t2), t3) => t2.openedUserName } - .map { case (userName, t) => userName -> t.length } - .sortBy(_._2 desc) - .list - .map { x => PullRequestCount(x._1, x._2) } +// def getAllPullRequestCountGroupByUser(closed: Boolean, userName: String)(implicit s: Session): List[PullRequestCount] = +// PullRequests +// .innerJoin(Issues).on { (t1, t2) => t1.byPrimaryKey(t2.userName, t2.repositoryName, t2.issueId) } +// .innerJoin(Repositories).on { case ((t1, t2), t3) => t2.byRepository(t3.userName, t3.repositoryName) } +// .filter { case ((t1, t2), t3) => +// (t2.closed === closed.bind) && +// ( +// (t3.isPrivate === false.bind) || +// (t3.userName === userName.bind) || +// (Collaborators.filter { t4 => t4.byRepository(t3.userName, t3.repositoryName) && (t4.collaboratorName === userName.bind)} exists) +// ) +// } +// .groupBy { case ((t1, t2), t3) => t2.openedUserName } +// .map { case (userName, t) => userName -> t.length } +// .sortBy(_._2 desc) +// .list +// .map { x => PullRequestCount(x._1, x._2) } def createPullRequest(originUserName: String, originRepositoryName: String, issueId: Int, originBranch: String, requestUserName: String, requestRepositoryName: String, requestBranch: String, diff --git a/src/main/twirl/dashboard/issueslist.scala.html b/src/main/twirl/dashboard/issueslist.scala.html index 248f688..9e0bad8 100644 --- a/src/main/twirl/dashboard/issueslist.scala.html +++ b/src/main/twirl/dashboard/issueslist.scala.html @@ -29,7 +29,18 @@
@helper.html.dropdown("Visibility", flat = true){ -
  • TODO
  • +
  • + + @helper.html.checkicon(condition.visibility == Some("private")) + Private repository only + +
  • +
  • + + @helper.html.checkicon(condition.visibility == Some("public")) + Public repository only + +
  • } @helper.html.dropdown("Organization", flat = true){
  • TODO
  • diff --git a/src/main/twirl/dashboard/pulls.scala.html b/src/main/twirl/dashboard/pulls.scala.html index 25caafe..3b310e1 100644 --- a/src/main/twirl/dashboard/pulls.scala.html +++ b/src/main/twirl/dashboard/pulls.scala.html @@ -1,42 +1,14 @@ -@(listparts: play.twirl.api.Html, - counts: List[service.PullRequestService.PullRequestCount], - repositories: List[(String, String, Int)], +@(issues: List[service.IssuesService.IssueInfo], + page: Int, + openCount: Int, + closedCount: Int, condition: service.IssuesService.IssueSearchCondition, filter: String)(implicit context: app.Context) @import context._ @import view.helpers._ -@html.main("Your Issues"){ -
    - @dashboard.html.tab("pulls") -
    - - @listparts +@html.main("Pull Requests"){ +
    + @dashboard.html.tab("pulls") + @issueslist(issues, page, openCount, closedCount, condition, filter)
    -
    } diff --git a/src/main/twirl/dashboard/pullslist.scala.html b/src/main/twirl/dashboard/pullslist.scala.html index 46343b4..9cfed59 100644 --- a/src/main/twirl/dashboard/pullslist.scala.html +++ b/src/main/twirl/dashboard/pullslist.scala.html @@ -3,20 +3,19 @@ openCount: Int, closedCount: Int, condition: service.IssuesService.IssueSearchCondition, - repository: Option[service.RepositoryService.RepositoryInfo], - hasWritePermission: Boolean)(implicit context: app.Context) + filter: String)(implicit context: app.Context) @import context._ @import view.helpers._ @import service.IssuesService.IssueInfo + +@*
    - @repository.map { repository => - @if(hasWritePermission){ -
    - @helper.html.paginator(page, (if(condition.state == "open") openCount else closedCount), service.PullRequestService.PullRequestLimit, 7, condition.toURL) - New pull request -
    - } - }
    @openCount Open @closedCount Closed @@ -64,38 +63,96 @@ } - - @if(issues.isEmpty){ - - - - } + *@ +
    - No pull requests to show. -
    + + + @issues.map { case IssueInfo(issue, labels, milestone, commentCount) => - - + - +
    + @avatarLink(issue.openedUserName, 20) by @user(issue.openedUserName, styleClass="username") @datetime(issue.registeredDate)  + @if(commentCount > 0){ + @commentCount @plural(commentCount, "comment") + } +
    + + } -
    + + + + @openCount Open +    + + + @closedCount Closed + + + +
    - - @issue.title - #@issue.issueId -
    - @issue.content.map { content => - @cut(content, 90) - }.getOrElse { - No description available - } -
    -
    - @avatarLink(issue.openedUserName, 20) by @user(issue.openedUserName, styleClass="username") @datetime(issue.registeredDate)  - @if(commentCount > 0){ - @commentCount @plural(commentCount, "comment") +
    + + @issue.title + #@issue.issueId +
    + @issue.content.map { content => + @cut(content, 90) + }.getOrElse { + No description available }
    -
    -
    - @helper.html.paginator(page, (if(condition.state == "open") openCount else closedCount), service.PullRequestService.PullRequestLimit, 10, condition.toURL) -
    -
    \ No newline at end of file + +
    + @helper.html.paginator(page, (if(condition.state == "open") openCount else closedCount), service.PullRequestService.PullRequestLimit, 10, condition.toURL) +