From e50c4528a6f5098425626d9a839f9d60eff6be79 Mon Sep 17 00:00:00 2001 From: takezoe Date: Sat, 6 Jul 2013 22:07:51 +0900 Subject: [PATCH] (refs #4)Add issue close, reopen and comment activity. --- src/main/resources/update/1_2.sql | 1 + .../app/CreateRepositoryController.scala | 2 +- src/main/scala/app/IssuesController.scala | 38 ++++++++++++------- src/main/scala/model/Activity.scala | 6 ++- src/main/scala/service/ActivityService.scala | 23 +++++++++-- src/main/twirl/account/activity.scala.html | 7 +++- 6 files changed, 54 insertions(+), 23 deletions(-) diff --git a/src/main/resources/update/1_2.sql b/src/main/resources/update/1_2.sql index 0496caf03..50401570b 100644 --- a/src/main/resources/update/1_2.sql +++ b/src/main/resources/update/1_2.sql @@ -4,6 +4,7 @@ CREATE TABLE ACTIVITY( REPOSITORY_NAME VARCHAR(100) NOT NULL, ACTIVITY_USER_NAME VARCHAR(100) NOT NULL, MESSAGE TEXT NOT NULL, + ADDITIONAL_INFO TEXT, ACTIVITY_DATE TIMESTAMP NOT NULL ); diff --git a/src/main/scala/app/CreateRepositoryController.scala b/src/main/scala/app/CreateRepositoryController.scala index 8d50a95ae..a74031d7d 100644 --- a/src/main/scala/app/CreateRepositoryController.scala +++ b/src/main/scala/app/CreateRepositoryController.scala @@ -88,7 +88,7 @@ trait CreateRepositoryControllerBase extends ControllerBase { createWikiRepository(loginAccount, form.name) // Record activity - recordCreateRepository(loginUserName, form.name, loginUserName) + recordCreateRepositoryActivity(loginUserName, form.name, loginUserName) // redirect to the repository redirect("/%s/%s".format(loginUserName, form.name)) diff --git a/src/main/scala/app/IssuesController.scala b/src/main/scala/app/IssuesController.scala index 458c3a34b..72b3d7022 100644 --- a/src/main/scala/app/IssuesController.scala +++ b/src/main/scala/app/IssuesController.scala @@ -88,10 +88,12 @@ trait IssuesControllerBase extends ControllerBase { val writable = hasWritePermission(owner, name, context.loginAccount) val userName = context.loginAccount.get.userName + // insert issue val issueId = createIssue(owner, name, userName, form.title, form.content, if(writable) form.assignedUserName else None, if(writable) form.milestoneId else None) + // insert labels if(writable){ form.labelNames.map { value => val labels = getLabels(owner, name) @@ -103,7 +105,8 @@ trait IssuesControllerBase extends ControllerBase { } } - recordCreateIssue(owner, name, userName, issueId) + // record activity + recordCreateIssueActivity(owner, name, userName, issueId, form.title) redirect("/%s/%s/issues/%d".format(owner, name, issueId)) }) @@ -121,21 +124,28 @@ trait IssuesControllerBase extends ControllerBase { }) post("/:owner/:repository/issue_comments/new", commentForm)(readableUsersOnly { (form, repository) => - val owner = repository.owner - val name = repository.name + val owner = repository.owner + val name = repository.name + val userName = context.loginAccount.get.userName getIssue(owner, name, form.issueId.toString).map { issue => - redirect("/%s/%s/issues/%d#comment-%d".format( - owner, name, form.issueId, - createComment(owner, name, context.loginAccount.get.userName, - form.issueId, - form.content, - 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 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)) } }) diff --git a/src/main/scala/model/Activity.scala b/src/main/scala/model/Activity.scala index 8177c57ab..632d2917e 100644 --- a/src/main/scala/model/Activity.scala +++ b/src/main/scala/model/Activity.scala @@ -6,9 +6,10 @@ object Activities extends Table[Activity]("ACTIVITY") with BasicTemplate with Fu def activityId = column[Int]("ACTIVITY_ID", O AutoInc) def activityUserName = column[String]("ACTIVITY_USER_NAME") def message = column[String]("MESSAGE") + def additionalInfo = column[String]("ADDITIONAL_INFO") def activityDate = column[java.util.Date]("ACTIVITY_DATE") - def * = activityId ~ userName ~ repositoryName ~ activityUserName ~ message ~ activityDate <> (Activity, Activity.unapply _) - def autoInc = userName ~ repositoryName ~ activityUserName ~ message ~ activityDate returning activityId + def * = activityId ~ userName ~ repositoryName ~ activityUserName ~ message ~ additionalInfo.? ~ activityDate <> (Activity, Activity.unapply _) + def autoInc = userName ~ repositoryName ~ activityUserName ~ message ~ additionalInfo.? ~ activityDate returning activityId } case class Activity( @@ -17,5 +18,6 @@ case class Activity( repositoryName: String, activityUserName: String, message: String, + additionalInfo: Option[String], activityDate: java.util.Date ) diff --git a/src/main/scala/service/ActivityService.scala b/src/main/scala/service/ActivityService.scala index 85cc45a9d..263add786 100644 --- a/src/main/scala/service/ActivityService.scala +++ b/src/main/scala/service/ActivityService.scala @@ -21,13 +21,28 @@ trait ActivityService { .list } - def recordCreateRepository(userName: String, repositoryName: String, activityUserName: String): Unit = + def recordCreateRepositoryActivity(userName: String, repositoryName: String, activityUserName: String): Unit = Activities.autoInc insert(userName, repositoryName, activityUserName, "[[%s]] created [[%s/%s]]".format(activityUserName, userName, repositoryName), - currentDate) + None, currentDate) - def recordCreateIssue(userName: String, repositoryName: String, activityUserName: String, issueId: Int): Unit = + def recordCreateIssueActivity(userName: String, repositoryName: String, activityUserName: String, issueId: Int, title: String): Unit = Activities.autoInc insert(userName, repositoryName, activityUserName, "[[%s]] opened issue [[%s/%s#%d]]".format(activityUserName, userName, repositoryName, issueId), - currentDate) + Some(title), currentDate) + + def recordCloseIssueActivity(userName: String, repositoryName: String, activityUserName: String, issueId: Int, title: String): Unit = + Activities.autoInc insert(userName, repositoryName, activityUserName, + "[[%s]] closed issue [[%s/%s#%d]]".format(activityUserName, userName, repositoryName, issueId), + Some(title), currentDate) + + def recordReopenIssueActivity(userName: String, repositoryName: String, activityUserName: String, issueId: Int, title: String): Unit = + Activities.autoInc insert(userName, repositoryName, activityUserName, + "[[%s]] closed reopened [[%s/%s#%d]]".format(activityUserName, userName, repositoryName, issueId), + Some(title), currentDate) + + def recordCommentIssueActivity(userName: String, repositoryName: String, activityUserName: String, issueId: Int, comment: String): Unit = + Activities.autoInc insert(userName, repositoryName, activityUserName, + "[[%s]] commented on issue [[%s/%s#%d]]".format(activityUserName, userName, repositoryName, issueId), + Some(comment), currentDate) } diff --git a/src/main/twirl/account/activity.scala.html b/src/main/twirl/account/activity.scala.html index 5ef58a996..023d91f73 100644 --- a/src/main/twirl/account/activity.scala.html +++ b/src/main/twirl/account/activity.scala.html @@ -20,8 +20,11 @@ } else { @activities.map { activity =>
-
@datetime(activity.activityDate)
-
@activityMessage(activity.message)
+
@datetime(activity.activityDate)
+
@activityMessage(activity.message)
+ @activity.additionalInfo.map { additionalInfo => +
@additionalInfo
+ }
} }