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

📄 replydao.java

📁 EasyJForum 是一个基于 Java 技术的免费社区论坛软件系统
💻 JAVA
📖 第 1 页 / 共 3 页
字号:
package com.hongshee.ejforum.data;

/**
 * <p>Title: ForumPostDAO.java</p>
 * <p>Description: Forum post data access object</p>
 * <p>Copyright: Copyright (c) 2007</p>
 * <p>Company: hongshee</p>
 * @author jackie
 * @version 1.0
 */

import java.sql.Connection;
//import java.sql.Statement;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;
import java.util.ArrayList;
import java.util.HashMap;

import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpSession;

import org.apache.commons.fileupload.FileUploadBase.SizeLimitExceededException;

import com.hongshee.ejforum.util.AppUtils;
import com.hongshee.ejforum.util.MyFileUpload;
import com.hongshee.ejforum.util.PageUtils;
import com.hongshee.ejforum.util.MyFileUpload.UploadVO;
import com.hongshee.ejforum.common.CacheManager;
import com.hongshee.ejforum.common.ForumSetting;
import com.hongshee.ejforum.common.IConstants;
import com.hongshee.ejforum.data.BoardDAO.BoardVO;
import com.hongshee.ejforum.data.GroupDAO.GroupVO;
import com.hongshee.ejforum.data.SectionDAO.SectionVO;
import com.hongshee.ejforum.data.TopicDAO.TopicVO;
import com.hongshee.ejforum.data.UserDAO.UserInfo;

public class ReplyDAO extends EntityDAO
{
    private static ReplyDAO _dao = null;

    protected ReplyDAO()
    {}

    public static ReplyDAO getInstance()
    {
        if (_dao == null)
        {
            _dao = new ReplyDAO();
        }
        return _dao;
    } 

    public String createReply(HttpServletRequest request, UserInfo userinfo,
                              SectionVO aSection, BoardVO aBoard,
                              GroupVO aGroup) throws Exception
    {
        String result = null;
        ArrayList<UploadVO> attaches = null;
        try
        {
            attaches = MyFileUpload.getInstance().upload(request);
        }
        catch(SizeLimitExceededException e)
        {
            return "上传附件时出错:文件大小超过限制,允许的最大值为:" 
                    + ((SizeLimitExceededException)e).getPermittedSize() + " 字节。";
        }
        catch(Exception e)
        {
            return "上传附件时出错:" + e.getMessage();
        }

        String subject = PageUtils.decodeParam((String)request.getAttribute("subject"));
        subject = subject.replace("<", "&lt;");
        subject = subject.replace(">", "&gt;");

        StringBuilder badwords = new StringBuilder();
        subject = TopicDAO.getInstance().censorWords(subject, badwords);
        
        int attachCount = 0;
        if (attaches != null)
            attachCount = attaches.size();
        if (attachCount > 0 && 
                !PageUtils.isPermitted(aBoard,aGroup,IConstants.PERMIT_UPLOAD))
        {
            return "您没有上传附件的权限";
        }
        
        String content = 
            TopicDAO.getInstance().validateContent(request, aGroup, aSection, aBoard,
                                                   attaches, badwords); 
        
        Connection conn = dbManager.getConnection();
        try
        {
            String userID = (userinfo == null ? "" : userinfo.userID);
            String topicID = PageUtils.getParam(request, "tid");
            
            conn.setAutoCommit(false);
            int replyID = 0;
            if (this.adapterName.indexOf("HsqldbAdapter") > 0
                    || this.adapterName.indexOf("OracleAdapter") > 0)
            {
                synchronized(this)
                {
                    replyID = addReply(request, userinfo, topicID, subject, content, attachCount, conn, false);
                }
            }
            else
                replyID = addReply(request, userinfo, topicID, subject, content, attachCount, conn, true);

            // Increase posts
            ArrayList<Object> paramValues = new ArrayList<Object>();
            paramValues.add(userID);
            this.execUpdateSql(adapter.User_IncPosts, paramValues, conn);

            if (userinfo != null)
                userinfo.posts = userinfo.posts + 1;

            HttpSession sess = request.getSession();
            Object sessionPosts = (Object)sess.getAttribute("posts");
            if (sessionPosts != null)
                sess.setAttribute("posts", Integer.parseInt(sessionPosts.toString()) + 1);
            else
                sess.setAttribute("posts", 1);
            
            // Increase credits
            int totalCredits = ForumSetting.getInstance().getInt(ForumSetting.CREDITS, "newReply");

            if (attachCount > 0 && replyID > 0)
            {
                AttachDAO.getInstance()
                         .addAttaches(attaches, userID, topicID, String.valueOf(replyID), conn);
                
                int credits = ForumSetting.getInstance().getInt(ForumSetting.CREDITS, "upload");
                if (credits > 0)
                    totalCredits = totalCredits + credits * attaches.size();
            }

            if (totalCredits > 0 && userID.length() > 0)
            {
                paramValues.clear();
                paramValues.add(totalCredits);
                paramValues.add(userID);
                this.execUpdateSql(adapter.User_IncCredits, paramValues, conn);

                if (userinfo != null)
                    userinfo.credits = userinfo.credits + totalCredits;
            }
            
            if (badwords.length() > 1)
            {
                paramValues.clear();
                paramValues.add(replyID);
                ArrayList<HashMap> replies = 
                    this.execSelectSql(adapter.Reply_GetLogInfo, paramValues, conn);

                if (replies != null && replies.size() > 0)
                {
                    HashMap aReply = replies.get(0);
                    subject = (String)aReply.get("TITLE");
                
                    ActionLogDAO.getInstance().addCensorLog(
                            userID, aBoard.boardID, aBoard.boardName, topicID, 
                            subject, String.valueOf(replyID), badwords.toString(), conn);
                }
            }
            
            conn.commit();
            result = "OK";
        }
        catch(Exception e)
        {
            conn.rollback();
            throw e;
        }
        finally
        {
            dbManager.closeConnection(conn);
        }
        return result;
    }
    
    /**
     * Add a topic reply
     * @param 
     *      request - HttpServletRequest
     *      topicID - Topic ID
     *      attachCount - Attachment count
     *      conn - DB Connection
     * @return Reply ID
     * @throws SQLException
     * @since 1.0
     */
    private int addReply(HttpServletRequest request, UserInfo userinfo, String topicID, 
                         String subject, String content, int attachCount, Connection conn, 
                         boolean hasGeneratedKey) throws SQLException
    {
        int result = 0;
        PreparedStatement pstmtInsert = null;
        Statement stmtQuery = null;
        ResultSet rs = null;
        try
        {
            String isHidePost = (String)request.getAttribute("isHidePost");
            if (isHidePost == null || isHidePost.length() == 0)
                isHidePost = "F";
            
            String userID = (userinfo == null ? "" : userinfo.userID);
            
            if (hasGeneratedKey)
                pstmtInsert = conn.prepareStatement(adapter.Reply_Insert, Statement.RETURN_GENERATED_KEYS);
            else
                pstmtInsert = conn.prepareStatement(adapter.Reply_Insert);
                
            pstmtInsert.setString(1, topicID);
            pstmtInsert.setString(2, userID);
            pstmtInsert.setString(3, request.getRemoteAddr());
            pstmtInsert.setString(4, subject);
            pstmtInsert.setString(5, content);
            pstmtInsert.setString(6, isHidePost);
            pstmtInsert.setInt(7, attachCount);
            pstmtInsert.executeUpdate();
            
            if (hasGeneratedKey)
            {
                rs = pstmtInsert.getGeneratedKeys();
            }
            else if (this.adapterName.indexOf("OracleAdapter") > 0)
            {
                stmtQuery = conn.createStatement();
                rs = stmtQuery.executeQuery("select ejf_reply_seq.CURRVAL from dual");
            }
            else // Hsqldb
            {
                stmtQuery = conn.createStatement();
                rs = stmtQuery.executeQuery("CALL IDENTITY()");
            }
            
            if (rs.next())
            {
                result = rs.getInt(1);
                
                ArrayList<Object> paramValues = new ArrayList<Object>();
                if (isHidePost.charAt(0) == 'T')
                {
                    paramValues.add("");
                    paramValues.add("");
                }
                else
                {
                    String nickname = (userinfo == null ? "" : userinfo.nickname);
                    paramValues.add(userID);
                    paramValues.add(nickname);
                }
                paramValues.add(topicID);
                this.execUpdateSql(adapter.Topic_ModLastPost, paramValues, conn);
                
                String sectionID = PageUtils.getParam(request, "sid");
                String boardID = PageUtils.getParam(request, "fid");

                CacheManager cache = CacheManager.getInstance();
                BoardVO aBoard = cache.getBoard(sectionID, boardID);
                
                synchronized(aBoard)
                {
                    aBoard.replies = aBoard.replies + 1;
                    aBoard.todayPosts = aBoard.todayPosts + 1;
                }
            }
            return result;
        }
        finally
        {
            dbManager.closeResultSet(rs);
            dbManager.closeStatement(stmtQuery);
            dbManager.closePStatement(pstmtInsert);
        }
    }

    public String updateReply(HttpServletRequest request, UserInfo userinfo,
                              String topicID, String replyID,
                              SectionVO aSection, BoardVO aBoard, 
                              GroupVO aGroup) throws Exception
    {
        String result = null;
        ArrayList<UploadVO> attaches = null;
        try
        {
            attaches = MyFileUpload.getInstance().upload(request);
        }
        catch(SizeLimitExceededException e)
        {
            return "上传附件时出错:文件大小超过限制,允许的最大值为:" 
                    + ((SizeLimitExceededException)e).getPermittedSize() + " 字节。";
        }
        catch(Exception e)
        {
            return "上传附件时出错:" + e.getMessage();
        }

        String subject = PageUtils.decodeParam((String)request.getAttribute("subject"));
        subject = subject.replace("<", "&lt;");
        subject = subject.replace(">", "&gt;");

        StringBuilder badwords = new StringBuilder();
        subject = TopicDAO.getInstance().censorWords(subject, badwords);
        
        int attachCount = 0;
        if (attaches != null)
            attachCount = attaches.size();
        if (attachCount > 0 && 
                !PageUtils.isPermitted(aBoard,aGroup,IConstants.PERMIT_UPLOAD))
        {
            return "您没有上传附件的权限";
        }
        
        String content = 
            TopicDAO.getInstance().validateContent(request, aGroup, aSection, aBoard, 
                                                   attaches, badwords); 
        
        Connection conn = dbManager.getConnection();

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -