mirror of
https://github.com/gitbucket/gitbucket.git
synced 2025-11-02 03:26:06 +01:00
(refs #11) When the issue is closed or reopened, the comment id not
required.
This commit is contained in:
@@ -17,10 +17,9 @@ trait IssuesControllerBase extends ControllerBase {
|
||||
|
||||
case class IssueCreateForm(title: String, content: Option[String],
|
||||
assignedUserName: Option[String], milestoneId: Option[Int], labelNames: Option[String])
|
||||
|
||||
case class IssueEditForm(title: String, content: Option[String])
|
||||
|
||||
case class CommentForm(issueId: Int, content: String)
|
||||
case class IssueStateForm(issueId: Int, content: Option[String])
|
||||
|
||||
val issueCreateForm = mapping(
|
||||
"title" -> trim(label("Title", text(required))),
|
||||
@@ -40,6 +39,11 @@ trait IssuesControllerBase extends ControllerBase {
|
||||
"content" -> trim(label("Comment", text(required)))
|
||||
)(CommentForm.apply)
|
||||
|
||||
val issueStateForm = mapping(
|
||||
"issueId" -> label("Issue Id", number()),
|
||||
"content" -> trim(optional(text()))
|
||||
)(IssueStateForm.apply)
|
||||
|
||||
get("/:owner/:repository/issues")(referrersOnly {
|
||||
searchIssues("all", _)
|
||||
})
|
||||
@@ -124,29 +128,11 @@ trait IssuesControllerBase extends ControllerBase {
|
||||
})
|
||||
|
||||
post("/:owner/:repository/issue_comments/new", commentForm)(readableUsersOnly { (form, repository) =>
|
||||
val owner = repository.owner
|
||||
val name = repository.name
|
||||
val userName = context.loginAccount.get.userName
|
||||
handleComment(form.issueId, Some(form.content), repository)
|
||||
})
|
||||
|
||||
getIssue(owner, name, form.issueId.toString).map { issue =>
|
||||
val action = if(isEditable(owner, name, issue.openedUserName)){
|
||||
params.get("action") filter { action =>
|
||||
updateClosed(owner, name, form.issueId, if(action == "close") true else false) > 0
|
||||
}
|
||||
} else None
|
||||
|
||||
val commentId = createComment(owner, name, userName, form.issueId, form.content, action)
|
||||
|
||||
// record activity
|
||||
recordCommentIssueActivity(owner, name, userName, issue.issueId, form.content)
|
||||
action match {
|
||||
case Some("reopen") => recordReopenIssueActivity(owner, name, userName, issue.issueId, issue.title)
|
||||
case Some("close") => recordCloseIssueActivity(owner, name, userName, issue.issueId, issue.title)
|
||||
case _ =>
|
||||
}
|
||||
|
||||
redirect("/%s/%s/issues/%d#comment-%d".format(owner, name, form.issueId, commentId))
|
||||
}
|
||||
post("/:owner/:repository/issue_comments/state", issueStateForm)(readableUsersOnly { (form, repository) =>
|
||||
handleComment(form.issueId, form.content, repository)
|
||||
})
|
||||
|
||||
ajaxPost("/:owner/:repository/issue_comments/edit/:id", commentForm)(readableUsersOnly { (form, repository) =>
|
||||
@@ -272,6 +258,35 @@ trait IssuesControllerBase extends ControllerBase {
|
||||
private def isEditable(owner: String, repository: String, author: String)(implicit context: app.Context): Boolean =
|
||||
hasWritePermission(owner, repository, context.loginAccount) || author == context.loginAccount.get.userName
|
||||
|
||||
private def handleComment(issueId: Int, content: Option[String], repository: RepositoryService.RepositoryInfo) = {
|
||||
val owner = repository.owner
|
||||
val name = repository.name
|
||||
val userName = context.loginAccount.get.userName
|
||||
|
||||
getIssue(owner, name, issueId.toString) map { issue =>
|
||||
val (action, recordActivity) =
|
||||
params.get("action")
|
||||
.filter(_ => isEditable(owner, name, issue.openedUserName))
|
||||
.collect {
|
||||
case s if s == "close" => true -> (Some(s) -> Some(recordCloseIssueActivity _))
|
||||
case s if s == "reopen" => false -> (Some(s) -> Some(recordReopenIssueActivity _))
|
||||
}
|
||||
.map { case (closed, t) =>
|
||||
updateClosed(owner, name, issueId, closed)
|
||||
t
|
||||
}
|
||||
.getOrElse(None -> None)
|
||||
|
||||
val commentId = createComment(owner, name, userName, issueId, content.getOrElse(action.get.capitalize), action)
|
||||
|
||||
// record activity
|
||||
content foreach ( recordCommentIssueActivity(owner, name, userName, issueId, _) )
|
||||
recordActivity foreach ( _ (owner, name, userName, issueId, issue.title) )
|
||||
|
||||
redirect("/%s/%s/issues/%d#comment-%d".format(owner, name, issueId, commentId))
|
||||
} getOrElse NotFound
|
||||
}
|
||||
|
||||
private def searchIssues(filter: String, repository: RepositoryService.RepositoryInfo) = {
|
||||
val owner = repository.owner
|
||||
val repoName = repository.name
|
||||
|
||||
Reference in New Issue
Block a user