📄 postwebhandler.java
字号:
throw new BadInputException("Not support this thread type");
}
if (threadType == ThreadBean.THREAD_TYPE_GLOBAL_ANNOUNCEMENT) {
permission.ensureCanAdminSystem();
//forumID = -1; // this thread not belongs to any forum
} else if (threadType != ThreadBean.THREAD_TYPE_DEFAULT ) {
permission.ensureCanModerateThread(forumID);
}
int threadOption = 0; //@todo review and support it later
int threadStatus = ThreadBean.THREAD_STATUS_DEFAULT;
// Ensure that moderator dont have to moderate the thread to enable it
if (forumBean.shouldModerateThread() && !isForumModerator) {
threadStatus = ThreadBean.THREAD_STATUS_DISABLED;
isPendingThread = true;
}
int threadHasPoll = 0;//@todo review and support it later
int threadDuration = 0;//@todo review and support it later
int threadAttachCount = 0;
threadID = DAOFactory.getThreadDAO().createThread(forumID, memberName, lastPostMemberName,
postTopic, postBody, 0/*threadVoteCount*/,
0/*threadVoteTotalStars*/, now/*threadCreationDate*/, now/*threadLastPostDate*/,
threadType, threadOption, threadStatus,
threadHasPoll, 0/*threadViewCount*/, 0/*threadReplyCount*/,
postIcon, threadDuration, threadAttachCount);
} else {// reply to a post
PostBean parentPostBean = null;
try {
parentPostBean = DAOFactory.getPostDAO().getPost(parentPostID);// can throw DatabaseException
} catch (ObjectNotFoundException ex) {
String localizedMessage = MVNForumResourceBundle.getString(locale, "mvncore.exception.ObjectNotFoundException.postid_not_exists", new Object[] {new Integer(parentPostID)});
throw new ObjectNotFoundException(localizedMessage);
}
forumID = parentPostBean.getForumID();
threadID = parentPostBean.getThreadID();
ForumBean forumBean = null;
try {
forumBean = ForumCache.getInstance().getBean(forumID);
} catch (ObjectNotFoundException e) {
String localizedMessage = MVNForumResourceBundle.getString(locale, "mvncore.exception.ObjectNotFoundException.forumid_not_exists", new Object[] {new Integer(forumID)});
throw new ObjectNotFoundException(localizedMessage);
}
forumBean.ensureNotDisabledForum();
forumBean.ensureNotClosedForum();
forumBean.ensureNotLockedForum();
// check permission
isForumModerator = permission.canModerateThread(forumID);
permission.ensureCanAddPost(forumID);
// now check if thread is closed or locked, if it is, then cannot reply to a post
ThreadBean threadBean = null;
try {
threadBean = DAOFactory.getThreadDAO().getThread(threadID);
} catch (ObjectNotFoundException ex ) {
String localizedMessage = MVNForumResourceBundle.getString(locale, "mvncore.exception.ObjectNotFoundException.threadid_not_exists", new Object[] {new Integer(threadID)});
throw new ObjectNotFoundException(localizedMessage);
}
threadBean.ensureStatusCanReply();
}
//Timestamp postLastEditDate = now;
String postCreationIP = currentIP;
String postLastEditIP = "";// should we init it to postCreationIP ???
int postFormatOption = 0;
int postOption = 0;
int postStatus = PostBean.POST_STATUS_DEFAULT;
try {
// Ensure that moderator dont have to moderate the thread to enable it
if (ForumCache.getInstance().getBean(forumID).shouldModeratePost() && !isForumModerator) {
// we will not disble post that is a thread (parentPostID == 0)
if (parentPostID != 0) {// replied post
postStatus = PostBean.POST_STATUS_DISABLED;
}
}
} catch (ObjectNotFoundException e) {
String localizedMessage = MVNForumResourceBundle.getString(locale, "mvncore.exception.ObjectNotFoundException.forumid_not_exists", new Object[] {new Integer(forumID)});
throw new ObjectNotFoundException(localizedMessage);
}
int postAttachCount = 0;
int postID = DAOFactory.getPostDAO().createPost(parentPostID, forumID, threadID,
memberID, memberName, ""/*lastEditMemberName*/,
postTopic, postBody, now/*postCreationDate*/,
now/*postLastEditDate*/, postCreationIP, postLastEditIP,
0/*postEditCount*/, postFormatOption, postOption,
postStatus, postIcon, postAttachCount);
StatisticsUtil.updateMemberStatistics(memberID);
StatisticsUtil.updateForumStatistics(forumID);
StatisticsUtil.updateThreadStatistics(threadID);
/** @todo Update PostEditLog table here */
//add favorite thread if user checked it
if (addFavoriteThread) {
permission.ensureIsAuthenticated();
//@todo: add checking of MVNForumConfig.getEnableFavoriteThread()
// check to make sure that this user doesnt exceed his favorite max
int currentFavoriteCount = DAOFactory.getFavoriteThreadDAO().getNumberOfFavoriteThreads_inMember(memberID);
int maxFavorites = MVNForumConfig.getMaxFavoriteThread();
if (currentFavoriteCount < maxFavorites) {
Timestamp favoriteCreationDate = now;
int favoriteType = 0; //@todo implement it later
int favoriteOption = 0; //@todo implement it later
int favoriteStatus = 0; //@todo implement it later
// now check permission the this user have the readPost permission
permission.ensureCanReadPost(forumID);
// has the permission now, then insert to database
try {
DAOFactory.getFavoriteThreadDAO().create(memberID, threadID, forumID,
favoriteCreationDate, favoriteType, favoriteOption,
favoriteStatus);
} catch (DuplicateKeyException ex) {
// already add favorite thread, just ignore
}
}
}
//add watch if user checked it
if (addWatchThread) {
permission.ensureIsAuthenticated();
permission.ensureIsActivated();
if (MVNForumConfig.getEnableWatch() == false) {
// should never happen, because if it happen, then the whole process is broken
String localizedMessage = MVNForumResourceBundle.getString(locale, "mvncore.exception.AssertionException.cannot_add_watch.watch_is_disabled");
throw new AssertionException(localizedMessage);
//throw new AssertionException("Cannot add Watch because Watch feature is disabled by administrator.");
}
int watchType = 0;//GenericParamUtil.getParameterInt(request, "WatchType");
int watchOption = 0;//GenericParamUtil.getParameterInt(request, "WatchOption");
int watchStatus = 0;//GenericParamUtil.getParameterInt(request, "WatchStatus");
Timestamp watchCreationDate = now;
Timestamp watchLastSentDate = now;
Timestamp watchEndDate = now;// @todo: check it !!!
try {
DAOFactory.getWatchDAO().create(memberID, 0/*watchCategoryID*/, 0/*watchForumID*/,
threadID, watchType, watchOption,
watchStatus, watchCreationDate, watchLastSentDate,
watchEndDate);
} catch (DuplicateKeyException ex) {
// User try to create a duplicate watch, just ignore
}
}
// Now clear the cache
PostCache.getInstance().clear();
ThreadCache.getInstance().clear();
// now, update the Search Index
//@todo check the performance here
PostBean justAddedPostBean = null;
try {
justAddedPostBean = DAOFactory.getPostDAO().getPost(postID);
} catch(ObjectNotFoundException ex) {
String localizedMessage = MVNForumResourceBundle.getString(locale, "mvncore.exception.ObjectNotFoundException.postid_not_exists", new Object[] {new Integer(postID)});
throw new ObjectNotFoundException(localizedMessage);
}
PostIndexer.scheduleAddPostTask(justAddedPostBean);
request.setAttribute("PostBean", justAddedPostBean);
request.setAttribute("ForumID", String.valueOf(forumID));
request.setAttribute("ThreadID", String.valueOf(threadID));
request.setAttribute("PostID", String.valueOf(postID));
request.setAttribute("AttachMore", new Boolean(attachMore));
request.setAttribute("AddFavoriteParentThread", new Boolean(addFavoriteThread));
request.setAttribute("AddWatchParentThread", new Boolean(addWatchThread));
request.setAttribute("IsPendingThread", new Boolean(isPendingThread));
/**@todo: review, this variable is still reserved*/
//request.setAttribute("ParentPostID", String.valueOf(parentPostID));
FloodControl.increaseCount(MVNForumGlobal.FLOOD_ID_NEW_POST, currentIP);
}
public void preparePrintPost(GenericRequest request)
throws ObjectNotFoundException, DatabaseException, BadInputException,
AuthenticationException, AssertionException {
OnlineUser onlineUser = onlineUserManager.getOnlineUser(request);
MVNForumPermission permission = onlineUser.getPermission();
int postID = GenericParamUtil.getParameterInt(request, "post");
Locale locale = I18nUtil.getLocaleInRequest(request);
PostBean postBean = null;
try {
postBean = DAOFactory.getPostDAO().getPost(postID);
} catch(ObjectNotFoundException ex) {
String localizedMessage = MVNForumResourceBundle.getString(locale, "mvncore.exception.ObjectNotFoundException.postid_not_exists", new Object[] {new Integer(postID)});
throw new ObjectNotFoundException(localizedMessage);
}
int threadID = postBean.getThreadID();
int forumID = postBean.getForumID();
try {
ForumCache.getInstance().getBean(forumID).ensureNotDisabledForum();
} catch (ObjectNotFoundException e) {
String localizedMessage = MVNForumResourceBundle.getString(locale, "mvncore.exception.ObjectNotFoundException.forumid_not_exists", new Object[] {new Integer(forumID)});
throw new ObjectNotFoundException(localizedMessage);
}
permission.ensureCanReadPost(forumID);
// to show the thread topic
ThreadBean threadBean = null;
try {
threadBean = DAOFactory.getThreadDAO().getThread(threadID);
} catch ( ObjectNotFoundException ex ) {
String localizedMessage = MVNForumResourceBundle.getString(locale, "mvncore.exception.ObjectNotFoundException.threadid_not_exists", new Object[] {new Integer(threadID)});
throw new ObjectNotFoundException(localizedMessage);
}
MemberBean memberBean = null;
if (postBean.getMemberID() > 0) {
memberBean = DAOFactory.getMemberDAO().getMember_forPublic(postBean.getMemberID());
}
postBean.setMemberBean(memberBean);
int postAttachCount = postBean.getPostAttachCount();
if ( (postAttachCount > 0) && MVNForumConfig.getEnableAttachment()) {
Collection attachBeans = DAOFactory.getAttachmentDAO().getAttachments_inPost(postID);
int actualAttachCount = attachBeans.size();
// now check if the attachCount in talbe Post equals to the actual attachCount in table Attachment
if (postAttachCount != actualAttachCount) {
if (actualAttachCount != DAOFactory.getAttachmentDAO().getNumberOfAttachments_inPost(postID)) {
String localizedMessage = MVNForumResourceBundle.getString(locale, "mvncore.exception.AssertionException.serious_error.cannot_process_attachment_count");
throw new AssertionException(localizedMessage);
//throw new AssertionException("AssertionException: Serious error: cannot process Attachment Count in table Attachment");
}
log.warn("The attachment count in table Post and Attachment are not synchronized. In table Post = " + postAttachCount + " and in table Attachment = " + actualAttachCount + ". Synchronize to " + actualAttachCount);
DAOFactory.getPostDAO().updateAttachCount(postID, actualAttachCount);
}
if (actualAttachCount > 0) {
postBean.setAttachmentBeans(attachBeans);
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -