/** * Copyright (c) 2000-present Liferay, Inc. All rights reserved. * * This library is free software; you can redistribute it and/or modify it under * the terms of the GNU Lesser General Public License as published by the Free * Software Foundation; either version 2.1 of the License, or (at your option) * any later version. * * This library 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 Lesser General Public License for more * details. */ package com.liferay.akismet.moderation.util; import com.liferay.akismet.util.AkismetConstants; import com.liferay.message.boards.kernel.model.MBCategoryConstants; import com.liferay.message.boards.kernel.model.MBMessage; import com.liferay.message.boards.kernel.service.MBMessageLocalServiceUtil; import com.liferay.portal.kernel.dao.orm.DynamicQuery; import com.liferay.portal.kernel.dao.orm.DynamicQueryFactoryUtil; import com.liferay.portal.kernel.dao.orm.Property; import com.liferay.portal.kernel.dao.orm.PropertyFactoryUtil; import com.liferay.portal.kernel.exception.PortalException; import com.liferay.portal.kernel.model.Group; import com.liferay.portal.kernel.service.GroupLocalServiceUtil; import com.liferay.portal.kernel.workflow.WorkflowConstants; import com.liferay.wiki.model.WikiPage; import com.liferay.wiki.service.WikiPageLocalServiceUtil; import java.util.List; /** * @author Amos Fong */ public class ModerationUtil { public static List<MBMessage> getDiscussionMBMessages( long scopeGroupId, int start, int end) throws PortalException { DynamicQuery dynamicQuery = buildMBMessageDynamicQuery( scopeGroupId, true); return MBMessageLocalServiceUtil.dynamicQuery(dynamicQuery, start, end); } public static int getDiscussionMBMessagesCount(long scopeGroupId) throws PortalException { DynamicQuery dynamicQuery = buildMBMessageDynamicQuery( scopeGroupId, true); return (int)MBMessageLocalServiceUtil.dynamicQueryCount(dynamicQuery); } public static List<MBMessage> getMBMessages( long scopeGroupId, int start, int end) throws PortalException { DynamicQuery dynamicQuery = buildMBMessageDynamicQuery( scopeGroupId, false); return MBMessageLocalServiceUtil.dynamicQuery(dynamicQuery, start, end); } public static int getMBMessagesCount(long scopeGroupId) throws PortalException { DynamicQuery dynamicQuery = buildMBMessageDynamicQuery( scopeGroupId, false); return (int)MBMessageLocalServiceUtil.dynamicQueryCount(dynamicQuery); } public static List<WikiPage> getWikiPages( long scopeGroupId, int start, int end) throws PortalException { DynamicQuery dynamicQuery = buildWikiPageDynamicQuery(scopeGroupId); return WikiPageLocalServiceUtil.dynamicQuery(dynamicQuery, start, end); } public static int getWikiPagesCount(long scopeGroupId) throws PortalException { DynamicQuery dynamicQuery = buildWikiPageDynamicQuery(scopeGroupId); return (int)WikiPageLocalServiceUtil.dynamicQueryCount(dynamicQuery); } protected static DynamicQuery buildMBMessageDynamicQuery( long scopeGroupId, boolean discussion) throws PortalException { DynamicQuery dynamicQuery = DynamicQueryFactoryUtil.forClass( MBMessage.class); Group group = GroupLocalServiceUtil.getGroup(scopeGroupId); if (!group.isCompany()) { Property groupIdProperty = PropertyFactoryUtil.forName("groupId"); Long[] scopeGroupIds = getChildScopeGroupIds(scopeGroupId); dynamicQuery.add(groupIdProperty.in(scopeGroupIds)); } Property categoryIdProperty = PropertyFactoryUtil.forName("categoryId"); if (discussion) { dynamicQuery.add( categoryIdProperty.eq( MBCategoryConstants.DISCUSSION_CATEGORY_ID)); } else { dynamicQuery.add( categoryIdProperty.ne( MBCategoryConstants.DISCUSSION_CATEGORY_ID)); } Property statusProperty = PropertyFactoryUtil.forName("status"); dynamicQuery.add(statusProperty.eq(WorkflowConstants.STATUS_DENIED)); return dynamicQuery; } protected static DynamicQuery buildWikiPageDynamicQuery(long scopeGroupId) throws PortalException { DynamicQuery dynamicQuery = DynamicQueryFactoryUtil.forClass( WikiPage.class); Group group = GroupLocalServiceUtil.getGroup(scopeGroupId); if (!group.isCompany()) { Property groupIdProperty = PropertyFactoryUtil.forName("groupId"); Long[] scopeGroupIds = getChildScopeGroupIds(scopeGroupId); dynamicQuery.add(groupIdProperty.in(scopeGroupIds)); } Property summaryProperty = PropertyFactoryUtil.forName("summary"); dynamicQuery.add( summaryProperty.eq(AkismetConstants.WIKI_PAGE_PENDING_APPROVAL)); return dynamicQuery; } protected static Long[] getChildScopeGroupIds(long parentGroupId) { DynamicQuery dynamicQuery = DynamicQueryFactoryUtil.forClass( Group.class); Property parentGroupIdProperty = PropertyFactoryUtil.forName( "parentGroupId"); dynamicQuery.add(parentGroupIdProperty.eq(parentGroupId)); List<Group> groups = GroupLocalServiceUtil.dynamicQuery(dynamicQuery); Long[] scopeGroupIds = new Long[groups.size() + 1]; scopeGroupIds[0] = parentGroupId; for (int i = 0; i < groups.size(); i++) { Group group = groups.get(i); scopeGroupIds[i + 1] = group.getGroupId(); } return scopeGroupIds; } }