1 41 package com.mvnforum.user; 42 43 import java.sql.Timestamp ; 44 import java.util.*; 45 46 import com.mvnforum.*; 47 import com.mvnforum.auth.*; 48 import com.mvnforum.common.PrivateMessageUtil; 49 import com.mvnforum.db.*; 50 import net.myvietnam.mvncore.exception.*; 51 import net.myvietnam.mvncore.filter.DisableHtmlTagFilter; 52 import net.myvietnam.mvncore.interceptor.InterceptorService; 53 import net.myvietnam.mvncore.security.FloodControl; 54 import net.myvietnam.mvncore.util.*; 55 import net.myvietnam.mvncore.web.GenericRequest; 56 import net.myvietnam.mvncore.web.GenericResponse; 57 import org.apache.commons.logging.Log; 58 import org.apache.commons.logging.LogFactory; 59 60 public class MessageWebHandler { 61 62 private static Log log = LogFactory.getLog(MessageWebHandler.class); 63 64 private OnlineUserManager onlineUserManager = OnlineUserManager.getInstance(); 65 66 public MessageWebHandler() { 67 } 68 69 public void prepareAdd(GenericRequest request, GenericResponse response) 70 throws AssertionException, DatabaseException, AuthenticationException, 71 BadInputException, ObjectNotFoundException { 72 73 Locale locale = I18nUtil.getLocaleInRequest(request); 74 75 if (MVNForumConfig.getEnablePrivateMessage() == false) { 76 String localizedMessage = MVNForumResourceBundle.getString(locale, "mvncore.exception.AssertionException.private_message_disabled"); 77 throw new AssertionException(localizedMessage); 78 } 80 81 MyUtil.saveVNTyperMode(request, response); 82 83 OnlineUser onlineUser = onlineUserManager.getOnlineUser(request); 84 MVNForumPermission permission = onlineUser.getPermission(); 85 permission.ensureIsAuthenticated(); 86 permission.ensureCanUseMessage(); 87 88 boolean isPreviewing = GenericParamUtil.getParameterBoolean(request, "preview"); 89 boolean isForward = GenericParamUtil.getParameterBoolean(request, "forward"); 90 91 int parentMessageID = 0; 92 try { 93 parentMessageID = GenericParamUtil.getParameterInt(request, "parent"); 94 } catch (Exception ex) { 95 } 98 99 if (parentMessageID != 0) { MessageBean parentMessageBean = null; 101 try { 102 parentMessageBean = DAOFactory.getMessageDAO().getMessage(parentMessageID); 103 } catch (ObjectNotFoundException e) { 104 String localizedMessage = MVNForumResourceBundle.getString(locale, "mvncore.exception.ObjectNotFoundException.messageid_not_exists", new Object [] {new Integer (parentMessageID)}); 105 throw new ObjectNotFoundException(localizedMessage); 106 } 107 if (parentMessageBean.getMemberID() != onlineUser.getMemberID()) { 108 String localizedMessage = MVNForumResourceBundle.getString(locale, "mvncore.exception.BadInputException.pm_not_belongs_to_you"); 109 throw new BadInputException(localizedMessage); 110 } 112 request.setAttribute("ParentMessageBean", parentMessageBean); 113 114 if (isForward) { 116 Collection attachBeans = DAOFactory.getPmAttachmentDAO().getPmAttachments_inMessage(parentMessageID); 118 request.setAttribute("AttachBeans", attachBeans); 119 } 120 } 121 122 if (isPreviewing) { 123 124 boolean sendAll = false; 125 if (MVNForumConfig.getEnablePublicMessage() && permission.canAdminSystem()) { 126 sendAll = GenericParamUtil.getParameterBoolean(request, "sendall"); 127 } 128 129 int logonMemberID = onlineUser.getMemberID(); 130 131 String messageToList = GenericParamUtil.getParameterSafe(request, "MessageToList", !(sendAll)); 132 messageToList = messageToList.replace(',', ';'); 133 messageToList = DisableHtmlTagFilter.filter(messageToList); 135 String messageCcList = GenericParamUtil.getParameterSafe(request, "MessageCcList", false); 136 messageCcList = messageCcList.replace(',', ';'); 137 messageCcList = DisableHtmlTagFilter.filter(messageCcList); 139 String messageBccList = GenericParamUtil.getParameterSafe(request, "MessageBccList", false); 140 messageBccList = messageBccList.replace(',', ';'); 141 messageBccList = DisableHtmlTagFilter.filter(messageBccList); 143 GenericParamUtil.getParameter(request, "MessageTopic", true); 144 GenericParamUtil.getParameter(request, "message", true); 146 MemberBean memberBean = null; 147 try { 148 memberBean = MemberCache.getInstance().getMember_forPublic(logonMemberID); 149 } catch (ObjectNotFoundException e) { 150 String localizedMessage = MVNForumResourceBundle.getString(locale, "mvncore.exception.ObjectNotFoundException.memberid_not_exists", new Object [] {new Integer (logonMemberID)}); 151 throw new ObjectNotFoundException(localizedMessage); 152 } 153 154 String [] receivedMembers = StringUtil.getStringArrays(messageToList, messageCcList, messageBccList, ";"); 155 156 if (sendAll == false) { 157 if (receivedMembers.length == 0) { 158 String localizedMessage = MVNForumResourceBundle.getString(locale, "mvncore.exception.AssertionException.cannot_send_message.no_receivers"); 159 throw new AssertionException(localizedMessage); 160 } 161 MyUtil.checkMembers(receivedMembers, locale); } 163 164 request.setAttribute("MemberBean", memberBean); 165 } 166 167 boolean isTutorAdmin = true; 170 try { 171 if (MVNForumConfig.getEnableCompany()) { 172 DAOFactory.getMemberGroupDAO().isTutor(onlineUser.getMemberID()); 173 } 174 } catch (ObjectNotFoundException ex) { 175 isTutorAdmin = false; 176 } 177 178 if (permission.canAdminSystem()) { 179 isTutorAdmin = true; 180 } 181 182 if ((isTutorAdmin == false) && MVNForumConfig.getEnableCompany()) { 183 MemberTutorBean memberTutorBean = null; 184 try { 185 memberTutorBean = DAOFactory.getMemberTutorDAO().getBean(onlineUser.getMemberID()); 186 } catch (ObjectNotFoundException ex) { 187 } 189 request.setAttribute("MemberTutorBean", memberTutorBean); 190 } 191 request.setAttribute("IsTutorAdmin", new Boolean (isTutorAdmin)); 192 } 193 194 public void processAdd(GenericRequest request, GenericResponse response) 195 throws ObjectNotFoundException, AssertionException, DatabaseException, CreateException, 196 BadInputException, ForeignKeyNotFoundException, AuthenticationException, InterceptorException, FloodException { 197 198 Locale locale = I18nUtil.getLocaleInRequest(request); 199 200 if (MVNForumConfig.getEnablePrivateMessage() == false) { 201 String localizedMessage = MVNForumResourceBundle.getString(locale, "mvncore.exception.AssertionException.private_message_disabled"); 202 throw new AssertionException(localizedMessage); 203 } 205 206 OnlineUser onlineUser = onlineUserManager.getOnlineUser(request); 207 MVNForumPermission permission = onlineUser.getPermission(); 208 permission.ensureIsAuthenticated(); 209 permission.ensureCanUseMessage(); 210 211 String currentIP = request.getRemoteAddr(); 212 try { 213 FloodControl.ensureNotReachMaximum(MVNForumGlobal.FLOOD_ID_NEW_MESSAGE, currentIP); 214 } catch (FloodException fe) { 215 Integer maxMessages = new Integer (FloodControl.getActionsPerHour(MVNForumGlobal.FLOOD_ID_NEW_MESSAGE)); 217 String localizedMessage = MVNForumResourceBundle.getString(locale, "mvncore.exception.FloodException.send_message_too_many_times", new Object [] {maxMessages}); 218 throw new FloodException(localizedMessage); 219 } 220 221 MyUtil.saveVNTyperMode(request, response); 222 223 int logonMemberID = onlineUser.getMemberID(); 224 String memberName = onlineUser.getMemberName(); 225 226 boolean sendAll = false; 227 228 if (MVNForumConfig.getEnablePublicMessage() && permission.canAdminSystem()) { 229 sendAll = GenericParamUtil.getParameterBoolean(request, "sendall"); 230 } 231 232 String messageToList = GenericParamUtil.getParameterSafe(request, "MessageToList", !(sendAll)); 234 messageToList = messageToList.replace(',', ';'); 235 messageToList = DisableHtmlTagFilter.filter(messageToList); 237 String messageCcList = GenericParamUtil.getParameterSafe(request, "MessageCcList", false); 238 messageCcList = messageCcList.replace(',', ';'); 239 messageCcList = DisableHtmlTagFilter.filter(messageCcList); 241 String messageBccList = GenericParamUtil.getParameterSafe(request, "MessageBccList", false); 242 messageBccList = messageBccList.replace(',', ';'); 243 messageBccList = DisableHtmlTagFilter.filter(messageBccList); 245 String messageTopic = GenericParamUtil.getParameter(request, "MessageTopic", true); 246 messageTopic = DisableHtmlTagFilter.filter(messageTopic); messageTopic = InterceptorService.getInstance().validateContent(messageTopic); 248 249 String messageBody = GenericParamUtil.getParameter(request, "message", true); messageBody = DisableHtmlTagFilter.filter(messageBody); messageBody = InterceptorService.getInstance().validateContent(messageBody); 252 253 String messageIcon = GenericParamUtil.getParameter(request, "MessageIcon"); 254 messageIcon = DisableHtmlTagFilter.filter(messageIcon); 256 if (sendAll) { 257 messageToList = onlineUser.getMemberName(); 258 messageBccList = ""; 259 messageCcList = ""; 260 } 261 262 Timestamp now = DateUtil.getCurrentGMTTimestamp(); 263 int messageSenderID = logonMemberID; 264 String messageSenderName = memberName; 265 String folderName = MVNForumConstant.MESSAGE_FOLDER_INBOX; 266 int messageType = (sendAll) ? MessageBean.MESSAGE_TYPE_PUBLIC : MessageBean.MESSAGE_TYPE_DEFAULT; 268 int messageOption = 0; int messageStatus = 0; int messageReadStatus = MessageBean.MESSAGE_READ_STATUS_DEFAULT; 271 int messageNotify = 0; int messageAttachCount = 0; 273 String messageIP = currentIP; 274 Timestamp messageCreateDate = now; 276 int parentMessageID = 0; 277 278 boolean isDraft = GenericParamUtil.getParameterBoolean(request, "draft"); 279 boolean isForward = GenericParamUtil.getParameterBoolean(request, "forward"); 280 boolean attachMore = GenericParamUtil.getParameterBoolean(request, "AttachMore"); 281 boolean addToSentFolder = GenericParamUtil.getParameterBoolean(request, "AddToSentFolder"); 282 283 String [] receivedMembers = StringUtil.getStringArrays(messageToList, messageCcList, messageBccList, ";"); 284 if (sendAll == false) { 285 if (receivedMembers.length == 0) { 286 String localizedMessage = MVNForumResourceBundle.getString(locale, "mvncore.exception.AssertionException.cannot_send_message.no_receivers"); 287 throw new AssertionException(localizedMessage); 288 } 289 } 290 291 Hashtable receivers = MyUtil.checkMembers(receivedMembers, locale); 292 293 if (isForward) { 294 parentMessageID = GenericParamUtil.getParameterInt(request, "parent"); 295 } 296 297 Collection attachBeans = null; 298 if (isForward) { 299 MessageBean parentMessageBean = null; 300 try { 301 parentMessageBean = DAOFactory.getMessageDAO().getMessage(parentMessageID); 302 } catch (ObjectNotFoundException e) { 303 String localizedMessage = MVNForumResourceBundle.getString(locale, "mvncore.exception.ObjectNotFoundException.messageid_not_exists", new Object [] {new Integer (parentMessageID)}); 304 throw new ObjectNotFoundException(localizedMessage); 305 } 306 307 boolean isPublicMessage = false; 309 if (MVNForumConfig.getEnablePublicMessage()) { 310 isPublicMessage = (permission.canAdminSystem() && (parentMessageBean.getMessageType() == MessageBean.MESSAGE_TYPE_PUBLIC)); 311 } 312 313 if ((parentMessageBean.getMemberID() != logonMemberID) && !isPublicMessage) { 314 String localizedMessage = MVNForumResourceBundle.getString(locale, "mvncore.exception.BadInputException.pm_not_belongs_to_you"); 315 throw new BadInputException(localizedMessage); 316 } 318 attachBeans = DAOFactory.getPmAttachmentDAO().getPmAttachments_inMessage(parentMessageID); 319 messageAttachCount = attachBeans.size(); } 322 int maxPrivateMessage = MVNForumConfig.getMaxPrivateMessage(); 323 if (isDraft) { folderName = MVNForumConstant.MESSAGE_FOLDER_DRAFT; 325 329 int senderMessageCount = DAOFactory.getMessageDAO().getNumberOfNonPublicMessages_inMember(logonMemberID); 330 if (senderMessageCount >= maxPrivateMessage) { 331 String localizedMessage = MVNForumResourceBundle.getString(locale, "mvncore.exception.BadInputException.over_private_message_quota", new Object [] {new Integer (maxPrivateMessage)}); 332 throw new BadInputException(localizedMessage); 333 } 335 336 int draftMessageID = DAOFactory.getMessageDAO().create(folderName, messageSenderID, messageSenderID, 337 messageSenderName, messageToList, messageCcList, 338 messageBccList, messageTopic, messageBody, 339 messageType, messageOption, messageStatus, 340 messageReadStatus, messageNotify, messageIcon, 341 messageAttachCount, messageIP, messageCreateDate); 342 if (isForward) { 343 for (Iterator attachIter = attachBeans.iterator(); attachIter.hasNext(); ) { 345 PmAttachmentBean pmAttachBean = (PmAttachmentBean)attachIter.next(); 346 try { 347 DAOFactory.getPmAttachMessageDAO().create(draftMessageID, pmAttachBean.getPmAttachID(), 0, 0, 0); 348 } catch (DuplicateKeyException ex) { 349 throw new AssertionException("DuplicateKeyException when create PmAttachMessage"); 351 } 352 } 353 } 355 attachMore = false; 356 } else { if (attachMore) { 360 361 int senderMessageCount = DAOFactory.getMessageDAO().getNumberOfNonPublicMessages_inMember(logonMemberID); 362 if (senderMessageCount >= maxPrivateMessage) { 363 String localizedMessage = MVNForumResourceBundle.getString(locale, "mvncore.exception.BadInputException.over_private_message_quota", new Object [] {new Integer (maxPrivateMessage)}); 364 throw new BadInputException(localizedMessage); 365 } 367 368 folderName = MVNForumConstant.MESSAGE_FOLDER_DRAFT; int messageID = DAOFactory.getMessageDAO().create(folderName, messageSenderID, messageSenderID, 371 messageSenderName, messageToList, messageCcList, 372 messageBccList, messageTopic, messageBody, 373 messageType, messageOption, messageStatus, 374 messageReadStatus, messageNotify, messageIcon, 375 messageAttachCount, messageIP, messageCreateDate); 376 if (isForward) { 377 for (Iterator attachIter = attachBeans.iterator(); attachIter.hasNext(); ) { 379 PmAttachmentBean pmAttachBean = (PmAttachmentBean)attachIter.next(); 380 try { 381 DAOFactory.getPmAttachMessageDAO().create(messageID, pmAttachBean.getPmAttachID(), 0, 0, 0); 382 } catch (DuplicateKeyException ex) { 383 throw new AssertionException("DuplicateKeyException when create PmAttachMessage"); 385 } 386 } 387 } 389 request.setAttribute("MessageID", new Integer (messageID)); 391 } else { StringBuffer overQuotaReceivers = new StringBuffer (128); 394 for (Enumeration enumeration = receivers.keys(); enumeration.hasMoreElements(); ) { 395 int receivedMemberID = ((Integer )enumeration.nextElement()).intValue(); 396 String receivedMemberName = (String )receivers.get(new Integer (receivedMemberID)); 397 398 int receiverMessageCount = DAOFactory.getMessageDAO().getNumberOfNonPublicMessages_inMember(receivedMemberID); 399 if (receiverMessageCount >= maxPrivateMessage) { 400 if (overQuotaReceivers.length() > 0) { 401 overQuotaReceivers.append(", "); 402 } 403 overQuotaReceivers.append(receivedMemberName); 404 continue; 405 } 406 407 int eachMessageID = DAOFactory.getMessageDAO().create(folderName, receivedMemberID, messageSenderID, 409 messageSenderName, messageToList, messageCcList, 410 messageBccList, messageTopic, messageBody, 411 messageType, messageOption, messageStatus, 412 messageReadStatus, messageNotify, messageIcon, 413 messageAttachCount, messageIP, messageCreateDate); 414 415 if (messageSenderID != receivedMemberID) { 417 DAOFactory.getMessageStatisticsDAO().create(messageSenderID, receivedMemberID, messageCreateDate, 418 messageAttachCount, messageType, messageOption, messageStatus); 419 } 420 421 if (isForward) { 422 for (Iterator attachIter = attachBeans.iterator(); attachIter.hasNext(); ) { 424 PmAttachmentBean pmAttachBean = (PmAttachmentBean)attachIter.next(); 425 try { 426 DAOFactory.getPmAttachMessageDAO().create(eachMessageID, pmAttachBean.getPmAttachID(), 0, 0, 0); 427 } catch (DuplicateKeyException ex) { 428 throw new AssertionException("DuplicateKeyException when create PmAttachMessage"); 430 } 431 } 432 } } request.setAttribute("OverQuotaReceivers", overQuotaReceivers.toString()); 435 436 if (addToSentFolder) { 438 int senderMessageCount = DAOFactory.getMessageDAO().getNumberOfNonPublicMessages_inMember(logonMemberID); 439 if (senderMessageCount < maxPrivateMessage) { 440 folderName = MVNForumConstant.MESSAGE_FOLDER_SENT; 441 messageType = MessageBean.MESSAGE_TYPE_DEFAULT; int sentMessageID = DAOFactory.getMessageDAO().create(folderName, messageSenderID, messageSenderID, 443 messageSenderName, messageToList, messageCcList, 444 messageBccList, messageTopic, messageBody, 445 messageType, messageOption, messageStatus, 446 messageReadStatus, messageNotify, messageIcon, 447 messageAttachCount, messageIP, messageCreateDate); 448 if (isForward) { 449 for (Iterator attachIter = attachBeans.iterator(); attachIter.hasNext(); ) { 451 PmAttachmentBean pmAttachBean = (PmAttachmentBean)attachIter.next(); 452 try { 453 DAOFactory.getPmAttachMessageDAO().create(sentMessageID, pmAttachBean.getPmAttachID(), 0, 0, 0); 454 } catch (DuplicateKeyException ex) { 455 throw new AssertionException("DuplicateKeyException when create PmAttachMessage"); 457 } 458 } 459 } } else { 461 request.setAttribute("AddSentFolderOverQuota", Boolean.TRUE); 462 } 463 } } } 467 request.setAttribute("AttachMore", new Boolean (attachMore)); 468 request.setAttribute("AddToSentFolder", new Boolean (addToSentFolder)); 469 470 FloodControl.increaseCount(MVNForumGlobal.FLOOD_ID_NEW_MESSAGE, currentIP); 471 } 472 473 public void prepareViewMessage(GenericRequest request) 474 throws ObjectNotFoundException, DatabaseException, BadInputException, 475 AuthenticationException, AssertionException { 476 477 Locale locale = I18nUtil.getLocaleInRequest(request); 478 479 if (MVNForumConfig.getEnablePrivateMessage() == false) { 480 String localizedMessage = MVNForumResourceBundle.getString(locale, "mvncore.exception.AssertionException.private_message_disabled"); 481 throw new AssertionException(localizedMessage); 482 } 484 485 OnlineUser onlineUser = onlineUserManager.getOnlineUser(request); 486 MVNForumPermission permission = onlineUser.getPermission(); 487 permission.ensureIsAuthenticated(); 488 permission.ensureCanUseMessage(); 489 490 int logonMemberID = onlineUser.getMemberID(); 491 492 int messageID = GenericParamUtil.getParameterInt(request, "message"); 493 494 MessageBean messageBean = null; 495 try { 496 messageBean = DAOFactory.getMessageDAO().getMessage(messageID); 497 } catch (ObjectNotFoundException e) { 498 String localizedMessage = MVNForumResourceBundle.getString(locale, "mvncore.exception.ObjectNotFoundException.messageid_not_exists", new Object [] {new Integer (messageID)}); 499 throw new ObjectNotFoundException(localizedMessage); 500 } 501 502 boolean isPublicMessage = ((messageBean.getMessageType() == MessageBean.MESSAGE_TYPE_PUBLIC) && MVNForumConfig.getEnablePublicMessage()); 504 if ((messageBean.getMemberID() != logonMemberID) && !isPublicMessage) { 505 String localizedMessage = MVNForumResourceBundle.getString(locale, "mvncore.exception.BadInputException.pm_not_belongs_to_you"); 506 throw new BadInputException(localizedMessage); 507 } 509 510 MemberBean memberSenderBean = null; 511 int messageSenderID = messageBean.getMessageSenderID(); 512 try { 513 memberSenderBean = MemberCache.getInstance().getMember_forPublic(messageSenderID); 514 } catch (ObjectNotFoundException e) { 515 } 518 519 if (isPublicMessage) { 520 DAOFactory.getMessageDAO().updateMessageReadStatus(messageID, messageBean.getMemberID(), MessageBean.MESSAGE_READ_STATUS_READ); 521 } else { DAOFactory.getMessageDAO().updateMessageReadStatus(messageID, logonMemberID, MessageBean.MESSAGE_READ_STATUS_READ); 523 } 524 525 Collection attachBeans = DAOFactory.getPmAttachmentDAO().getPmAttachments_inMessage(messageID); 527 messageBean.setAttachmentBeans(attachBeans); 528 529 onlineUser.updateNewMessageCount(true); 531 532 request.setAttribute("MessageBean", messageBean); 533 request.setAttribute("MemberSenderBean", memberSenderBean); 534 } 535 536 public void prepareList(GenericRequest request) 537 throws BadInputException, DatabaseException, ObjectNotFoundException, 538 AuthenticationException, AssertionException { 539 540 Locale locale = I18nUtil.getLocaleInRequest(request); 541 542 if (MVNForumConfig.getEnablePrivateMessage() == false) { 543 String localizedMessage = MVNForumResourceBundle.getString(locale, "mvncore.exception.AssertionException.private_message_disabled"); 544 throw new AssertionException(localizedMessage); 545 } 547 548 OnlineUser onlineUser = onlineUserManager.getOnlineUser(request); 549 MVNForumPermission permission = onlineUser.getPermission(); 550 permission.ensureIsAuthenticated(); 551 permission.ensureCanUseMessage(); 552 553 onlineUser.updateNewMessageCount(true); 555 556 String folderName = GenericParamUtil.getParameter(request, "folder"); 558 if (folderName.length() == 0) { 559 folderName = MVNForumConstant.MESSAGE_FOLDER_INBOX; } 561 StringUtil.checkGoodName(folderName); 562 563 String sort = GenericParamUtil.getParameter(request, "sort"); 565 String order = GenericParamUtil.getParameter(request, "order"); 566 if (sort.length() == 0) sort = "MessageCreationDate"; 567 if (order.length()== 0) order = "DESC"; 568 569 int messagePerPage = onlineUser.getMessagesPerPage(); 571 int offset = 0; 572 try { 573 offset = GenericParamUtil.getParameterInt(request, "offset"); 574 } catch (BadInputException ex) { 575 } 577 int logonMemberID = onlineUser.getMemberID(); 578 579 try { 580 DAOFactory.getMessageFolderDAO().findByPrimaryKey(folderName, logonMemberID); 581 } catch (ObjectNotFoundException onf) { 582 String localizedMessage = MVNForumResourceBundle.getString(locale, "mvncore.exception.ObjectNotFoundException.messagefolder_not_exists", new Object [] {folderName}); 583 throw new ObjectNotFoundException(localizedMessage); 584 } 585 586 int numberOfMessages = DAOFactory.getMessageDAO().getNumberOfNonPublicMessages_inMember_inFolder(logonMemberID, folderName); 587 if (offset > numberOfMessages) { 588 String localizedMessage = MVNForumResourceBundle.getString(locale, "mvncore.exception.BadInputException.offset_greater_than_total_rows"); 589 throw new BadInputException(localizedMessage); 590 } 592 593 Collection messageBeans = null; 594 if (folderName.equalsIgnoreCase(MVNForumConstant.MESSAGE_FOLDER_DRAFT)) { 595 messageBeans = DAOFactory.getMessageDAO().getAllMessages_inMember_inFolder_withSortSupport_limit(logonMemberID, folderName, offset, messagePerPage, sort, order); 597 } else { 598 messageBeans = DAOFactory.getMessageDAO().getNonPublicMessages_inMember_inFolder_withSortSupport_limit(logonMemberID, folderName, offset, messagePerPage, sort, order); 599 } 600 601 Collection messagePublicBeans = null; 602 if (MVNForumConfig.getEnablePublicMessage()) { 603 messagePublicBeans = DAOFactory.getMessageDAO().getPublicMessages(); 604 } 605 606 Collection messageFolderBeans = DAOFactory.getMessageFolderDAO().getMessageFolders_inMember(logonMemberID); 608 for (Iterator iter = messageFolderBeans.iterator(); iter.hasNext(); ) { 609 MessageFolderBean messageFolder = (MessageFolderBean) iter.next(); 610 int messageCount; 611 int unreadMessageCount; 612 if (messageFolder.getFolderName().equalsIgnoreCase(MVNForumConstant.MESSAGE_FOLDER_DRAFT)) { 613 messageCount = DAOFactory.getMessageDAO().getNumberOfAllMessages_inMember_inFolder(logonMemberID, messageFolder.getFolderName()); 615 unreadMessageCount = DAOFactory.getMessageDAO().getNumberOfUnreadAllMessages_inMember_inFolder(logonMemberID, messageFolder.getFolderName()); 616 } else { 617 messageCount = DAOFactory.getMessageDAO().getNumberOfNonPublicMessages_inMember_inFolder(logonMemberID, messageFolder.getFolderName()); 618 unreadMessageCount = DAOFactory.getMessageDAO().getNumberOfUnreadNonPublicMessages_inMember_inFolder(logonMemberID, messageFolder.getFolderName()); 619 } 620 messageFolder.setMessageCount(messageCount); 621 messageFolder.setUnreadMessageCount(unreadMessageCount); 622 } 624 int max = MVNForumConfig.getMaxPrivateMessage(); 626 int messageCount = DAOFactory.getMessageDAO().getNumberOfNonPublicMessages_inMember(logonMemberID); 627 double ratio = 0; 628 if (max == 0) { 629 ratio = 1.0; 630 } else { 631 ratio = (double)messageCount / max; 632 } 633 635 request.setAttribute("QuotaRatio", new Double (ratio*100)); 636 request.setAttribute("MessagePublicBeans", messagePublicBeans); 637 request.setAttribute("MessageFolderBeans", messageFolderBeans); 638 request.setAttribute("MessageBeans", messageBeans); 639 request.setAttribute("TotalMessages", new Integer (numberOfMessages)); 640 } 641 642 public void processMessage(GenericRequest request) 643 throws ObjectNotFoundException, DatabaseException, BadInputException, 644 AuthenticationException, AssertionException { 645 646 Locale locale = I18nUtil.getLocaleInRequest(request); 647 648 if (MVNForumConfig.getEnablePrivateMessage() == false) { 649 String localizedMessage = MVNForumResourceBundle.getString(locale, "mvncore.exception.AssertionException.private_message_disabled"); 650 throw new AssertionException(localizedMessage); 651 } 653 654 OnlineUser onlineUser = onlineUserManager.getOnlineUser(request); 655 MVNForumPermission permission = onlineUser.getPermission(); 656 permission.ensureIsAuthenticated(); 657 permission.ensureCanUseMessage(); 658 659 String btnDelete = request.getParameter("btnDelete"); 660 String btnUnreadMark = request.getParameter("btnUnreadMark"); 661 String btnMoveFolder = request.getParameter("btnMoveFolder"); 662 663 int logonMemberID = onlineUser.getMemberID(); 664 int action = 0; 670 if ((btnDelete != null)) { 671 action = 1; 672 } else if (btnUnreadMark != null) { 673 action = 2; 674 } else if (btnMoveFolder != null) { 675 action = 3; 676 } else { 677 String localizedMessage = MVNForumResourceBundle.getString(locale, "mvncore.exception.BadInputException.cannot_specify_action"); 678 throw new BadInputException(localizedMessage); 679 } 681 682 if (action == 1) { String [] deleteList = request.getParameterValues("selectedmessage"); 685 for (int i = 0; (deleteList != null) && (i < deleteList.length); i++) { 686 int messageID = Integer.parseInt(deleteList[i]); 687 688 MessageBean messageBean = null; 689 try { 690 messageBean = DAOFactory.getMessageDAO().getMessage(messageID); 691 } catch (ObjectNotFoundException e) { 692 String localizedMessage = MVNForumResourceBundle.getString(locale, "mvncore.exception.ObjectNotFoundException.messageid_not_exists", new Object [] {new Integer (messageID)}); 693 throw new ObjectNotFoundException(localizedMessage); 694 } 695 696 if (messageBean.getMessageType() == MessageBean.MESSAGE_TYPE_PUBLIC) { 698 if (permission.canAdminSystem() == false) { 700 throw new AssertionException("Only Admin can delete public message."); 701 } 702 PrivateMessageUtil.deleteMessageInDatabase(messageID, messageBean.getMemberID()); 703 } else { 704 if (messageBean.getMemberID() != logonMemberID) { 706 String localizedMessage = MVNForumResourceBundle.getString(locale, "mvncore.exception.BadInputException.pm_not_belongs_to_you"); 707 throw new BadInputException(localizedMessage); 708 } 710 PrivateMessageUtil.deleteMessageInDatabase(messageID, logonMemberID); 711 } 712 } 713 request.setAttribute("Status", "Delete"); 714 } else if (action == 2 ) { String [] unreadList = request.getParameterValues("selectedmessage"); 717 for (int i = 0; (unreadList != null) && (i < unreadList.length); i++) { 718 int messageID = Integer.parseInt(unreadList[i]); 719 MessageBean messageBean = null; 720 try { 721 messageBean = DAOFactory.getMessageDAO().getMessage(messageID); 722 } catch (ObjectNotFoundException e) { 723 String localizedMessage = MVNForumResourceBundle.getString(locale, "mvncore.exception.ObjectNotFoundException.messageid_not_exists", new Object [] {new Integer (messageID)}); 724 throw new ObjectNotFoundException(localizedMessage); 725 } 726 if (messageBean.getMessageType() != MessageBean.MESSAGE_TYPE_PUBLIC) { 727 if (messageBean.getMemberID() != logonMemberID) { 729 String localizedMessage = MVNForumResourceBundle.getString(locale, "mvncore.exception.BadInputException.pm_not_belongs_to_you"); 730 throw new BadInputException(localizedMessage); 731 } 733 DAOFactory.getMessageDAO().updateMessageReadStatus(messageID, logonMemberID, MessageBean.MESSAGE_READ_STATUS_DEFAULT); 735 } 736 } 737 request.setAttribute("Status", "Unread"); 738 } else if (action == 3) { String [] movingList = request.getParameterValues("selectedmessage"); 741 String destinationFolder = GenericParamUtil.getParameterSafe(request, "DestinationFolder", true); 742 StringUtil.checkGoodName(destinationFolder); 743 744 for (int i = 0; (movingList != null) && (i < movingList.length); i++) { 745 int messageID = Integer.parseInt(movingList[i]); 746 MessageBean messageBean = null; 747 try { 748 messageBean = DAOFactory.getMessageDAO().getMessage(messageID); 749 } catch (ObjectNotFoundException e) { 750 String localizedMessage = MVNForumResourceBundle.getString(locale, "mvncore.exception.ObjectNotFoundException.messageid_not_exists", new Object [] {new Integer (messageID)}); 751 throw new ObjectNotFoundException(localizedMessage); 752 } 753 if (messageBean.getMessageType() != MessageBean.MESSAGE_TYPE_PUBLIC) { 754 if (messageBean.getMemberID() != logonMemberID) { 756 String localizedMessage = MVNForumResourceBundle.getString(locale, "mvncore.exception.BadInputException.pm_not_belongs_to_you"); 757 throw new BadInputException(localizedMessage); 758 } 760 DAOFactory.getMessageDAO().updateFolderName(messageID, logonMemberID, destinationFolder); 762 } 763 } 764 request.setAttribute("Status", "MoveFolder"); 765 } 766 } 767 768 public void processSendMessage(GenericRequest request) 769 throws ObjectNotFoundException, DatabaseException, BadInputException, 770 CreateException, ForeignKeyNotFoundException, AuthenticationException, AssertionException { 771 772 Locale locale = I18nUtil.getLocaleInRequest(request); 773 774 if (MVNForumConfig.getEnablePrivateMessage() == false) { 775 String localizedMessage = MVNForumResourceBundle.getString(locale, "mvncore.exception.AssertionException.private_message_disabled"); 776 throw new AssertionException(localizedMessage); 777 } 779 780 OnlineUser onlineUser = onlineUserManager.getOnlineUser(request); 781 MVNForumPermission permission = onlineUser.getPermission(); 782 permission.ensureIsAuthenticated(); 783 permission.ensureCanUseMessage(); 784 785 int logonMemberID = onlineUser.getMemberID(); 786 int messageID = GenericParamUtil.getParameterInt(request, "message"); 787 788 MessageBean messageBean = null; 789 try { 790 messageBean = DAOFactory.getMessageDAO().getMessage(messageID); 791 } catch (ObjectNotFoundException e) { 792 String localizedMessage = MVNForumResourceBundle.getString(locale, "mvncore.exception.ObjectNotFoundException.messageid_not_exists", new Object [] {new Integer (messageID)}); 793 throw new ObjectNotFoundException(localizedMessage); 794 } 795 796 if (messageBean.getMemberID() != logonMemberID ) { 798 String localizedMessage = MVNForumResourceBundle.getString(locale, "mvncore.exception.BadInputException.pm_not_belongs_to_you"); 799 throw new BadInputException(localizedMessage); 800 } 802 803 if (messageBean.getFolderName().equalsIgnoreCase(MVNForumConstant.MESSAGE_FOLDER_DRAFT) == false) { 804 String localizedMessage = MVNForumResourceBundle.getString(locale, "mvncore.exception.BadInputException.cannot_add_attachment.pm_does_not_in_folder_draft"); 805 throw new BadInputException(localizedMessage); 806 } 808 809 if (messageBean.getMessageSenderID() != logonMemberID ) { 811 throw new AssertionException("Assertion: The MessageSenderID must equals the current logined user."); 812 } 813 if (messageBean.getMessageSenderName().equals(onlineUser.getMemberName()) == false) { 814 throw new AssertionException("Assertion: The MessageSenderName must equals the current logined user."); 815 } 816 817 Timestamp now = DateUtil.getCurrentGMTTimestamp(); 818 Collection attachBeans = DAOFactory.getPmAttachmentDAO().getPmAttachments_inMessage(messageBean.getMessageID()); 820 int maxPrivateMessage = MVNForumConfig.getMaxPrivateMessage(); 821 822 String [] receivedMembers = StringUtil.getStringArrays(messageBean.getMessageToList(), messageBean.getMessageCcList(), messageBean.getMessageBccList(), ";"); 823 Hashtable receivers = MyUtil.checkMembers(receivedMembers, locale); 824 825 StringBuffer overQuotaReceivers = new StringBuffer (128); 826 for (Enumeration enumeration = receivers.keys(); enumeration.hasMoreElements(); ) { 827 int receivedMemberID = ((Integer )enumeration.nextElement()).intValue(); 828 String receivedMemberName = (String )receivers.get(new Integer (receivedMemberID)); 829 830 int receiverMessageCount = DAOFactory.getMessageDAO().getNumberOfNonPublicMessages_inMember(receivedMemberID); 831 if (receiverMessageCount >= maxPrivateMessage) { 832 if (overQuotaReceivers.length() > 0) { 833 overQuotaReceivers.append(", "); 834 } 835 overQuotaReceivers.append(receivedMemberName); 836 continue; 837 } 838 839 int eachMessageID = DAOFactory.getMessageDAO().create(MVNForumConstant.MESSAGE_FOLDER_INBOX, receivedMemberID, logonMemberID, 842 messageBean.getMessageSenderName(), messageBean.getMessageToList(), messageBean.getMessageCcList(), 843 messageBean.getMessageBccList(), messageBean.getMessageTopic(), messageBean.getMessageBody(), 844 messageBean.getMessageType(), messageBean.getMessageOption(), messageBean.getMessageStatus(), 845 MessageBean.MESSAGE_READ_STATUS_DEFAULT, messageBean.getMessageNotify(), messageBean.getMessageIcon(), 846 messageBean.getMessageAttachCount(), request.getRemoteAddr(), now); 847 848 if (logonMemberID != receivedMemberID) { 850 DAOFactory.getMessageStatisticsDAO().create(logonMemberID, receivedMemberID, now, 851 messageBean.getMessageAttachCount(), messageBean.getMessageType(), 852 messageBean.getMessageOption(), messageBean.getMessageStatus()); 853 } 854 855 for (Iterator attachIter = attachBeans.iterator(); attachIter.hasNext(); ) { 857 PmAttachmentBean pmAttachBean = (PmAttachmentBean)attachIter.next(); 858 try { 859 DAOFactory.getPmAttachMessageDAO().create(eachMessageID, pmAttachBean.getPmAttachID(), 0, 0, 0); 860 } catch (DuplicateKeyException ex) { 861 throw new AssertionException("DuplicateKeyException when create PmAttachMessage"); 863 } 864 } 865 } request.setAttribute("OverQuotaReceivers", overQuotaReceivers.toString()); 867 868 PrivateMessageUtil.deleteMessageInDatabase(messageID, logonMemberID); 870 871 request.setAttribute("MessageID", new Integer (messageID)); 872 request.setAttribute("AttachMore", new Boolean (false)); 873 request.setAttribute("AddToSentFolder", new Boolean (false)); 874 } 875 876 public void processDelete(GenericRequest request) 877 throws ObjectNotFoundException, DatabaseException, BadInputException, 878 AuthenticationException, AssertionException { 879 880 Locale locale = I18nUtil.getLocaleInRequest(request); 881 882 if (MVNForumConfig.getEnablePrivateMessage() == false) { 883 String localizedMessage = MVNForumResourceBundle.getString(locale, "mvncore.exception.AssertionException.private_message_disabled"); 884 throw new AssertionException(localizedMessage); 885 } 887 888 OnlineUser onlineUser = onlineUserManager.getOnlineUser(request); 889 MVNForumPermission permission = onlineUser.getPermission(); 890 permission.ensureIsAuthenticated(); 891 permission.ensureCanUseMessage(); 892 893 int logonMemberID = onlineUser.getMemberID(); 894 895 int messageID = GenericParamUtil.getParameterInt(request, "message"); 896 897 MessageBean messageBean = null; 898 try { 899 messageBean = DAOFactory.getMessageDAO().getMessage(messageID); 900 } catch (ObjectNotFoundException e) { 901 String localizedMessage = MVNForumResourceBundle.getString(locale, "mvncore.exception.ObjectNotFoundException.messageid_not_exists", new Object [] {new Integer (messageID)}); 902 throw new ObjectNotFoundException(localizedMessage); 903 } 904 905 if (messageBean.getMemberID() != logonMemberID) { 908 String localizedMessage = MVNForumResourceBundle.getString(locale, "mvncore.exception.BadInputException.pm_not_belongs_to_you"); 909 throw new BadInputException(localizedMessage); 910 } 912 913 PrivateMessageUtil.deleteMessageInDatabase(messageID, logonMemberID); 915 916 request.setAttribute("FolderName", messageBean.getFolderName()); 917 } 918 919 } 920 | Popular Tags |