mirror of
https://github.com/gitbucket/gitbucket.git
synced 2025-11-08 14:35:52 +01:00
Fix problem about milestone in issues and pull requests
This commit is contained in:
@@ -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"),
|
||||||
|
|||||||
@@ -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>
|
||||||
|
|||||||
@@ -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>
|
||||||
|
|||||||
Reference in New Issue
Block a user