log.debug("Doing comment posting for entry = "+entry.getPermaLink());
// collect input from request params and construct new comment object
// fields: name, email, url, content, notify
// TODO: data validation on collected comment data
CommentData comment = new CommentData();
comment.setName(commentRequest.getName());
comment.setEmail(commentRequest.getEmail());
comment.setUrl(commentRequest.getUrl());
comment.setContent(commentRequest.getContent());
comment.setNotify(new Boolean(commentRequest.isNotify()));
comment.setWeblogEntry(entry);
comment.setRemoteHost(request.getRemoteHost());
comment.setPostTime(new Timestamp(System.currentTimeMillis()));
WeblogEntryCommentForm cf = new WeblogEntryCommentForm();
cf.setData(comment);
// check if site is allowing comments
if(!RollerRuntimeConfig.getBooleanProperty("users.comments.enabled")) {
// TODO: i18n
error = "Comments are disabled for this site.";
// check if weblog and entry are allowing comments
} else if(!weblog.getAllowComments().booleanValue() ||
!entry.getCommentsStillAllowed()) {
// TODO: i18n
error = "Comments not allowed on this entry";
// make sure comment authentication passed
} else if(!this.authenticator.authenticate(request)) {
error = bundle.getString("error.commentAuthFailed");
log.debug("Comment failed authentication");
}
// bail now if we have already found an error
if(error != null) {
cf.setError(error);
request.setAttribute("commentForm", cf);
RequestDispatcher dispatcher = request.getRequestDispatcher(dispatch_url);
dispatcher.forward(request, response);
return;
}
if (preview) {
// TODO: i18n
message = "This is a comment preview only";
cf.setPreview(comment);
// If comment contains blacklisted text, warn commenter
SpamChecker checker = new SpamChecker();
if (checker.checkComment(comment)) {
error = bundle.getString("commentServlet.previewMarkedAsSpam");
log.debug("Comment marked as spam");
}
log.debug("Comment is a preview");
} else {
// If comment contains blacklisted text, mark as spam
SpamChecker checker = new SpamChecker();
if (checker.checkComment(comment)) {
comment.setSpam(Boolean.TRUE);
error = bundle.getString("commentServlet.commentMarkedAsSpam");
log.debug("Comment marked as spam");
}
// If comment moderation is on, set comment as pending
if (weblog.getCommentModerationRequired()) {
comment.setPending(Boolean.TRUE);
comment.setApproved(Boolean.FALSE);
message = bundle.getString("commentServlet.submittedToModerator");
} else {
comment.setPending(Boolean.FALSE);
comment.setApproved(Boolean.TRUE);
}
try {
WeblogManager mgr = RollerFactory.getRoller().getWeblogManager();
mgr.saveComment(comment);