diff --git a/src/main/scala/app/IssuesController.scala b/src/main/scala/app/IssuesController.scala index 25083ae..5847f70 100644 --- a/src/main/scala/app/IssuesController.scala +++ b/src/main/scala/app/IssuesController.scala @@ -81,9 +81,12 @@ post("/:owner/:repository/issue_comments/new", commentForm)( usersOnly { form => val owner = params("owner") val repository = params("repository") + val action = params.get("action") filter { action => + updateClosed(owner, repository, form.issueId, if(action == "close") true else false) > 0 + } redirect("/%s/%s/issues/%d#comment-%d".format(owner, repository, form.issueId, - createComment(owner, repository, context.loginAccount.get.userName, form.issueId, form.content))) + createComment(owner, repository, context.loginAccount.get.userName, form.issueId, form.content, action))) }) // TODO Authenticator, repository checking diff --git a/src/main/scala/service/IssuesService.scala b/src/main/scala/service/IssuesService.scala index 7d65463..424afd4 100644 --- a/src/main/scala/service/IssuesService.scala +++ b/src/main/scala/service/IssuesService.scala @@ -185,12 +185,12 @@ } get def createComment(owner: String, repository: String, loginUser: String, - issueId: Int, content: String) = + issueId: Int, content: String, action: Option[String]) = IssueComments.autoInc insert ( owner, repository, issueId, - None, + action, loginUser, content, currentDate, @@ -213,6 +213,14 @@ t.content ~ t.updatedDate } update (content, currentDate) + def updateClosed(owner: String, repository: String, issueId: Int, closed: Boolean) = + Issues + .filter (_.byPrimaryKey(owner, repository, issueId)) + .map { t => + t.closed ~ t.updatedDate + } + .update (closed, currentDate) + } object IssuesService { diff --git a/src/main/scala/servlet/GitRepositoryServlet.scala b/src/main/scala/servlet/GitRepositoryServlet.scala index 41440e3..75d2354 100644 --- a/src/main/scala/servlet/GitRepositoryServlet.scala +++ b/src/main/scala/servlet/GitRepositoryServlet.scala @@ -79,7 +79,7 @@ "(^|\\W)#(\\d+)(\\W|$)".r.findAllIn(commit.fullMessage).matchData.foreach { matchData => val issueId = matchData.group(2) if(getAccountByUserName(commit.committer).isDefined && getIssue(owner, repository, issueId).isDefined){ - createComment(owner, repository, commit.committer, issueId.toInt, commit.fullMessage) + createComment(owner, repository, commit.committer, issueId.toInt, commit.fullMessage, None) } } } diff --git a/src/main/twirl/issues/issue.scala.html b/src/main/twirl/issues/issue.scala.html index 088336b..9db8462 100644 --- a/src/main/twirl/issues/issue.scala.html +++ b/src/main/twirl/issues/issue.scala.html @@ -33,6 +33,17 @@ @markdown(comment.content, repository, false, true, true) + @comment.action.map { action => +