diff --git a/src/main/scala/app/IssuesController.scala b/src/main/scala/app/IssuesController.scala index 307610d..e25f2e9 100644 --- a/src/main/scala/app/IssuesController.scala +++ b/src/main/scala/app/IssuesController.scala @@ -128,11 +128,15 @@ }) post("/:owner/:repository/issue_comments/new", commentForm)(readableUsersOnly { (form, repository) => - handleComment(form.issueId, Some(form.content), repository) + handleComment(form.issueId, Some(form.content), repository)() map { id => + redirect("/%s/%s/issues/%d#comment-%d".format(repository.owner, repository.name, form.issueId, id)) + } getOrElse NotFound }) post("/:owner/:repository/issue_comments/state", issueStateForm)(readableUsersOnly { (form, repository) => - handleComment(form.issueId, form.content, repository) + handleComment(form.issueId, form.content, repository)() map { id => + redirect("/%s/%s/issues/%d#comment-%d".format(repository.owner, repository.name, form.issueId, id)) + } getOrElse NotFound }) ajaxPost("/:owner/:repository/issue_comments/edit/:id", commentForm)(readableUsersOnly { (form, repository) => @@ -209,20 +213,11 @@ }) post("/:owner/:repository/issues/batchedit/state")(collaboratorsOnly { repository => - val owner = repository.owner - val name = repository.name - val userName = context.loginAccount.get.userName - - params.get("value") collect { - case s if s == "close" => (s.capitalize, Some(s), true) - case s if s == "reopen" => (s.capitalize, Some(s), false) - } map { case (content, action, closed) => - params("checked").split(',') foreach { issueId => - createComment(owner, name, userName, issueId.toInt, content, action) - updateClosed(owner, name, issueId.toInt, closed) - } - redirect("/%s/%s/issues".format(owner, name)) - } getOrElse NotFound + val action = params.get("value") + params("checked").split(',') foreach { issueId => + handleComment(issueId.toInt, None, repository)( _ => action) + } + redirect("/%s/%s/issues".format(repository.owner, repository.name)) }) post("/:owner/:repository/issues/batchedit/label")(collaboratorsOnly { repository => @@ -258,18 +253,22 @@ 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) = { + /** + * @see + */ + private def handleComment(issueId: Int, content: Option[String], repository: RepositoryService.RepositoryInfo) + (getAction: model.Issue => Option[String] = + p1 => params.get("action").filter(_ => isEditable(p1.userName, p1.repositoryName, p1.openedUserName))) = { 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)) + getAction(issue) .collect { - case s if s == "close" => true -> (Some(s) -> Some(recordCloseIssueActivity _)) - case s if s == "reopen" => false -> (Some(s) -> Some(recordReopenIssueActivity _)) + case "close" => true -> (Some("close") -> Some(recordCloseIssueActivity _)) + case "reopen" => false -> (Some("reopen") -> Some(recordReopenIssueActivity _)) } .map { case (closed, t) => updateClosed(owner, name, issueId, closed) @@ -277,14 +276,19 @@ } .getOrElse(None -> None) - val commentId = createComment(owner, name, userName, issueId, content.getOrElse(action.get.capitalize), action) + val commentId = content + .map ( _ -> action.map( _ + "_comment" ).getOrElse("comment") ) + .getOrElse ( action.get.capitalize -> action.get ) + match { + case (content, action) => createComment(owner, name, userName, issueId, content, 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 + commentId + } } private def searchIssues(filter: String, repository: RepositoryService.RepositoryInfo) = {