diff --git a/src/main/resources/update/1_2.sql b/src/main/resources/update/1_2.sql index 0496caf..5040157 100644 --- a/src/main/resources/update/1_2.sql +++ b/src/main/resources/update/1_2.sql @@ -4,6 +4,7 @@ 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 8d50a95..a74031d 100644 --- a/src/main/scala/app/CreateRepositoryController.scala +++ b/src/main/scala/app/CreateRepositoryController.scala @@ -88,7 +88,7 @@ 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 458c3a3..72b3d70 100644 --- a/src/main/scala/app/IssuesController.scala +++ b/src/main/scala/app/IssuesController.scala @@ -88,10 +88,12 @@ 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 @@ } } - 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 @@ }) 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 8177c57..632d291 100644 --- a/src/main/scala/model/Activity.scala +++ b/src/main/scala/model/Activity.scala @@ -6,9 +6,10 @@ 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 @@ 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 85cc45a..263add7 100644 --- a/src/main/scala/service/ActivityService.scala +++ b/src/main/scala/service/ActivityService.scala @@ -21,13 +21,28 @@ .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 5ef58a9..023d91f 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
+ }
} }