📄 replydao.java
字号:
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("<", "<");
subject = subject.replace(">", ">");
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("<", "<");
subject = subject.replace(">", ">");
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 + -