diff --git a/src/main/scala/app/DashboardController.scala b/src/main/scala/app/DashboardController.scala index 4e0ffb2..c8ea7d6 100644 --- a/src/main/scala/app/DashboardController.scala +++ b/src/main/scala/app/DashboardController.scala @@ -9,7 +9,8 @@ with UsersAuthenticator trait DashboardControllerBase extends ControllerBase { - self: IssuesService with PullRequestService with RepositoryService with UsersAuthenticator => + self: IssuesService with PullRequestService with RepositoryService with AccountService + with UsersAuthenticator => get("/dashboard/issues/repos")(usersOnly { searchIssues("created_by") @@ -59,7 +60,8 @@ countIssue(condition.copy(state = "open" ), filterUser, false, userRepos: _*), countIssue(condition.copy(state = "closed"), filterUser, false, userRepos: _*), condition, - filter) + filter, + getGroupNames(userName)) } private def searchPullRequests(filter: String, repository: Option[String]) = { @@ -83,7 +85,8 @@ countIssue(condition.copy(state = "open" ), filterUser, true, allRepos: _*), countIssue(condition.copy(state = "closed"), filterUser, true, allRepos: _*), condition, - filter) + filter, + getGroupNames(userName)) } diff --git a/src/main/scala/service/AccountService.scala b/src/main/scala/service/AccountService.scala index b815c54..c502eb7 100644 --- a/src/main/scala/service/AccountService.scala +++ b/src/main/scala/service/AccountService.scala @@ -168,6 +168,11 @@ Repositories.filter(_.userName === userName.bind).delete } + def getGroupNames(userName: String)(implicit s: Session): List[String] = { + List(userName) ++ + Collaborators.filter(_.collaboratorName === userName.bind).sortBy(_.userName).map(_.userName).list + } + } object AccountService extends AccountService diff --git a/src/main/scala/service/IssuesService.scala b/src/main/scala/service/IssuesService.scala index e563b9c..9f5e1e3 100644 --- a/src/main/scala/service/IssuesService.scala +++ b/src/main/scala/service/IssuesService.scala @@ -186,7 +186,8 @@ (Repositories filter { t3 => (t3.byRepository(t1.userName, t1.repositoryName)) && (t3.isPrivate === (condition.visibility == Some("private")).bind) - } exists, condition.visibility.nonEmpty) + } exists, condition.visibility.nonEmpty) && + (t1.userName inSetBind condition.groups, condition.groups.nonEmpty) } def createIssue(owner: String, repository: String, loginUser: String, title: String, content: Option[String], @@ -349,7 +350,8 @@ state: String = "open", sort: String = "created", direction: String = "desc", - visibility: Option[String] = None){ + visibility: Option[String] = None, + groups: Set[String] = Set.empty){ def isEmpty: Boolean = { labels.isEmpty && milestoneId.isEmpty && author.isEmpty && assigned.isEmpty && @@ -371,7 +373,8 @@ Some("state=" + urlEncode(state)), Some("sort=" + urlEncode(sort)), Some("direction=" + urlEncode(direction)), - visibility.map(x => "visibility=" + urlEncode(x)) + visibility.map(x => "visibility=" + urlEncode(x)), + if(groups.isEmpty) None else Some("groups=" + urlEncode(groups.mkString(","))) ).flatten.mkString("&") } @@ -396,7 +399,8 @@ 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, "visibility") + param(request, "visibility"), + param(request, "groups").map(_.split(",").toSet).getOrElse(Set.empty) ) def page(request: HttpServletRequest) = try { diff --git a/src/main/twirl/dashboard/header.scala.html b/src/main/twirl/dashboard/header.scala.html new file mode 100644 index 0000000..01c5bfc --- /dev/null +++ b/src/main/twirl/dashboard/header.scala.html @@ -0,0 +1,74 @@ +@(openCount: Int, + closedCount: Int, + condition: service.IssuesService.IssueSearchCondition, + groups: List[String])(implicit context: app.Context) +@import context._ +@import view.helpers._ + + + + @openCount Open +    + + + @closedCount Closed + + +
+ @helper.html.dropdown("Visibility", flat = true){ +
  • + + @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){ + @groups.map { group => +
  • + + @helper.html.checkicon(condition.groups.contains(group)) + @avatar(group, 20) @group + +
  • + } + } + @helper.html.dropdown("Sort", flat = true){ +
  • + + @helper.html.checkicon(condition.sort == "created" && condition.direction == "desc") Newest + +
  • +
  • + + @helper.html.checkicon(condition.sort == "created" && condition.direction == "asc") Oldest + +
  • +
  • + + @helper.html.checkicon(condition.sort == "comments" && condition.direction == "desc") Most commented + +
  • +
  • + + @helper.html.checkicon(condition.sort == "comments" && condition.direction == "asc") Least commented + +
  • +
  • + + @helper.html.checkicon(condition.sort == "updated" && condition.direction == "desc") Recently updated + +
  • +
  • + + @helper.html.checkicon(condition.sort == "updated" && condition.direction == "asc") Least recently updated + +
  • + } +
    \ No newline at end of file diff --git a/src/main/twirl/dashboard/issues.scala.html b/src/main/twirl/dashboard/issues.scala.html index 4d5af5d..09d3a4f 100644 --- a/src/main/twirl/dashboard/issues.scala.html +++ b/src/main/twirl/dashboard/issues.scala.html @@ -3,12 +3,13 @@ openCount: Int, closedCount: Int, condition: service.IssuesService.IssueSearchCondition, - filter: String)(implicit context: app.Context) + filter: String, + groups: List[String])(implicit context: app.Context) @import context._ @import view.helpers._ @html.main("Issues"){
    @dashboard.html.tab("issues") - @issueslist(issues, page, openCount, closedCount, condition, filter) + @issueslist(issues, page, openCount, closedCount, condition, filter, groups)
    } diff --git a/src/main/twirl/dashboard/issueslist.scala.html b/src/main/twirl/dashboard/issueslist.scala.html index 9e0bad8..b80b247 100644 --- a/src/main/twirl/dashboard/issueslist.scala.html +++ b/src/main/twirl/dashboard/issueslist.scala.html @@ -3,7 +3,8 @@ openCount: Int, closedCount: Int, condition: service.IssuesService.IssueSearchCondition, - filter: String)(implicit context: app.Context) + filter: String, + groups: List[String])(implicit context: app.Context) @import context._ @import view.helpers._ @import service.IssuesService.IssueInfo @@ -17,67 +18,7 @@ @issues.map { case IssueInfo(issue, labels, milestone, commentCount) => diff --git a/src/main/twirl/dashboard/pulls.scala.html b/src/main/twirl/dashboard/pulls.scala.html index 3b310e1..13ec94b 100644 --- a/src/main/twirl/dashboard/pulls.scala.html +++ b/src/main/twirl/dashboard/pulls.scala.html @@ -3,12 +3,13 @@ openCount: Int, closedCount: Int, condition: service.IssuesService.IssueSearchCondition, - filter: String)(implicit context: app.Context) + filter: String, + groups: List[String])(implicit context: app.Context) @import context._ @import view.helpers._ @html.main("Pull Requests"){
    @dashboard.html.tab("pulls") - @issueslist(issues, page, openCount, closedCount, condition, filter) + @issueslist(issues, page, openCount, closedCount, condition, filter, groups)
    } diff --git a/src/main/twirl/dashboard/pullslist.scala.html b/src/main/twirl/dashboard/pullslist.scala.html index 9cfed59..eec1c39 100644 --- a/src/main/twirl/dashboard/pullslist.scala.html +++ b/src/main/twirl/dashboard/pullslist.scala.html @@ -3,7 +3,8 @@ openCount: Int, closedCount: Int, condition: service.IssuesService.IssueSearchCondition, - filter: String)(implicit context: app.Context) + filter: String, + groups: List[String])(implicit context: app.Context) @import context._ @import view.helpers._ @import service.IssuesService.IssueInfo @@ -67,67 +68,7 @@
    - - - - @openCount Open -    - - - @closedCount Closed - - - + @dashboard.html.header(openCount, closedCount, condition, groups)
    @issues.map { case IssueInfo(issue, labels, milestone, commentCount) =>
    - - - - @openCount Open -    - - - @closedCount Closed - - - + @dashboard.html.header(openCount, closedCount, condition, groups)