String contents = request.getParameter("contents");
String sectionName = "";
if (!StringUtils.isBlank(request.getParameter("section"))) {
// load section of topic
int section = Integer.valueOf(request.getParameter("section"));
ParserOutput parserOutput = new ParserOutput();
String[] spliceResult = ParserUtil.parseSplice(parserOutput, request
.getContextPath(), request.getLocale(), virtualWiki, topicName,
section, contents);
contents = spliceResult[1];
sectionName = parserOutput.getSectionName();
}
if (contents == null) {
logger.warning("The topic " + topicName + " has no content");
throw new WikiException(new WikiMessage("edit.exception.nocontent",
topicName));
}
// strip line feeds
contents = StringUtils.remove(contents, '\r');
String lastTopicContent = (lastTopic != null) ? StringUtils.remove(
lastTopic.getTopicContent(), '\r') : "";
if (lastTopic != null && StringUtils.equals(lastTopicContent, contents)) {
// topic hasn't changed. redirect to prevent user from refreshing and
// re-submitting
ServletUtil.redirect(next, virtualWiki, topic.getName());
return;
}
if (handleSpam(request, next, topicName, contents)) {
this.loadEdit(request, next, pageInfo, contents, virtualWiki, topicName,
false);
return;
}
// parse for signatures and other syntax that should not be saved in raw
// form
WikiUser user = ServletUtil.currentWikiUser();
ParserInput parserInput = new ParserInput();
parserInput.setContext(request.getContextPath());
parserInput.setLocale(request.getLocale());
parserInput.setWikiUser(user);
parserInput.setTopicName(topicName);
parserInput.setUserDisplay(ServletUtil.getIpAddress(request));
parserInput.setVirtualWiki(virtualWiki);
ParserOutput parserOutput = ParserUtil.parseMetadata(parserInput, contents);
// parse signatures and other values that need to be updated prior to saving
contents = ParserUtil.parseMinimal(parserInput, contents);
topic.setTopicContent(contents);
// if (!StringUtils.isBlank(parserOutput.getRedirect())) {
// // set up a redirect
// topic.setRedirectTo(parserOutput.getRedirect());
// topic.setTopicType(Topic.TYPE_REDIRECT);
// } else if (topic.getTopicType() == Topic.TYPE_REDIRECT) {
// // no longer a redirect
// topic.setRedirectTo(null);
// topic.setTopicType(Topic.TYPE_ARTICLE);
// }
int charactersChanged = StringUtils.length(contents)
- StringUtils.length(lastTopicContent);
TopicVersion topicVersion = new TopicVersion(user, ServletUtil
.getIpAddress(request), request.getParameter("editComment"), contents,
charactersChanged);
if (request.getParameter("minorEdit") != null) {
topicVersion.setEditType(TopicVersion.EDIT_MINOR);
}
WikiBase.getDataHandler().writeTopic(topic, topicVersion,
parserOutput.getCategories(), parserOutput.getLinks());
// // update watchlist
WikiUserDetails userDetails = ServletUtil.currentUserDetails();
if (!userDetails.hasRole(RoleImpl.ROLE_ANONYMOUS)) {
// Watchlist watchlist = ServletUtil.currentWatchlist(request,
// virtualWiki);