📄 dloglogaction.java
字号:
/*
* This program is free software; you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation; either version 2 of the License, or
* (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU Library General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program; if not, write to the Free Software
* Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
*/
package dlog4j.action;
import java.io.BufferedReader;
import java.io.File;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.text.MessageFormat;
import java.text.SimpleDateFormat;
import java.util.Date;
import java.util.List;
import javax.servlet.ServletContext;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import net.sf.hibernate.HibernateException;
import net.sf.hibernate.Query;
import net.sf.hibernate.Session;
import org.apache.commons.lang.StringUtils;
import org.apache.struts.action.Action;
import org.apache.struts.action.ActionError;
import org.apache.struts.action.ActionErrors;
import org.apache.struts.action.ActionForm;
import org.apache.struts.action.ActionForward;
import org.apache.struts.action.ActionMapping;
import org.htmlparser.Node;
import org.htmlparser.Parser;
import org.htmlparser.tags.TitleTag;
import org.htmlparser.util.NodeIterator;
import dlog4j.Globals;
import dlog4j.SiteManager;
import dlog4j.UserManager;
import dlog4j.blog.BlogTrackBack;
import dlog4j.blog.TrackBackResp;
import dlog4j.formbean.BookMarkBean;
import dlog4j.formbean.CategoryForm;
import dlog4j.formbean.DraftForm;
import dlog4j.formbean.LogForm;
import dlog4j.formbean.LoginTrackBean;
import dlog4j.formbean.ReplyForm;
import dlog4j.formbean.SiteForm;
import dlog4j.formbean.UserForm;
import dlog4j.search.SearchProxy;
import dlog4j.security.DlogRole;
import dlog4j.security.SecurityConfig;
import dlog4j.util.RequestUtils;
import dlog4j.util.mail.Mailer;
/**
* DlogAction.java created by EasyStruts - XsltGen.
* http://easystruts.sf.net
* created on 02-06-2004
*
* XDoclet definition:
* @struts:action validate="true"
* @struts:action-forward name="/calendar.jsp" path="/calendar.jsp"
* @struts:action-forward name="/log_comment.jsp" path="/log_comment.jsp"
* @struts:action-forward name="/comment.jsp" path="/comment.jsp"
* @struts:action-forward name="/log_category.jsp" path="/log_category.jsp" redirect="true"
*/
public class DlogLogAction extends DlogActionBase {
public final static String PARAM_DRAFT = "draft_id";
// --------------------------------------------------------- Instance Variables
static String uploadDir = null;
static String MODIFY_APPEND_FORMAT = "MODIFY_APPEND_FORMAT";
// --------------------------------------------------------- Methods
/**
* 删除日记的书签
*/
public ActionForward doDeleteBookMark(
ActionMapping mapping,
ActionForm form,
HttpServletRequest request,
HttpServletResponse response,
String mark_id)
throws Exception {
Session ssn = null;
//判断用户是否已登录
ActionErrors msgs = new ActionErrors();
UserForm user = UserForm.getLoginUser(request);
if(user!=null && user.isLogin())
try{
ssn = getSession();
SiteForm site = SiteManager.getCurrentSite(request);
int markid = Integer.parseInt(mark_id);
BookMarkBean bmb = (BookMarkBean)ssn.load(BookMarkBean.class,new Integer(markid));
if(bmb.getUser().getId()!=user.getId())
msgs.add("bookmark",new ActionError("operation_not_allow"));
else
ssn.delete(bmb);
}catch(HibernateException e) {
}catch(NumberFormatException e) {//如果解析参数错误不理会
}finally{
commitSession(ssn,true);
}
ActionForward forward = new ActionForward(mapping.findForward("bookmark").getPath(), false);
if(!msgs.isEmpty())
this.saveErrors(request,msgs);
else
forward.setRedirect(true);
return forward;
}
/**
* 添加日记的书签
*/
public ActionForward doAddBookMark(
ActionMapping mapping,
ActionForm form,
HttpServletRequest request,
HttpServletResponse response,
String log_id)
throws Exception {
Session ssn = null;
//判断用户是否已登录
ActionErrors msgs = new ActionErrors();
UserForm user = UserForm.getLoginUser(request);
if(user!=null && user.isLogin())
try{
ssn = getSession();
SiteForm site = SiteManager.getCurrentSite(request);
int logid = Integer.parseInt(log_id);
LogForm log = new LogForm();
log.setId(logid);
//判断书签是否已经存在
String hql = "SELECT COUNT(b.id) FROM "+BookMarkBean.class.getName()+" AS b WHERE b.site.id=? AND b.log.id=? AND b.user.id=?";
Query q = ssn.createQuery(hql);
q.setInteger(0,site.getId());
q.setInteger(1,logid);
q.setInteger(2,user.getId());
int uc = 0;
try {
uc = ((Integer)q.list().get(0)).intValue();
}catch(Exception e) {}
if(uc==0) {
BookMarkBean bmb = new BookMarkBean(site,user,log);
bmb.setCreateTime(new Date());
bmb.setType(BookMarkBean.BM_LOG);
ssn.save(bmb);
msgs.add("bookmark",new ActionError("bookmark.addok"));
}
else
msgs.add("bookmark",new ActionError("bookmark.exits"));
}catch(NumberFormatException e) {//如果解析参数错误不理会
}finally{
commitSession(ssn,true);
}
ActionForward forward = new ActionForward(mapping.findForward("showlog").getPath(), false);
if(!msgs.isEmpty())
this.saveErrors(request,msgs);
else
forward.setRedirect(true);
return forward;
}
/**
* 添加评论
* @param ActionMapping mapping
* @param ActionForm form
* @param HttpServletRequest request
* @param HttpServletResponse response
* @return ActionForward
* @throws Exception
*/
public ActionForward doAddReply(
ActionMapping mapping,
ActionForm form,
HttpServletRequest request,
HttpServletResponse response)
throws Exception {
ReplyForm reply = (ReplyForm)form;
Session ssn = null;
//判断用户是否已登录
String loginName = request.getParameter("loginName");
String password = request.getParameter("password");
if(loginName!=null && password!=null){
ActionErrors es = new ActionErrors();
if(StringUtils.isEmpty(loginName))
es.add("updateReply",new ActionError("user_not_login"));
else{
//检查用户名口令是否正确
ssn = getSession();
UserForm user = UserManager.getUser(ssn,SiteManager.getCurrentSite(request),loginName);
//检查用户名是否存在
if(user!=null) {
//检查用户是否被暂停
if(user.getUserRole()==DlogRole.ROLE_GUEST)
es.add("updateReply",new ActionError("user_pause"));
//检查密码
else
if(StringUtils.equals(user.getPassword(),password)){
//保存用户信息至会话
user.setLastTime(new Date());
user.setLoginCount(user.getLoginCount()+1);
ssn.update(user);
UserManager.fillUserWithLogAndReplyCount(ssn, user, false);
//集成web-security的权限控制
DlogRole role = (DlogRole)SecurityConfig.getConfig().getRoleById(user.getUserRole()&31);
if(role==null){
role = SecurityConfig.getConfig().getRoleById(DlogRole.ROLE_COMMON);
user.setUserRole(DlogRole.ROLE_COMMON);
ssn.update(user);
}
user.setRole(role);
//保存用户资料到会话
user.saveLoginUser(request);
//用户登录跟踪
LoginTrackBean ltb = new LoginTrackBean(request);
ssn.save(ltb);
commitSession(ssn,true);
}
else
es.add("updateReply",new ActionError("password_error"));
}
else
es.add("updateReply",new ActionError("loginName_noexits"));
}
if(!es.isEmpty()){
saveErrors(request, es);
return mapping.getInputForward();
}
}
UserForm loginUser = UserForm.getLoginUser(request);
if(loginUser!=null && loginUser.isLogin())
try{
ssn = getSession();
SiteForm site = SiteManager.getCurrentSite(request);
//如果是同一个人同一个内容的就不给添加
String hql = "FROM "+ReplyForm.class.getName()+" AS r WHERE r.site.id=? AND r.author.id=? AND r.log.id=?";
Query q = ssn.createQuery(hql);
q.setInteger(0,site.getId());
q.setInteger(1, loginUser.getId());
q.setInteger(2,reply.getLogId());
List rs = q.list();
boolean bNew = true;
for(int i=0;i<rs.size();i++) {
ReplyForm r = (ReplyForm)rs.get(i);
if(r.getContent().equals(reply.getContent())) {
bNew = false;
break;
}
}
rs.clear();
if(bNew) {
reply.setAuthor(loginUser);
reply.setWriteTime(new Date());
reply.setSite(site);
ssn.save(reply);
int logid = reply.getLogId();
LogForm log = (LogForm)ssn.load(LogForm.class, new Integer(logid));
log.setReplyCount(log.getReplyCount()+1);
ssn.update(log);
//根据设置判断是否发送邮件提醒
if(1==log.getReplyNotify()){
if(StringUtils.isEmpty(log.getOwner().getEmail())){
getServlet().log("***** The email of Author is empty or illegal. *****");
}
else if(!StringUtils.equals(log.getOwner().getLoginName(),reply.getAuthor().getLoginName()))
{
try{
Mailer sender = Mailer.getMailer();
String url = site.getUrl()+"/showlog.jspe?log_id="+log.getId()+"#"+reply.getId();
String curTime = new SimpleDateFormat("yyyy-MM-dd HH:mm").format(new Date());
String replyUser = loginUser.getDisplayName();
if(StringUtils.isNotEmpty(loginUser.getEmail())){
StringBuffer link = new StringBuffer();
link.append("<a href=\"mailto:");
link.append(loginUser.getEmail());
link.append("\">");
link.append(replyUser);
link.append("</a>");
replyUser = link.toString();
}
String[] args = {log.getOwner().getDisplayName(),
log.getTitle(),
replyUser,
url,
curTime,
reply.getContent()};
String template = getContentTemplate();
String content = MessageFormat.format(template, args);
Parser html = Parser.createParser(new String(content.getBytes(),"8859_1"));
Node[] nodes = html.extractAllNodesThatAre(TitleTag.class);
String title = nodes[0].toPlainTextString();
sender.send(site.getDisplayName(),
new String[]{log.getOwner().getEmail()},
title,
content);
}catch(Exception e){
getServlet().log("Send reply notification failed.",e);
}
}
}
}
}finally{
commitSession(ssn,true);
reply.reset(mapping,request);
}
else{
return mapping.findForward("fail_to_reply");
}
StringBuffer forward = new StringBuffer();
forward.append(mapping.getInput());
forward.append("?log_id=");
forward.append(reply.getLogId());
if(reply.getLog().getCategoryId()!=-1){
forward.append("&cat_id=");
forward.append(reply.getLog().getCategoryId());
}
forward.append('#');
forward.append(reply.getId());
return new ActionForward(forward.toString(), true);
}
/**
* 修改评论
* @param ActionMapping mapping
* @param ActionForm form
* @param HttpServletRequest request
* @param HttpServletResponse response
* @return ActionForward
* @throws Exception
*/
public ActionForward doDeleteReply(
ActionMapping mapping,
ActionForm form,
HttpServletRequest request,
HttpServletResponse response,
String reply_id)
throws Exception {
int rid = -1;
try {
rid = Integer.parseInt(reply_id);
}catch(Exception e) {}
int logid = -1;
if(rid!=-1) {
Session ssn = null;
//判断用户是否已登录
UserForm user = UserForm.getLoginUser(request);
if(user!=null && user.isLogin())
try{
ssn = getSession();
ReplyForm old = (ReplyForm)ssn.load(ReplyForm.class,new Integer(rid));
logid = old.getLogId();
if(!user.isAdmin() && old.getAuthorId()!=user.getId()) {
ActionErrors errors = new ActionErrors();
errors.add("updateReply",new ActionError("operation_not_allow"));
if(!errors.isEmpty())
saveErrors(request,errors);
}
else {
ssn.delete(old);
LogForm log = (LogForm)ssn.load(LogForm.class, new Integer(logid));
log.setReplyCount(log.getReplyCount()-1);
ssn.update(log);
SearchProxy proxy = SearchProxy.getReplyQuery();
proxy.deleteIndex(new int[] {old.getId()});
}
}catch(HibernateException e) {
}finally{
commitSession(ssn,true);
}
}
StringBuffer url = new StringBuffer(100);
url.append(mapping.getInput());
url.append('?');
if(logid>0) {
url.append("&log_id=");
url.append(logid);
}
String user_id = request.getParameter(Globals.PARAM_USER);
if(user_id!=null) {
url.append("&userid=");
url.append(user_id);
}
String page = request.getParameter("page");
if(page!=null) {
url.append("&page=");
url.append(page);
}
return new ActionForward(url.toString(), true);
}
/**
* 修改评论
* @param ActionMapping mapping
* @param ActionForm form
* @param HttpServletRequest request
* @param HttpServletResponse response
* @return ActionForward
* @throws Exception
*/
public ActionForward doUpdateReply(
ActionMapping mapping,
ActionForm form,
HttpServletRequest request,
HttpServletResponse response)
throws Exception {
ReplyForm reply = (ReplyForm)form;
Session ssn = null;
//判断用户是否已登录
UserForm user = UserForm.getLoginUser(request);
if(user!=null && user.isLogin())
try{
ssn = getSession();
ReplyForm old = (ReplyForm)ssn.load(ReplyForm.class,new Integer(reply.getId()));
if(!user.isAdmin() && old.getAuthorId()!=user.getId()) {
ActionErrors errors = new ActionErrors();
errors.add("updateReply",new ActionError("operation_not_allow"));
if(!errors.isEmpty())
saveErrors(request,errors);
}
else {
boolean needModifier = true;
if(old.getAuthor().getId()==user.getId()){
long ct = System.currentTimeMillis();
long interval = (ct - old.getWriteTime().getTime())/3600000;
if(interval < 2)
needModifier = false;
}
if(needModifier){
String append_text = getModifyAppendMessage(request,
reply.getShowFormerly()!=1,
user.getLoginName(),
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -