(refs #4)Add issue close, reopen and comment activity.

This commit is contained in:
takezoe
2013-07-06 22:07:51 +09:00
parent 342810aa3a
commit e50c4528a6
6 changed files with 54 additions and 23 deletions

View File

@@ -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
);

View File

@@ -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))

View File

@@ -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))
}
})

View File

@@ -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
)

View File

@@ -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)
}

View File

@@ -20,8 +20,11 @@
} else {
@activities.map { activity =>
<div class="block">
<div class="muted small">@datetime(activity.activityDate)</div>
<div>@activityMessage(activity.message)</div>
<div class="muted smal">@datetime(activity.activityDate)</div>
<div class="strong">@activityMessage(activity.message)</div>
@activity.additionalInfo.map { additionalInfo =>
<div>@additionalInfo</div>
}
</div>
}
}