public ActionForward process(ActionMapping mapping, ActionForm form,
HttpServletRequest request, HttpServletResponse response)
throws SystemException {
HttpSession session = request.getSession();
MessageResources messages = getResources(request);
MessageForm messageForm = (MessageForm) form;
User user = (User) session.getAttribute(IConst.SESSION.USER_KEY);
ForumDAO dao = ForumDAO.getInstance();
UserDAO userdao = UserDAO.getInstance();
ActionErrors errors = new ActionErrors();
StringBuffer forward = new StringBuffer();
Configurator config = Configurator.getInstance();
if ((user.getStatus() > 0)) {
messageForm.setEmail(user.getInfo().getEmail());
messageForm.setName(user.getName());
} else { //validation if user is not registered yet
if (messageForm.getName().trim().equals("")) {
errors.add(ActionErrors.GLOBAL_ERROR, new ActionError(
"errors.ERR20"));
}
if (messageForm.getEmail().trim().equals("")) {
errors.add(ActionErrors.GLOBAL_ERROR, new ActionError(
"errors.ERR19"));
}
}
// Report any errors we have discovered back to the original form
if (!errors.isEmpty()) {
saveErrors(request, errors);
return (mapping.getInputForward());
}
try {
boolean announce = false;
boolean isUserMod = dao.checkMod(Integer.parseInt(messageForm
.getFid()), user);
Forum currForum = dao.getForumInfo(Integer.parseInt(messageForm
.getFid()));
// check access rights if forum invisible
if ((currForum.getLocked() == IConst.Forum.STATUS_INVISIBLE)
&& (user.getStatus() < Integer.parseInt(Configurator
.getInstance().get(IConst.CONFIG.INVADER1)))) { return (mapping
.findForward(IConst.TOKEN.DENIED)); }
// check access rights if forum topics are locked
if (((currForum.getLocked() == IConst.Forum.STATUS_TOPICS_LOCKED) && messageForm
.getTid().equals(""))
&& (!isUserMod)) { return (mapping
.findForward(IConst.TOKEN.DENIED)); }
// insert new thread if it is necessary
if (messageForm.getTid().equals("")) {
messageForm.setTid(dao.insertNewThread(messageForm.getFid()));
announce = ((dao.isUserMod(user.getName()) || (user.getStatus() > 7)) && IConst.VALUES.TRUE
.equals(messageForm.getAnnounce()));
}
// check user access rights if current topic or completely forum is
// locked
if ((dao.getThreadInfo(Integer.parseInt(messageForm.getTid()))
.getLocked() == IConst.Topic.STATUS_LOCKED || currForum
.getLocked() == IConst.Forum.STATUS_COMPLETELY_LOCKED)
&& (!isUserMod)) { return (mapping
.findForward(IConst.TOKEN.DENIED)); }
// mark username for not registered users
if (user.getStatus() == 0) {
messageForm.setName("<" + messageForm.getName() + ">");
}
int mid = dao.addMessage(messageForm, request.getRemoteAddr(),
announce);
//save attachment
if (Configurator.getInstance().getBoolean(
IConst.CONFIG.ENABLE_FILE_UPLOAD)) {
saveAttach(request, mid, ((FileUploadForm) messageForm)
.getFileData());
}
forward.append("/ShowMessage.do?fid=");
forward.append(messageForm.getFid());
forward.append("&tid=");
forward.append(messageForm.getTid());
forward.append("&mid=");
forward.append(mid);
log(request, "logs.LOG5", messageForm.getTid() + " fid="
+ messageForm.getFid());
// e-mail all the subscribors of this thread...
ArrayList subscrbe = dao.getSubscribersList(messageForm.getTid(),
messageForm.getName());
if (subscrbe.size() > 0) {
StringBuffer siteUrl = new StringBuffer();
siteUrl.append(request.getServerName());
siteUrl.append(":");
siteUrl.append(request.getServerPort());
siteUrl.append("/");
siteUrl.append(request.getContextPath());
siteUrl.append(config.get(IConst.CONFIG.MODULE_PREFIX));
siteUrl.append("/");
String tSubj = dao.getThreadSubject(messageForm.getTid());
MessageProcessor mp = MessageProcessor.getInstance();
String mess = mp.prepareMessage(HtmlCodec.encode(messageForm
.getText()), 0, messages);
mess = mp.cleanup(mess);
/*
* {0} - subsriber's login {1} - site url {2} - show message url
* {3} - topic title {4} - new message text {5} - new message
* sender {6} - site name
*/
Object[] messArgs = new Object[] { "", siteUrl.toString(),
forward.toString(), tSubj, mess,
HtmlCodec.encode(messageForm.getName()),
config.get(IConst.CONFIG.SITE_NAME) };
MailQueue queue = (MailQueue) session.getServletContext()
.getAttribute(IConst.CONTEXT.MAIL_QUEUE);
Iterator it = subscrbe.iterator();
BanGuard guard = BanGuard.getInstance();
while (it.hasNext()) {
Subscriber s = (Subscriber) it.next();
if (!guard.checkBan(s.getEmail(), BanType.EMAIL)) {
messArgs[0] = HtmlCodec.encode(s.getName());
queue.push(new MailMessage(messages.getMessage(
"mails.NEW_MESSAGE", messArgs), messages
.getMessage("mails.NEW_MESSAGE_SUBJ"), config
.get(IConst.CONFIG.ADMINMAIL), messages
.getMessage("mails.FORUM_ADMIN"), s.getEmail(),
s.getName()));
}
}
}
//subscribe user to e-mail from this thread...
if (IConst.VALUES.TRUE.equals(messageForm.getSubscribe())) {
dao.subscribe(messageForm.getTid(), messageForm.getEmail(),
messageForm.getName());
}
session.removeAttribute(IConst.REQUEST.CURR_THREAD);
if (user.getStatus() != UserStatus.GUEST) {
// set(update) last visit date for this thread
HashMap last_intime = (HashMap) session
.getAttribute(IConst.SESSION.LAST_INTIME);
if (last_intime.containsKey(messageForm.getTid())) {
last_intime.remove(messageForm.getTid());
}
last_intime.put(messageForm.getTid(), new Date());
}
} catch (SQLException sqle) {
getServlet().log("Connection.process", sqle);
throw new SystemException(sqle);
} catch (FileNotFoundException e) {