(refs #529)Organization filter

This commit is contained in:
Naoki Takezoe
2014-11-02 13:26:46 +09:00
parent 4bc4a16a80
commit 2db674bb03
8 changed files with 105 additions and 135 deletions

View File

@@ -9,7 +9,8 @@ class DashboardController extends DashboardControllerBase
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 @@ trait DashboardControllerBase extends ControllerBase {
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 @@ trait DashboardControllerBase extends ControllerBase {
countIssue(condition.copy(state = "open" ), filterUser, true, allRepos: _*),
countIssue(condition.copy(state = "closed"), filterUser, true, allRepos: _*),
condition,
filter)
filter,
getGroupNames(userName))
}

View File

@@ -168,6 +168,11 @@ trait AccountService {
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

View File

@@ -186,7 +186,8 @@ trait IssuesService {
(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 @@ object IssuesService {
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 @@ object IssuesService {
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 @@ object IssuesService {
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 {