📄 postwebhandler.java
字号:
}
}
PostBean firstPostBean = DAOFactory.getPostDAO().getFirstPost_inThread(threadID);
if (firstPostBean.getMemberID() != 0 && firstPostBean.getMemberID() != MVNForumConstant.MEMBER_ID_OF_GUEST) {
MemberBean memberBean = DAOFactory.getMemberDAO().getMember_forPublic(firstPostBean.getMemberID());
firstPostBean.setMemberBean(memberBean);
}
request.setAttribute("ThreadBean", threadBean);
request.setAttribute("FirstPostBean", firstPostBean);
request.setAttribute("PostBeans", postBeans);
request.setAttribute("NumberOfPosts", new Integer(numberOfPosts));
}
void processModeratePendingPosts(HttpServletRequest request)
throws AssertionException, DatabaseException, AuthenticationException,
BadInputException, DatabaseException, ObjectNotFoundException {
OnlineUser onlineUser = onlineUserManager.getOnlineUser(request);
MVNForumPermission permission = onlineUser.getPermission();
// user must have been authenticated before he can moderate pending/disabled posts
permission.ensureIsAuthenticated();
// check normal permission, note that we dont check
// permission on a forumID because we allow moderate posts
// in multiple forums even if the web interface does not support it
int threadID = -1;
int forumID = -1;
try {
threadID = ParamUtil.getParameterInt(request, "thread");
ThreadBean threadBean = DAOFactory.getThreadDAO().getBean(threadID);
forumID = threadBean.getForumID();
permission.ensureCanModerateThread(forumID);
ForumCache.getInstance().getBean(forumID).ensureNotDisabledForum();
} catch (BadInputException ex) {
// just ignore, in case of use customized client
}
permission.ensureCanModerateThreadInAnyForum();
try {
String prefix = "modpostaction_";
for (Enumeration enum = request.getParameterNames(); enum.hasMoreElements(); ) {
String param = (String) enum.nextElement();
if (param.startsWith(prefix)) {
String modValue = ParamUtil.getParameter(request, param, true);
String strPostID = param.substring(prefix.length());
int postID = Integer.parseInt(strPostID);
if (modValue.equals("approve")) {
PostBean postBean = DAOFactory.getPostDAO().getPost(postID);
int currentForumID = postBean.getForumID();
permission.ensureCanModerateThread(currentForumID);
DAOFactory.getPostDAO().updateStatus(postID, PostBean.POST_STATUS_DEFAULT);
} else if (modValue.equals("delete")) {
PostBean postBean = DAOFactory.getPostDAO().getPost(postID);
deletePost(request, postBean);
} else {
// it means ignore, do nothing
}
}
}
} finally {
// now update the forum statistics
if (forumID != -1) {
StatisticsUtil.updateForumStatistics(forumID);
}
// now update the thread statistics
if (threadID != -1) {
StatisticsUtil.updateThreadStatistics(threadID);
}
}
request.setAttribute("ForumID", String.valueOf(forumID));
request.setAttribute("ThreadID", String.valueOf(threadID));
}
/**
* This method is for viewthread page and printthread page
*/
void prepareViewThread(HttpServletRequest request)
throws DatabaseException, ObjectNotFoundException, BadInputException, AuthenticationException, AssertionException {
OnlineUser onlineUser = onlineUserManager.getOnlineUser(request);
MVNForumPermission permission = onlineUser.getPermission();
int threadID = ParamUtil.getParameterInt(request, "thread");
boolean printAll = ParamUtil.getParameterBoolean(request, "printall");
ThreadBean threadBean = DAOFactory.getThreadDAO().getBean(threadID);
int forumID = threadBean.getForumID();
int numberOfPosts = DAOFactory.getPostDAO().getNumberOfEnablePosts_inThread(threadID);
// check normal permission
permission.ensureCanReadPost(forumID);
ForumCache.getInstance().getBean(forumID).ensureNotDisabledForum();
// Only moderator can view disable threads
if (threadBean.getThreadStatus() == ThreadBean.THREAD_STATUS_DISABLED) {
permission.ensureCanModerateThread(forumID);
}
int postsPerPage = onlineUser.getPostsPerPage();
int offset = 0;
boolean lastPage = ParamUtil.getParameterBoolean(request, "lastpage");
if (lastPage) {
// note that in the worst case, numberOfPosts could equals 0 (bad database)
int pageCount = numberOfPosts / postsPerPage;
int odd = numberOfPosts % postsPerPage;
if (odd > 0) {
pageCount++;
}
if (pageCount < 1) {
pageCount = 1;// at least, there is one page
}
offset = (pageCount-1) * postsPerPage;
} else {
try {
offset = ParamUtil.getParameterInt(request, "offset");
} catch (BadInputException e) {
// do nothing
}
}
if (printAll) {
postsPerPage = 10000; //We assume that big number
offset = 0;
}
Collection postBeans = DAOFactory.getPostDAO().getEnablePosts_inThread_limit(threadID, offset, postsPerPage);
Iterator iterator = postBeans.iterator();
while(iterator.hasNext()) {
PostBean postBean = (PostBean)iterator.next();
// very slow here
/** @todo find a better solution */
MemberBean memberBean = null;
if (postBean.getMemberID() != 0 && postBean.getMemberID() != MVNForumConstant.MEMBER_ID_OF_GUEST) {
memberBean = DAOFactory.getMemberDAO().getMember_forPublic(postBean.getMemberID());
}
postBean.setMemberBean(memberBean);
int postAttachCount = postBean.getPostAttachCount();
if ( (postAttachCount > 0) && MVNForumConfig.getEnableAttachment()) {
int postID = postBean.getPostID();
Collection attachBeans = DAOFactory.getAttachmentDAO().getBeans_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().getNumberOfBeans_inPost(postID)) {
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);
}
}
}
int previousTopic = DAOFactory.getThreadDAO().getPreviousEnableThread(forumID, threadID);// can throw AssertionException
int nextTopic = DAOFactory.getThreadDAO().getNextEnableThread(forumID, threadID);// can throw AssertionException
int pendingPostCount = 0;
if (permission.canModerateThread(forumID)) {
pendingPostCount = DAOFactory.getPostDAO().getNumberOfDisablePosts_inThread(threadID);
}
DAOFactory.getThreadDAO().increaseViewCount(threadID);
request.setAttribute("ThreadBean", threadBean);
request.setAttribute("PostBeans", postBeans);
request.setAttribute("NumberOfPosts", new Integer(numberOfPosts));
request.setAttribute("PreviousTopic", new Integer(previousTopic));
request.setAttribute("NextTopic", new Integer(nextTopic));
request.setAttribute("PendingPostCount", new Integer(pendingPostCount));
}
void processSearch(HttpServletRequest request)
throws BadInputException, IOException, DatabaseException, ObjectNotFoundException,
AuthenticationException, AssertionException {
OnlineUser onlineUser = onlineUserManager.getOnlineUser(request);
MVNForumPermission permission = onlineUser.getPermission();
String memberName = ParamUtil.getParameter(request, "member");
StringUtil.checkGoodName(memberName);
// if user does not enter MemberName, then user must enter "key"
boolean requireKey = memberName.length() == 0;
String key = ParamUtil.getParameter(request, "key", requireKey);
int forumID = ParamUtil.getParameterInt(request, "forum", 0);
int offset = ParamUtil.getParameterInt(request, "offset", 0);
int rows = ParamUtil.getParameterInt(request, "rows", 20);
// offset should be even when divide with rowsToReturn
offset = (offset/rows)*rows;
if (offset < 0) {
throw new BadInputException("Cannot search with offset < 0");
}
SearchQuery query = new SearchQuery();
if (key.length() > 0) {
query.setSearchString(key);
}
if (memberName.length() > 0) {
int memberID = DAOFactory.getMemberDAO().getMemberIDFromMemberName(memberName);
query.setMemberId(memberID);
}
if (forumID > 0) {
query.setForumId(forumID);
} else if (forumID < 0) {
// choose to search in a category
query.setForumId(forumID);
} else {
// forumID equals to 0, it mean global searching
// just do nothing, lucene will search all forums (globally)
}
query.searchDocuments(offset, rows);
int hitCount = query.getHitCount();
Collection result = query.getPostResult();
// Remove postd that current user dont have permission
// NOTE: these below code does not remove the enable posts in
// a disabled thread. This is not usually the case because
// normally we will delete the thread instead of change it
// from Enable to Disabled
for (Iterator iter = result.iterator(); iter.hasNext(); ) {
PostBean postBean = (PostBean)iter.next();
int currentForumID = postBean.getForumID();
if (ForumCache.getInstance().getBean(currentForumID).getForumStatus() == ForumBean.FORUM_STATUS_DISABLED) {
iter.remove();
} else if ( (permission.canReadPost(currentForumID) == false) ||
(postBean.getPostStatus() == PostBean.POST_STATUS_DISABLED)) {
iter.remove();
}
else if (postBean.getParentPostID() == 0) {// first post
// Please note that the first post is always Enable even if
// the thread is Disable. In this case always show result
// if the current user is moderator
if (permission.canModerateThread(currentForumID) == false) {
ThreadBean threadBean = DAOFactory.getThreadDAO().getBean(postBean.getThreadID());
if (threadBean.getThreadStatus() == ThreadBean.THREAD_STATUS_DISABLED) {
iter.remove();
}
}
}
}
if (offset > hitCount) {
throw new BadInputException("Cannot search with offset > total posts");
}
request.setAttribute("key", Encoder.encodeURL(key));
request.setAttribute("member", memberName);
request.setAttribute("forum", new Integer(forumID));
request.setAttribute("offset", new Integer(offset));
request.setAttribute("rows", new Integer(rows));
request.setAttribute("TotalPosts", new Integer(hitCount));
request.setAttribute("PostBeans", result);
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -