KickJava   Java API By Example, From Geeks To Geeks.

Java > Open Source Codes > dlog4j > action > DlogLogAction


1 /*
2  * This program is free software; you can redistribute it and/or modify
3  * it under the terms of the GNU General Public License as published by
4  * the Free Software Foundation; either version 2 of the License, or
5  * (at your option) any later version.
6  *
7  * This program is distributed in the hope that it will be useful,
8  * but WITHOUT ANY WARRANTY; without even the implied warranty of
9  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
10  * GNU Library General Public License for more details.
11  *
12  * You should have received a copy of the GNU General Public License
13  * along with this program; if not, write to the Free Software
14  * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
15  */

16 package dlog4j.action;
17
18 import java.io.BufferedReader JavaDoc;
19 import java.io.File JavaDoc;
20 import java.io.IOException JavaDoc;
21 import java.io.InputStream JavaDoc;
22 import java.io.InputStreamReader JavaDoc;
23 import java.text.MessageFormat JavaDoc;
24 import java.text.SimpleDateFormat JavaDoc;
25 import java.util.Date JavaDoc;
26 import java.util.List JavaDoc;
27
28 import javax.servlet.ServletContext JavaDoc;
29 import javax.servlet.http.HttpServletRequest JavaDoc;
30 import javax.servlet.http.HttpServletResponse JavaDoc;
31
32 import net.sf.hibernate.HibernateException;
33 import net.sf.hibernate.Query;
34 import net.sf.hibernate.Session;
35
36 import org.apache.commons.lang.StringUtils;
37 import org.apache.struts.action.Action;
38 import org.apache.struts.action.ActionError;
39 import org.apache.struts.action.ActionErrors;
40 import org.apache.struts.action.ActionForm;
41 import org.apache.struts.action.ActionForward;
42 import org.apache.struts.action.ActionMapping;
43 import org.htmlparser.Node;
44 import org.htmlparser.Parser;
45 import org.htmlparser.tags.TitleTag;
46 import org.htmlparser.util.NodeIterator;
47
48 import dlog4j.Globals;
49 import dlog4j.SiteManager;
50 import dlog4j.UserManager;
51 import dlog4j.blog.BlogTrackBack;
52 import dlog4j.blog.TrackBackResp;
53 import dlog4j.formbean.BookMarkBean;
54 import dlog4j.formbean.CategoryForm;
55 import dlog4j.formbean.DraftForm;
56 import dlog4j.formbean.LogForm;
57 import dlog4j.formbean.LoginTrackBean;
58 import dlog4j.formbean.ReplyForm;
59 import dlog4j.formbean.SiteForm;
60 import dlog4j.formbean.UserForm;
61 import dlog4j.search.SearchProxy;
62 import dlog4j.security.DlogRole;
63 import dlog4j.security.SecurityConfig;
64 import dlog4j.util.RequestUtils;
65 import dlog4j.util.mail.Mailer;
66
67
68 /**
69  * DlogAction.java created by EasyStruts - XsltGen.
70  * http://easystruts.sf.net
71  * created on 02-06-2004
72  *
73  * XDoclet definition:
74  * @struts:action validate="true"
75  * @struts:action-forward name="/calendar.jsp" path="/calendar.jsp"
76  * @struts:action-forward name="/log_comment.jsp" path="/log_comment.jsp"
77  * @struts:action-forward name="/comment.jsp" path="/comment.jsp"
78  * @struts:action-forward name="/log_category.jsp" path="/log_category.jsp" redirect="true"
79  */

80 public class DlogLogAction extends DlogActionBase {
81
82     public final static String JavaDoc PARAM_DRAFT = "draft_id";
83     // --------------------------------------------------------- Instance Variables
84
static String JavaDoc uploadDir = null;
85     static String JavaDoc MODIFY_APPEND_FORMAT = "MODIFY_APPEND_FORMAT";
86     // --------------------------------------------------------- Methods
87

88     /**
89      * 删除日记的书签
90      */

91     public ActionForward doDeleteBookMark(
92         ActionMapping mapping,
93         ActionForm form,
94         HttpServletRequest JavaDoc request,
95         HttpServletResponse JavaDoc response,
96         String JavaDoc mark_id)
97         throws Exception JavaDoc {
98         Session ssn = null;
99         //判断用户是否已登录
100
ActionErrors msgs = new ActionErrors();
101         UserForm user = UserForm.getLoginUser(request);
102         if(user!=null && user.isLogin())
103         try{
104             ssn = getSession();
105             SiteForm site = SiteManager.getCurrentSite(request);
106             int markid = Integer.parseInt(mark_id);
107             BookMarkBean bmb = (BookMarkBean)ssn.load(BookMarkBean.class,new Integer JavaDoc(markid));
108             if(bmb.getUser().getId()!=user.getId())
109                 msgs.add("bookmark",new ActionError("operation_not_allow"));
110             else
111                 ssn.delete(bmb);
112         }catch(HibernateException e) {
113         }catch(NumberFormatException JavaDoc e) {//如果解析参数错误不理会
114
}finally{
115             commitSession(ssn,true);
116         }
117         ActionForward forward = new ActionForward(mapping.findForward("bookmark").getPath(), false);
118         if(!msgs.isEmpty())
119             this.saveErrors(request,msgs);
120         else
121             forward.setRedirect(true);
122         
123         return forward;
124     }
125     /**
126      * 添加日记的书签
127      */

128     public ActionForward doAddBookMark(
129         ActionMapping mapping,
130         ActionForm form,
131         HttpServletRequest JavaDoc request,
132         HttpServletResponse JavaDoc response,
133         String JavaDoc log_id)
134         throws Exception JavaDoc {
135         Session ssn = null;
136         //判断用户是否已登录
137
ActionErrors msgs = new ActionErrors();
138         UserForm user = UserForm.getLoginUser(request);
139         if(user!=null && user.isLogin())
140         try{
141             ssn = getSession();
142             SiteForm site = SiteManager.getCurrentSite(request);
143             int logid = Integer.parseInt(log_id);
144             LogForm log = new LogForm();
145             log.setId(logid);
146             //判断书签是否已经存在
147
String JavaDoc hql = "SELECT COUNT(b.id) FROM "+BookMarkBean.class.getName()+" AS b WHERE b.site.id=? AND b.log.id=? AND b.user.id=?";
148             Query q = ssn.createQuery(hql);
149             q.setInteger(0,site.getId());
150             q.setInteger(1,logid);
151             q.setInteger(2,user.getId());
152             int uc = 0;
153             try {
154                 uc = ((Integer JavaDoc)q.list().get(0)).intValue();
155             }catch(Exception JavaDoc e) {}
156             if(uc==0) {
157                 BookMarkBean bmb = new BookMarkBean(site,user,log);
158                 bmb.setCreateTime(new Date JavaDoc());
159                 bmb.setType(BookMarkBean.BM_LOG);
160                 ssn.save(bmb);
161                 msgs.add("bookmark",new ActionError("bookmark.addok"));
162             }
163             else
164                 msgs.add("bookmark",new ActionError("bookmark.exits"));
165         }catch(NumberFormatException JavaDoc e) {//如果解析参数错误不理会
166
}finally{
167             commitSession(ssn,true);
168         }
169
170         ActionForward forward = new ActionForward(mapping.findForward("showlog").getPath(), false);
171         if(!msgs.isEmpty())
172             this.saveErrors(request,msgs);
173         else
174             forward.setRedirect(true);
175         
176         return forward;
177     }
178     /**
179      * 添加评论
180      * @param ActionMapping mapping
181      * @param ActionForm form
182      * @param HttpServletRequest request
183      * @param HttpServletResponse response
184      * @return ActionForward
185      * @throws Exception
186      */

187     public ActionForward doAddReply(
188         ActionMapping mapping,
189         ActionForm form,
190         HttpServletRequest JavaDoc request,
191         HttpServletResponse JavaDoc response)
192         throws Exception JavaDoc {
193         ReplyForm reply = (ReplyForm)form;
194         Session ssn = null;
195         //判断用户是否已登录
196
String JavaDoc loginName = request.getParameter("loginName");
197         String JavaDoc password = request.getParameter("password");
198         if(loginName!=null && password!=null){
199             ActionErrors es = new ActionErrors();
200             if(StringUtils.isEmpty(loginName))
201                 es.add("updateReply",new ActionError("user_not_login"));
202             else{
203                 //检查用户名口令是否正确
204
ssn = getSession();
205                 UserForm user = UserManager.getUser(ssn,SiteManager.getCurrentSite(request),loginName);
206                 //检查用户名是否存在
207
if(user!=null) {
208                     //检查用户是否被暂停
209
if(user.getUserRole()==DlogRole.ROLE_GUEST)
210                         es.add("updateReply",new ActionError("user_pause"));
211                     //检查密码
212
else
213                     if(StringUtils.equals(user.getPassword(),password)){
214                         //保存用户信息至会话
215
user.setLastTime(new Date JavaDoc());
216                         user.setLoginCount(user.getLoginCount()+1);
217                         ssn.update(user);
218                         UserManager.fillUserWithLogAndReplyCount(ssn, user, false);
219                         //集成web-security的权限控制
220
DlogRole role = (DlogRole)SecurityConfig.getConfig().getRoleById(user.getUserRole()&31);
221                         if(role==null){
222                             role = SecurityConfig.getConfig().getRoleById(DlogRole.ROLE_COMMON);
223                             user.setUserRole(DlogRole.ROLE_COMMON);
224                             ssn.update(user);
225                         }
226                         user.setRole(role);
227                         //保存用户资料到会话
228
user.saveLoginUser(request);
229                         //用户登录跟踪
230
LoginTrackBean ltb = new LoginTrackBean(request);
231                         ssn.save(ltb);
232                         commitSession(ssn,true);
233                     }
234                     else
235                         es.add("updateReply",new ActionError("password_error"));
236                 }
237                 else
238                     es.add("updateReply",new ActionError("loginName_noexits"));
239             }
240             
241             if(!es.isEmpty()){
242                 saveErrors(request, es);
243                 return mapping.getInputForward();
244             }
245         }
246         UserForm loginUser = UserForm.getLoginUser(request);
247         if(loginUser!=null && loginUser.isLogin())
248         try{
249             ssn = getSession();
250             SiteForm site = SiteManager.getCurrentSite(request);
251             //如果是同一个人同一个内容的就不给添加
252
String JavaDoc hql = "FROM "+ReplyForm.class.getName()+" AS r WHERE r.site.id=? AND r.author.id=? AND r.log.id=?";
253             Query q = ssn.createQuery(hql);
254             q.setInteger(0,site.getId());
255             q.setInteger(1, loginUser.getId());
256             q.setInteger(2,reply.getLogId());
257             List JavaDoc rs = q.list();
258             boolean bNew = true;
259             for(int i=0;i<rs.size();i++) {
260                 ReplyForm r = (ReplyForm)rs.get(i);
261                 if(r.getContent().equals(reply.getContent())) {
262                     bNew = false;
263                     break;
264                 }
265             }
266             rs.clear();
267             if(bNew) {
268                 reply.setAuthor(loginUser);
269                 reply.setWriteTime(new Date JavaDoc());
270                 reply.setSite(site);
271                 ssn.save(reply);
272                 int logid = reply.getLogId();
273                 LogForm log = (LogForm)ssn.load(LogForm.class, new Integer JavaDoc(logid));
274                 log.setReplyCount(log.getReplyCount()+1);
275                 ssn.update(log);
276                 //根据设置判断是否发送邮件提醒
277
if(1==log.getReplyNotify()){
278                     if(StringUtils.isEmpty(log.getOwner().getEmail())){
279                         getServlet().log("***** The email of Author is empty or illegal. *****");
280                     }
281                     else if(!StringUtils.equals(log.getOwner().getLoginName(),reply.getAuthor().getLoginName()))
282                     {
283                         try{
284                             Mailer sender = Mailer.getMailer();
285                             String JavaDoc url = site.getUrl()+"/showlog.jspe?log_id="+log.getId()+"#"+reply.getId();
286                             String JavaDoc curTime = new SimpleDateFormat JavaDoc("yyyy-MM-dd HH:mm").format(new Date JavaDoc());
287                             String JavaDoc replyUser = loginUser.getDisplayName();
288                             if(StringUtils.isNotEmpty(loginUser.getEmail())){
289                                 StringBuffer JavaDoc link = new StringBuffer JavaDoc();
290                                 link.append("<a HREF=\"mailto:");
291                                 link.append(loginUser.getEmail());
292                                 link.append("\">");
293                                 link.append(replyUser);
294                                 link.append("</a>");
295                                 replyUser = link.toString();
296                             }
297                             String JavaDoc[] args = {log.getOwner().getDisplayName(),
298                                              log.getTitle(),
299                                              replyUser,
300                                              url,
301                                              curTime,
302                                              reply.getContent()};
303                             String JavaDoc template = getContentTemplate();
304                             String JavaDoc content = MessageFormat.format(template, args);
305                             Parser html = Parser.createParser(new String JavaDoc(content.getBytes(),"8859_1"));
306                             Node[] nodes = html.extractAllNodesThatAre(TitleTag.class);
307                             String JavaDoc title = nodes[0].toPlainTextString();
308                             sender.send(site.getDisplayName(),
309                                         new String JavaDoc[]{log.getOwner().getEmail()},
310                                         title,
311                                         content);
312                         }catch(Exception JavaDoc e){
313                             getServlet().log("Send reply notification failed.",e);
314                         }
315                     }
316                 }
317             }
318         }finally{
319             commitSession(ssn,true);
320             reply.reset(mapping,request);
321         }
322         else{
323             return mapping.findForward("fail_to_reply");
324         }
325         StringBuffer JavaDoc forward = new StringBuffer JavaDoc();
326         forward.append(mapping.getInput());
327         forward.append("?log_id=");
328         forward.append(reply.getLogId());
329         if(reply.getLog().getCategoryId()!=-1){
330             forward.append("&cat_id=");
331             forward.append(reply.getLog().getCategoryId());
332         }
333         forward.append('#');
334         forward.append(reply.getId());
335         return new ActionForward(forward.toString(), true);
336     }
337     /**
338      * 修改评论
339      * @param ActionMapping mapping
340      * @param ActionForm form
341      * @param HttpServletRequest request
342      * @param HttpServletResponse response
343      * @return ActionForward
344      * @throws Exception
345      */

346     public ActionForward doDeleteReply(
347         ActionMapping mapping,
348         ActionForm form,
349         HttpServletRequest JavaDoc request,
350         HttpServletResponse JavaDoc response,
351         String JavaDoc reply_id)
352         throws Exception JavaDoc {
353         int rid = -1;
354         try {
355             rid = Integer.parseInt(reply_id);
356         }catch(Exception JavaDoc e) {}
357         int logid = -1;
358         if(rid!=-1) {
359             Session ssn = null;
360             //判断用户是否已登录
361
UserForm user = UserForm.getLoginUser(request);
362             if(user!=null && user.isLogin())
363             try{
364                 ssn = getSession();
365                 ReplyForm old = (ReplyForm)ssn.load(ReplyForm.class,new Integer JavaDoc(rid));
366                 logid = old.getLogId();
367                 if(!user.isAdmin() && old.getAuthorId()!=user.getId()) {
368                     ActionErrors errors = new ActionErrors();
369                     errors.add("updateReply",new ActionError("operation_not_allow"));
370                     if(!errors.isEmpty())
371                         saveErrors(request,errors);
372                 }
373                 else {
374                     ssn.delete(old);
375                     LogForm log = (LogForm)ssn.load(LogForm.class, new Integer JavaDoc(logid));
376                     log.setReplyCount(log.getReplyCount()-1);
377                     ssn.update(log);
378                     SearchProxy proxy = SearchProxy.getReplyQuery();
379                     proxy.deleteIndex(new int[] {old.getId()});
380                 }
381             }catch(HibernateException e) {
382             }finally{
383                 commitSession(ssn,true);
384             }
385         }
386         StringBuffer JavaDoc url = new StringBuffer JavaDoc(100);
387         url.append(mapping.getInput());
388         url.append('?');
389         if(logid>0) {
390             url.append("&log_id=");
391             url.append(logid);
392         }
393         String JavaDoc user_id = request.getParameter(Globals.PARAM_USER);
394         if(user_id!=null) {
395             url.append("&userid=");
396             url.append(user_id);
397         }
398         String JavaDoc page = request.getParameter("page");
399         if(page!=null) {
400             url.append("&page=");
401             url.append(page);
402         }
403         return new ActionForward(url.toString(), true);
404     }
405     /**
406      * 修改评论
407      * @param ActionMapping mapping
408      * @param ActionForm form
409      * @param HttpServletRequest request
410      * @param HttpServletResponse response
411      * @return ActionForward
412      * @throws Exception
413      */

414     public ActionForward doUpdateReply(
415         ActionMapping mapping,
416         ActionForm form,
417         HttpServletRequest JavaDoc request,
418         HttpServletResponse JavaDoc response)
419         throws Exception JavaDoc {
420         ReplyForm reply = (ReplyForm)form;
421         Session ssn = null;
422         //判断用户是否已登录
423
UserForm user = UserForm.getLoginUser(request);
424         if(user!=null && user.isLogin())
425         try{
426             ssn = getSession();
427             ReplyForm old = (ReplyForm)ssn.load(ReplyForm.class,new Integer JavaDoc(reply.getId()));
428             if(!user.isAdmin() && old.getAuthorId()!=user.getId()) {
429                 ActionErrors errors = new ActionErrors();
430                 errors.add("updateReply",new ActionError("operation_not_allow"));
431                 if(!errors.isEmpty())
432                     saveErrors(request,errors);
433             }
434             else {
435                 boolean needModifier = true;
436                 if(old.getAuthor().getId()==user.getId()){
437                     long ct = System.currentTimeMillis();
438                     long interval = (ct - old.getWriteTime().getTime())/3600000;
439                     if(interval < 2)
440                         needModifier = false;
441                 }
442                 if(needModifier){
443                     String JavaDoc append_text = getModifyAppendMessage(request,
444                             reply.getShowFormerly()!=1,
445                             user.getLoginName(),
446                             user.getDisplayName());
447                     old.setContent(reply.getContent() + append_text);
448                 }
449                 else
450                     old.setContent(reply.getContent());
451                 old.setShowFormerly(reply.getShowFormerly());
452                 ssn.update(old);
453                 SearchProxy proxy = SearchProxy.getReplyQuery();
454                 proxy.updateIndex(old);
455             }
456         }catch(HibernateException e) {
457         }finally{
458             commitSession(ssn,true);
459         }
460         else
461             return mapping.findForward("fail_to_reply");
462         StringBuffer JavaDoc forward = new StringBuffer JavaDoc();
463         forward.append(mapping.getInput());
464         forward.append("?log_id=");
465         forward.append(reply.getLogId());
466         forward.append("&cat_id=");
467         forward.append(reply.getLog().getCategoryId());
468         forward.append('#');
469         forward.append(reply.getId());
470         return new ActionForward(forward.toString(), true);
471     }
472     /**
473      * 根据编辑模式决定如何处理修改戳
474      * @param req
475      * @param html
476      * @param userName
477      * @return
478      */

479     protected String JavaDoc getModifyAppendMessage(HttpServletRequest JavaDoc req, boolean html, String JavaDoc loginName,String JavaDoc userName) {
480         Object JavaDoc[] args = new String JavaDoc[] {Globals.FORMAT_DT.format(new Date JavaDoc()),loginName,userName};
481         String JavaDoc append_text = getResources(req).getMessage(req.getLocale(),MODIFY_APPEND_FORMAT,args);
482         if(!html) {
483             try {
484                 Parser p = Parser.createParser(new String JavaDoc(append_text.getBytes(),"8859_1"));
485                 NodeIterator nodes = p.elements();
486                 while(nodes.hasMoreNodes()) {
487                     Node node = nodes.nextNode();
488                     append_text = node.toPlainTextString().trim();
489                     append_text = "\r\n\r\n"+new String JavaDoc(StringUtils.replace(append_text,"&nbsp;"," ").getBytes("8859_1"));
490                     break;
491                 }
492             }catch(Exception JavaDoc e) {}
493         }
494         return append_text;
495     }
496     
497     /**
498      * 日志删除
499      * @param ActionMapping mapping
500      * @param ActionForm form
501      * @param HttpServletRequest request
502      * @param HttpServletResponse response
503      * @return ActionForward
504      * @throws Exception
505      */

506     public ActionForward doDeleteLog(
507         ActionMapping mapping,
508         ActionForm form,
509         HttpServletRequest JavaDoc request,
510         HttpServletResponse JavaDoc response)
511         throws Exception JavaDoc {
512
513         String JavaDoc forward = "home";
514         LogForm log = (LogForm) form;
515         //判断用户是否已登录
516
UserForm user = UserForm.getLoginUser(request);
517         if (user != null && user.isLogin()) {
518             Session ssn = getSession();
519             LogForm old = (LogForm) ssn.load(LogForm.class, new Integer JavaDoc(log.getId()));
520             if(old!=null)
521             try {
522                 old.setStatus(LogForm.STATUS_DELETED);
523                 old.setDeleteTime(new Date JavaDoc());
524                 ssn.update(old);
525                 SearchProxy proxy = SearchProxy.getLogQuery();
526                 proxy.deleteIndex(new int[] {old.getId()});
527             } finally {
528                 commitSession(ssn, true);
529             }
530         }
531         return new ActionForward(mapping.findForward(forward).getPath()+"?cat_id="+log.getCategoryId(), true);
532     }
533     /**
534      * 删除草稿
535      * @param ActionMapping mapping
536      * @param ActionForm form
537      * @param HttpServletRequest request
538      * @param HttpServletResponse response
539      * @return ActionForward
540      * @throws Exception
541      */

542     public ActionForward doDeleteDraft(
543         ActionMapping mapping,
544         ActionForm form,
545         HttpServletRequest JavaDoc request,
546         HttpServletResponse JavaDoc response)
547         throws Exception JavaDoc {
548
549         String JavaDoc forward = "draft";
550         LogForm log = (LogForm) form;
551         //判断用户是否已登录
552
UserForm user = UserForm.getLoginUser(request);
553         
554         if (user != null && user.isLogin() && (user.isAdmin() || user.isFriend())) {
555             Session ssn = null;
556             try {
557                 ssn = getSession();
558                 int draft_id = Integer.parseInt(request.getParameter(PARAM_DRAFT));
559                 DraftForm draft = (DraftForm)ssn.load(DraftForm.class,new Integer JavaDoc(draft_id));
560                 ssn.delete(draft);
561             } finally {
562                 commitSession(ssn, true);
563             }
564         } else
565             forward = "home";
566         return mapping.findForward(forward);
567     }
568     /**
569      * 更新草稿
570      * @param ActionMapping mapping
571      * @param ActionForm form
572      * @param HttpServletRequest request
573      * @param HttpServletResponse response
574      * @return ActionForward
575      * @throws Exception
576      */

577     public ActionForward doUpdateDraft(
578         ActionMapping mapping,
579         ActionForm form,
580         HttpServletRequest JavaDoc request,
581         HttpServletResponse JavaDoc response)
582         throws Exception JavaDoc {
583
584         String JavaDoc forward = "draft";
585         LogForm log = (LogForm) form;
586         //判断用户是否已登录
587
UserForm user = UserForm.getLoginUser(request);
588         if(user==null||!user.isLogin())
589             forward = "home";
590         else
591         if (user.isAdmin() || user.isFriend()) {
592             Session ssn = null;
593             try {
594                 ssn = getSession();
595                 int draft_id = Integer.parseInt(request.getParameter(PARAM_DRAFT));
596                 DraftForm draft = (DraftForm)ssn.load(DraftForm.class,new Integer JavaDoc(draft_id));
597                 if(!user.isAdmin() && draft.getOwner().getId()!=user.getId()) {
598                     ActionErrors errors = new ActionErrors();
599                     errors.add("updateDraft",new ActionError("operation_not_allow"));
600                     if(!errors.isEmpty())
601                         saveErrors(request,errors);
602                 }
603                 else {
604                     draft.setAuthor(log.getAuthor());
605                     draft.setAuthorUrl(log.getAuthorUrl());
606                     draft.setContent(log.getContent());
607                     draft.setLogTime(new Date JavaDoc());
608                     draft.setMoodLevel(log.getMoodLevel());
609                     draft.setOwner(user);
610                     draft.setRefUrl(log.getRefUrl());
611                     draft.setShowFormerly(log.getShowFormerly());
612                     draft.setSite(SiteManager.getCurrentSite(request));
613                     draft.setTitle(log.getTitle());
614                     draft.setUseFace(log.getUseFace());
615                     draft.setUseUbb(log.getUseUbb());
616                     draft.setWeather(log.getWeather());
617                     ssn.update(draft);
618                 }
619             } finally {
620                 commitSession(ssn, true);
621             }
622         } else
623             forward = "home";
624         return mapping.findForward(forward);
625     }
626     /**
627      * 日志保存为草稿
628      * @param ActionMapping mapping
629      * @param ActionForm form
630      * @param HttpServletRequest request
631      * @param HttpServletResponse response
632      * @return ActionForward
633      * @throws Exception
634      */

635     public ActionForward doSaveDraft(
636         ActionMapping mapping,
637         ActionForm form,
638         HttpServletRequest JavaDoc request,
639         HttpServletResponse JavaDoc response)
640         throws Exception JavaDoc {
641
642         String JavaDoc forward = "draft";
643         LogForm log = (LogForm) form;
644         //判断用户是否已登录
645
UserForm user = UserForm.getLoginUser(request);
646         
647         if (user != null && user.isLogin() && (user.isAdmin() || user.isFriend())) {
648             Session ssn = null;
649             DraftForm draft = new DraftForm();
650             draft.setAuthor(log.getAuthor());
651             draft.setAuthorUrl(log.getAuthorUrl());
652             draft.setContent(log.getContent());
653             draft.setLogTime(new Date JavaDoc());
654             draft.setMoodLevel(log.getMoodLevel());
655             draft.setOwner(user);
656             draft.setRefUrl(log.getRefUrl());
657             draft.setShowFormerly(log.getShowFormerly());
658             draft.setSite(SiteManager.getCurrentSite(request));
659             draft.setTitle(log.getTitle());
660             draft.setUseFace(log.getUseFace());
661             draft.setUseUbb(log.getUseUbb());
662             draft.setWeather(log.getWeather());
663             try {
664                 ssn = getSession();
665                 ssn.save(draft);
666             } finally {
667                 commitSession(ssn, true);
668             }
669         } else{
670             forward = "fail_to_save";
671         }
672         return mapping.findForward(forward);
673     }
674     /**
675      * 日志修改
676      * @param ActionMapping mapping
677      * @param ActionForm form
678      * @param HttpServletRequest request
679      * @param HttpServletResponse response
680      * @return ActionForward
681      * @throws Exception
682      */

683     public ActionForward doEditLog(
684         ActionMapping mapping,
685         ActionForm form,
686         HttpServletRequest JavaDoc request,
687         HttpServletResponse JavaDoc response)
688         throws Exception JavaDoc {
689
690         String JavaDoc forward = "showlog";
691         LogForm log = (LogForm) form;
692         //判断用户是否已登录
693
UserForm user = UserForm.getLoginUser(request);
694         
695         if (user != null && user.isLogin()) {
696             Session ssn = getSession();
697             LogForm old = (LogForm) ssn.load(LogForm.class, new Integer JavaDoc(log.getId()));
698             old.setTitle(log.getTitle());
699             boolean needModifier = true;
700             if(old.getOwner().getId()==user.getId()){
701                 long ct = System.currentTimeMillis();
702                 long interval = (ct - old.getLogTime().getTime())/3600000;
703                 if(interval < 6)
704                     needModifier = false;
705             }
706             if(needModifier){
707                 String JavaDoc append_text = getModifyAppendMessage(request,log.getShowFormerly()!=1,
708                         user.getLoginName(),user.getDisplayName());
709                 old.setContent(log.getContent()+append_text);
710             }
711             else
712                 old.setContent(log.getContent());
713             old.setAuthor(log.getAuthor());
714             old.setAuthorUrl(log.getAuthorUrl());
715             old.setMoodLevel(log.getMoodLevel());
716             old.setRefUrl(log.getRefUrl());
717             old.setWeather(log.getWeather());
718             old.setUseUbb(log.getUseUbb());
719             old.setUseFace(log.getUseFace());
720             old.setShowFormerly(log.getShowFormerly());
721             old.setSearchKey(log.getSearchKey());
722             old.setReplyNotify(log.getReplyNotify());
723             if (log.getCategoryId() != old.getCategoryId()) {
724                 CategoryForm cat =
725                     (CategoryForm) ssn.load(
726                         CategoryForm.class,
727                         new Integer JavaDoc(log.getCategoryId()));
728                 old.setCategory(cat);
729             }
730
731             try {
732                 ssn.update(old);
733                 SearchProxy proxy = SearchProxy.getLogQuery();
734                 proxy.updateIndex(old);
735             } finally {
736                 commitSession(ssn, true);
737             }
738         } else{
739             return mapping.findForward("fail_to_save");
740         }
741         return new ActionForward(mapping.findForward(forward).getPath()+"?log_id=" + log.getId(),true);
742     }
743     /**
744      * 日志添加
745      * @param ActionMapping mapping
746      * @param ActionForm form
747      * @param HttpServletRequest request
748      * @param HttpServletResponse response
749      * @return ActionForward
750      * @throws Exception
751      */

752     public ActionForward doAddLog(
753         ActionMapping mapping,
754         ActionForm form,
755         HttpServletRequest JavaDoc request,
756         HttpServletResponse JavaDoc response)
757         throws Exception JavaDoc {
758
759         String JavaDoc forward = "home";
760         LogForm log = (LogForm) form;
761         //判断用户是否已登录
762
UserForm user = UserForm.getLoginUser(request);
763
764         if (user!=null && user.isLogin()) {
765             log.setOwner(user);
766             if (log.getLogTime() == null)
767                 log.setLogTime(new Date JavaDoc());
768             Session ssn = getSession();
769             try {
770                 SiteForm site = SiteManager.getCurrentSite(request);
771                 log.setSite(site);
772                 ssn.save(log);
773                 int draftId = -1;
774                 try {
775                     draftId = Integer.parseInt(request.getParameter(PARAM_DRAFT));
776                 }catch(Exception JavaDoc e) {}
777                 if(draftId!=-1) {
778                     DraftForm draft = (DraftForm)ssn.load(DraftForm.class,new Integer JavaDoc(draftId));
779                     if(draft!=null)
780                         ssn.delete(draft);
781                 }
782                 //判断是否添加书签
783
if("1".equals(request.getParameter("bookmark"))) {
784                     BookMarkBean bmb = new BookMarkBean(log.getSite(),user,log);
785                     bmb.setCreateTime(new Date JavaDoc());
786                     bmb.setType(BookMarkBean.BM_LOG);
787                     ssn.save(bmb);
788                 }
789                 if(StringUtils.isNotEmpty(log.getRefUrl())){
790                     //启动TrackBack线程
791
final LogForm logForm = log;
792                     final SiteForm siteForm = site;
793                     final String JavaDoc log_url = RequestUtils.getBaseURL(request);
794                     final Action action = this;
795                     new Thread JavaDoc(){
796                         public void run(){
797                             try{
798                                 TrackBackResp resp = BlogTrackBack.track(logForm.getRefUrl(),
799                                     log_url+"/showlog.jspe?log_id="+logForm.getId(),
800                                     siteForm.getDisplayName(),
801                                     logForm.getTitle(),
802                                     "");
803                             }catch(Exception JavaDoc e){
804                                 action.getServlet().log("TrackBack Failed. url="+logForm.getRefUrl(),e);
805                             }
806                         }
807                     }.start();
808                 }
809             } finally {
810                 commitSession(ssn, true);
811             }
812         }
813         else{
814             //用户在操作时会话已经超时,显示刚才添加的信息给用户避免丢失。
815
return mapping.findForward("fail_to_save");
816         }
817         return new ActionForward(mapping.findForward(forward).getPath()+"?cat_id="+log.getCategoryId(),true);
818     }
819
820     /**
821      * 得到一个唯一的文件名
822      * @param extName
823      * @return
824      */

825     protected String JavaDoc getUniqueFileName(String JavaDoc extName) {
826         final SimpleDateFormat JavaDoc sdf =
827             new SimpleDateFormat JavaDoc("yyyyMMddHHmmssSSSS.");
828         String JavaDoc fn = null;
829         do {
830             fn = sdf.format(new Date JavaDoc()) + extName;
831             if (new File JavaDoc(uploadDir + fn).exists())
832                 continue;
833             break;
834         } while (true);
835         return fn;
836     }
837     /**
838      * 获取文件的扩展名
839      * @param file
840      * @return
841      */

842     protected static String JavaDoc getFileExtendName(String JavaDoc file) {
843         int idx = file.lastIndexOf('.');
844         return (idx == -1 || idx == (file.length() - 1))
845             ? ""
846             : file.substring(idx + 1).toLowerCase();
847     }
848     /**
849      * 获取上传文件保存的目录全路径
850      * @return
851      */

852     protected String JavaDoc getUploadDir() {
853         String JavaDoc path = servlet.getServletContext().getInitParameter("uploadDir");
854         if (path == null)
855             path = "uploads";
856         String JavaDoc webpath = servlet.getServletContext().getRealPath(path);
857         if (webpath.endsWith(File.separator))
858             webpath += File.separator;
859         return webpath;
860     }
861     public static void main(String JavaDoc[] args) {
862         //System.out.println("EXTEND:"+getUniqueFileName("jpg"));
863
}
864     /**
865      * 获得忘记密码提示内容的模板
866      * @return
867      * @throws IOException
868      */

869     protected String JavaDoc getContentTemplate() throws IOException JavaDoc{
870         ServletContext JavaDoc sc = getServlet().getServletContext();
871         InputStream JavaDoc in = sc.getResourceAsStream("/WEB-INF/template/reply_tip.html");
872         StringBuffer JavaDoc template = new StringBuffer JavaDoc(512);
873         BufferedReader JavaDoc reader = null;
874         try{
875             reader = new BufferedReader JavaDoc(new InputStreamReader JavaDoc(in));
876             do{
877                 String JavaDoc line = reader.readLine();
878                 if(line==null)
879                     break;
880                 template.append(line);
881                 template.append("\r\n");
882             }while(true);
883         }finally{
884             in.close();
885         }
886         return template.toString();
887     }
888 }
889
Popular Tags