protected long importMBMessage( MBMessage mbMessage, long threadId, long calendarBookingId, Map<Long, Long> mbMessageIds) throws PortalException, SystemException { Long messageId = mbMessageIds.get(mbMessage.getMessageId()); if (messageId != null) { return messageId; } messageId = counterLocalService.increment(); addMBMessage( PortalUUIDUtil.generate(), messageId, mbMessage.getGroupId(), mbMessage.getCompanyId(), mbMessage.getUserId(), mbMessage.getUserName(), mbMessage.getCreateDate(), mbMessage.getModifiedDate(), classNameLocalService.getClassNameId(CalendarBooking.class.getName()), calendarBookingId, mbMessage.getCategoryId(), threadId, mbMessage.getRootMessageId(), mbMessage.getParentMessageId(), mbMessage.getSubject(), mbMessage.getBody(), mbMessage.getFormat(), mbMessage.isAnonymous(), mbMessage.getPriority(), mbMessage.getAllowPingbacks(), mbMessage.isAnswer(), mbMessage.getStatus(), mbMessage.getStatusByUserId(), mbMessage.getStatusByUserName(), mbMessage.getStatusDate(), mbMessageIds); long mbDiscussionClassNameId = classNameLocalService.getClassNameId(MBDiscussion.class.getName()); importRatings( mbDiscussionClassNameId, mbMessage.getMessageId(), mbDiscussionClassNameId, messageId); mbMessageIds.put(mbMessage.getMessageId(), messageId); return messageId; }
protected void migrateMB() throws Exception { int count = MBMessageLocalServiceUtil.getMBMessagesCount(); int pages = count / Indexer.DEFAULT_INTERVAL; MaintenanceUtil.appendStatus("Migrating message boards attachments in " + count + " messages"); for (int i = 0; i <= pages; i++) { int start = (i * Indexer.DEFAULT_INTERVAL); int end = start + Indexer.DEFAULT_INTERVAL; List<MBMessage> messages = MBMessageLocalServiceUtil.getMBMessages(start, end); for (MBMessage message : messages) { migrateFiles( message.getCompanyId(), message.getAttachmentsDir(), message.getAttachmentsFiles()); } } }
public static JSONObject toJSONObject(MBMessage model) { JSONObject jsonObj = new JSONObject(); JSONUtil.put(jsonObj, "uuid", model.getUuid()); JSONUtil.put(jsonObj, "messageId", model.getMessageId()); JSONUtil.put(jsonObj, "companyId", model.getCompanyId()); JSONUtil.put(jsonObj, "userId", model.getUserId()); JSONUtil.put(jsonObj, "userName", model.getUserName()); JSONUtil.put(jsonObj, "createDate", model.getCreateDate()); JSONUtil.put(jsonObj, "modifiedDate", model.getModifiedDate()); JSONUtil.put(jsonObj, "categoryId", model.getCategoryId()); JSONUtil.put(jsonObj, "threadId", model.getThreadId()); JSONUtil.put(jsonObj, "parentMessageId", model.getParentMessageId()); JSONUtil.put(jsonObj, "subject", model.getSubject()); JSONUtil.put(jsonObj, "body", model.getBody()); JSONUtil.put(jsonObj, "attachments", model.getAttachments()); JSONUtil.put(jsonObj, "anonymous", model.getAnonymous()); return jsonObj; }
public void markNotSpamMBMessages(ActionRequest actionRequest, ActionResponse actionResponse) throws Exception { ThemeDisplay themeDisplay = (ThemeDisplay) actionRequest.getAttribute(WebKeys.THEME_DISPLAY); checkMBMessagePermission(themeDisplay.getScopeGroupId()); long[] mbMessageIds = ParamUtil.getLongValues(actionRequest, "notSpamMBMessageIds"); ServiceContext serviceContext = ServiceContextFactory.getInstance(actionRequest); for (long mbMessageId : mbMessageIds) { MBMessage mbMessage = MBMessageLocalServiceUtil.updateStatus( themeDisplay.getUserId(), mbMessageId, WorkflowConstants.STATUS_APPROVED, serviceContext); if (AkismetUtil.isMessageBoardsEnabled(mbMessage.getCompanyId())) { AkismetUtil.submitHam(mbMessage); } } }
protected void updateDependentStatus(long groupId, long threadId, int status) throws PortalException, SystemException { Set<Long> userIds = new HashSet<Long>(); List<MBMessage> messages = mbMessageLocalService.getThreadMessages(threadId, WorkflowConstants.STATUS_ANY); for (MBMessage message : messages) { if (message.isDiscussion()) { continue; } userIds.add(message.getUserId()); if (status == WorkflowConstants.STATUS_IN_TRASH) { // Asset if (message.getStatus() == WorkflowConstants.STATUS_APPROVED) { assetEntryLocalService.updateVisible( MBMessage.class.getName(), message.getMessageId(), false); } // Social socialActivityCounterLocalService.disableActivityCounters( MBMessage.class.getName(), message.getMessageId()); // Index Indexer indexer = IndexerRegistryUtil.nullSafeGetIndexer(MBMessage.class); indexer.reindex(message); // Workflow if (message.getStatus() == WorkflowConstants.STATUS_PENDING) { message.setStatus(WorkflowConstants.STATUS_DRAFT); mbMessagePersistence.update(message); workflowInstanceLinkLocalService.deleteWorkflowInstanceLink( message.getCompanyId(), message.getGroupId(), MBMessage.class.getName(), message.getMessageId()); } } else { // Asset if (message.getStatus() == WorkflowConstants.STATUS_APPROVED) { assetEntryLocalService.updateVisible( MBMessage.class.getName(), message.getMessageId(), true); } // Social socialActivityCounterLocalService.enableActivityCounters( MBMessage.class.getName(), message.getMessageId()); // Index Indexer indexer = IndexerRegistryUtil.nullSafeGetIndexer(MBMessage.class); indexer.reindex(message); } } // Statistics for (long userId : userIds) { mbStatsUserLocalService.updateStatsUser(groupId, userId); } }
@Override public MBThread addThread(long categoryId, MBMessage message, ServiceContext serviceContext) throws PortalException, SystemException { // Thread Date now = new Date(); long threadId = message.getThreadId(); if (!message.isRoot() || (threadId <= 0)) { threadId = counterLocalService.increment(); } MBThread thread = mbThreadPersistence.create(threadId); thread.setUuid(serviceContext.getUuid()); thread.setGroupId(message.getGroupId()); thread.setCompanyId(message.getCompanyId()); thread.setUserId(message.getUserId()); thread.setUserName(message.getUserName()); thread.setCreateDate(serviceContext.getCreateDate(now)); thread.setModifiedDate(serviceContext.getModifiedDate(now)); thread.setCategoryId(categoryId); thread.setRootMessageId(message.getMessageId()); thread.setRootMessageUserId(message.getUserId()); if (message.isAnonymous()) { thread.setLastPostByUserId(0); } else { thread.setLastPostByUserId(message.getUserId()); } thread.setLastPostDate(message.getCreateDate()); if (message.getPriority() != MBThreadConstants.PRIORITY_NOT_GIVEN) { thread.setPriority(message.getPriority()); } thread.setStatus(message.getStatus()); thread.setStatusByUserId(message.getStatusByUserId()); thread.setStatusByUserName(message.getStatusByUserName()); thread.setStatusDate(message.getStatusDate()); mbThreadPersistence.update(thread); // Asset if (categoryId >= 0) { assetEntryLocalService.updateEntry( message.getUserId(), message.getGroupId(), thread.getStatusDate(), thread.getLastPostDate(), MBThread.class.getName(), thread.getThreadId(), thread.getUuid(), 0, new long[0], new String[0], false, null, null, null, null, String.valueOf(thread.getRootMessageId()), null, null, null, null, 0, 0, null, false); } return thread; }
@Override @SystemEvent( action = SystemEventConstants.ACTION_SKIP, send = false, type = SystemEventConstants.TYPE_DELETE) public void deleteThread(MBThread thread) throws PortalException, SystemException { MBMessage rootMessage = mbMessagePersistence.findByPrimaryKey(thread.getRootMessageId()); // Indexer Indexer indexer = IndexerRegistryUtil.nullSafeGetIndexer(MBMessage.class); indexer.delete(thread); // Attachments long folderId = thread.getAttachmentsFolderId(); if (folderId != DLFolderConstants.DEFAULT_PARENT_FOLDER_ID) { PortletFileRepositoryUtil.deleteFolder(folderId); } // Subscriptions subscriptionLocalService.deleteSubscriptions( thread.getCompanyId(), MBThread.class.getName(), thread.getThreadId()); // Thread flags mbThreadFlagPersistence.removeByThreadId(thread.getThreadId()); // Messages List<MBMessage> messages = mbMessagePersistence.findByThreadId(thread.getThreadId()); for (MBMessage message : messages) { // Ratings ratingsStatsLocalService.deleteStats(message.getWorkflowClassName(), message.getMessageId()); // Asset assetEntryLocalService.deleteEntry(message.getWorkflowClassName(), message.getMessageId()); // Resources if (!message.isDiscussion()) { resourceLocalService.deleteResource( message.getCompanyId(), message.getWorkflowClassName(), ResourceConstants.SCOPE_INDIVIDUAL, message.getMessageId()); } // Message mbMessagePersistence.remove(message); // Statistics if (!message.isDiscussion()) { mbStatsUserLocalService.updateStatsUser(message.getGroupId(), message.getUserId()); } // Workflow workflowInstanceLinkLocalService.deleteWorkflowInstanceLink( message.getCompanyId(), message.getGroupId(), message.getWorkflowClassName(), message.getMessageId()); } // Category if ((rootMessage.getCategoryId() != MBCategoryConstants.DEFAULT_PARENT_CATEGORY_ID) && (rootMessage.getCategoryId() != MBCategoryConstants.DISCUSSION_CATEGORY_ID)) { try { MBCategory category = mbCategoryPersistence.findByPrimaryKey(thread.getCategoryId()); MBUtil.updateCategoryStatistics(category.getCompanyId(), category.getCategoryId()); } catch (NoSuchCategoryException nsce) { if (!thread.isInTrash()) { throw nsce; } } } // Thread Asset AssetEntry assetEntry = assetEntryLocalService.fetchEntry(MBThread.class.getName(), thread.getThreadId()); if (assetEntry != null) { assetEntry.setTitle(rootMessage.getSubject()); assetEntryLocalService.updateAssetEntry(assetEntry); } assetEntryLocalService.deleteEntry(MBThread.class.getName(), thread.getThreadId()); // Trash trashEntryLocalService.deleteEntry(MBThread.class.getName(), thread.getThreadId()); // Thread mbThreadPersistence.remove(thread); }
protected void mergeCategories(MBCategory fromCategory, long toCategoryId) throws PortalException, SystemException { Iterator itr = mbCategoryPersistence .findByG_P(fromCategory.getGroupId(), fromCategory.getCategoryId()) .iterator(); while (itr.hasNext()) { MBCategory category = (MBCategory) itr.next(); mergeCategories(category, toCategoryId); } Iterator itr1 = mbThreadPersistence.findByCategoryId(fromCategory.getCategoryId()).iterator(); while (itr1.hasNext()) { // Thread MBThread thread = (MBThread) itr1.next(); thread.setCategoryId(toCategoryId); mbThreadPersistence.update(thread); Iterator itr2 = mbMessagePersistence.findByThreadId(thread.getThreadId()).iterator(); while (itr2.hasNext()) { // Message MBMessage message = (MBMessage) itr2.next(); message.setCategoryId(toCategoryId); mbMessagePersistence.update(message); // Lucene try { if (!fromCategory.isDiscussion()) { String[] tagsEntries = tagsEntryLocalService.getEntryNames( MBMessage.class.getName(), message.getMessageId()); Indexer.updateMessage( message.getCompanyId(), fromCategory.getGroupId(), message.getUserName(), toCategoryId, message.getThreadId(), message.getMessageId(), message.getSubject(), message.getBody(), tagsEntries); } } catch (IOException ioe) { _log.error("Indexing " + message.getMessageId(), ioe); } } } mbCategoryPersistence.remove(fromCategory.getCategoryId()); }
@Test public void testUpdateExisting() throws Exception { long pk = RandomTestUtil.nextLong(); MBMessage newMBMessage = _persistence.create(pk); newMBMessage.setUuid(RandomTestUtil.randomString()); newMBMessage.setGroupId(RandomTestUtil.nextLong()); newMBMessage.setCompanyId(RandomTestUtil.nextLong()); newMBMessage.setUserId(RandomTestUtil.nextLong()); newMBMessage.setUserName(RandomTestUtil.randomString()); newMBMessage.setCreateDate(RandomTestUtil.nextDate()); newMBMessage.setModifiedDate(RandomTestUtil.nextDate()); newMBMessage.setClassNameId(RandomTestUtil.nextLong()); newMBMessage.setClassPK(RandomTestUtil.nextLong()); newMBMessage.setCategoryId(RandomTestUtil.nextLong()); newMBMessage.setThreadId(RandomTestUtil.nextLong()); newMBMessage.setRootMessageId(RandomTestUtil.nextLong()); newMBMessage.setParentMessageId(RandomTestUtil.nextLong()); newMBMessage.setSubject(RandomTestUtil.randomString()); newMBMessage.setBody(RandomTestUtil.randomString()); newMBMessage.setFormat(RandomTestUtil.randomString()); newMBMessage.setAnonymous(RandomTestUtil.randomBoolean()); newMBMessage.setPriority(RandomTestUtil.nextDouble()); newMBMessage.setAllowPingbacks(RandomTestUtil.randomBoolean()); newMBMessage.setAnswer(RandomTestUtil.randomBoolean()); newMBMessage.setStatus(RandomTestUtil.nextInt()); newMBMessage.setStatusByUserId(RandomTestUtil.nextLong()); newMBMessage.setStatusByUserName(RandomTestUtil.randomString()); newMBMessage.setStatusDate(RandomTestUtil.nextDate()); _mbMessages.add(_persistence.update(newMBMessage)); MBMessage existingMBMessage = _persistence.findByPrimaryKey(newMBMessage.getPrimaryKey()); Assert.assertEquals(existingMBMessage.getUuid(), newMBMessage.getUuid()); Assert.assertEquals(existingMBMessage.getMessageId(), newMBMessage.getMessageId()); Assert.assertEquals(existingMBMessage.getGroupId(), newMBMessage.getGroupId()); Assert.assertEquals(existingMBMessage.getCompanyId(), newMBMessage.getCompanyId()); Assert.assertEquals(existingMBMessage.getUserId(), newMBMessage.getUserId()); Assert.assertEquals(existingMBMessage.getUserName(), newMBMessage.getUserName()); Assert.assertEquals( Time.getShortTimestamp(existingMBMessage.getCreateDate()), Time.getShortTimestamp(newMBMessage.getCreateDate())); Assert.assertEquals( Time.getShortTimestamp(existingMBMessage.getModifiedDate()), Time.getShortTimestamp(newMBMessage.getModifiedDate())); Assert.assertEquals(existingMBMessage.getClassNameId(), newMBMessage.getClassNameId()); Assert.assertEquals(existingMBMessage.getClassPK(), newMBMessage.getClassPK()); Assert.assertEquals(existingMBMessage.getCategoryId(), newMBMessage.getCategoryId()); Assert.assertEquals(existingMBMessage.getThreadId(), newMBMessage.getThreadId()); Assert.assertEquals(existingMBMessage.getRootMessageId(), newMBMessage.getRootMessageId()); Assert.assertEquals(existingMBMessage.getParentMessageId(), newMBMessage.getParentMessageId()); Assert.assertEquals(existingMBMessage.getSubject(), newMBMessage.getSubject()); Assert.assertEquals(existingMBMessage.getBody(), newMBMessage.getBody()); Assert.assertEquals(existingMBMessage.getFormat(), newMBMessage.getFormat()); Assert.assertEquals(existingMBMessage.getAnonymous(), newMBMessage.getAnonymous()); AssertUtils.assertEquals(existingMBMessage.getPriority(), newMBMessage.getPriority()); Assert.assertEquals(existingMBMessage.getAllowPingbacks(), newMBMessage.getAllowPingbacks()); Assert.assertEquals(existingMBMessage.getAnswer(), newMBMessage.getAnswer()); Assert.assertEquals(existingMBMessage.getStatus(), newMBMessage.getStatus()); Assert.assertEquals(existingMBMessage.getStatusByUserId(), newMBMessage.getStatusByUserId()); Assert.assertEquals( existingMBMessage.getStatusByUserName(), newMBMessage.getStatusByUserName()); Assert.assertEquals( Time.getShortTimestamp(existingMBMessage.getStatusDate()), Time.getShortTimestamp(newMBMessage.getStatusDate())); }
@Override public void moveDependentsToTrash(long groupId, long threadId, long trashEntryId) throws PortalException { Set<Long> userIds = new HashSet<>(); MBThread thread = mbThreadLocalService.getThread(threadId); List<MBMessage> messages = mbMessageLocalService.getThreadMessages(threadId, WorkflowConstants.STATUS_ANY); for (MBMessage message : messages) { // Message if (message.isDiscussion()) { continue; } int oldStatus = message.getStatus(); message.setStatus(WorkflowConstants.STATUS_IN_TRASH); mbMessagePersistence.update(message); userIds.add(message.getUserId()); // Trash int status = oldStatus; if (oldStatus == WorkflowConstants.STATUS_PENDING) { status = WorkflowConstants.STATUS_DRAFT; } if (oldStatus != WorkflowConstants.STATUS_APPROVED) { trashVersionLocalService.addTrashVersion( trashEntryId, MBMessage.class.getName(), message.getMessageId(), status, null); } // Asset if (oldStatus == WorkflowConstants.STATUS_APPROVED) { assetEntryLocalService.updateVisible( MBMessage.class.getName(), message.getMessageId(), false); } // Attachments for (FileEntry fileEntry : message.getAttachmentsFileEntries()) { PortletFileRepositoryUtil.movePortletFileEntryToTrash( thread.getStatusByUserId(), fileEntry.getFileEntryId()); } // Indexer Indexer<MBMessage> indexer = IndexerRegistryUtil.nullSafeGetIndexer(MBMessage.class); indexer.reindex(message); // Workflow if (oldStatus == WorkflowConstants.STATUS_PENDING) { workflowInstanceLinkLocalService.deleteWorkflowInstanceLink( message.getCompanyId(), message.getGroupId(), MBMessage.class.getName(), message.getMessageId()); } } // Statistics for (long userId : userIds) { mbStatsUserLocalService.updateStatsUser(groupId, userId); } }