/**********************************************************************************
* $URL: https://source.sakaiproject.org/svn/msgcntr/trunk/messageforums-component-impl/src/java/org/sakaiproject/component/app/messageforums/ui/DiscussionForumManagerImpl.java $
* $Id: DiscussionForumManagerImpl.java 9227 2006-05-15 15:02:42Z cwen@iupui.edu $
***********************************************************************************
*
* Copyright (c) 2003, 2004, 2005, 2006, 2007, 2008, 2009 The Sakai Foundation
*
* Licensed under the Educational Community License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.opensource.org/licenses/ECL-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*
**********************************************************************************/
package org.sakaiproject.component.app.messageforums.ui;
import java.util.ArrayList;
import java.util.Collection;
import java.util.Collections;
import java.util.HashMap;
import java.util.HashSet;
import java.util.Iterator;
import java.util.List;
import java.util.Map;
import java.util.Set;
import java.util.Vector;
import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
import org.sakaiproject.api.app.messageforums.ActorPermissions;
import org.sakaiproject.api.app.messageforums.Area;
import org.sakaiproject.api.app.messageforums.AreaControlPermission;
import org.sakaiproject.api.app.messageforums.AreaManager;
import org.sakaiproject.api.app.messageforums.Attachment;
import org.sakaiproject.api.app.messageforums.DBMembershipItem;
import org.sakaiproject.api.app.messageforums.DiscussionForum;
import org.sakaiproject.api.app.messageforums.DiscussionForumService;
import org.sakaiproject.api.app.messageforums.DiscussionTopic;
import org.sakaiproject.api.app.messageforums.DummyDataHelperApi;
import org.sakaiproject.api.app.messageforums.ForumControlPermission;
import org.sakaiproject.api.app.messageforums.MembershipManager;
import org.sakaiproject.api.app.messageforums.Message;
import org.sakaiproject.api.app.messageforums.MessageForumsForumManager;
import org.sakaiproject.api.app.messageforums.MessageForumsMessageManager;
import org.sakaiproject.api.app.messageforums.MessageForumsTypeManager;
import org.sakaiproject.api.app.messageforums.MessageForumsUser;
import org.sakaiproject.api.app.messageforums.MessagePermissions;
import org.sakaiproject.api.app.messageforums.PermissionLevel;
import org.sakaiproject.api.app.messageforums.PermissionLevelManager;
import org.sakaiproject.api.app.messageforums.PermissionManager;
import org.sakaiproject.api.app.messageforums.Topic;
import org.sakaiproject.api.app.messageforums.TopicControlPermission;
import org.sakaiproject.api.app.messageforums.cover.ForumScheduleNotificationCover;
import org.sakaiproject.api.app.messageforums.ui.DiscussionForumManager;
import org.sakaiproject.api.app.messageforums.ui.UIPermissionsManager;
import org.sakaiproject.authz.api.AuthzGroup;
import org.sakaiproject.authz.api.GroupNotDefinedException;
import org.sakaiproject.authz.api.Member;
import org.sakaiproject.authz.api.Role;
import org.sakaiproject.authz.api.SecurityService;
import org.sakaiproject.authz.cover.AuthzGroupService;
import org.sakaiproject.component.app.messageforums.MembershipItem;
import org.sakaiproject.component.app.messageforums.dao.hibernate.ActorPermissionsImpl;
import org.sakaiproject.component.app.messageforums.dao.hibernate.DBMembershipItemImpl;
import org.sakaiproject.component.app.messageforums.dao.hibernate.MessageForumsUserImpl;
import org.sakaiproject.component.cover.ServerConfigurationService;
import org.sakaiproject.content.api.ContentHostingService;
import org.sakaiproject.content.api.ContentResource;
import org.sakaiproject.entitybroker.EntityBroker;
import org.sakaiproject.event.cover.EventTrackingService;
import org.sakaiproject.exception.IdUnusedException;
import org.sakaiproject.site.api.Group;
import org.sakaiproject.site.api.Site;
import org.sakaiproject.site.api.SiteService;
import org.sakaiproject.thread_local.cover.ThreadLocalManager;
import org.sakaiproject.tool.api.SessionManager;
import org.sakaiproject.tool.cover.ToolManager;
import org.sakaiproject.user.api.User;
import org.sakaiproject.user.api.UserDirectoryService;
import org.sakaiproject.user.api.UserNotDefinedException;
import org.springframework.orm.hibernate3.support.HibernateDaoSupport;
/**
* @author <a href="mailto:rshastri@iupui.edu">Rashmi Shastri</a>
*/
public class DiscussionForumManagerImpl extends HibernateDaoSupport implements
DiscussionForumManager {
private static final String MC_DEFAULT = "mc.default.";
private static final Log LOG = LogFactory
.getLog(DiscussionForumManagerImpl.class);
private AreaManager areaManager;
private MessageForumsForumManager forumManager;
private MessageForumsMessageManager messageManager;
private DummyDataHelperApi helper;
private PermissionManager permissionManager;
private MessageForumsTypeManager typeManager;
private SiteService siteService;
private UserDirectoryService userDirectoryService;
private MembershipManager membershipManager;
private SecurityService securityService;
private SessionManager sessionManager;
private PermissionLevelManager permissionLevelManager;
private Map courseMemberMap = null;
private boolean usingHelper = false; // just a flag until moved to database from helper
private ContentHostingService contentHostingService;
private UIPermissionsManager permissionsManager;
private EntityBroker entityBroker;
public static final int MAX_NUMBER_OF_SQL_PARAMETERS_IN_LIST = 1000;
public void init()
{
LOG.info("init()");
;
}
public void setEntityBroker(EntityBroker entityBroker) {
this.entityBroker = entityBroker;
}
public void setContentHostingService(ContentHostingService contentHostingService) {
this.contentHostingService = contentHostingService;
}
public List searchTopicMessages(Long topicId, String searchText)
{
return forumManager.searchTopicMessages(topicId, searchText);
}
public Topic getTopicByIdWithAttachments(Long topicId)
{
if (LOG.isDebugEnabled())
{
LOG.debug("getTopicByIdWithAttachments(Long " + topicId + ")");
}
return forumManager.getTopicByIdWithAttachments(topicId);
}
public List getTopicsByIdWithMessages(final Long forumId)
{
if (LOG.isDebugEnabled())
{
LOG.debug("getTopicsByIdWithMessages(final Long" + forumId + ")");
}
return forumManager.getTopicsByIdWithMessages(forumId);
}
public List getTopicsByIdWithMessagesAndAttachments(final Long forumId)
{
if (LOG.isDebugEnabled())
{
LOG.debug("getTopicsByIdWithMessagesAndAttachments(final Long" + forumId
+ ")");
}
return forumManager.getTopicsByIdWithMessagesAndAttachments(forumId);
}
public List getTopicsByIdWithMessagesMembershipAndAttachments(final Long forumId)
{
if (LOG.isDebugEnabled())
{
LOG.debug("getTopicsByIdWithMessagesMembershipAndAttachments(final Long" + forumId
+ ")");
}
return forumManager.getTopicsByIdWithMessagesMembershipAndAttachments(forumId);
}
/*
* (non-Javadoc)
* @see org.sakaiproject.api.app.messageforums.ui.DiscussionForumManager#getForumsForMainPage()
*/
public List<DiscussionForum> getForumsForMainPage() {
if (LOG.isDebugEnabled()) {
LOG.debug("getForumsForMainPage()");
}
return forumManager.getForumsForMainPage();
}
/*
* (non-Javadoc)
* @see org.sakaiproject.api.app.messageforums.ui.DiscussionForumManager#getMessageCountsForMainPage(java.util.List)
*/
public List<Object[]> getMessageCountsForMainPage(Collection<Long> topicIds) {
if (LOG.isDebugEnabled()) {
LOG.debug("getMessageCountsForMainPage(" + topicIds + ")");
}
return messageManager.findMessageCountsForMainPage(topicIds);
}
/*
* (non-Javadoc)
* @see org.sakaiproject.api.app.messageforums.ui.DiscussionForumManager#getMessageCountsForMainPage(java.util.Collection)
*/
public List<Object[]> getReadMessageCountsForMainPage(Collection<Long> topicIds) {
if (LOG.isDebugEnabled()) {
LOG.debug("getReadMessageCountsForMainPage(" + topicIds + ")");
}
return messageManager.findReadMessageCountsForMainPage(topicIds);
}
public Topic getTopicByIdWithMessages(final Long topicId)
{
if (LOG.isDebugEnabled())
{
LOG.debug("getTopicByIdWithMessages(final Long" + topicId + ")");
}
return forumManager.getTopicByIdWithMessages(topicId);
}
public Topic getTopicWithAttachmentsById(final Long topicId)
{
if (LOG.isDebugEnabled())
{
LOG.debug("getTopicWithAttachmentsById(final Long" + topicId + ")");
}
return forumManager.getTopicWithAttachmentsById(topicId);
}
public Topic getTopicByIdWithMessagesAndAttachments(final Long topicId)
{
if (LOG.isDebugEnabled())
{
LOG.debug("getTopicByIdWithMessagesAndAttachments(final Long" + topicId
+ ")");
}
return forumManager.getTopicByIdWithMessagesAndAttachments(topicId);
}
public List getModeratedTopicsInSite()
{
if (LOG.isDebugEnabled())
{
LOG.debug("getModeratedTopicsInSite()");
}
return forumManager.getModeratedTopicsInSite(ToolManager.getCurrentPlacement().getContext());
}
// start injection
/**
* @param helper
*/
public void setHelper(DummyDataHelperApi helper)
{
if (LOG.isDebugEnabled())
{
LOG.debug("setHelper(DummyDataHelperApi " + helper + ")");
}
this.helper = helper;
}
/**
* @param areaManager
*/
public void setAreaManager(AreaManager areaManager)
{
if (LOG.isDebugEnabled())
{
LOG.debug("setAreaManager(AreaManager" + areaManager + ")");
}
this.areaManager = areaManager;
}
/**
* @param permissionManager
* The permissionManager to set.
*/
public void setPermissionManager(PermissionManager permissionManager)
{
if (LOG.isDebugEnabled())
{
LOG.debug("setPermissionManager(PermissionManager" + permissionManager
+ ")");
}
this.permissionManager = permissionManager;
}
/**
* @param permissionLevelManager
* The permissionLevelManager to set.
*/
public void setPermissionLevelManager(
PermissionLevelManager permissionLevelManager)
{
this.permissionLevelManager = permissionLevelManager;
}
/**
* @param typeManager
* The typeManager to set.
*/
public void setTypeManager(MessageForumsTypeManager typeManager)
{
if (LOG.isDebugEnabled())
{
LOG.debug("setTypeManager(MessageForumsTypeManager" + typeManager + ")");
}
this.typeManager = typeManager;
}
/**
* @param siteService
* The siteService to set.
*/
public void setSiteService(SiteService siteService)
{
this.siteService = siteService;
}
/**
* @param sessionManager
* The sessionManager to set.
*/
public void setSessionManager(SessionManager sessionManager)
{
this.sessionManager = sessionManager;
}
/**
* @param securityService
* The securityService to set.
*/
public void setSecurityService(SecurityService securityService)
{
this.securityService = securityService;
}
/**
* @param userDirectoryService
* The userDirectoryService to set.
*/
public void setUserDirectoryService(UserDirectoryService userDirectoryService)
{
this.userDirectoryService = userDirectoryService;
}
/**
* @param membershipManager
* The membershipManager to set.
*/
public void setMembershipManager(MembershipManager membershipManager)
{
this.membershipManager = membershipManager;
}
/**
* @return
*/
public MessageForumsMessageManager getMessageManager()
{
LOG.debug("getMessageManager()");
return messageManager;
}
/**
* @param messageManager
*/
public void setMessageManager(MessageForumsMessageManager messageManager)
{
if (LOG.isDebugEnabled())
{
LOG.debug("setMessageManager(MessageForumsMessageManager"
+ messageManager + ")");
}
this.messageManager = messageManager;
}
// end injection
/*
* (non-Javadoc)
*
* @see org.sakaiproject.api.app.messageforums.ui.DiscussionForumManager#getDiscussionForumArea()
*/
public Area getDiscussionForumArea()
{
return getDiscussionForumArea(ToolManager.getCurrentPlacement().getContext());
}
public Area getDiscussionForumArea(String siteId)
{
LOG.debug("getDiscussionForumArea");
if (usingHelper)
{
return helper.getDiscussionForumArea();
}
return areaManager.getDiscussionArea(siteId);
}
/*
* (non-Javadoc)
*
* @see org.sakaiproject.api.app.messageforums.ui.DiscussionForumManager#getMessageById(java.lang.Long)
*/
public Message getMessageById(Long id)
{
if (LOG.isDebugEnabled())
{
LOG.debug("getMessageById( Long" + id + ")");
}
if (usingHelper)
{
return helper.getMessageById(id);
}
return messageManager.getMessageById(id);
}
/*
* (non-Javadoc)
*
* @see org.sakaiproject.api.app.messageforums.ui.DiscussionForumManager#saveMessage(org.sakaiproject.api.app.messageforums.Message)
*/
public void saveMessage(Message message) {
saveMessage(message, true);
}
public void saveMessage(Message message, boolean logEvent) {
saveMessage(message, logEvent, false);
}
public void saveMessage(Message message, boolean logEvent, boolean ignoreLockedTopicForum)
{
if (LOG.isDebugEnabled())
{
LOG.debug("saveMessage(Message " + message + ")");
}
if (message.getTopic().getBaseForum() == null)
{
message.setTopic(getTopicById(message.getTopic().getId()));
}
if(this.getAnonRole()==true&&message.getCreatedBy()==null)
{
message.setCreatedBy(".anon");
}
if(this.getAnonRole()==true&&message.getModifiedBy()==null)
{
message.setModifiedBy(".anon");
}
messageManager.saveMessage(message, logEvent, ignoreLockedTopicForum);
}
/*
* (non-Javadoc)
*
* @see org.sakaiproject.api.app.messageforums.ui.DiscussionForumManager#deleteMessage(org.sakaiproject.api.app.messageforums.Message)
*/
public void deleteMessage(Message message)
{
if (LOG.isDebugEnabled())
{
LOG.debug("deleteMessage(Message" + message + ")");
}
messageManager.deleteMessage(message);
}
/*
* (non-Javadoc)
*
* @see org.sakaiproject.api.app.messageforums.ui.DiscussionForumManager#getTotalNoMessages(org.sakaiproject.api.app.messageforums.Topic)
*/
public int getTotalNoMessages(Topic topic)
{
if (LOG.isDebugEnabled())
{
LOG.debug("getTotalNoMessages(Topic" + topic + ")");
}
if (usingHelper)
{
return 20;
}
return messageManager.findMessageCountByTopicId(topic.getId());
}
/*
* (non-Javadoc)
* @see org.sakaiproject.api.app.messageforums.ui.DiscussionForumManager#getTotalViewableMessagesWhenMod(org.sakaiproject.api.app.messageforums.Topic)
*/
public int getTotalViewableMessagesWhenMod(Topic topic)
{
if (LOG.isDebugEnabled())
{
LOG.debug("getTotalViewableMessagesWhenMod(Topic" + topic + ")");
}
if (usingHelper)
{
return 20;
}
return messageManager.findViewableMessageCountByTopicId(topic.getId());
}
/*
* (non-Javadoc)
*
* @see org.sakaiproject.api.app.messageforums.ui.DiscussionForumManager#getUnreadNoMessages(org.sakaiproject.api.app.messageforums.Topic)
*/
public int getUnreadNoMessages(Topic topic)
{
if (LOG.isDebugEnabled())
{
LOG.debug("getUnreadNoMessages(Topic" + topic + ")");
}
if (usingHelper)
{
return 10;
}
return messageManager.findUnreadMessageCountByTopicId(topic.getId());
}
/*
* (non-Javadoc)
*
* @see org.sakaiproject.api.app.messageforums.ui.DiscussionForumManager#getUnreadApprovedNoMessages(org.sakaiproject.api.app.messageforums.Topic)
*/
public int getNumUnreadViewableMessagesWhenMod(Topic topic)
{
if (LOG.isDebugEnabled())
{
LOG.debug("getNumUnreadViewableMessagesWhenMod(Topic" + topic + ")");
}
if (usingHelper)
{
return 10;
}
return messageManager.findUnreadViewableMessageCountByTopicId(topic.getId());
}
/*
* (non-Javadoc)
* @see org.sakaiproject.api.app.messageforums.ui.DiscussionForumManager#approveAllPendingMessages(java.lang.Long)
*/
public void approveAllPendingMessages(Long topicId)
{
if (topicId == null)
{
LOG.error("approveAllPendingMessages failed with topicId: Null" );
throw new IllegalArgumentException("Null Argument");
}
List messages = this.getMessagesByTopicId(topicId);
if (messages != null && messages.size() > 0)
{
Iterator msgIter = messages.iterator();
while (msgIter.hasNext())
{
Message msg = (Message) msgIter.next();
if (msg.getApproved() == null)
{
msg.setApproved(Boolean.TRUE);
}
}
}
}
/*
* (non-Javadoc)
* @see org.sakaiproject.api.app.messageforums.ui.DiscussionForumManager#getTotalNoPendingMessages()
*/
public List getPendingMsgsInSiteByMembership(List membershipList)
{
return messageManager.getPendingMsgsInSiteByMembership(membershipList);
}
/*
* (non-Javadoc)
*
* @see org.sakaiproject.api.app.messageforums.ui.DiscussionForumManager#getDiscussionForums()
*/
public List getDiscussionForums()
{
LOG.debug("getDiscussionForums()");
if (usingHelper)
{
return helper.getDiscussionForumArea().getDiscussionForums();
}
return forumManager.getForumByTypeAndContext(typeManager
.getDiscussionForumType());
// return getDiscussionForumArea().getDiscussionForums();
}
public List getDiscussionForums(String siteId)
{
LOG.debug("getDiscussionForums(siteId)");
if (usingHelper)
{
return helper.getDiscussionForumArea().getDiscussionForums();
}
return forumManager.getForumByTypeAndContext(typeManager
.getDiscussionForumType(), siteId);
// return getDiscussionForumArea().getDiscussionForums();
}
/*
* (non-Javadoc)
*
* @see org.sakaiproject.api.app.messageforums.ui.DiscussionForumManager#getDiscussionForumsByContextId()
*/
public List getDiscussionForumsByContextId(String contextId)
{
LOG.debug("getDiscussionForumsByContextId(String contextId)");
return forumManager.getForumByTypeAndContext(typeManager
.getDiscussionForumType(), contextId);
}
/*
* (non-Javadoc)
*
* @see org.sakaiproject.api.app.messageforums.ui.DiscussionForumManager#getForumById(java.lang.Long)
*/
public DiscussionForum getForumById(Long forumId)
{
if (LOG.isDebugEnabled())
{
LOG.debug("getForumById(Long" + forumId + ")");
}
if (usingHelper)
{
return helper.getForumById(forumId);
}
return (DiscussionForum) forumManager.getForumById(true, forumId);
}
public DiscussionForum getForumByUuid(String forumId)
{
if (LOG.isDebugEnabled())
{
LOG.debug("getForumByUuid(String" + forumId + ")");
}
return (DiscussionForum) forumManager.getForumByUuid(forumId);
}
/*
* (non-Javadoc)
*
* @see org.sakaiproject.api.app.messageforums.ui.DiscussionForumManager#getMessagesByTopicId(java.lang.Long)
*/
public List getMessagesByTopicId(Long topicId)
{
if (LOG.isDebugEnabled())
{
LOG.debug("getMessagesByTopicId(Long" + topicId + ")");
}
return messageManager.findMessagesByTopicId(topicId);
}
/*
* (non-Javadoc)
*
* @see org.sakaiproject.api.app.messageforums.ui.DiscussionForumManager#getTopicById(java.lang.Long)
*/
public DiscussionTopic getTopicById(Long topicId)
{
if (LOG.isDebugEnabled())
{
LOG.debug("getTopicById(Long" + topicId + ")");
}
return (DiscussionTopic) forumManager.getTopicById(true, topicId);
}
public DiscussionForum getForumByIdWithTopics(Long forumId)
{
if (LOG.isDebugEnabled())
{
LOG.debug("getForumByIdWithTopics(Long" + forumId + ")");
}
return (DiscussionForum) forumManager.getForumByIdWithTopics(forumId);
}
public DiscussionForum getForumByIdWithTopicsAttachmentsAndMessages(Long forumId) {
if (LOG.isDebugEnabled()) { LOG.debug("getForumByIdWithTopicsAttachmentsAndMessages(Long " + forumId + ")"); }
return (DiscussionForum) forumManager.getForumByIdWithTopicsAttachmentsAndMessages(forumId);
}
public DiscussionTopic getTopicByUuid(String topicId)
{
if (LOG.isDebugEnabled())
{
LOG.debug(" getTopicByUuid(String" + topicId + ")");
}
return (DiscussionTopic) forumManager.getTopicByUuid(topicId);
}
/*
* (non-Javadoc)
*
* @see org.sakaiproject.api.app.messageforums.ui.DiscussionForumManager#hasNextTopic(org.sakaiproject.api.app.messageforums.DiscussionTopic)
*/
public boolean hasNextTopic(DiscussionTopic topic)
{
if (LOG.isDebugEnabled())
{
LOG.debug("hasNextTopic(DiscussionTopic" + topic + ")");
}
if (usingHelper)
{
return helper.hasNextTopic(topic);
}
// TODO: Needs optimized
boolean next = false;
DiscussionForum forum = getForumById(topic.getBaseForum().getId());
if (forum != null && forum.getTopics() != null)
{
for (Iterator iter = forum.getTopics().iterator(); iter.hasNext();)
{
try{
DiscussionTopic t = (DiscussionTopic) iter.next();
if (next && getTopicAccess(t))
{
return true;
}
if (t != null && getTopicAccess(t))
{
if (t.getId().equals(topic.getId()))
{
next = true;
}
}
}catch (Exception e) {
LOG.error(e.getMessage());
}
}
}
// if we get here, there is no next topic
return false;
}
/*
* (non-Javadoc)
*
* @see org.sakaiproject.api.app.messageforums.ui.DiscussionForumManager#hasPreviousTopic(org.sakaiproject.api.app.messageforums.DiscussionTopic)
*/
public boolean hasPreviousTopic(DiscussionTopic topic)
{
if (LOG.isDebugEnabled())
{
LOG.debug("hasPreviousTopic(DiscussionTopic" + topic + ")");
}
if (usingHelper)
{
return helper.hasPreviousTopic(topic);
}
// TODO: Needs optimized
DiscussionTopic prev = null;
DiscussionForum forum = getForumById(topic.getBaseForum().getId());
if (forum != null && forum.getTopics() != null)
{
for (Iterator iter = forum.getTopics().iterator(); iter.hasNext();)
{
DiscussionTopic t = (DiscussionTopic) iter.next();
if (t != null && getTopicAccess(t))
{
if (t.getId().equals(topic.getId()))
{
// need to check null because we might be on the first topic
// which means there is no previous one
return prev != null;
}
prev = (DiscussionTopic) t;
}
}
}
// if we get here, there is no previous topic
return false;
}
/*
* (non-Javadoc)
*
* @see org.sakaiproject.api.app.messageforums.ui.DiscussionForumManager#getNextTopic(org.sakaiproject.api.app.messageforums.DiscussionTopic)
*/
public DiscussionTopic getNextTopic(DiscussionTopic topic)
{
if (LOG.isDebugEnabled())
{
LOG.debug("getNextTopic(DiscussionTopic" + topic + ")");
}
if (usingHelper)
{
if (hasNextTopic(topic))
{
return helper.getNextTopic(topic);
}
else
{
return null;
}
}
// TODO: Needs optimized and re-written to take advantage of the db... this is really horrible.
boolean next = false;
DiscussionForum forum = getForumById(topic.getBaseForum().getId());
if (forum != null && forum.getTopics() != null)
{
for (Iterator iter = forum.getTopics().iterator(); iter.hasNext();)
{
DiscussionTopic t = (DiscussionTopic) iter.next();
if (next && getTopicAccess(t))
{
if (t == null)
{
do
{
t = (DiscussionTopic) iter.next();
} while (t == null);
}
return (DiscussionTopic) t;
}
if (t != null && getTopicAccess(t))
{
if (t.getId().equals(topic.getId()))
{
next = true;
}
}
}
}
// if we get here, there is no next topic
return null;
}
/*
* (non-Javadoc)
*
* @see org.sakaiproject.api.app.messageforums.ui.DiscussionForumManager#getPreviousTopic(org.sakaiproject.api.app.messageforums.DiscussionTopic)
*/
public DiscussionTopic getPreviousTopic(DiscussionTopic topic)
{
if (LOG.isDebugEnabled())
{
LOG.debug("getPreviousTopic(DiscussionTopic" + topic + ")");
}
if (usingHelper)
{
if (hasPreviousTopic(topic))
{
return helper.getPreviousTopic(topic);
}
else
{
return null;
}
}
// TODO: Needs optimized
DiscussionTopic prev = null;
DiscussionForum forum = getForumById(topic.getBaseForum().getId());
if (forum != null && forum.getTopics() != null)
{
for (Iterator iter = forum.getTopics().iterator(); iter.hasNext();)
{
DiscussionTopic t = (DiscussionTopic) iter.next();
if (t != null && getTopicAccess(t))
{
if (t.getId().equals(topic.getId()))
{
return prev;
}
if (t != null && getTopicAccess(t))
{
prev = (DiscussionTopic) t;
}
}
}
}
// if we get here, there is no previous topic
return null;
}
/*
* (non-Javadoc)
*
* @see org.sakaiproject.api.app.messageforums.ui.DiscussionForumManager#isInstructor()
*/
public boolean isInstructor()
{
LOG.debug("isInstructor()");
return isInstructor(userDirectoryService.getCurrentUser());
}
public boolean isInstructor(String userId)
{
LOG.debug("isInstructor()");
try {
return isInstructor(userDirectoryService.getUser(userId));
} catch (UserNotDefinedException e) {
LOG.error("DiscussionForumManagerImpl: isInstructor(String userId, String siteId): " + e.getMessage());
return false;
}
}
public boolean isInstructor(String userId, String siteId) {
LOG.debug("isInstructor(String " + userId + ", " + siteId + ")");
try {
return isInstructor(userDirectoryService.getUser(userId), siteId);
} catch (UserNotDefinedException e) {
LOG.debug("DiscussionForumManagerImpl: isInstructor(String userId, String siteId): " + e.getMessage());
return false;
}
}
/**
* Check if the given user has site.upd access
*
* @param user
* @return
*/
private boolean isInstructor(User user)
{
if (LOG.isDebugEnabled())
{
LOG.debug("isInstructor(User " + user + ")");
}
if (user != null)
return isInstructor(user, getContextSiteId());
else
return false;
}
/*
* (non-Javadoc)
*
* @see org.sakaiproject.api.app.messageforums.ui.DiscussionForumManager#isInstructor()
*/
public boolean isSectionTA()
{
LOG.debug("isSectionTA()");
return isSectionTA(userDirectoryService.getCurrentUser());
}
/**
* Check if the given user has site.upd access
*
* @param user
* @param siteId
* @return
*/
private boolean isInstructor(User user, String siteId)
{
if (LOG.isDebugEnabled())
{
LOG.debug("isInstructor(User " + user + ", " + siteId + ")");
}
if (user != null)
return securityService.unlock(user, "site.upd", siteId);
else
return false;
}
/**
* Check if the given user has section.role.ta access
*
* @param user
* @return
*/
private boolean isSectionTA(User user)
{
if (LOG.isDebugEnabled())
{
LOG.debug("isSectionTA(User " + user + ")");
}
if (user != null)
return securityService.unlock(user, "section.role.ta", getContextSiteId());
else
return false;
}
/**
* @return siteId
*/
private String getContextSiteId()
{
LOG.debug("getContextSiteId()");
return "/site/" + getCurrentContext();
}
/**
*
* @return the current context without the "/site/" prefix
*/
private String getCurrentContext() {
return ToolManager.getCurrentPlacement().getContext();
}
private String getCurrentUser() {
return sessionManager.getCurrentSessionUserId();
}
/**
* @param forumManager
*/
public void setForumManager(MessageForumsForumManager forumManager)
{
if (LOG.isDebugEnabled())
{
LOG.debug("setForumManager(MessageForumsForumManager" + forumManager
+ ")");
}
this.forumManager = forumManager;
}
/*
* (non-Javadoc)
*
* @see org.sakaiproject.api.app.messageforums.ui.DiscussionForumManager#createForum()
*/
public DiscussionForum createForum()
{
LOG.debug("createForum()");
return forumManager.createDiscussionForum();
}
/*
* (non-Javadoc)
*
* @see org.sakaiproject.api.app.messageforums.ui.DiscussionForumManager#deleteForum(org.sakaiproject.api.app.messageforums.DiscussionForum)
*/
public void deleteForum(DiscussionForum forum)
{
if (LOG.isDebugEnabled())
{
LOG.debug("setForumManager(DiscussionForum" + forum + ")");
}
forumManager.deleteDiscussionForum(forum);
}
/*
* (non-Javadoc)
*
* @see org.sakaiproject.api.app.messageforums.ui.DiscussionForumManager#createTopic(org.sakaiproject.api.app.messageforums.DiscussionForum)
*/
public DiscussionTopic createTopic(DiscussionForum forum)
{
if (LOG.isDebugEnabled())
{
LOG.debug("createTopic(DiscussionForum" + forum + ")");
}
if (forum == null)
{
LOG.debug("Attempt to create topic with out forum");
return null;
}
return forumManager.createDiscussionForumTopic(forum);
}
/*
* (non-Javadoc)
*
* @see org.sakaiproject.api.app.messageforums.ui.DiscussionForumManager#saveForum(org.sakaiproject.api.app.messageforums.DiscussionForum)
*/
public void saveForum(DiscussionForum forum)
{
if (LOG.isDebugEnabled())
{
LOG.debug("saveForum(DiscussionForum" + forum + ")");
}
saveForum(forum, false, getCurrentContext(), true, getCurrentUser());
}
public void saveForum(String contextId, DiscussionForum forum) {
if (LOG.isDebugEnabled()) LOG.debug("saveForum(String contextId, DiscussionForum forum)");
if (contextId == null || forum == null) {
throw new IllegalArgumentException("Null contextId or forum passed to saveForum. contextId:" + contextId);
}
saveForum(forum, forum.getDraft(), contextId, true, getCurrentUser());
}
/*
* (non-Javadoc)
*
* @see org.sakaiproject.api.app.messageforums.ui.DiscussionForumManager#saveForumAsDraft(org.sakaiproject.api.app.messageforums.DiscussionForum)
*/
public void saveForumAsDraft(DiscussionForum forum)
{
if (LOG.isDebugEnabled())
{
LOG.debug("saveForumAsDraft(DiscussionForum" + forum + ")");
}
saveForum(forum, true, getCurrentContext(), true, getCurrentUser());
}
public void saveForum(DiscussionForum forum, boolean draft, String contextId, boolean logEvent, String currentUser)
{
if (LOG.isDebugEnabled())
{
LOG.debug("saveForum(DiscussionForum" + forum + "boolean " + draft + ")");
}
boolean saveArea = forum.getId() == null;
forum.setDraft(Boolean.valueOf(draft));
// ActorPermissions originalForumActorPermissions = null;
// if (saveArea)
// {
// originalForumActorPermissions = new ActorPermissionsImpl();
// }
// else
// {
// originalForumActorPermissions = forum.getActorPermissions();
// }
// // setcontributors
// List holdContributors = new ArrayList();
// holdContributors = Arrays.asList(forum.getActorPermissions()
// .getContributors().toArray());
// originalForumActorPermissions.setContributors(new UniqueArrayList());// clearing list at this
// // point.
// if (holdContributors != null && holdContributors.size() > 0)
// {
// Iterator iter = holdContributors.iterator();
// while (iter.hasNext())
// {
// MessageForumsUser user = (MessageForumsUser) iter.next();
// forum.getActorPermissions().addContributor(user);
// }
// }
// // setAccessors
// List holdAccessors = new ArrayList();
// holdAccessors = Arrays.asList(forum.getActorPermissions().getAccessors()
// .toArray());
// originalForumActorPermissions.setAccessors(new UniqueArrayList());// clearing list at this point.
// if (holdAccessors != null && holdAccessors.size() > 0)
// {
// Iterator iter = holdAccessors.iterator();
// while (iter.hasNext())
// {
// MessageForumsUser user = (MessageForumsUser) iter.next();
// forum.getActorPermissions().addAccesssor(user);
// }
// }
forum.setAvailability(ForumScheduleNotificationCover.makeAvailableHelper(forum.getAvailabilityRestricted(), forum.getOpenDate(), forum.getCloseDate()));
forumManager.saveDiscussionForum(forum, draft, logEvent, currentUser);
ForumScheduleNotificationCover.scheduleAvailability(forum);
//set flag to false since permissions could have changed. This will force a clearing and resetting
//of the permissions cache.
ThreadLocalManager.set("message_center_permission_set", Boolean.valueOf(false));
if (saveArea)
{
//Area area = getDiscussionForumArea();
String dfType = typeManager.getDiscussionForumType();
Area area = areaManager.getAreaByContextIdAndTypeId(contextId, dfType);
forum.setArea(area);
forum.setSortIndex(Integer.valueOf(0));
area.addDiscussionForum(forum);
areaManager.saveArea(area, currentUser);
}
}
/*
* (non-Javadoc)
*
* @see org.sakaiproject.api.app.messageforums.ui.DiscussionForumManager#saveTopic(org.sakaiproject.api.app.messageforums.DiscussionTopic)
*/
public void saveTopic(DiscussionTopic topic)
{
if (LOG.isDebugEnabled())
{
LOG.debug("saveTopic(DiscussionTopic" + topic + ")");
}
saveTopic(topic, false);
}
/*
* (non-Javadoc)
*
* @see org.sakaiproject.api.app.messageforums.ui.DiscussionForumManager#saveTopicAsDraft(org.sakaiproject.api.app.messageforums.DiscussionTopic)
*/
public void saveTopicAsDraft(DiscussionTopic topic)
{
if (LOG.isDebugEnabled())
{
LOG.debug("saveTopicAsDraft(DiscussionTopic" + topic + ")");
}
saveTopic(topic, true);
}
private void saveTopic(DiscussionTopic topic, boolean draft)
{
saveTopic(topic, draft, true);
}
public void saveTopic(DiscussionTopic topic, boolean draft, boolean logEvent)
{
saveTopic(topic, draft, logEvent, getCurrentUser());
}
public void saveTopic(DiscussionTopic topic, boolean draft, boolean logEvent, String currentUser)
{
LOG
.debug("saveTopic(DiscussionTopic " + topic + ", boolean " + draft
+ ")");
boolean saveForum = topic.getId() == null;
topic.setAvailability(ForumScheduleNotificationCover.makeAvailableHelper(topic.getAvailabilityRestricted(), topic.getOpenDate(), topic.getCloseDate()));
topic.setDraft(Boolean.valueOf(draft));
forumManager.saveDiscussionForumTopic(topic, false, currentUser, logEvent);
Long topicId = topic.getId();
if(topicId == null){
Topic topicTmp = forumManager.getTopicByUuid(topic.getUuid());
if(topicTmp != null){
topicId = topicTmp.getId();
}
}
if(topicId != null){
ForumScheduleNotificationCover.scheduleAvailability(topic);
}
if (saveForum)
{
DiscussionForum forum = (DiscussionForum) topic.getBaseForum();
forum.addTopic(topic);
forumManager.saveDiscussionForum(forum, forum.getDraft().booleanValue(), logEvent, currentUser);
//sak-5146 forumManager.saveDiscussionForum(forum);
}
if(logEvent){
if (topic.getId() == null) {
EventTrackingService.post(EventTrackingService.newEvent(DiscussionForumService.EVENT_FORUMS_TOPIC_ADD, getEventMessage(topic), false));
} else {
EventTrackingService.post(EventTrackingService.newEvent(DiscussionForumService.EVENT_FORUMS_TOPIC_REVISE, getEventMessage(topic), false));
}
}
}
/*
* (non-Javadoc)
*
* @see org.sakaiproject.api.app.messageforums.ui.DiscussionForumManager#deleteTopic(org.sakaiproject.api.app.messageforums.DiscussionTopic)
*/
public void deleteTopic(DiscussionTopic topic)
{
if (LOG.isDebugEnabled())
{
LOG.debug("deleteTopic(DiscussionTopic " + topic + ")");
}
forumManager.deleteDiscussionForumTopic(topic);
}
/*
* (non-Javadoc)
*
* @see org.sakaiproject.api.app.messageforums.ui.DiscussionForumManager#getDefaultControlPermissions()
*/
public List getDefaultControlPermissions()
{
LOG.debug("getDefaultControlPermissions()");
List defaultControlPermissions = new ArrayList();
Iterator roles = getRoles();
while (roles.hasNext())
{
String roleId = (String) roles.next();
AreaControlPermission controlPermission = permissionManager
.getDefaultAreaControlPermissionForRole(roleId, typeManager
.getDiscussionForumType());
defaultControlPermissions.add(controlPermission);
}
return defaultControlPermissions;
}
/*
* (non-Javadoc)
*
* @see org.sakaiproject.api.app.messageforums.ui.DiscussionForumManager#getAreaControlPermissions()
*/
public List getAreaControlPermissions()
{
LOG.debug("getAreaControlPermissions()");
List areaControlPermissions = new ArrayList();
Iterator roles = getRoles();
while (roles.hasNext())
{
String roleId = (String) roles.next();
AreaControlPermission controlPermission = permissionManager
.getAreaControlPermissionForRole(roleId, typeManager
.getDiscussionForumType());
if (controlPermission == null)
{
controlPermission = permissionManager
.createAreaControlPermissionForRole(roleId, typeManager
.getDiscussionForumType());
}
areaControlPermissions.add(controlPermission);
}
return areaControlPermissions;
}
/*
* (non-Javadoc)
*
* @see org.sakaiproject.api.app.messageforums.ui.DiscussionForumManager#getAreaMessagePermissions()
*/
public List getAreaMessagePermissions()
{
LOG.debug("getAreaMessagePermissions()");
List areaMessagePermissions = new ArrayList();
Iterator roles = getRoles();
while (roles.hasNext())
{
String roleId = (String) roles.next();
MessagePermissions messagePermission = permissionManager
.getAreaMessagePermissionForRole(roleId, typeManager
.getDiscussionForumType());
if (messagePermission == null)
{
messagePermission = permissionManager
.createAreaMessagePermissionForRole(roleId, typeManager
.getDiscussionForumType());
}
areaMessagePermissions.add(messagePermission);
}
return areaMessagePermissions;
}
/*
* (non-Javadoc)
*
* @see org.sakaiproject.api.app.messageforums.ui.DiscussionForumManager#getDefaultMessagePermissions()
*/
public List getDefaultMessagePermissions()
{
LOG.debug("getDefaultMessagePermissions()");
List defaultMessagePermissions = new ArrayList();
Iterator roles = getRoles();
while (roles.hasNext())
{
String roleId = (String) roles.next();
MessagePermissions messagePermission = permissionManager
.getDefaultAreaMessagePermissionForRole(roleId, typeManager
.getDiscussionForumType());
defaultMessagePermissions.add(messagePermission);
}
return defaultMessagePermissions;
}
/*
* (non-Javadoc)
*
* @see org.sakaiproject.api.app.messageforums.ui.DiscussionForumManager#saveDefaultMessagePermissions(java.util.List)
*/
public void saveAreaMessagePermissions(List messagePermissions)
{
if (LOG.isDebugEnabled())
{
LOG.debug("saveDefaultMessagePermissions(List " + messagePermissions
+ ")");
}
if (messagePermissions != null && messagePermissions.size() > 0)
{
Iterator iterator = messagePermissions.iterator();
while (iterator.hasNext())
{
MessagePermissions msgPermission = (MessagePermissions) iterator.next();
permissionManager.saveAreaMessagePermissionForRole(
getDiscussionForumArea(), msgPermission, typeManager
.getDiscussionForumType());
}
}
}
/*
* (non-Javadoc)
*
* @see org.sakaiproject.api.app.messageforums.ui.DiscussionForumManager#getForumControlPermissions(org.sakaiproject.api.app.messageforums.DiscussionForum)
*/
public List getForumControlPermissions(DiscussionForum forum)
{
if (LOG.isDebugEnabled())
{
LOG.debug("getForumControlPermissions(DiscussionForum " + forum + ")");
}
List forumControlPermissions = new ArrayList();
Iterator roles = getRoles();
while (roles.hasNext())
{
String roleId = (String) roles.next();
ForumControlPermission controlPermission = permissionManager
.getForumControlPermissionForRole(forum, roleId, typeManager
.getDiscussionForumType());
if (controlPermission == null)
{
controlPermission = permissionManager
.createForumControlPermissionForRole(roleId, typeManager
.getDiscussionForumType());
}
forumControlPermissions.add(controlPermission);
}
return forumControlPermissions;
}
/*
* (non-Javadoc)
*
* @see org.sakaiproject.api.app.messageforums.ui.DiscussionForumManager#getForumMessagePermissions(org.sakaiproject.api.app.messageforums.DiscussionForum)
*/
public List getForumMessagePermissions(DiscussionForum forum)
{
if (LOG.isDebugEnabled())
{
LOG.debug("getForumMessagePermissions(DiscussionForum " + forum + ")");
}
List forumMessagePermissions = new ArrayList();
Iterator roles = getRoles();
while (roles.hasNext())
{
String roleId = (String) roles.next();
MessagePermissions messagePermission = permissionManager
.getForumMessagePermissionForRole(forum, roleId, typeManager
.getDiscussionForumType());
if (messagePermission == null)
{
messagePermission = permissionManager
.createForumMessagePermissionForRole(roleId, typeManager
.getDiscussionForumType());
}
forumMessagePermissions.add(messagePermission);
}
return forumMessagePermissions;
}
/*
* (non-Javadoc)
*
* @see org.sakaiproject.api.app.messageforums.ui.DiscussionForumManager#getTopicControlPermissions(org.sakaiproject.api.app.messageforums.DiscussionTopic)
*/
public List getTopicControlPermissions(DiscussionTopic topic)
{
LOG.debug("getTopicControlPermissions(DiscussionTopic " + topic + ")");
List topicControlPermissions = new ArrayList();
Iterator roles = getRoles();
while (roles.hasNext())
{
String roleId = (String) roles.next();
TopicControlPermission controlPermission = permissionManager
.getTopicControlPermissionForRole(topic, roleId, typeManager
.getDiscussionForumType());
if (controlPermission == null)
{
controlPermission = permissionManager
.createTopicControlPermissionForRole(topic.getBaseForum(), roleId,
typeManager.getDiscussionForumType());
}
topicControlPermissions.add(controlPermission);
}
return topicControlPermissions;
}
/*
* (non-Javadoc)
*
* @see org.sakaiproject.api.app.messageforums.ui.DiscussionForumManager#getTopicMessagePermissions(org.sakaiproject.api.app.messageforums.DiscussionTopic)
*/
public List getTopicMessagePermissions(DiscussionTopic topic)
{
LOG.debug("getTopicMessagePermissions(DiscussionTopic " + topic + ")");
List topicMessagePermissions = new ArrayList();
Iterator roles = getRoles();
while (roles.hasNext())
{
String roleId = (String) roles.next();
MessagePermissions messagePermission = permissionManager
.getTopicMessagePermissionForRole(topic, roleId, typeManager
.getDiscussionForumType());
if (messagePermission == null)
{
messagePermission = permissionManager
.createTopicMessagePermissionForRole(topic.getBaseForum(), roleId,
typeManager.getDiscussionForumType());
}
topicMessagePermissions.add(messagePermission);
}
return topicMessagePermissions;
}
/*
* (non-Javadoc)
*
* @see org.sakaiproject.api.app.messageforums.ui.DiscussionForumManager#saveDefaultControlPermissions(java.util.List)
*/
public void saveAreaControlPermissions(List controlpermissions)
{
if (LOG.isDebugEnabled())
{
LOG.debug("saveAreaControlPermissions(List" + controlpermissions + ")");
}
if (controlpermissions != null && controlpermissions.size() > 0)
{
Iterator iterator = controlpermissions.iterator();
while (iterator.hasNext())
{
AreaControlPermission controlPermission = (AreaControlPermission) iterator
.next();
permissionManager.saveAreaControlPermissionForRole(
getDiscussionForumArea(), controlPermission, typeManager
.getDiscussionForumType());
}
}
}
/*
* (non-Javadoc)
*
* @see org.sakaiproject.api.app.messageforums.ui.DiscussionForumManager#saveForumControlPermissions(org.sakaiproject.api.app.messageforums.DiscussionForum,
* java.util.List)
*/
public void saveForumControlPermissions(DiscussionForum forum,
List controlPermissions)
{
if (LOG.isDebugEnabled())
{
LOG.debug("saveForumControlPermissions(List " + controlPermissions + ")");
}
if (forum != null && controlPermissions != null
&& controlPermissions.size() > 0)
{
Iterator iterator = controlPermissions.iterator();
while (iterator.hasNext())
{
ForumControlPermission controlPermission = (ForumControlPermission) iterator
.next();
permissionManager.saveForumControlPermissionForRole(forum,
controlPermission);
}
}
}
/*
* (non-Javadoc)
*
* @see org.sakaiproject.api.app.messageforums.ui.DiscussionForumManager#saveForumMessagePermissions(org.sakaiproject.api.app.messageforums.DiscussionForum,
* java.util.List)
*/
public void saveForumMessagePermissions(DiscussionForum forum,
List messagePermissions)
{
if (LOG.isDebugEnabled())
{
LOG.debug("saveForumMessagePermissions(List " + messagePermissions + ")");
}
if (forum != null && messagePermissions != null
&& messagePermissions.size() > 0)
{
Iterator iterator = messagePermissions.iterator();
while (iterator.hasNext())
{
MessagePermissions messagePermission = (MessagePermissions) iterator
.next();
permissionManager.saveForumMessagePermissionForRole(forum,
messagePermission);
}
}
}
/*
* (non-Javadoc)
*
* @see org.sakaiproject.api.app.messageforums.ui.DiscussionForumManager#saveTopicControlPermissions(org.sakaiproject.api.app.messageforums.DiscussionForum,
* java.util.List)
*/
public void saveTopicControlPermissions(DiscussionTopic topic,
List controlPermissions)
{
if (LOG.isDebugEnabled())
{
LOG.debug("saveTopicControlPermissions(List " + controlPermissions + ")");
}
if (topic != null && controlPermissions != null
&& controlPermissions.size() > 0)
{
Iterator iterator = controlPermissions.iterator();
while (iterator.hasNext())
{
TopicControlPermission controlPermission = (TopicControlPermission) iterator
.next();
permissionManager.saveTopicControlPermissionForRole(topic,
controlPermission);
}
}
}
/*
* (non-Javadoc)
*
* @see org.sakaiproject.api.app.messageforums.ui.DiscussionForumManager#saveTopicMessagePermissions(org.sakaiproject.api.app.messageforums.DiscussionTopic,
* java.util.List)
*/
public void saveTopicMessagePermissions(DiscussionTopic topic,
List messagePermissions)
{
if (LOG.isDebugEnabled())
{
LOG.debug("saveTopicMessagePermissions(List " + messagePermissions + ")");
}
if (topic != null && messagePermissions != null
&& messagePermissions.size() > 0)
{
Iterator iterator = messagePermissions.iterator();
while (iterator.hasNext())
{
MessagePermissions messagePermission = (MessagePermissions) iterator
.next();
permissionManager.saveTopicMessagePermissionForRole(topic,
messagePermission);
}
}
}
/**
* @return Roles for the current site
*/
private Iterator getRoles()
{
LOG.debug("getRoles()");
List roleList = new ArrayList();
AuthzGroup realm = null;
try
{
realm = AuthzGroupService.getAuthzGroup(getContextSiteId());
Set roles = realm.getRoles();
if (roles != null && roles.size() > 0)
{
Iterator roleIter = roles.iterator();
while (roleIter.hasNext())
{
Role role = (Role) roleIter.next();
if (role != null) roleList.add(role.getId());
}
}
}
catch (GroupNotDefinedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
Collections.sort(roleList);
return roleList.iterator();
}
public boolean getAnonRole()
{
return getAnonRole(getContextSiteId());
}
public boolean getAnonRole(String contextSiteId)
{
LOG.debug("getAnonRoles()");
AuthzGroup realm = null;
try
{
realm = AuthzGroupService.getAuthzGroup(contextSiteId);
Role anon = realm.getRole(".anon");
if (sessionManager.getCurrentSessionUserId()==null && anon != null && anon.getAllowedFunctions().contains("site.visit"))
{
return true;
}
}
catch (GroupNotDefinedException e) {
e.printStackTrace();
return false;
}
return false;
}
public void markMessageAs(Message message, boolean readStatus)
{
if (LOG.isDebugEnabled())
{
LOG.debug("markMessageAsRead(Message" + message + ")");
}
try
{
messageManager.markMessageReadForUser(message.getTopic().getId(), message
.getId(), readStatus);
}
catch (Exception e)
{
LOG.error(e.getMessage(), e);
}
}
public void markMessageReadStatusForUser(Message message, boolean readStatus, String userId)
{
if (LOG.isDebugEnabled())
{
LOG.debug("markMessageReadStatusForUser(Message" + message + " readStatus:" + readStatus + " userId: " + userId + ")");
}
try
{
messageManager.markMessageReadForUser(message.getTopic().getId(), message
.getId(), readStatus, userId);
}
catch (Exception e)
{
LOG.error(e.getMessage(), e);
}
}
/**
* @param forum
* @return
*/
public boolean isForumOwner(DiscussionForum forum){
return isForumOwner(forum, userDirectoryService.getCurrentUser().getId());
}
public boolean isForumOwner(DiscussionForum forum, String userId)
{
return isForumOwner(forum, userId, getContextSiteId());
}
public boolean isForumOwner(DiscussionForum forum, String userId, String siteId)
{
return isForumOwner(forum.getId(), forum.getCreatedBy(), userId, siteId);
}
public boolean isForumOwner(Long forumId, String forumCreatedBy, String userId, String siteId)
{
if (LOG.isDebugEnabled())
{
LOG.debug("isForumOwner(DiscussionForum " + forumId + ")");
}
if (forumCreatedBy.equals(userId) && !isRoleSwapView(siteId))
{
return true;
}
return false;
}
private boolean isRoleSwapView(String siteId)
{
return (securityService.getUserEffectiveRole(siteId) != null);
}
/**
* @param topic
* @return
*/
public boolean isTopicOwner(DiscussionTopic topic){
return isTopicOwner(topic, userDirectoryService.getCurrentUser().getId());
}
public boolean isTopicOwner(DiscussionTopic topic, String userId)
{
return isTopicOwner(topic, userId, getContextSiteId());
}
public boolean isTopicOwner(DiscussionTopic topic, String userId, String siteId)
{
return isTopicOwner(topic.getId(), topic.getCreatedBy(), userId, siteId);
}
public boolean isTopicOwner(Long topicId, String topicCreatedBy, String userId, String siteId)
{
if (LOG.isDebugEnabled())
{
LOG.debug("isTopicOwner(DiscussionTopic " + topicId + ")");
}
if (topicCreatedBy.equals(userId) && !isRoleSwapView(siteId))
{
return true;
}
return false;
}
private boolean getTopicAccess(DiscussionTopic t)
{
if (LOG.isDebugEnabled())
{
LOG.debug("getTopicAccess(DiscussionTopic" + t + ")");
}
//SAK-12685 If topic's permission level name is "None", then can't access
boolean nonePermission = false;
User user=userDirectoryService.getCurrentUser();
String role=AuthzGroupService.getUserRole(user.getId(), getContextSiteId());
Set membershipItemSet = t.getMembershipItemSet();
Iterator it = membershipItemSet.iterator();
while(it.hasNext()) {
DBMembershipItem membershipItem =(DBMembershipItem)it.next();
String roleName = membershipItem.getName();
String permissionName = membershipItem.getPermissionLevelName();
if(roleName.equals(role) && permissionName.equals(PermissionLevelManager.PERMISSION_LEVEL_NAME_NONE)){
nonePermission = true;
}
}
if ((t.getDraft().equals(Boolean.FALSE) && !nonePermission &&
t.getAvailability() != null && t.getAvailability())
|| isInstructor()
|| securityService.isSuperUser()
|| isTopicOwner(t))
{
return true;
}
return false;
}
/**
* @param accessorList
* @return
*/
private List decodeActorPermissionTypeList(List selectedList)
{
if (LOG.isDebugEnabled())
{
LOG.debug("decodeActorPermissionTypeList(List" + selectedList + ")");
}
List newSelectedMemberList = new ArrayList();
for (Iterator i = selectedList.iterator(); i.hasNext();)
{
String selectedItem = (String) i.next();
MessageForumsUser user = new MessageForumsUserImpl();
/** lookup item in map */
MembershipItem item = (MembershipItem) getAllCourseMembers().get(
selectedItem);
if (item == null)
{
LOG.warn("decodeActorPermissionTypeList() could not resolve uuid: "
+ selectedItem);
}
else
{
if (MembershipItem.TYPE_ALL_PARTICIPANTS.equals(item.getType()))
{
user.setTypeUuid(typeManager.getAllParticipantType());
user.setUserId(typeManager.getAllParticipantType());
newSelectedMemberList.add(user);
}
else
if (MembershipItem.TYPE_NOT_SPECIFIED.equals(item.getType()))
{
user.setTypeUuid(typeManager.getNotSpecifiedType());
user.setUserId(typeManager.getNotSpecifiedType());
// if not specified is seleted then only this value remains.
newSelectedMemberList = null;
newSelectedMemberList = new ArrayList();
newSelectedMemberList.add(user);
break;
}
else
if (MembershipItem.TYPE_ROLE.equals(item.getType()))
{
user.setTypeUuid(typeManager.getRoleType());
user.setUserId(item.getRole().getId());
newSelectedMemberList.add(user);
}
else
if (MembershipItem.TYPE_GROUP.equals(item.getType()))
{
user.setTypeUuid(typeManager.getGroupType());
user.setUserId(item.getGroup().getId());
newSelectedMemberList.add(user);
}
else
if (MembershipItem.TYPE_USER.equals(item.getType()))
{
user.setTypeUuid(typeManager.getUserType());
user.setUserId(item.getUser().getId());
newSelectedMemberList.add(user);
}
else
{
LOG
.warn("getRecipients() could not resolve membership type: "
+ item.getType());
}
}
}
return newSelectedMemberList;
}
/*
* (non-Javadoc)
*
* @see org.sakaiproject.api.app.messageforums.ui.DiscussionForumManager#decodeAccessorsList(java.util.List)
*/
public List decodeAccessorsList(ArrayList accessorList)
{
if (LOG.isDebugEnabled())
{
LOG.debug("decodeAccessorsList(List" + accessorList + ")");
}
if (accessorList == null || accessorList.size() < 1)
{
return forumManager.createDefaultActorPermissions().getAccessors();
}
return decodeActorPermissionTypeList(accessorList);
}
/*
* (non-Javadoc)
*
* @see org.sakaiproject.api.app.messageforums.ui.DiscussionForumManager#decodeContributorsList(java.util.List)
*/
public List decodeContributorsList(ArrayList contributorList)
{
if (LOG.isDebugEnabled())
{
LOG.debug("decodeContributorsList(List" + contributorList + ")");
}
if (contributorList == null || contributorList.size() < 1)
{
return forumManager.createDefaultActorPermissions().getContributors();
}
return decodeActorPermissionTypeList(contributorList);
}
/*
* (non-Javadoc)
*
* @see org.sakaiproject.api.app.messageforums.ui.DiscussionForumManager#getContributorsList(org.sakaiproject.api.app.messageforums.DiscussionForum)
*/
public List getContributorsList(DiscussionForum forum)
{
if (LOG.isDebugEnabled())
{
LOG.debug(" getContributorsList(DiscussionForum" + forum + ")");
}
List contributorList = null;
if (forum == null)
{
return null;
}
if (forum.getActorPermissions() == null
|| forum.getActorPermissions().getContributors() == null)
{
forum.setActorPermissions(forumManager.createDefaultActorPermissions());
contributorList = forumManager.createDefaultActorPermissions()
.getContributors();
}
else
{
contributorList = forum.getActorPermissions().getContributors();
}
Iterator iterator = contributorList.iterator();
return getContributorAccessorList(iterator);
}
/*
* (non-Javadoc)
*
* @see org.sakaiproject.api.app.messageforums.ui.DiscussionForumManager#getAccessorsList(org.sakaiproject.api.app.messageforums.DiscussionForum)
*/
public List getAccessorsList(DiscussionForum forum)
{
if (LOG.isDebugEnabled())
{
LOG.debug("getAccessorsList(DiscussionForum" + forum + ")");
}
List accessorsList = null;
if (forum == null)
{
return null;
}
if (forum.getActorPermissions() == null
|| forum.getActorPermissions().getAccessors() == null)
{
forum.setActorPermissions(forumManager.createDefaultActorPermissions());
accessorsList = forumManager.createDefaultActorPermissions()
.getAccessors();
}
else
{
accessorsList = forum.getActorPermissions().getAccessors();
}
Iterator iterator = accessorsList.iterator();
return getContributorAccessorList(iterator);
}
/**
* @param iterator
* @return
*/
private List getContributorAccessorList(Iterator iterator)
{
if (LOG.isDebugEnabled())
{
LOG.debug("getContributorAccessorList(Iterator" + iterator + ")");
}
List modifiedContributorList = new ArrayList();
while (iterator.hasNext())
{
String selectedId = null;
MessageForumsUser user = (MessageForumsUser) iterator.next();
List totalmembers = membershipManager
.convertMemberMapToList(courseMemberMap);
Iterator iter = totalmembers.iterator();
if (user.getTypeUuid().equals(typeManager.getAllParticipantType()))
{
while (iter.hasNext())
{
MembershipItem member = (MembershipItem) iter.next();
if (member.getType().equals(MembershipItem.TYPE_ALL_PARTICIPANTS))
{
selectedId = member.getId();
}
}
}
if (user.getTypeUuid().equals(typeManager.getNotSpecifiedType()))
{
while (iter.hasNext())
{
MembershipItem member = (MembershipItem) iter.next();
if (member.getType().equals(MembershipItem.TYPE_NOT_SPECIFIED))
{
selectedId = member.getId();
}
}
}
if (user.getTypeUuid().equals(typeManager.getGroupType()))
{
while (iter.hasNext())
{
MembershipItem member = (MembershipItem) iter.next();
if (member.getType().equals(MembershipItem.TYPE_GROUP)
&& user.getUserId().equals(member.getGroup().getId()))
{
selectedId = member.getId();
}
}
}
if (user.getTypeUuid().equals(typeManager.getRoleType()))
{
while (iter.hasNext())
{
MembershipItem member = (MembershipItem) iter.next();
if (member.getType().equals(MembershipItem.TYPE_ROLE)
&& user.getUserId().equals(member.getRole().getId()))
{
selectedId = member.getId();
}
}
}
if (user.getTypeUuid().equals(typeManager.getUserType()))
{
while (iter.hasNext())
{
MembershipItem member = (MembershipItem) iter.next();
if (member.getType().equals(MembershipItem.TYPE_USER)
&& user.getUserId().equals(member.getUser().getId()))
{
selectedId = member.getId();
}
}
}
modifiedContributorList.add(selectedId);
}
return modifiedContributorList;
}
/*
* (non-Javadoc)
*
* @see org.sakaiproject.api.app.messageforums.ui.DiscussionForumManager#getAllCourseMembers()
*/
public Map getAllCourseMembers()
{
if (LOG.isDebugEnabled())
{
LOG.debug("getAllCourseMembers()");
}
if (courseMemberMap == null)
{
courseMemberMap = membershipManager.getAllCourseMembers(true, false, true, null);
}
return courseMemberMap;
}
/**
* @param courseMemberMap
* The courseMemberMap to set.
*/
public void setCourseMemberMapToNull()
{
this.courseMemberMap = null;
}
/*
* (non-Javadoc)
*
* @see org.sakaiproject.api.app.messageforums.ui.DiscussionForumManager#getContributorsList(org.sakaiproject.api.app.messageforums.DiscussionTopic)
*/
public List getContributorsList(DiscussionTopic topic, DiscussionForum forum)
{
if (LOG.isDebugEnabled())
{
LOG.debug("getContributorsList(DiscussionTopic " + topic
+ ", DiscussionForum " + forum + ")");
}
List contributorList = null;
if (topic == null)
{
return null;
}
if (topic.getActorPermissions() == null
|| topic.getActorPermissions().getContributors() == null)
{
// hibernate does not permit this b/c saving forum and topics will
// throw uniqueobjectexception
topic.setActorPermissions(getDeepCopyOfParentActorPermissions(forum
.getActorPermissions()));
contributorList = topic.getActorPermissions().getContributors();
}
else
{
contributorList = topic.getActorPermissions().getContributors();
}
Iterator iterator = contributorList.iterator();
return getContributorAccessorList(iterator);
}
private ActorPermissions getDeepCopyOfParentActorPermissions(
ActorPermissions actorPermissions)
{
ActorPermissions newAP = new ActorPermissionsImpl();
List parentAccessors = actorPermissions.getAccessors();
List parentContributors = actorPermissions.getContributors();
List newAccessors = new ArrayList();
List newContributor = new ArrayList();
Iterator iter = parentAccessors.iterator();
while (iter.hasNext())
{
MessageForumsUser accessParent = (MessageForumsUser) iter.next();
MessageForumsUser newaccessor = new MessageForumsUserImpl();
newaccessor.setTypeUuid(accessParent.getTypeUuid());
newaccessor.setUserId(accessParent.getUserId());
newaccessor.setUuid(accessParent.getUuid());
newAccessors.add(newaccessor);
}
Iterator iter1 = parentContributors.iterator();
while (iter1.hasNext())
{
MessageForumsUser contribParent = (MessageForumsUser) iter1.next();
MessageForumsUser newcontributor = new MessageForumsUserImpl();
newcontributor.setTypeUuid(contribParent.getTypeUuid());
newcontributor.setUserId(contribParent.getUserId());
newcontributor.setUuid(contribParent.getUuid());
newContributor.add(newcontributor);
}
newAP.setAccessors(newAccessors);
newAP.setContributors(newContributor);
return newAP;
}
/*
* (non-Javadoc)
*
* @see org.sakaiproject.api.app.messageforums.ui.DiscussionForumManager#getAccessorsList(org.sakaiproject.api.app.messageforums.DiscussionTopic)
*/
public List getAccessorsList(DiscussionTopic topic, DiscussionForum forum)
{
if (LOG.isDebugEnabled())
{
LOG.debug("getAccessorsList(DiscussionTopic " + topic
+ ", DiscussionForum " + forum + ")");
}
List accessorsList = null;
if (topic == null)
{
return null;
}
if (topic.getActorPermissions() == null
|| topic.getActorPermissions().getAccessors() == null)
{
// hibernate does not permit this b/c saving forum and topics will
// throw uniqueobjectexception
topic.setActorPermissions(getDeepCopyOfParentActorPermissions(forum
.getActorPermissions()));
accessorsList = topic.getActorPermissions().getAccessors();
}
else
{
accessorsList = topic.getActorPermissions().getAccessors();
}
Iterator iterator = accessorsList.iterator();
return getContributorAccessorList(iterator);
}
public DBMembershipItem getAreaDBMember(Set originalSet, String name,
Integer type)
{
DBMembershipItem newItem = getDBMember(originalSet, name, type);
return newItem;
}
public DBMembershipItem getDBMember(Set originalSet, String name,
Integer type) {
return getDBMember(originalSet, name, type, getContextSiteId());
}
public DBMembershipItem getDBMember(Set originalSet, String name,
Integer type, String contextSiteId)
{
DBMembershipItem membershipItem = null;
DBMembershipItem membershipItemIter;
if (originalSet != null){
Iterator iter = originalSet.iterator();
while (iter.hasNext())
{
membershipItemIter = (DBMembershipItem) iter.next();
if (membershipItemIter.getType().equals(type)
&& membershipItemIter.getName().equals(name))
{
membershipItem = membershipItemIter;
break;
}
}
}
if (membershipItem == null || membershipItem.getPermissionLevel() == null){
PermissionLevel level = null;
//for groups awareness
if (type.equals(DBMembershipItem.TYPE_ROLE) || type.equals(DBMembershipItem.TYPE_GROUP))
{
String levelName = null;
if (membershipItem != null){
/** use level from stored item */
levelName = membershipItem.getPermissionLevelName();
}
else{
/** get level from config file */
levelName = ServerConfigurationService.getString(MC_DEFAULT
+ name);
}
if (levelName != null && levelName.trim().length() > 0)
{
level = permissionLevelManager.getPermissionLevelByName(levelName);
} else if (name == null || ".anon".equals(name)) {
level = permissionLevelManager.getDefaultNonePermissionLevel();
} else{
Collection siteIds = new Vector();
siteIds.add(contextSiteId);
if(type.equals(DBMembershipItem.TYPE_GROUP))
{
level = permissionLevelManager.getDefaultNonePermissionLevel();
}else if (AuthzGroupService.getAllowedFunctions(name, siteIds)
.contains(SiteService.SECURE_UPDATE_SITE)){
level = permissionLevelManager.getDefaultOwnerPermissionLevel();
}else{
level = permissionLevelManager.getDefaultContributorPermissionLevel();
}
}
}
PermissionLevel noneLevel = permissionLevelManager.getDefaultNonePermissionLevel();
membershipItem = new DBMembershipItemImpl();
membershipItem.setName(name);
membershipItem.setPermissionLevelName((level == null) ? noneLevel.getName() : level.getName() );
membershipItem.setType(type);
membershipItem.setPermissionLevel((level == null) ? noneLevel : level);
}
return membershipItem;
}
//Attachment
public Attachment createDFAttachment(String attachId, String name)
{
try
{
Attachment attach = messageManager.createAttachment();
attach.setAttachmentId(attachId);
attach.setAttachmentName(name);
ContentResource cr = contentHostingService.getResource(attachId);
attach.setAttachmentSize((Long.valueOf(cr.getContentLength())).toString());
attach.setCreatedBy(cr.getProperties().getProperty(
cr.getProperties().getNamePropCreator()));
attach.setModifiedBy(cr.getProperties().getProperty(
cr.getProperties().getNamePropModifiedBy()));
attach.setAttachmentType(cr.getContentType());
attach.setAttachmentUrl("/url");
return attach;
}
catch (Exception e)
{
e.printStackTrace();
return null;
}
}
public List getDiscussionForumsWithTopics()
{
LOG.debug("getDiscussionForumsWithTopics()");
return forumManager.getForumByTypeAndContextWithTopicsAllAttachments(typeManager
.getDiscussionForumType());
}
public List getDiscussionForumsWithTopics(String contextId) {
if (LOG.isDebugEnabled()) LOG.debug("getDiscussionForumsWithTopics(String contextId)");
if (contextId == null) {
throw new IllegalArgumentException("Null contextId passed to getDiscussionForumsWithTopics");
}
String dfType = typeManager.getDiscussionForumType();
return forumManager.getForumByTypeAndContextWithTopicsAllAttachments(dfType, contextId);
}
public Map<Long, Boolean> getReadStatusForMessagesWithId(List<Long> msgIds, String userId)
{
LOG.debug("getDiscussionForumsWithTopics()");
Map<Long, Boolean> msgIdStatusMap = new HashMap<Long, Boolean>();
if (msgIds == null || msgIds.size() == 0) {
LOG.debug("empty map returns b/c no msgIds passed to getReadStatusForMessagesWithId");
return msgIdStatusMap;
}
if (userId == null) {
LOG.debug("empty user assume that all messages are read");
for (int i =0; i < msgIds.size(); i++) {
msgIdStatusMap.put(msgIds.get(i), Boolean.valueOf(true));
}
return msgIdStatusMap;
}
if (msgIds.size() < MAX_NUMBER_OF_SQL_PARAMETERS_IN_LIST) {
return messageManager.getReadStatusForMessagesWithId(msgIds, userId);
} else {
// if there are more than MAX_NUMBER_OF_SQL_PARAMETERS_IN_LIST msgs, we need to do multiple queries
int begIndex = 0;
int endIndex = 0;
while (begIndex < msgIds.size()) {
endIndex = begIndex + MAX_NUMBER_OF_SQL_PARAMETERS_IN_LIST;
if (endIndex > msgIds.size()) {
endIndex = msgIds.size();
}
List tempMsgIdList = new ArrayList();
tempMsgIdList.addAll(msgIds.subList(begIndex, endIndex));
Map<Long, Boolean> statusMap = messageManager.getReadStatusForMessagesWithId(tempMsgIdList, userId);
msgIdStatusMap.putAll(statusMap);
begIndex = endIndex;
}
}
return msgIdStatusMap;
}
public List getDiscussionForumsWithTopicsMembershipNoAttachments(String contextId)
{
LOG.debug("getDiscussionForumsWithTopicsMembershipNoAttachments()");
return forumManager.getForumByTypeAndContextWithTopicsMembership(typeManager
.getDiscussionForumType(), contextId);
}
public List getPendingMsgsInTopic(Long topicId)
{
return messageManager.getPendingMsgsInTopic(topicId);
}
public int getNumModTopicsWithModPermissionByPermissionLevel(List membershipList)
{
return forumManager.getNumModTopicCurrentUserHasModPermForWithPermissionLevel(membershipList);
}
public int getNumModTopicsWithModPermissionByPermissionLevelName(List membershipList)
{
return forumManager.getNumModTopicCurrentUserHasModPermForWithPermissionLevelName(membershipList);
}
private String getEventMessage(Object object) {
String eventMessagePrefix = "";
final String toolId = ToolManager.getCurrentTool().getId();
if (toolId.equals(DiscussionForumService.MESSAGE_CENTER_ID))
eventMessagePrefix = "/messagesAndForums";
else if (toolId.equals(DiscussionForumService.MESSAGES_TOOL_ID))
eventMessagePrefix = "/messages";
else
eventMessagePrefix = "/forums";
return eventMessagePrefix + getContextSiteId() + "/" + object.toString() + "/" + sessionManager.getCurrentSessionUserId();
}
public String getContextForTopicById(Long topicId) {
return getTopicById(topicId).getOpenForum().getArea().getContextId();
}
public String getContextForForumById(Long forumId) {
return getForumById(forumId).getArea().getContextId();
}
public String getContextForMessageById(Long messageId) {
return getMessageById(messageId).getTopic().getOpenForum().getArea().getContextId();
}
public String ForumIdForMessage(Long messageId) {
return getMessageById(messageId).getTopic().getOpenForum().getId().toString();
}
public Set<String> getUsersAllowedForTopic(Long topicId, boolean checkReadPermission, boolean checkModeratePermission) {
LOG.debug("getUsersAllowedForTopic(" + topicId + ", " + checkReadPermission + ", " + checkModeratePermission + ")");
if (topicId == null) {
throw new IllegalArgumentException("Null topicId passed to getUsersAllowedToReadTopic");
}
Set<String> usersAllowed = new HashSet<String>();
// we need to get all of the membership items associated with this topic
// first, check to see if it is in the thread
Set<DBMembershipItem> topicItems = new HashSet<DBMembershipItem>();
DiscussionTopic topicWithMemberships = (DiscussionTopic)forumManager.getTopicByIdWithMemberships(topicId);
if (topicWithMemberships != null && topicWithMemberships.getMembershipItemSet() != null) {
topicItems = topicWithMemberships.getMembershipItemSet();
}
Set<Role> rolesInSite = null;
Set<Group> groupsInSite = new HashSet<Group>();
Site currentSite;
String siteId = ToolManager.getCurrentPlacement().getContext();
try {
currentSite = siteService.getSite(siteId);
// get all of the roles in this site
rolesInSite = currentSite.getRoles();
Collection<Group> groups = currentSite.getGroups();
if (groups != null) {
groupsInSite = new HashSet<Group>(groups);
}
} catch (IdUnusedException iue) {
LOG.warn("No site found with id: " + siteId + ". No users returned by getUsersAllowedToReadTopic");
return new HashSet<String>();
}
List<DBMembershipItem> revisedMembershipItemSet = new ArrayList<DBMembershipItem>();
// we need to get the membership items for the roles separately b/c of default permissions
if (rolesInSite != null) {
for (Role role : rolesInSite) {
DBMembershipItem roleItem = getDBMember(topicItems, role.getId(), DBMembershipItem.TYPE_ROLE);
if (roleItem != null) {
revisedMembershipItemSet.add(roleItem);
}
}
}
// now add in the group perms
for (Group group : groupsInSite) {
DBMembershipItem groupItem = getDBMember(topicItems, group.getTitle(), DBMembershipItem.TYPE_GROUP);
if (groupItem != null) {
revisedMembershipItemSet.add(groupItem);
}
}
// now we have the membership items. let's see which ones can read
for (DBMembershipItem membershipItem : revisedMembershipItemSet) {
if ((checkReadPermission && membershipItem.getPermissionLevel().getRead() && !checkModeratePermission) ||
(!checkReadPermission && checkModeratePermission && membershipItem.getPermissionLevel().getModeratePostings()) ||
(checkReadPermission && membershipItem.getPermissionLevel().getRead() && checkModeratePermission && membershipItem.getPermissionLevel().getModeratePostings())) {
if (membershipItem.getType().equals(DBMembershipItem.TYPE_ROLE)) {
// add the users who are a member of this role
LOG.debug("Adding users in role: " + membershipItem.getName() + " with read: " + membershipItem.getPermissionLevel().getRead());
Set<String> usersInRole = currentSite.getUsersHasRole(membershipItem.getName());
usersAllowed.addAll(usersInRole);
} else if (membershipItem.getType().equals(DBMembershipItem.TYPE_GROUP)) {
String groupName = membershipItem.getName();
for (Group group : groupsInSite) {
if (group.getTitle().equals(groupName)) {
Set<Member> groupMembers = group.getMembers();
if (groupMembers != null) {
for (Member member : groupMembers) {
usersAllowed.add(member.getUserId());
}
}
}
}
}
}
}
return usersAllowed;
}
public List<Attachment> getTopicAttachments(Long topicId) {
return forumManager.getTopicAttachments(topicId);
}
}