in app/src/main/java/org/apache/roller/weblogger/ui/rendering/servlets/TrackbackServlet.java [90:224]
public void doPost(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
String error = null;
PrintWriter pw = response.getWriter();
Weblog weblog = null;
WeblogEntry entry = null;
RollerMessages messages = new RollerMessages();
WeblogTrackbackRequest trackbackRequest = null;
if (!WebloggerRuntimeConfig.getBooleanProperty("users.trackbacks.enabled")) {
error = "Trackbacks are disabled for this site";
} else {
try {
trackbackRequest = new WeblogTrackbackRequest(request);
if ((trackbackRequest.getTitle() == null) ||
"".equals(trackbackRequest.getTitle())) {
trackbackRequest.setTitle(trackbackRequest.getUrl());
}
if (trackbackRequest.getExcerpt() == null) {
trackbackRequest.setExcerpt("");
} else if (trackbackRequest.getExcerpt().length() >= RollerConstants.TEXTWIDTH_255) {
trackbackRequest.setExcerpt(trackbackRequest.getExcerpt().substring(0,
RollerConstants.TEXTWIDTH_255 - 3)+"...");
}
// lookup weblog specified by comment request
weblog = WebloggerFactory.getWeblogger().getWeblogManager()
.getWeblogByHandle(trackbackRequest.getWeblogHandle());
if (weblog == null) {
throw new WebloggerException("unable to lookup weblog: "+
trackbackRequest.getWeblogHandle());
}
// lookup entry specified by comment request
WeblogEntryManager weblogMgr = WebloggerFactory.getWeblogger().getWeblogEntryManager();
entry = weblogMgr.getWeblogEntryByAnchor(weblog, trackbackRequest.getWeblogAnchor());
if (entry == null) {
throw new WebloggerException("unable to lookup entry: "+
trackbackRequest.getWeblogAnchor());
}
} catch (Exception e) {
// some kind of error parsing the request or looking up weblog
logger.debug("error creating trackback request", e);
error = e.getMessage();
}
}
if (error != null) {
pw.println(this.getErrorResponse(error));
return;
}
try {
// check if trackbacks are allowed for this entry
// this checks site-wide settings, weblog settings, and entry settings
if (entry != null && entry.getCommentsStillAllowed() && entry.isPublished()) {
// Track trackbacks as comments
WeblogEntryComment comment = new WeblogEntryComment();
comment.setContent("[Trackback] "+trackbackRequest.getExcerpt());
comment.setName(trackbackRequest.getBlogName());
comment.setUrl(trackbackRequest.getUrl());
comment.setWeblogEntry(entry);
comment.setRemoteHost(request.getRemoteHost());
comment.setNotify(Boolean.FALSE);
comment.setPostTime(new Timestamp(new Date().getTime()));
// run new trackback through validators
int validationScore = commentValidationManager.validateComment(comment, messages);
logger.debug("Comment Validation score: " + validationScore);
if (validationScore == RollerConstants.PERCENT_100 && weblog.getCommentModerationRequired()) {
// Valid comments go into moderation if required
comment.setStatus(ApprovalStatus.PENDING);
} else if (validationScore == RollerConstants.PERCENT_100) {
// else they're approved
comment.setStatus(ApprovalStatus.APPROVED);
} else {
// Invalid comments are marked as spam
comment.setStatus(ApprovalStatus.SPAM);
}
// save, commit, send response
if (!ApprovalStatus.SPAM.equals(comment.getStatus()) ||
!WebloggerRuntimeConfig.getBooleanProperty("trackbacks.ignoreSpam.enabled")) {
WeblogEntryManager mgr = WebloggerFactory.getWeblogger().getWeblogEntryManager();
mgr.saveComment(comment);
WebloggerFactory.getWeblogger().flush();
// only invalidate the cache if comment isn't moderated
if(!weblog.getCommentModerationRequired()) {
// Clear all caches associated with comment
CacheManager.invalidate(comment);
}
// Send email notifications
MailUtil.sendEmailNotification(comment, messages,
I18nMessages.getMessages(trackbackRequest.getLocaleInstance()),
validationScore == RollerConstants.PERCENT_100);
if (ApprovalStatus.PENDING.equals(comment.getStatus())) {
pw.println(this.getSuccessResponse("Trackback submitted to moderator"));
} else {
pw.println(this.getSuccessResponse("Trackback accepted"));
}
}
} else if (entry!=null) {
error = "Comments and Trackbacks are disabled for the entry specified.";
} else {
error = "Entry not specified.";
}
} catch (Exception e) {
error = e.getMessage();
if ( error == null ) {
error = e.getClass().getName();
}
}
if(error!= null) {
pw.println(this.getErrorResponse(error));
}
}