Fix problem about milestone in issues and pull requests

This commit is contained in:
Naoki Takezoe
2015-02-26 11:20:41 +09:00
parent c2f1817c6a
commit e67365a19f
3 changed files with 23 additions and 18 deletions

View File

@@ -139,11 +139,16 @@ trait IssuesService {
.map { case (owner, repository) => t1.byRepository(owner, repository) } .map { case (owner, repository) => t1.byRepository(owner, repository) }
.foldLeft[Column[Boolean]](false) ( _ || _ ) && .foldLeft[Column[Boolean]](false) ( _ || _ ) &&
(t1.closed === (condition.state == "closed").bind) && (t1.closed === (condition.state == "closed").bind) &&
(t1.milestoneId === condition.milestoneId.get.get.bind, condition.milestoneId.flatten.isDefined) && //(t1.milestoneId === condition.milestoneId.get.get.bind, condition.milestoneId.flatten.isDefined) &&
(t1.milestoneId.? isEmpty, condition.milestoneId == Some(None)) && (t1.milestoneId.? isEmpty, condition.milestone == Some(None)) &&
(t1.assignedUserName === condition.assigned.get.bind, condition.assigned.isDefined) && (t1.assignedUserName === condition.assigned.get.bind, condition.assigned.isDefined) &&
(t1.openedUserName === condition.author.get.bind, condition.author.isDefined) && (t1.openedUserName === condition.author.get.bind, condition.author.isDefined) &&
(t1.pullRequest === pullRequest.bind) && (t1.pullRequest === pullRequest.bind) &&
// Milestone filter
(Milestones filter { t2 =>
(t2.byPrimaryKey(t1.userName, t1.repositoryName, t1.milestoneId)) &&
(t2.title === condition.milestone.get.get.bind)
} exists, condition.milestone.flatten.isDefined) &&
// Label filter // Label filter
(IssueLabels filter { t2 => (IssueLabels filter { t2 =>
(t2.byIssue(t1.userName, t1.repositoryName, t1.issueId)) && (t2.byIssue(t1.userName, t1.repositoryName, t1.issueId)) &&
@@ -322,7 +327,7 @@ object IssuesService {
case class IssueSearchCondition( case class IssueSearchCondition(
labels: Set[String] = Set.empty, labels: Set[String] = Set.empty,
milestoneId: Option[Option[Int]] = None, milestone: Option[Option[String]] = None,
author: Option[String] = None, author: Option[String] = None,
assigned: Option[String] = None, assigned: Option[String] = None,
mentioned: Option[String] = None, mentioned: Option[String] = None,
@@ -333,7 +338,7 @@ object IssuesService {
groups: Set[String] = Set.empty){ groups: Set[String] = Set.empty){
def isEmpty: Boolean = { def isEmpty: Boolean = {
labels.isEmpty && milestoneId.isEmpty && author.isEmpty && assigned.isEmpty && labels.isEmpty && milestone.isEmpty && author.isEmpty && assigned.isEmpty &&
state == "open" && sort == "created" && direction == "desc" && visibility.isEmpty state == "open" && sort == "created" && direction == "desc" && visibility.isEmpty
} }
@@ -348,8 +353,8 @@ object IssuesService {
).flatten ++ ).flatten ++
labels.map(label => s"label:${label}") ++ labels.map(label => s"label:${label}") ++
List( List(
milestoneId.map { _ match { milestone.map { _ match {
case Some(x) => s"milestone:${milestoneId}" case Some(x) => s"milestone:${x}"
case None => "no:milestone" case None => "no:milestone"
}}, }},
(sort, direction) match { (sort, direction) match {
@@ -368,8 +373,8 @@ object IssuesService {
def toURL: String = def toURL: String =
"?" + List( "?" + List(
if(labels.isEmpty) None else Some("labels=" + urlEncode(labels.mkString(","))), if(labels.isEmpty) None else Some("labels=" + urlEncode(labels.mkString(","))),
milestoneId.map { _ match { milestone.map { _ match {
case Some(x) => "milestone=" + x case Some(x) => "milestone=" + urlEncode(x)
case None => "milestone=none" case None => "milestone=none"
}}, }},
author .map(x => "author=" + urlEncode(x)), author .map(x => "author=" + urlEncode(x)),
@@ -416,7 +421,7 @@ object IssuesService {
conditions.get("milestone").flatMap(_.headOption) match { conditions.get("milestone").flatMap(_.headOption) match {
case None => None case None => None
case Some("none") => Some(None) case Some("none") => Some(None)
case Some(x) => milestones.get(x).map(x => Some(x)) case Some(x) => Some(Some(x)) //milestones.get(x).map(x => Some(x))
}, },
conditions.get("author").flatMap(_.headOption), conditions.get("author").flatMap(_.headOption),
conditions.get("assignee").flatMap(_.headOption), conditions.get("assignee").flatMap(_.headOption),
@@ -437,7 +442,7 @@ object IssuesService {
param(request, "labels").map(_.split(",").toSet).getOrElse(Set.empty), param(request, "labels").map(_.split(",").toSet).getOrElse(Set.empty),
param(request, "milestone").map { param(request, "milestone").map {
case "none" => None case "none" => None
case x => x.toIntOpt case x => Some(x)
}, },
param(request, "author"), param(request, "author"),
param(request, "assigned"), param(request, "assigned"),

View File

@@ -48,7 +48,7 @@
<div class="small muted" style="margin-left: 20px; margin-top: 5px;"> <div class="small muted" style="margin-left: 20px; margin-top: 5px;">
#@issue.issueId opened by @user(issue.openedUserName, styleClass="username") @datetime(issue.registeredDate) #@issue.issueId opened by @user(issue.openedUserName, styleClass="username") @datetime(issue.registeredDate)
@milestone.map { milestone => @milestone.map { milestone =>
<span style="margin: 20px;"><a href="@condition.copy(milestoneId = Some(Some(1))).toURL" class="username"><img src="@assets/common/images/milestone.png"> @milestone</a></span> <span style="margin: 20px;"><a href="@condition.copy(milestone = Some(Some(milestone))).toURL" class="username"><img src="@assets/common/images/milestone.png"> @milestone</a></span>
} }
</div> </div>
</td> </td>

View File

@@ -60,14 +60,14 @@
} }
@helper.html.dropdown("Milestone", flat = true) { @helper.html.dropdown("Milestone", flat = true) {
<li> <li>
<a href="@condition.copy(milestoneId = Some(None)).toURL"> <a href="@condition.copy(milestone = Some(None)).toURL">
@helper.html.checkicon(condition.milestoneId == Some(None)) Issues with no milestone @helper.html.checkicon(condition.milestone == Some(None)) Issues with no milestone
</a> </a>
</li> </li>
@milestones.filter(_.closedDate.isEmpty).map { milestone => @milestones.filter(_.closedDate.isEmpty).map { milestone =>
<li> <li>
<a href="@condition.copy(milestoneId = Some(Some(milestone.milestoneId))).toURL"> <a href="@condition.copy(milestone = Some(Some(milestone.title))).toURL">
@helper.html.checkicon(condition.milestoneId == Some(Some(milestone.milestoneId))) @milestone.title @helper.html.checkicon(condition.milestone == Some(Some(milestone.title))) @milestone.title
</a> </a>
</li> </li>
} }
@@ -156,8 +156,8 @@
} else { } else {
No pull requests to show. No pull requests to show.
} }
@if(condition.labels.nonEmpty || condition.milestoneId.isDefined){ @if(condition.labels.nonEmpty || condition.milestone.isDefined){
<a href="@condition.copy(labels = Set.empty, milestoneId = None).toURL">Clear active filters.</a> <a href="@condition.copy(labels = Set.empty, milestone = None).toURL">Clear active filters.</a>
} else { } else {
@if(repository.isDefined){ @if(repository.isDefined){
@if(target == "issues"){ @if(target == "issues"){
@@ -205,7 +205,7 @@
<div class="small muted" style="margin-left: 40px; margin-top: 5px;"> <div class="small muted" style="margin-left: 40px; margin-top: 5px;">
#@issue.issueId opened @helper.html.datetimeago(issue.registeredDate) by @user(issue.openedUserName, styleClass="username") #@issue.issueId opened @helper.html.datetimeago(issue.registeredDate) by @user(issue.openedUserName, styleClass="username")
@milestone.map { milestone => @milestone.map { milestone =>
<span style="margin: 20px;"><a href="@condition.copy(milestoneId = Some(Some(1))).toURL" class="username"><img src="@assets/common/images/milestone.png"> @milestone</a></span> <span style="margin: 20px;"><a href="@condition.copy(milestone = Some(Some(milestone))).toURL" class="username"><img src="@assets/common/images/milestone.png"> @milestone</a></span>
} }
</div> </div>
</td> </td>