|
What this is
Other links
The source code
/*
* $Header: /cvsroot/mvnforum/mvnforum/src/com/mvnforum/user/MessageWebHandler.java,v 1.84.2.1 2005/05/20 08:52:56 minhnn Exp $
* $Author: minhnn $
* $Revision: 1.84.2.1 $
* $Date: 2005/05/20 08:52:56 $
*
* ====================================================================
*
* Copyright (C) 2002-2005 by MyVietnam.net
*
* 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 any later version.
*
* All copyright notices regarding mvnForum MUST remain intact
* in the scripts and in the outputted HTML.
* The "powered by" text/logo with a link back to
* http://www.mvnForum.com and http://www.MyVietnam.net in the
* footer of the pages MUST remain visible when the pages
* are viewed on the internet or intranet.
*
* 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 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.
*
* Support can be obtained from support forums at:
* http://www.mvnForum.com/mvnforum/index
*
* Correspondence and Marketing Questions can be sent to:
* info@MyVietnam.net
*
* @author: Minh Nguyen minhnn@MyVietnam.net
* @author: Mai Nguyen mai.nh@MyVietnam.net
*/
package com.mvnforum.user;
import java.sql.Timestamp;
import java.util.*;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import com.mvnforum.*;
import com.mvnforum.auth.*;
import com.mvnforum.common.PrivateMessageUtil;
import com.mvnforum.db.*;
import net.myvietnam.mvncore.exception.*;
import net.myvietnam.mvncore.filter.DisableHtmlTagFilter;
import net.myvietnam.mvncore.interceptor.InterceptorService;
import net.myvietnam.mvncore.security.FloodControl;
import net.myvietnam.mvncore.util.*;
import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
class MessageWebHandler {
private static Log log = LogFactory.getLog(MessageWebHandler.class);
private OnlineUserManager onlineUserManager = OnlineUserManager.getInstance();
MessageWebHandler() {
}
void prepareAdd(HttpServletRequest request, HttpServletResponse response)
throws AssertionException, DatabaseException, AuthenticationException,
BadInputException, ObjectNotFoundException {
Locale locale = I18nUtil.getLocaleInRequest(request);
if (MVNForumConfig.getEnablePrivateMessage() == false) {
String localizedMessage = MVNForumResourceBundle.getString(locale, "mvncore.exception.AssertionException.private_message_disabled");
throw new AssertionException(localizedMessage);
//throw new AssertionException("Cannot operate with private messages. Because the private message feature is disabled");
}
MyUtil.saveVNTyperMode(request, response);
OnlineUser onlineUser = onlineUserManager.getOnlineUser(request);
MVNForumPermission permission = onlineUser.getPermission();
permission.ensureIsAuthenticated();
permission.ensureCanUseMessage();
boolean isPreviewing = ParamUtil.getParameterBoolean(request, "preview");
boolean isForward = ParamUtil.getParameterBoolean(request, "forward");
int parentMessageID = 0;
try {
parentMessageID = ParamUtil.getParameterInt(request, "parent");
} catch (Exception ex) {
// do nothing
// NOTE: we cannot return here since user can have a parameter parent = 0
}
if (parentMessageID != 0) { // Reply
MessageBean parentMessageBean = null;
try {
parentMessageBean = DAOFactory.getMessageDAO().getMessage(parentMessageID);
} catch (ObjectNotFoundException e) {
String localizedMessage = MVNForumResourceBundle.getString(locale, "mvncore.exception.ObjectNotFoundException.messageid_not_exists", new Object[] {new Integer(parentMessageID)});
throw new ObjectNotFoundException(localizedMessage);
}
if (parentMessageBean.getMemberID() != onlineUser.getMemberID()) {
String localizedMessage = MVNForumResourceBundle.getString(locale, "mvncore.exception.BadInputException.pm_not_belongs_to_you");
throw new BadInputException(localizedMessage);
//throw new BadInputException("This Private Message does not belong to you");
}
request.setAttribute("ParentMessageBean", parentMessageBean);
// We prepare showing attached files (if any), it's used for Forward Method
if (isForward) {
//MessageBean should have AttachBeans value as default
Collection attachBeans = DAOFactory.getPmAttachmentDAO().getPmAttachments_inMessage(parentMessageID);
request.setAttribute("AttachBeans", attachBeans);
}
}
if (isPreviewing) {
boolean sendAll = false;
if (MVNForumConfig.getEnablePublicMessage() && permission.canAdminSystem()) {
sendAll = ParamUtil.getParameterBoolean(request, "sendall");
}
int logonMemberID = onlineUser.getMemberID();
String messageToList = ParamUtil.getParameterSafe(request, "MessageToList", !(sendAll));
messageToList = messageToList.replace(',', ';');
messageToList = DisableHtmlTagFilter.filter(messageToList);// always disable HTML
String messageCcList = ParamUtil.getParameterSafe(request, "MessageCcList", false);
messageCcList = messageCcList.replace(',', ';');
messageCcList = DisableHtmlTagFilter.filter(messageCcList);// always disable HTML
String messageBccList = ParamUtil.getParameterSafe(request, "MessageBccList", false);
messageBccList = messageBccList.replace(',', ';');
messageBccList = DisableHtmlTagFilter.filter(messageBccList);// always disable HTML
ParamUtil.getParameter(request, "MessageTopic", true);
ParamUtil.getParameter(request, "message", true);// use message instead of MessageBody
MemberBean memberBean = null;
try {
memberBean = DAOFactory.getMemberDAO().getMember_forPublic(logonMemberID);
} catch (ObjectNotFoundException e) {
String localizedMessage = MVNForumResourceBundle.getString(locale, "mvncore.exception.ObjectNotFoundException.memberid_not_exists", new Object[] {new Integer(logonMemberID)});
throw new ObjectNotFoundException(localizedMessage);
}
String[] receivedMembers = StringUtil.getStringArrays(messageToList, messageCcList, messageBccList, ";");
if (sendAll == false) {
if (receivedMembers.length == 0) {
String localizedMessage = MVNForumResourceBundle.getString(locale, "mvncore.exception.AssertionException.cannot_send_message.no_receivers");
throw new AssertionException(localizedMessage);
}
MyUtil.checkMembers(receivedMembers, locale);//check to make sure that members are existed
}
request.setAttribute("MemberBean", memberBean);
}
//Get MemberTutor (only for Netmama's), it uses to check permision for send message
// First, we will check if LoginID is a tutor or Admin
boolean isTutorAdmin = true;
try {
if (MVNForumConfig.getEnableCompany()) {
DAOFactory.getMemberGroupDAO().isTutor(onlineUser.getMemberID());
}
} catch (ObjectNotFoundException ex) {
isTutorAdmin = false;
}
if (permission.canAdminSystem()) { /*This member is an admin*/
isTutorAdmin = true;
}
if ((isTutorAdmin == false) && MVNForumConfig.getEnableCompany()) {
MemberTutorBean memberTutorBean = null;
try {
memberTutorBean = DAOFactory.getMemberTutorDAO().getBean(onlineUser.getMemberID());
} catch (ObjectNotFoundException ex) {
// it means memberTutorBean is null and this user doesn't have tutor
}
request.setAttribute("MemberTutorBean", memberTutorBean);
}
request.setAttribute("IsTutorAdmin", new Boolean(isTutorAdmin));
}
void processAdd(HttpServletRequest request, HttpServletResponse response)
throws ObjectNotFoundException, AssertionException, DatabaseException, CreateException,
BadInputException, ForeignKeyNotFoundException, AuthenticationException, InterceptorException, FloodException {
Locale locale = I18nUtil.getLocaleInRequest(request);
if (MVNForumConfig.getEnablePrivateMessage() == false) {
String localizedMessage = MVNForumResourceBundle.getString(locale, "mvncore.exception.AssertionException.private_message_disabled");
throw new AssertionException(localizedMessage);
//throw new AssertionException("Cannot operate with private messages. Because the private message feature is disabled");
}
OnlineUser onlineUser = onlineUserManager.getOnlineUser(request);
MVNForumPermission permission = onlineUser.getPermission();
permission.ensureIsAuthenticated();
permission.ensureCanUseMessage();
String currentIP = request.getRemoteAddr();
try {
FloodControl.ensureNotReachMaximum(MVNForumGlobal.FLOOD_ID_NEW_MESSAGE, currentIP);
} catch (FloodException fe) {
//throw new FloodException("You have reached the maximum number of the private message adding actions for this page. Please try this page later. This is to prevent forum from being flooded.");
Integer maxMessages = new Integer(FloodControl.getActionsPerHour(MVNForumGlobal.FLOOD_ID_NEW_MESSAGE));
String localizedMessage = MVNForumResourceBundle.getString(locale, "mvncore.exception.FloodException.send_message_too_many_times", new Object[] {maxMessages});
throw new FloodException(localizedMessage);
}
MyUtil.saveVNTyperMode(request, response);
int logonMemberID = onlineUser.getMemberID();
String memberName = onlineUser.getMemberName();
boolean sendAll = false;
if (MVNForumConfig.getEnablePublicMessage() && permission.canAdminSystem()) {
sendAll = ParamUtil.getParameterBoolean(request, "sendall");
}
// if messageToList == null permit null value
String messageToList = ParamUtil.getParameterSafe(request, "MessageToList", !(sendAll));
messageToList = messageToList.replace(',', ';');
messageToList = DisableHtmlTagFilter.filter(messageToList);// always disable HTML
String messageCcList = ParamUtil.getParameterSafe(request, "MessageCcList", false);
messageCcList = messageCcList.replace(',', ';');
messageCcList = DisableHtmlTagFilter.filter(messageCcList);// always disable HTML
String messageBccList = ParamUtil.getParameterSafe(request, "MessageBccList", false);
messageBccList = messageBccList.replace(',', ';');
messageBccList = DisableHtmlTagFilter.filter(messageBccList);// always disable HTML
String messageTopic = ParamUtil.getParameter(request, "MessageTopic", true);
messageTopic = DisableHtmlTagFilter.filter(messageTopic);// always disable HTML
InterceptorService.getInstance().validateContent(messageTopic);
String messageBody = ParamUtil.getParameter(request, "message", true);// use message instead of MessageBody
messageBody = DisableHtmlTagFilter.filter(messageBody);// always disable HTML
InterceptorService.getInstance().validateContent(messageBody);
String messageIcon = ParamUtil.getParameter(request, "MessageIcon");
messageIcon = DisableHtmlTagFilter.filter(messageIcon);// always disable HTML
if (sendAll) {
messageToList = onlineUser.getMemberName();
messageBccList = "";
messageCcList = "";
}
Timestamp now = DateUtil.getCurrentGMTTimestamp();
int messageSenderID = logonMemberID;
String messageSenderName = memberName;
String folderName = MVNForumConstant.MESSAGE_FOLDER_INBOX;
// NOTE: in this step, type = quote is not possible since it needs attachment
int messageType = (sendAll) ? MessageBean.MESSAGE_TYPE_PUBLIC : MessageBean.MESSAGE_TYPE_DEFAULT;
int messageOption = 0;//ParamUtil.getParameterInt(request, "MessageOption");
int messageStatus = 0;//ParamUtil.getParameterInt(request, "MessageStatus");
int messageReadStatus = MessageBean.MESSAGE_READ_STATUS_DEFAULT;
int messageNotify = 0;//ParamUtil.getParameterInt(request, "MessageNotify");
int messageAttachCount = 0;
String messageIP = currentIP;
Timestamp messageCreateDate = now; // Get Current time
int parentMessageID = 0;
boolean isDraft = ParamUtil.getParameterBoolean(request, "draft");
boolean isForward = ParamUtil.getParameterBoolean(request, "forward");
boolean attachMore = ParamUtil.getParameterBoolean(request, "AttachMore");
boolean addToSentFolder = ParamUtil.getParameterBoolean(request, "AddToSentFolder");
String[] receivedMembers = StringUtil.getStringArrays(messageToList, messageCcList, messageBccList, ";");
if (sendAll == false) {
if (receivedMembers.length == 0) {
String localizedMessage = MVNForumResourceBundle.getString(locale, "mvncore.exception.AssertionException.cannot_send_message.no_receivers");
throw new AssertionException(localizedMessage);
}
}
Hashtable receivers = MyUtil.checkMembers(receivedMembers, locale);
if (isForward) {
parentMessageID = ParamUtil.getParameterInt(request, "parent");
}
Collection attachBeans = null;
if (isForward) {
MessageBean parentMessageBean = null;
try {
parentMessageBean = DAOFactory.getMessageDAO().getMessage(parentMessageID);
} catch (ObjectNotFoundException e) {
String localizedMessage = MVNForumResourceBundle.getString(locale, "mvncore.exception.ObjectNotFoundException.messageid_not_exists", new Object[] {new Integer(parentMessageID)});
throw new ObjectNotFoundException(localizedMessage);
}
//actually, the jsp does not allow forward a public message
boolean isPublicMessage = false;
if (MVNForumConfig.getEnablePublicMessage()) {
isPublicMessage = (permission.canAdminSystem() && (parentMessageBean.getMessageType() == MessageBean.MESSAGE_TYPE_PUBLIC));
}
if ((parentMessageBean.getMemberID() != logonMemberID) && !isPublicMessage) {
String localizedMessage = MVNForumResourceBundle.getString(locale, "mvncore.exception.BadInputException.pm_not_belongs_to_you");
throw new BadInputException(localizedMessage);
//throw new BadInputException("This Private Message does not belong to you");
}
attachBeans = DAOFactory.getPmAttachmentDAO().getPmAttachments_inMessage(parentMessageID);
messageAttachCount = attachBeans.size();// in case forward, the attachcount could > 0 so we call this method
} // end forward
int maxPrivateMessage = MVNForumConfig.getMaxPrivateMessage();
if (isDraft) { // Click to Draft Button
folderName = MVNForumConstant.MESSAGE_FOLDER_DRAFT;
// We will save message to folder Draft with memberID = SenderID
// @todo: in next version: when user click to draft message we will open
// AddMessage window and display all of its previous data
int senderMessageCount = DAOFactory.getMessageDAO().getNumberOfNonPublicMessages_inMember(logonMemberID);
if (senderMessageCount >= maxPrivateMessage) {
String localizedMessage = MVNForumResourceBundle.getString(locale, "mvncore.exception.BadInputException.over_private_message_quota", new Object[] {new Integer(maxPrivateMessage)});
throw new BadInputException(localizedMessage);
//throw new BadInputException("You cannot push the message into the draft folder. You have already use all your private message quota (" + maxFavorites + ").");
}
int draftMessageID = DAOFactory.getMessageDAO().create(folderName, messageSenderID, messageSenderID,
messageSenderName, messageToList, messageCcList,
messageBccList, messageTopic, messageBody,
messageType, messageOption, messageStatus,
messageReadStatus, messageNotify, messageIcon,
messageAttachCount, messageIP, messageCreateDate);
if (isForward) {
// We must move PmAttachment from parent to new Message
for (Iterator attachIter = attachBeans.iterator(); attachIter.hasNext(); ) {
PmAttachmentBean pmAttachBean = (PmAttachmentBean)attachIter.next();
try {
DAOFactory.getPmAttachMessageDAO().create(draftMessageID, pmAttachBean.getPmAttachID(), 0/*type*/, 0/*option*/, 0/*status*/);
} catch (DuplicateKeyException ex) {
// this should never happen
throw new AssertionException("DuplicateKeyException when create PmAttachMessage");
}
}
}// end of isForward
attachMore = false;
} else { // end draft
// click to Send button
// test the receiver's quota
if (attachMore) {
int senderMessageCount = DAOFactory.getMessageDAO().getNumberOfNonPublicMessages_inMember(logonMemberID);
if (senderMessageCount >= maxPrivateMessage) {
String localizedMessage = MVNForumResourceBundle.getString(locale, "mvncore.exception.BadInputException.over_private_message_quota", new Object[] {new Integer(maxPrivateMessage)});
throw new BadInputException(localizedMessage);
//throw new BadInputException("You cannot push the message into the draft folder. You have already use all your private message quota (" + maxFavorites + ").");
}
folderName = MVNForumConstant.MESSAGE_FOLDER_DRAFT;// it means sending process is not finished
// Create but save it as temporary message in Draft folder
int messageID = DAOFactory.getMessageDAO().create(folderName, messageSenderID, messageSenderID,
messageSenderName, messageToList, messageCcList,
messageBccList, messageTopic, messageBody,
messageType, messageOption, messageStatus,
messageReadStatus, messageNotify, messageIcon,
messageAttachCount, messageIP, messageCreateDate);
if (isForward) {
// We must move PmAttachment from parent to new Message
for (Iterator attachIter = attachBeans.iterator(); attachIter.hasNext(); ) {
PmAttachmentBean pmAttachBean = (PmAttachmentBean)attachIter.next();
try {
DAOFactory.getPmAttachMessageDAO().create(messageID, pmAttachBean.getPmAttachID(), 0/*type*/, 0/*option*/, 0/*status*/);
} catch (DuplicateKeyException ex) {
// this should never happen
throw new AssertionException("DuplicateKeyException when create PmAttachMessage");
}
}
}// end of isForward
// When attach more, we must put attribute for MessageID
request.setAttribute("MessageID", new Integer(messageID));
} else { // NO Attachment
// no attachment means we will send this message now
StringBuffer overQuotaReceivers = new StringBuffer(128);
for (Enumeration enumeration = receivers.keys(); enumeration.hasMoreElements(); ) {
int receivedMemberID = ((Integer)enumeration.nextElement()).intValue();
String receivedMemberName = (String)receivers.get(new Integer(receivedMemberID));
int receiverMessageCount = DAOFactory.getMessageDAO().getNumberOfNonPublicMessages_inMember(receivedMemberID);
if (receiverMessageCount >= maxPrivateMessage) {
if (overQuotaReceivers.length() > 0) {
overQuotaReceivers.append(", ");
}
overQuotaReceivers.append(receivedMemberName);
continue;
}
// We need to get MessageID for attached page
int eachMessageID = DAOFactory.getMessageDAO().create(folderName, receivedMemberID, messageSenderID,
messageSenderName, messageToList, messageCcList,
messageBccList, messageTopic, messageBody,
messageType, messageOption, messageStatus,
messageReadStatus, messageNotify, messageIcon,
messageAttachCount, messageIP, messageCreateDate);
// Add to statistics
if (messageSenderID != receivedMemberID) {
DAOFactory.getMessageStatisticsDAO().create(messageSenderID, receivedMemberID, messageCreateDate,
messageAttachCount, messageType, messageOption, messageStatus);
}
if (isForward) {
// We must move PmAttachment from parent to new Message
for (Iterator attachIter = attachBeans.iterator(); attachIter.hasNext(); ) {
PmAttachmentBean pmAttachBean = (PmAttachmentBean)attachIter.next();
try {
DAOFactory.getPmAttachMessageDAO().create(eachMessageID, pmAttachBean.getPmAttachID(), 0/*type*/, 0/*option*/, 0/*status*/);
} catch (DuplicateKeyException ex) {
// this should never happen
throw new AssertionException("DuplicateKeyException when create PmAttachMessage");
}
}
}// end of isForward
} // end of for on received members
request.setAttribute("OverQuotaReceivers", overQuotaReceivers.toString());
// after that, we create another record to save it in Sent. (if user wants)
if (addToSentFolder) {
int senderMessageCount = DAOFactory.getMessageDAO().getNumberOfNonPublicMessages_inMember(logonMemberID);
if (senderMessageCount < maxPrivateMessage) {
folderName = MVNForumConstant.MESSAGE_FOLDER_SENT;
messageType = MessageBean.MESSAGE_TYPE_DEFAULT;// always a default type in the Sent folder
int sentMessageID = DAOFactory.getMessageDAO().create(folderName, messageSenderID, messageSenderID,
messageSenderName, messageToList, messageCcList,
messageBccList, messageTopic, messageBody,
messageType, messageOption, messageStatus,
messageReadStatus, messageNotify, messageIcon,
messageAttachCount, messageIP, messageCreateDate);
if (isForward) {
// We must move PmAttachment from parent to new Message
for (Iterator attachIter = attachBeans.iterator(); attachIter.hasNext(); ) {
PmAttachmentBean pmAttachBean = (PmAttachmentBean)attachIter.next();
try {
DAOFactory.getPmAttachMessageDAO().create(sentMessageID, pmAttachBean.getPmAttachID(), 0/*type*/, 0/*option*/, 0/*status*/);
} catch (DuplicateKeyException ex) {
// this should never happen
throw new AssertionException("DuplicateKeyException when create PmAttachMessage");
}
}
}// end of isForward
} else {
request.setAttribute("AddSentFolderOverQuota", Boolean.TRUE);
}
}// end of addToSentFolder
}// else of No Attachment
} // end of click to button Send
request.setAttribute("AttachMore", new Boolean(attachMore));
request.setAttribute("AddToSentFolder", new Boolean(addToSentFolder));
FloodControl.increaseCount(MVNForumGlobal.FLOOD_ID_NEW_MESSAGE, currentIP);
}
void prepareViewMessage(HttpServletRequest request)
throws ObjectNotFoundException, DatabaseException, BadInputException,
AuthenticationException, AssertionException {
Locale locale = I18nUtil.getLocaleInRequest(request);
if (MVNForumConfig.getEnablePrivateMessage() == false) {
String localizedMessage = MVNForumResourceBundle.getString(locale, "mvncore.exception.AssertionException.private_message_disabled");
throw new AssertionException(localizedMessage);
//throw new AssertionException("Cannot operate with private messages. Because the private message feature is disabled");
}
OnlineUser onlineUser = onlineUserManager.getOnlineUser(request);
MVNForumPermission permission = onlineUser.getPermission();
permission.ensureIsAuthenticated();
permission.ensureCanUseMessage();
int logonMemberID = onlineUser.getMemberID();
int messageID = ParamUtil.getParameterInt(request, "message");
MessageBean messageBean = null;
try {
messageBean = DAOFactory.getMessageDAO().getMessage(messageID);
} catch (ObjectNotFoundException e) {
String localizedMessage = MVNForumResourceBundle.getString(locale, "mvncore.exception.ObjectNotFoundException.messageid_not_exists", new Object[] {new Integer(messageID)});
throw new ObjectNotFoundException(localizedMessage);
}
// Check if this message doesn't belong to current user
boolean isPublicMessage = ((messageBean.getMessageType() == MessageBean.MESSAGE_TYPE_PUBLIC) && MVNForumConfig.getEnablePublicMessage());
if ((messageBean.getMemberID() != logonMemberID) && !isPublicMessage) {
String localizedMessage = MVNForumResourceBundle.getString(locale, "mvncore.exception.BadInputException.pm_not_belongs_to_you");
throw new BadInputException(localizedMessage);
//throw new BadInputException("This Private Message does not belong to you");
}
MemberBean memberSenderBean = null;
int messageSenderID = messageBean.getMessageSenderID();
try {
memberSenderBean = DAOFactory.getMemberDAO().getMember_forPublic(messageSenderID);
} catch (ObjectNotFoundException e) {
// In this case, member has been deleted but his message is still there, so we just ignore
// Note that currently the viewmessage.jsp accept null value of memberSenderBean
}
if (isPublicMessage) {
DAOFactory.getMessageDAO().updateMessageReadStatus(messageID, messageBean.getMemberID(), MessageBean.MESSAGE_READ_STATUS_READ);
} else {// private message
DAOFactory.getMessageDAO().updateMessageReadStatus(messageID, logonMemberID, MessageBean.MESSAGE_READ_STATUS_READ);
}
// We get attachment of this message
Collection attachBeans = DAOFactory.getPmAttachmentDAO().getPmAttachments_inMessage(messageID);
messageBean.setAttachmentBeans(attachBeans);
// always update the number of new private message count in this case
onlineUser.updateNewMessageCount(true);
request.setAttribute("MessageBean", messageBean);
request.setAttribute("MemberSenderBean", memberSenderBean);
}
void prepareList(HttpServletRequest request)
throws BadInputException, DatabaseException, ObjectNotFoundException,
AuthenticationException, AssertionException {
Locale locale = I18nUtil.getLocaleInRequest(request);
if (MVNForumConfig.getEnablePrivateMessage() == false) {
String localizedMessage = MVNForumResourceBundle.getString(locale, "mvncore.exception.AssertionException.private_message_disabled");
throw new AssertionException(localizedMessage);
//throw new AssertionException("Cannot operate with private messages. Because the private message feature is disabled");
}
OnlineUser onlineUser = onlineUserManager.getOnlineUser(request);
MVNForumPermission permission = onlineUser.getPermission();
permission.ensureIsAuthenticated();
permission.ensureCanUseMessage();
// always update the number of new private message count in this case
onlineUser.updateNewMessageCount(true);
// @todo: We must check folder to make a correct list
String folderName = ParamUtil.getParameter(request, "folder");
if (folderName.length() == 0) {
folderName = MVNForumConstant.MESSAGE_FOLDER_INBOX; // Default as Inbox
}
StringUtil.checkGoodName(folderName);
// for sort and order stuff
String sort = ParamUtil.getParameter(request, "sort");
String order = ParamUtil.getParameter(request, "order");
if (sort.length() == 0) sort = "MessageCreationDate";
if (order.length()== 0) order = "DESC";
//Process of Show Messages of login member
int messagePerPage = onlineUser.getMessagesPerPage();
int offset = 0;
try {
offset = ParamUtil.getParameterInt(request, "offset");
} catch (BadInputException ex) {
// do nothing
}
int logonMemberID = onlineUser.getMemberID();
try {
DAOFactory.getMessageFolderDAO().findByPrimaryKey(folderName, logonMemberID);
} catch (ObjectNotFoundException onf) {
String localizedMessage = MVNForumResourceBundle.getString(locale, "mvncore.exception.ObjectNotFoundException.messagefolder_not_exists", new Object[] {folderName});
throw new ObjectNotFoundException(localizedMessage);
}
int numberOfMessages = DAOFactory.getMessageDAO().getNumberOfNonPublicMessages_inMember_inFolder(logonMemberID, folderName);
if (offset > numberOfMessages) {
String localizedMessage = MVNForumResourceBundle.getString(locale, "mvncore.exception.BadInputException.offset_greater_than_total_rows");
throw new BadInputException(localizedMessage);
//throw new BadInputException("The offset is not allowed to be greater than total rows.");
}
Collection messageBeans = null;
if (folderName.equalsIgnoreCase(MVNForumConstant.MESSAGE_FOLDER_DRAFT)) {
// also get the draft public messages
messageBeans = DAOFactory.getMessageDAO().getAllMessages_inMember_inFolder_withSortSupport_limit(logonMemberID, folderName, offset, messagePerPage, sort, order);
} else {
messageBeans = DAOFactory.getMessageDAO().getNonPublicMessages_inMember_inFolder_withSortSupport_limit(logonMemberID, folderName, offset, messagePerPage, sort, order);
}
Collection messagePublicBeans = null;
if (MVNForumConfig.getEnablePublicMessage()) {
messagePublicBeans = DAOFactory.getMessageDAO().getPublicMessages();
}
// for folder table
Collection messageFolderBeans = DAOFactory.getMessageFolderDAO().getMessageFolders_inMember(logonMemberID);
for (Iterator iter = messageFolderBeans.iterator(); iter.hasNext(); ) {
MessageFolderBean messageFolder = (MessageFolderBean) iter.next();
int messageCount;
int unreadMessageCount;
if (messageFolder.getFolderName().equalsIgnoreCase(MVNForumConstant.MESSAGE_FOLDER_DRAFT)) {
// also get the draft public messages
messageCount = DAOFactory.getMessageDAO().getNumberOfAllMessages_inMember_inFolder(logonMemberID, messageFolder.getFolderName());
unreadMessageCount = DAOFactory.getMessageDAO().getNumberOfUnreadAllMessages_inMember_inFolder(logonMemberID, messageFolder.getFolderName());
} else {
messageCount = DAOFactory.getMessageDAO().getNumberOfNonPublicMessages_inMember_inFolder(logonMemberID, messageFolder.getFolderName());
unreadMessageCount = DAOFactory.getMessageDAO().getNumberOfUnreadNonPublicMessages_inMember_inFolder(logonMemberID, messageFolder.getFolderName());
}
messageFolder.setMessageCount(messageCount);
messageFolder.setUnreadMessageCount(unreadMessageCount);
} // end for on folders
// for the quota bar
int max = MVNForumConfig.getMaxPrivateMessage();
int messageCount = DAOFactory.getMessageDAO().getNumberOfNonPublicMessages_inMember(logonMemberID);
double ratio = 0;
if (max == 0) {
ratio = 1.0;
} else {
ratio = (double)messageCount / max;
}
// for the quota bar
request.setAttribute("QuotaRatio", new Double(ratio*100));
request.setAttribute("MessagePublicBeans", messagePublicBeans);
request.setAttribute("MessageFolderBeans", messageFolderBeans);
request.setAttribute("MessageBeans", messageBeans);
request.setAttribute("TotalMessages", new Integer(numberOfMessages));
}
void processMessage(HttpServletRequest request)
throws ObjectNotFoundException, DatabaseException, BadInputException,
AuthenticationException, AssertionException {
Locale locale = I18nUtil.getLocaleInRequest(request);
if (MVNForumConfig.getEnablePrivateMessage() == false) {
String localizedMessage = MVNForumResourceBundle.getString(locale, "mvncore.exception.AssertionException.private_message_disabled");
throw new AssertionException(localizedMessage);
//throw new AssertionException("Cannot operate with private messages. Because the private message feature is disabled");
}
OnlineUser onlineUser = onlineUserManager.getOnlineUser(request);
MVNForumPermission permission = onlineUser.getPermission();
permission.ensureIsAuthenticated();
permission.ensureCanUseMessage();
String btnDelete = request.getParameter("btnDelete");
String btnUnreadMark = request.getParameter("btnUnreadMark");
String btnMoveFolder = request.getParameter("btnMoveFolder");
int logonMemberID = onlineUser.getMemberID();
int action = 0; // it's better than true-false, expand function later
/*
* action = 1; // Delete action
* action = 2; // Mark unread action
* action = 3; // move to another folder
*/
if ((btnDelete != null)) {
action = 1;
} else if (btnUnreadMark != null) {
action = 2;
} else if (btnMoveFolder != null) {
action = 3;
} else {
String localizedMessage = MVNForumResourceBundle.getString(locale, "mvncore.exception.BadInputException.cannot_specify_action");
throw new BadInputException(localizedMessage);
//throw new BadInputException("Cannot specify the action");
}
if (action == 1) {// delete
//log.debug("ListDelete Message:" + btnDelete);
String[] deleteList = request.getParameterValues("selectedmessage");
for (int i = 0; (deleteList != null) && (i < deleteList.length); i++) {
int messageID = Integer.parseInt(deleteList[i]);
MessageBean messageBean = null;
try {
messageBean = DAOFactory.getMessageDAO().getMessage(messageID);
} catch (ObjectNotFoundException e) {
String localizedMessage = MVNForumResourceBundle.getString(locale, "mvncore.exception.ObjectNotFoundException.messageid_not_exists", new Object[] {new Integer(messageID)});
throw new ObjectNotFoundException(localizedMessage);
}
// Check if this message doesn't belong to current user
if (messageBean.getMessageType() == MessageBean.MESSAGE_TYPE_PUBLIC) {
// this is a public message, only Admin can delete it
if (permission.canAdminSystem() == false) {
throw new AssertionException("Only Admin can delete public message.");
}
PrivateMessageUtil.deleteMessageInDatabase(messageID, messageBean.getMemberID());
} else {
// not a public message, only the owner can delete it
if (messageBean.getMemberID() != logonMemberID) {
String localizedMessage = MVNForumResourceBundle.getString(locale, "mvncore.exception.BadInputException.pm_not_belongs_to_you");
throw new BadInputException(localizedMessage);
//throw new BadInputException("This Private Message does not belong to you");
}
PrivateMessageUtil.deleteMessageInDatabase(messageID, logonMemberID);
}
}
request.setAttribute("Status", "Delete");
} else if (action == 2 ) {// mark as unread
//log.debug("Unread Message:" + btnUnreadMark);
String[] unreadList = request.getParameterValues("selectedmessage");
for (int i = 0; (unreadList != null) && (i < unreadList.length); i++) {
int messageID = Integer.parseInt(unreadList[i]);
MessageBean messageBean = null;
try {
messageBean = DAOFactory.getMessageDAO().getMessage(messageID);
} catch (ObjectNotFoundException e) {
String localizedMessage = MVNForumResourceBundle.getString(locale, "mvncore.exception.ObjectNotFoundException.messageid_not_exists", new Object[] {new Integer(messageID)});
throw new ObjectNotFoundException(localizedMessage);
}
if (messageBean.getMessageType() != MessageBean.MESSAGE_TYPE_PUBLIC) {
// not a public message, only the owner can mark as unread it
if (messageBean.getMemberID() != logonMemberID) {
String localizedMessage = MVNForumResourceBundle.getString(locale, "mvncore.exception.BadInputException.pm_not_belongs_to_you");
throw new BadInputException(localizedMessage);
//throw new BadInputException("This Private Message does not belong to you");
}
//log.debug("Unread MessageID = " + messageID);
DAOFactory.getMessageDAO().updateMessageReadStatus(messageID, logonMemberID, MessageBean.MESSAGE_READ_STATUS_DEFAULT);
}
}
request.setAttribute("Status", "Unread");
} else if (action == 3) { // move to another folder
//log.debug("Move Message:" + btnMoveFolder);
String[] movingList = request.getParameterValues("selectedmessage");
String destinationFolder = ParamUtil.getParameterSafe(request, "DestinationFolder", true);
StringUtil.checkGoodName(destinationFolder);
for (int i = 0; (movingList != null) && (i < movingList.length); i++) {
int messageID = Integer.parseInt(movingList[i]);
MessageBean messageBean = null;
try {
messageBean = DAOFactory.getMessageDAO().getMessage(messageID);
} catch (ObjectNotFoundException e) {
String localizedMessage = MVNForumResourceBundle.getString(locale, "mvncore.exception.ObjectNotFoundException.messageid_not_exists", new Object[] {new Integer(messageID)});
throw new ObjectNotFoundException(localizedMessage);
}
if (messageBean.getMessageType() != MessageBean.MESSAGE_TYPE_PUBLIC) {
// not a public message, only the owner can move it
if (messageBean.getMemberID() != logonMemberID) {
String localizedMessage = MVNForumResourceBundle.getString(locale, "mvncore.exception.BadInputException.pm_not_belongs_to_you");
throw new BadInputException(localizedMessage);
//throw new BadInputException("This Private Message does not belong to you");
}
//log.debug("Move MessageID = " + messageID);
DAOFactory.getMessageDAO().updateFolderName(messageID, logonMemberID, destinationFolder);
}
}
request.setAttribute("Status", "MoveFolder");
}
}
void processSendMessage(HttpServletRequest request)
throws ObjectNotFoundException, DatabaseException, BadInputException,
CreateException, ForeignKeyNotFoundException, AuthenticationException, AssertionException {
Locale locale = I18nUtil.getLocaleInRequest(request);
if (MVNForumConfig.getEnablePrivateMessage() == false) {
String localizedMessage = MVNForumResourceBundle.getString(locale, "mvncore.exception.AssertionException.private_message_disabled");
throw new AssertionException(localizedMessage);
//throw new AssertionException("Cannot operate with private messages. Because the private message feature is disabled");
}
OnlineUser onlineUser = onlineUserManager.getOnlineUser(request);
MVNForumPermission permission = onlineUser.getPermission();
permission.ensureIsAuthenticated();
permission.ensureCanUseMessage();
int logonMemberID = onlineUser.getMemberID();
int messageID = ParamUtil.getParameterInt(request, "message");
MessageBean messageBean = null;
try {
messageBean = DAOFactory.getMessageDAO().getMessage(messageID);
} catch (ObjectNotFoundException e) {
String localizedMessage = MVNForumResourceBundle.getString(locale, "mvncore.exception.ObjectNotFoundException.messageid_not_exists", new Object[] {new Integer(messageID)});
throw new ObjectNotFoundException(localizedMessage);
}
// Check if this message doesn't belong to current user
if (messageBean.getMemberID() != logonMemberID ) {
String localizedMessage = MVNForumResourceBundle.getString(locale, "mvncore.exception.BadInputException.pm_not_belongs_to_you");
throw new BadInputException(localizedMessage);
//throw new BadInputException("This Private Message does not belong to you");
}
if (messageBean.getFolderName().equalsIgnoreCase(MVNForumConstant.MESSAGE_FOLDER_DRAFT) == false) {
String localizedMessage = MVNForumResourceBundle.getString(locale, "mvncore.exception.BadInputException.cannot_add_attachment.pm_does_not_in_folder_draft");
throw new BadInputException(localizedMessage);
//throw new BadInputException("Cannot add attachment because this Private Message does not in the folder Draft");
}
// Check if the message is from this logon member
if (messageBean.getMessageSenderID() != logonMemberID ) {
throw new AssertionException("Assertion: The MessageSenderID must equals the current logined user.");
}
if (messageBean.getMessageSenderName().equals(onlineUser.getMemberName()) == false) {
throw new AssertionException("Assertion: The MessageSenderName must equals the current logined user.");
}
Timestamp now = DateUtil.getCurrentGMTTimestamp();
Collection attachBeans = DAOFactory.getPmAttachmentDAO().getPmAttachments_inMessage(messageBean.getMessageID()); //messageBean is original message
int maxPrivateMessage = MVNForumConfig.getMaxPrivateMessage();
String[] receivedMembers = StringUtil.getStringArrays(messageBean.getMessageToList(), messageBean.getMessageCcList(), messageBean.getMessageBccList(), ";");
Hashtable receivers = MyUtil.checkMembers(receivedMembers, locale);
StringBuffer overQuotaReceivers = new StringBuffer(128);
for (Enumeration enumeration = receivers.keys(); enumeration.hasMoreElements(); ) {
int receivedMemberID = ((Integer)enumeration.nextElement()).intValue();
String receivedMemberName = (String)receivers.get(new Integer(receivedMemberID));
int receiverMessageCount = DAOFactory.getMessageDAO().getNumberOfNonPublicMessages_inMember(receivedMemberID);
if (receiverMessageCount >= maxPrivateMessage) {
if (overQuotaReceivers.length() > 0) {
overQuotaReceivers.append(", ");
}
overQuotaReceivers.append(receivedMemberName);
continue;
}
// Create REAL message for receivers when finish. It means we have new messageID for each new receiver
// We need to get MessageID for attached page
int eachMessageID = DAOFactory.getMessageDAO().create(MVNForumConstant.MESSAGE_FOLDER_INBOX, receivedMemberID, logonMemberID,
messageBean.getMessageSenderName(), messageBean.getMessageToList(), messageBean.getMessageCcList(),
messageBean.getMessageBccList(), messageBean.getMessageTopic(), messageBean.getMessageBody(),
messageBean.getMessageType(), messageBean.getMessageOption(), messageBean.getMessageStatus(),
MessageBean.MESSAGE_READ_STATUS_DEFAULT, messageBean.getMessageNotify(), messageBean.getMessageIcon(),
messageBean.getMessageAttachCount(), request.getRemoteAddr(), now);
// Add to statistics
if (logonMemberID != receivedMemberID) {
DAOFactory.getMessageStatisticsDAO().create(logonMemberID, receivedMemberID, now,
messageBean.getMessageAttachCount(), messageBean.getMessageType(),
messageBean.getMessageOption(), messageBean.getMessageStatus());
}
// We must create a loop to create Attach for many receivers and many attachments
for (Iterator attachIter = attachBeans.iterator(); attachIter.hasNext(); ) {
PmAttachmentBean pmAttachBean = (PmAttachmentBean)attachIter.next();
try {
DAOFactory.getPmAttachMessageDAO().create(eachMessageID, pmAttachBean.getPmAttachID(), 0/*type*/, 0/*option*/, 0/*status*/);
} catch (DuplicateKeyException ex) {
// this should never happen
throw new AssertionException("DuplicateKeyException when create PmAttachMessage");
}
}
} // end of for on receivers
request.setAttribute("OverQuotaReceivers", overQuotaReceivers.toString());
// Now delete the message in the draft
PrivateMessageUtil.deleteMessageInDatabase(messageID, logonMemberID);
request.setAttribute("MessageID", new Integer(messageID));
request.setAttribute("AttachMore", new Boolean(false));
request.setAttribute("AddToSentFolder", new Boolean(false));
}
void processDelete(HttpServletRequest request)
throws ObjectNotFoundException, DatabaseException, BadInputException,
AuthenticationException, AssertionException {
Locale locale = I18nUtil.getLocaleInRequest(request);
if (MVNForumConfig.getEnablePrivateMessage() == false) {
String localizedMessage = MVNForumResourceBundle.getString(locale, "mvncore.exception.AssertionException.private_message_disabled");
throw new AssertionException(localizedMessage);
//throw new AssertionException("Cannot operate with private messages. Because the private message feature is disabled");
}
OnlineUser onlineUser = onlineUserManager.getOnlineUser(request);
MVNForumPermission permission = onlineUser.getPermission();
permission.ensureIsAuthenticated();
permission.ensureCanUseMessage();
int logonMemberID = onlineUser.getMemberID();
int messageID = ParamUtil.getParameterInt(request, "message");
MessageBean messageBean = null;
try {
messageBean = DAOFactory.getMessageDAO().getMessage(messageID);
} catch (ObjectNotFoundException e) {
String localizedMessage = MVNForumResourceBundle.getString(locale, "mvncore.exception.ObjectNotFoundException.messageid_not_exists", new Object[] {new Integer(messageID)});
throw new ObjectNotFoundException(localizedMessage);
}
// Check if this message doesn't belong to current user
// Please note that we dont allow to delete public in this case
if (messageBean.getMemberID() != logonMemberID) {
String localizedMessage = MVNForumResourceBundle.getString(locale, "mvncore.exception.BadInputException.pm_not_belongs_to_you");
throw new BadInputException(localizedMessage);
//throw new BadInputException("This Private Message does not belong to you");
}
// Now delete the message
PrivateMessageUtil.deleteMessageInDatabase(messageID, logonMemberID);
request.setAttribute("FolderName", messageBean.getFolderName());
}
}
|
| ... this post is sponsored by my books ... | |
#1 New Release! |
FP Best Seller |
Copyright 1998-2024 Alvin Alexander, alvinalexander.com
All Rights Reserved.
A percentage of advertising revenue from
pages under the /java/jwarehouse
URI on this website is
paid back to open source projects.