⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 postwebhandler.java

📁 java servlet著名论坛源代码
💻 JAVA
📖 第 1 页 / 共 4 页
字号:
            }
        }

        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 + -