/**
* 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;
}
}