/********************************************************************************** * $URL: https://source.sakaiproject.org/svn/msgcntr/trunk/messageforums-component-impl/src/java/org/sakaiproject/component/app/messageforums/PermissionManagerImpl.java $ * $Id: PermissionManagerImpl.java 9227 2006-05-15 15:02:42Z cwen@iupui.edu $ *********************************************************************************** * * Copyright (c) 2003, 2004, 2005, 2006, 2007, 2008 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; import java.sql.SQLException; import org.apache.commons.logging.Log; import org.apache.commons.logging.LogFactory; import org.hibernate.Hibernate; import org.hibernate.HibernateException; import org.hibernate.Query; import org.hibernate.Session; 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.BaseForum; import org.sakaiproject.api.app.messageforums.ControlPermissions; import org.sakaiproject.api.app.messageforums.DefaultPermissionsManager; import org.sakaiproject.api.app.messageforums.DiscussionForumService; import org.sakaiproject.api.app.messageforums.ForumControlPermission; import org.sakaiproject.api.app.messageforums.MessageForumsTypeManager; import org.sakaiproject.api.app.messageforums.MessagePermissions; import org.sakaiproject.api.app.messageforums.PermissionManager; import org.sakaiproject.api.app.messageforums.Topic; import org.sakaiproject.api.app.messageforums.TopicControlPermission; import org.sakaiproject.component.app.messageforums.dao.hibernate.AreaControlPermissionImpl; import org.sakaiproject.component.app.messageforums.dao.hibernate.ControlPermissionsImpl; import org.sakaiproject.component.app.messageforums.dao.hibernate.ForumControlPermissionImpl; import org.sakaiproject.component.app.messageforums.dao.hibernate.MessagePermissionsImpl; import org.sakaiproject.component.app.messageforums.dao.hibernate.TopicControlPermissionImpl; import org.sakaiproject.event.api.EventTrackingService; import org.sakaiproject.id.api.IdManager; import org.sakaiproject.tool.api.Placement; import org.sakaiproject.tool.api.SessionManager; import org.sakaiproject.tool.cover.ToolManager; import org.springframework.orm.hibernate3.HibernateCallback; import org.springframework.orm.hibernate3.support.HibernateDaoSupport; public class PermissionManagerImpl extends HibernateDaoSupport implements PermissionManager { private static final Log LOG = LogFactory.getLog(PermissionManagerImpl.class); private static final String QUERY_CP_BY_ROLE = "findAreaControlPermissionByRole"; private static final String QUERY_CP_BY_FORUM = "findForumControlPermissionByRole"; private static final String QUERY_CP_BY_TOPIC = "findTopicControlPermissionByRole"; private static final String QUERY_MP_BY_ROLE = "findAreaMessagePermissionByRole"; private static final String QUERY_MP_BY_FORUM = "findForumMessagePermissionByRole"; private static final String QUERY_MP_BY_TOPIC = "findTopicMessagePermissionByRole"; private IdManager idManager; private SessionManager sessionManager; private MessageForumsTypeManager typeManager; private AreaManager areaManager; private EventTrackingService eventTrackingService; private DefaultPermissionsManager defaultPermissionsManager; public void init() { LOG.info("init()"); ; } public EventTrackingService getEventTrackingService() { return eventTrackingService; } public void setEventTrackingService(EventTrackingService eventTrackingService) { this.eventTrackingService = eventTrackingService; } public AreaManager getAreaManager() { return areaManager; } public void setAreaManager(AreaManager areaManager) { this.areaManager = areaManager; } public MessageForumsTypeManager getTypeManager() { return typeManager; } public void setTypeManager(MessageForumsTypeManager typeManager) { this.typeManager = typeManager; } public void setSessionManager(SessionManager sessionManager) { this.sessionManager = sessionManager; } public IdManager getIdManager() { return idManager; } public SessionManager getSessionManager() { return sessionManager; } public void setIdManager(IdManager idManager) { this.idManager = idManager; } /** * @param defaultPermissionsManager The defaultPermissionsManager to set. */ public void setDefaultPermissionsManager( DefaultPermissionsManager defaultPermissionManager) { this.defaultPermissionsManager = defaultPermissionManager; } public AreaControlPermission getAreaControlPermissionForRole(String role, String typeId) { ControlPermissions permissions = getAreaControlPermissionByRoleAndType(role, typeId, false); AreaControlPermission cp = new AreaControlPermissionImpl(); if (permissions == null) { // cp.setChangeSettings(Boolean.FALSE); // cp.setMovePostings(Boolean.FALSE); // cp.setNewForum(Boolean.FALSE); // cp.setNewResponse(Boolean.FALSE); // cp.setNewTopic(Boolean.FALSE); // cp.setResponseToResponse(Boolean.FALSE); // cp.setPostToGradebook(Boolean.FALSE); return getDefaultAreaControlPermissionForRole(role, typeId); } else { cp.setPostToGradebook(permissions.getPostToGradebook()); cp.setChangeSettings(permissions.getChangeSettings()); cp.setMovePostings(permissions.getMovePostings()); cp.setNewForum(permissions.getNewForum()); cp.setNewResponse(permissions.getNewResponse()); cp.setNewTopic(permissions.getNewTopic()); cp.setResponseToResponse(permissions.getResponseToResponse()); } cp.setRole(role); return cp; } public AreaControlPermission getDefaultAreaControlPermissionForRole(String role, String typeId) { // ControlPermissions permissions = getAreaControlPermissionByRoleAndType(role, typeId, true); AreaControlPermission cp = new AreaControlPermissionImpl(); // if (permissions == null) { // cp.setChangeSettings(Boolean.FALSE); // cp.setMovePostings(Boolean.FALSE); // cp.setNewForum(Boolean.FALSE); // cp.setNewResponse(Boolean.FALSE); // cp.setNewTopic(Boolean.FALSE); // cp.setResponseToResponse(Boolean.FALSE); // cp.setPostToGradebook(Boolean.FALSE); // } else { // cp.setChangeSettings(permissions.getChangeSettings()); // cp.setMovePostings(permissions.getMovePostings()); // cp.setNewForum(permissions.getNewForum()); // cp.setNewResponse(permissions.getNewResponse()); // cp.setNewTopic(permissions.getNewTopic()); // cp.setResponseToResponse(permissions.getResponseToResponse()); // cp.setPostToGradebook(permissions.getPostToGradebook()); // } cp.setChangeSettings(Boolean.valueOf(defaultPermissionsManager.isChangeSettings(role))); cp.setMovePostings(Boolean.valueOf(defaultPermissionsManager.isMovePostings(role))); cp.setNewForum(Boolean.valueOf(defaultPermissionsManager.isNewForum(role))); cp.setNewResponse(Boolean.valueOf(defaultPermissionsManager.isNewResponse(role))); cp.setNewTopic(Boolean.valueOf(defaultPermissionsManager.isNewTopic(role))); cp.setResponseToResponse(Boolean.valueOf(defaultPermissionsManager.isResponseToResponse(role))); cp.setPostToGradebook(Boolean.valueOf(defaultPermissionsManager.isPostToGradebook(role))); cp.setRole(role); return cp; } public AreaControlPermission createAreaControlPermissionForRole(String role, String typeId) { AreaControlPermission permission = new AreaControlPermissionImpl(); AreaControlPermission acp = getDefaultAreaControlPermissionForRole(role, typeId); permission.setChangeSettings(acp.getChangeSettings()); permission.setMovePostings(acp.getMovePostings()); permission.setNewForum(acp.getNewForum()); permission.setNewResponse(acp.getNewResponse()); permission.setNewTopic(acp.getNewTopic()); permission.setResponseToResponse(acp.getResponseToResponse()); permission.setPostToGradebook(acp.getPostToGradebook()); permission.setRole(role); return permission; } public void saveAreaControlPermissionForRole(Area area, AreaControlPermission permission, String typeId) { ControlPermissions permissions = getAreaControlPermissionByRoleAndType(permission.getRole(), typeId, false); if (permissions == null) { permissions = new ControlPermissionsImpl(); } boolean isNew = permissions.getId() == null; permissions.setArea(area); permissions.setDefaultValue(Boolean.FALSE); permissions.setChangeSettings(permission.getChangeSettings()); permissions.setMovePostings(permission.getMovePostings()); permissions.setNewForum(permission.getNewForum()); permissions.setNewResponse(permission.getNewResponse()); permissions.setNewTopic(permission.getNewTopic()); permissions.setResponseToResponse(permission.getResponseToResponse()); permissions.setPostToGradebook(permission.getPostToGradebook()); permissions.setRole(permission.getRole()); getHibernateTemplate().saveOrUpdate(permissions); // Commented out when splitting events between Messages tool and Forums tool // if (isNew) { // eventTrackingService.post(eventTrackingService.newEvent(DiscussionForumService.EVENT_RESOURCE_ADD, getEventMessage(area, permissions), false)); // } else { // eventTrackingService.post(eventTrackingService.newEvent(DiscussionForumService.EVENT_RESOURCE_WRITE, getEventMessage(area, permissions), false)); // } } public void saveDefaultAreaControlPermissionForRole(Area area, AreaControlPermission permission, String typeId) { ControlPermissions permissions = getAreaControlPermissionByRoleAndType(permission.getRole(), typeId, true); if (permissions == null) { permissions = new ControlPermissionsImpl(); } boolean isNew = permissions.getId() == null; permissions.setArea(area); permissions.setDefaultValue(Boolean.TRUE); permissions.setChangeSettings(permission.getChangeSettings()); permissions.setMovePostings(permission.getMovePostings()); permissions.setNewForum(permission.getNewForum()); permissions.setNewResponse(permission.getNewResponse()); permissions.setNewTopic(permission.getNewTopic()); permissions.setResponseToResponse(permission.getResponseToResponse()); permissions.setPostToGradebook(permission.getPostToGradebook()); permissions.setRole(permission.getRole()); getHibernateTemplate().saveOrUpdate(permissions); // Commented out when splitting events between Messages tool and Forums tool // if (isNew) { // eventTrackingService.post(eventTrackingService.newEvent(DiscussionForumService.EVENT_RESOURCE_ADD, getEventMessage(area, permissions), false)); // } else { // eventTrackingService.post(eventTrackingService.newEvent(DiscussionForumService.EVENT_RESOURCE_WRITE, getEventMessage(area, permissions), false)); // } } public ForumControlPermission getForumControlPermissionForRole(BaseForum forum, String role, String typeId) { ControlPermissions permissions = forum == null || forum.getId() == null ? null : getControlPermissionByKeyValue(role, "forumId", forum.getId().toString(), false); ForumControlPermission cp = new ForumControlPermissionImpl(); if (permissions == null) { return null; } else { cp.setChangeSettings(permissions.getChangeSettings()); cp.setMovePostings(permissions.getMovePostings()); cp.setNewResponse(permissions.getNewResponse()); cp.setNewTopic(permissions.getNewTopic()); cp.setPostToGradebook(permissions.getPostToGradebook()); cp.setResponseToResponse(permissions.getResponseToResponse()); } cp.setRole(role); return cp; } public ForumControlPermission getDefaultForumControlPermissionForRole(BaseForum forum, String role, String typeId) { ControlPermissions permissions = forum == null || forum.getId() == null ? null : getControlPermissionByKeyValue(role, "forumId", forum.getId().toString(), true); ForumControlPermission cp = new ForumControlPermissionImpl(); if (permissions == null) { return null; } else { cp.setPostToGradebook(permissions.getPostToGradebook()); cp.setChangeSettings(permissions.getChangeSettings()); cp.setMovePostings(permissions.getMovePostings()); cp.setNewResponse(permissions.getNewResponse()); cp.setNewTopic(permissions.getNewTopic()); cp.setResponseToResponse(permissions.getResponseToResponse()); } cp.setRole(role); return cp; } public ForumControlPermission createForumControlPermissionForRole(String role, String typeId) { ForumControlPermission permission = new ForumControlPermissionImpl(); AreaControlPermission acp = getAreaControlPermissionForRole(role, typeId); permission.setChangeSettings(acp.getChangeSettings()); permission.setMovePostings(acp.getMovePostings()); permission.setNewResponse(acp.getNewResponse()); permission.setNewTopic(acp.getNewTopic()); permission.setResponseToResponse(acp.getResponseToResponse()); permission.setPostToGradebook(acp.getPostToGradebook()); permission.setRole(role); return permission; } public void saveForumControlPermissionForRole(BaseForum forum, ForumControlPermission permission) { ControlPermissions permissions = forum == null || forum.getId() == null ? null : getControlPermissionByKeyValue(permission.getRole(), "forumId", forum.getId().toString(), false); if (permissions == null) { permissions = new ControlPermissionsImpl(); } boolean isNew = permissions.getId() == null; permissions.setForum(forum); permissions.setDefaultValue(Boolean.FALSE); permissions.setChangeSettings(permission.getChangeSettings()); permissions.setMovePostings(permission.getMovePostings()); permissions.setNewForum(Boolean.FALSE); permissions.setNewResponse(permission.getNewResponse()); permissions.setPostToGradebook(permission.getPostToGradebook()); permissions.setNewTopic(permission.getNewTopic()); permissions.setResponseToResponse(permission.getResponseToResponse()); permissions.setRole(permission.getRole()); getHibernateTemplate().saveOrUpdate(permissions); if (eventTrackingService == null) // SAK-12988 throw new RuntimeException("eventTrackingService is null!"); if (isNew) { eventTrackingService.post(eventTrackingService.newEvent(DiscussionForumService.EVENT_FORUMS_FORUM_ADD, getEventMessage(forum, permissions), false)); } else { eventTrackingService.post(eventTrackingService.newEvent(DiscussionForumService.EVENT_FORUMS_FORUM_REVISE, getEventMessage(forum, permissions), false)); } } public void saveDefaultForumControlPermissionForRole(BaseForum forum, ForumControlPermission permission) { ControlPermissions permissions = forum == null || forum.getId() == null ? null : getControlPermissionByKeyValue(permission.getRole(), "forumId", forum.getId().toString(), false); if (permissions == null) { permissions = new ControlPermissionsImpl(); } boolean isNew = permissions.getId() == null; permissions.setForum(forum); permissions.setDefaultValue(Boolean.TRUE); permissions.setChangeSettings(permission.getChangeSettings()); permissions.setMovePostings(permission.getMovePostings()); permissions.setNewForum(Boolean.FALSE); permissions.setNewResponse(permission.getNewResponse()); permissions.setPostToGradebook(permission.getPostToGradebook()); permissions.setNewTopic(permission.getNewTopic()); permissions.setResponseToResponse(permission.getResponseToResponse()); permissions.setRole(permission.getRole()); getHibernateTemplate().saveOrUpdate(permissions); if (eventTrackingService == null) // SAK-12988 throw new RuntimeException("eventTrackingService is null!"); if (isNew) { eventTrackingService.post(eventTrackingService.newEvent(DiscussionForumService.EVENT_FORUMS_FORUM_ADD, getEventMessage(forum, permissions), false)); } else { eventTrackingService.post(eventTrackingService.newEvent(DiscussionForumService.EVENT_FORUMS_FORUM_REVISE, getEventMessage(forum, permissions), false)); } } public TopicControlPermission getTopicControlPermissionForRole(Topic topic, String role, String typeId) { ControlPermissions permissions = topic == null || topic.getId() == null ? null : getControlPermissionByKeyValue(role, "topicId", topic.getId().toString(), false); TopicControlPermission cp = new TopicControlPermissionImpl(); if (permissions == null) { return null; } else { cp.setChangeSettings(permissions.getChangeSettings()); cp.setMovePostings(permissions.getMovePostings()); cp.setNewResponse(permissions.getNewResponse()); cp.setResponseToResponse(permissions.getResponseToResponse()); cp.setPostToGradebook(permissions.getPostToGradebook()); } cp.setRole(role); return cp; } public TopicControlPermission getDefaultTopicControlPermissionForRole(Topic topic, String role, String typeId) { ControlPermissions permissions = topic == null || topic.getId() == null ? null : getControlPermissionByKeyValue(role, "topicId", topic.getId().toString(), true); TopicControlPermission cp = new TopicControlPermissionImpl(); if (permissions == null) { return null; } else { cp.setPostToGradebook(permissions.getPostToGradebook()); cp.setChangeSettings(permissions.getChangeSettings()); cp.setMovePostings(permissions.getMovePostings()); cp.setNewResponse(permissions.getNewResponse()); cp.setResponseToResponse(permissions.getResponseToResponse()); } cp.setRole(role); return cp; } public TopicControlPermission createTopicControlPermissionForRole(BaseForum forum, String role, String typeId) { TopicControlPermission permission = new TopicControlPermissionImpl(); ForumControlPermission fcp = getForumControlPermissionForRole(forum, role, typeId); permission.setChangeSettings(fcp.getChangeSettings()); permission.setMovePostings(fcp.getMovePostings()); permission.setNewResponse(fcp.getNewResponse()); permission.setResponseToResponse(fcp.getResponseToResponse()); permission.setPostToGradebook(fcp.getPostToGradebook()); permission.setRole(role); return permission; } public void saveTopicControlPermissionForRole(Topic topic, TopicControlPermission permission) { ControlPermissions permissions = topic == null || topic.getId() == null ? null : getControlPermissionByKeyValue(permission.getRole(), "topicId", topic.getId().toString(), false); if (permissions == null) { permissions = new ControlPermissionsImpl(); } boolean isNew = permissions.getId() == null; permissions.setTopic(topic); permissions.setDefaultValue(Boolean.FALSE); permissions.setChangeSettings(permission.getChangeSettings()); permissions.setMovePostings(permission.getMovePostings()); permissions.setNewForum(Boolean.FALSE); permissions.setNewResponse(permission.getNewResponse()); permissions.setNewTopic(Boolean.FALSE); permissions.setPostToGradebook(permission.getPostToGradebook()); permissions.setResponseToResponse(permission.getResponseToResponse()); permissions.setRole(permission.getRole()); getHibernateTemplate().saveOrUpdate(permissions); if (eventTrackingService == null) // SAK-12988 throw new RuntimeException("eventTrackingService is null!"); if (isNew) { eventTrackingService.post(eventTrackingService.newEvent(DiscussionForumService.EVENT_FORUMS_TOPIC_ADD, getEventMessage(topic, permissions), false)); } else { eventTrackingService.post(eventTrackingService.newEvent(DiscussionForumService.EVENT_FORUMS_TOPIC_REVISE, getEventMessage(topic, permissions), false)); } } public void saveDefaultTopicControlPermissionForRole(Topic topic, TopicControlPermission permission) { ControlPermissions permissions = topic == null || topic.getId() == null ? null : getControlPermissionByKeyValue(permission.getRole(), "topicId", topic.getId().toString(), false); if (permissions == null) { permissions = new ControlPermissionsImpl(); } boolean isNew = permissions.getId() == null; permissions.setTopic(topic); permissions.setDefaultValue(Boolean.TRUE); permissions.setChangeSettings(permission.getChangeSettings()); permissions.setMovePostings(permission.getMovePostings()); permissions.setNewForum(Boolean.FALSE); permissions.setNewResponse(permission.getNewResponse()); permissions.setNewTopic(Boolean.FALSE); permissions.setResponseToResponse(permission.getResponseToResponse()); permissions.setPostToGradebook(permission.getPostToGradebook()); permissions.setRole(permission.getRole()); getHibernateTemplate().saveOrUpdate(permissions); if (eventTrackingService == null) // SAK-12988 throw new RuntimeException("eventTrackingService is null!"); if (isNew) { eventTrackingService.post(eventTrackingService.newEvent(DiscussionForumService.EVENT_FORUMS_TOPIC_ADD, getEventMessage(topic, permissions), false)); } else { eventTrackingService.post(eventTrackingService.newEvent(DiscussionForumService.EVENT_FORUMS_TOPIC_REVISE, getEventMessage(topic, permissions), false)); } } public ControlPermissions getAreaControlPermissionByRoleAndType(final String roleId, final String typeId, final boolean defaultValue) { LOG.debug("getAreaControlPermissionByRole executing for current user: " + getCurrentUser()); final Area area = areaManager.getAreaByContextIdAndTypeId(typeId); if (area == null) { return null; } HibernateCallback hcb = new HibernateCallback() { public Object doInHibernate(Session session) throws HibernateException, SQLException { Query q = session.getNamedQuery(QUERY_CP_BY_ROLE); q.setParameter("roleId", roleId, Hibernate.STRING); q.setParameter("areaId", area.getId().toString(), Hibernate.STRING); q.setParameter("defaultValue", Boolean.valueOf(defaultValue), Hibernate.BOOLEAN); return q.uniqueResult(); } }; return (ControlPermissions) getHibernateTemplate().execute(hcb); } private ControlPermissions getControlPermissionByKeyValue(final String roleId, final String key, final String value, final boolean defaultValue) { LOG.debug("getAreaControlPermissionByRole executing for current user: " + getCurrentUser()); HibernateCallback hcb = new HibernateCallback() { public Object doInHibernate(Session session) throws HibernateException, SQLException { String queryString = "forumId".equals(key) ? QUERY_CP_BY_FORUM : QUERY_CP_BY_TOPIC; Query q = session.getNamedQuery(queryString); q.setParameter("roleId", roleId, Hibernate.STRING); q.setParameter(key, value, Hibernate.STRING); q.setParameter("defaultValue", Boolean.valueOf(defaultValue), Hibernate.BOOLEAN); return q.uniqueResult(); } }; return (ControlPermissions) getHibernateTemplate().execute(hcb); } private MessagePermissions getMessagePermissionByKeyValue(final String roleId, final String key, final String value, final boolean defaultValue) { LOG.debug("getAreaMessagePermissionByRole executing for current user: " + getCurrentUser()); HibernateCallback hcb = new HibernateCallback() { public Object doInHibernate(Session session) throws HibernateException, SQLException { String queryString = "forumId".equals(key) ? QUERY_MP_BY_FORUM : QUERY_MP_BY_TOPIC; Query q = session.getNamedQuery(queryString); q.setParameter("roleId", roleId, Hibernate.STRING); q.setParameter(key, value, Hibernate.STRING); q.setParameter("defaultValue", Boolean.valueOf(defaultValue), Hibernate.BOOLEAN); return q.uniqueResult(); } }; return (MessagePermissions) getHibernateTemplate().execute(hcb); } /** * Get the area message permission for a given role. This provides the permissions * that the role currently has. */ public MessagePermissions getAreaMessagePermissionForRole(String role, String typeId) { MessagePermissions permissions = getAreaMessagePermissionByRoleAndType(role, typeId, false); MessagePermissions mp = new MessagePermissionsImpl(); if (permissions == null) { // mp.setDeleteAny(Boolean.FALSE); // mp.setDeleteOwn(Boolean.FALSE); // mp.setRead(Boolean.FALSE); // mp.setReadDrafts(Boolean.FALSE); // mp.setReviseAny(Boolean.FALSE); // mp.setReviseOwn(Boolean.FALSE); // mp.setMarkAsRead(Boolean.FALSE); return getDefaultAreaMessagePermissionForRole(role, typeId); } else { mp.setDeleteAny(permissions.getDeleteAny()); mp.setDeleteOwn(permissions.getDeleteOwn()); mp.setRead(permissions.getRead()); mp.setReadDrafts(permissions.getReadDrafts()); mp.setReviseAny(permissions.getReviseAny()); mp.setReviseOwn(permissions.getReviseOwn()); mp.setMarkAsRead(permissions.getMarkAsRead()); } mp.setRole(role); return mp; } /** * Get the default area message permission for a given role. This provides the * permissions that the role currently has. */ public MessagePermissions getDefaultAreaMessagePermissionForRole(String role, String typeId) { // MessagePermissions permissions = getAreaMessagePermissionByRoleAndType(role, typeId, true); MessagePermissions mp = new MessagePermissionsImpl(); // if (permissions == null) { // mp.setDeleteAny(Boolean.FALSE); // mp.setDeleteOwn(Boolean.FALSE); // mp.setRead(Boolean.FALSE); // mp.setReadDrafts(Boolean.FALSE); // mp.setReviseAny(Boolean.FALSE); // mp.setReviseOwn(Boolean.FALSE); // mp.setMarkAsRead(Boolean.FALSE); // } else { // mp.setDeleteAny(permissions.getDeleteAny()); // mp.setDeleteOwn(permissions.getDeleteOwn()); // mp.setRead(permissions.getRead()); // mp.setReadDrafts(permissions.getReadDrafts()); // mp.setReviseAny(permissions.getReviseAny()); // mp.setReviseOwn(permissions.getReviseOwn()); // mp.setMarkAsRead(permissions.getMarkAsRead()); // } mp.setRole(role); mp.setDeleteAny(Boolean.valueOf(defaultPermissionsManager.isDeleteAny(role))); mp.setDeleteOwn(Boolean.valueOf(defaultPermissionsManager.isDeleteOwn(role))); mp.setRead(Boolean.valueOf(defaultPermissionsManager.isRead(role))); mp.setReadDrafts(Boolean.valueOf(false)); mp.setReviseAny(Boolean.valueOf(defaultPermissionsManager.isReviseAny(role))); mp.setReviseOwn(Boolean.valueOf(defaultPermissionsManager.isReviseOwn(role))); mp.setMarkAsRead(Boolean.valueOf(defaultPermissionsManager.isMarkAsRead(role))); return mp; } /** * Create an empty area message permission with system properties * populated (ie: uuid). */ public MessagePermissions createAreaMessagePermissionForRole(String role, String typeId) { MessagePermissions permissions = new MessagePermissionsImpl(); MessagePermissions mp = getDefaultAreaMessagePermissionForRole(role, typeId); if (mp != null) { permissions.setDefaultValue(mp.getDefaultValue()); permissions.setDeleteAny(mp.getDeleteAny()); permissions.setDeleteOwn(mp.getDeleteOwn()); permissions.setRead(mp.getRead()); permissions.setReadDrafts(mp.getReadDrafts()); permissions.setReviseAny(mp.getReviseAny()); permissions.setReviseOwn(mp.getReviseOwn()); permissions.setMarkAsRead(mp.getMarkAsRead()); permissions.setRole(role); } return permissions; } /** * Save an area message permission. This is backed in the database by a single * message permission (used for areas, forums, and topics). */ public void saveAreaMessagePermissionForRole(Area area, MessagePermissions permission, String typeId) { MessagePermissions permissions = getAreaMessagePermissionByRoleAndType(permission.getRole(), typeId, false); if (permissions == null) { permissions = new MessagePermissionsImpl(); } boolean isNew = permissions.getId() == null; permissions.setArea(area); permissions.setDefaultValue(Boolean.FALSE); permissions.setDeleteAny(permission.getDeleteAny()); permissions.setDeleteOwn(permission.getDeleteOwn()); permissions.setRead(permission.getRead()); permissions.setReadDrafts(permission.getReadDrafts()); permissions.setReviseAny(permission.getReviseAny()); permissions.setReviseOwn(permission.getReviseOwn()); permissions.setRole(permission.getRole()); permissions.setMarkAsRead(permission.getMarkAsRead()); getHibernateTemplate().saveOrUpdate(permissions); // Commented out when splitting events between Messages tool and Forums tool // if (isNew) { // eventTrackingService.post(eventTrackingService.newEvent(DiscussionForumService.EVENT_RESOURCE_ADD, getEventMessage(area, permissions), false)); // } else { // eventTrackingService.post(eventTrackingService.newEvent(DiscussionForumService.EVENT_RESOURCE_WRITE, getEventMessage(area, permissions), false)); // } } /** * Save a default area message permission. This is backed in the database by a * single message permission (used for areas, forums, and topics). */ public void saveDefaultAreaMessagePermissionForRole(Area area, MessagePermissions permission, String typeId) { MessagePermissions permissions = getAreaMessagePermissionByRoleAndType(permission.getRole(), typeId, true); if (permissions == null) { permissions = new MessagePermissionsImpl(); } boolean isNew = permissions.getId() == null; permissions.setArea(area); permissions.setDefaultValue(Boolean.TRUE); permissions.setDeleteAny(permission.getDeleteAny()); permissions.setDeleteOwn(permission.getDeleteOwn()); permissions.setRead(permission.getRead()); permissions.setReadDrafts(permission.getReadDrafts()); permissions.setReviseAny(permission.getReviseAny()); permissions.setReviseOwn(permission.getReviseOwn()); permissions.setMarkAsRead(permission.getMarkAsRead()); permissions.setRole(permission.getRole()); getHibernateTemplate().saveOrUpdate(permissions); // Commented out when splitting events between Messages tool and Forums tool // if (isNew) { // eventTrackingService.post(eventTrackingService.newEvent(DiscussionForumService.EVENT_RESOURCE_ADD, getEventMessage(area, permissions), false)); // } else { // eventTrackingService.post(eventTrackingService.newEvent(DiscussionForumService.EVENT_RESOURCE_WRITE, getEventMessage(area, permissions), false)); // } } /** * Get the forum message permission for a given role. This provides the permissions * that the role currently has. */ public MessagePermissions getForumMessagePermissionForRole(BaseForum forum, String role, String typeId) { MessagePermissions permissions = forum == null || forum.getId() == null ? null : getMessagePermissionByKeyValue(role, "forumId", forum.getId().toString(), false); MessagePermissions mp = new MessagePermissionsImpl(); if (permissions == null) { return null; } else { mp.setDeleteAny(permissions.getDeleteAny()); mp.setDeleteOwn(permissions.getDeleteOwn()); mp.setRead(permissions.getRead()); mp.setReadDrafts(permissions.getReadDrafts()); mp.setReviseAny(permissions.getReviseAny()); mp.setReviseOwn(permissions.getReviseOwn()); mp.setMarkAsRead(permissions.getMarkAsRead()); } mp.setRole(role); return mp; } /** * Get the default forum message permission for a given role. This provides the * permissions that the role currently has. */ public MessagePermissions getDefaultForumMessagePermissionForRole(BaseForum forum, String role, String typeId) { MessagePermissions permissions = forum == null || forum.getId() == null ? null : getMessagePermissionByKeyValue(role, "forumId", forum.getId().toString(), true); MessagePermissions mp = new MessagePermissionsImpl(); if (permissions == null) { return null; } else { mp.setDeleteAny(permissions.getDeleteAny()); mp.setDeleteOwn(permissions.getDeleteOwn()); mp.setRead(permissions.getRead()); mp.setReadDrafts(permissions.getReadDrafts()); mp.setReviseAny(permissions.getReviseAny()); mp.setReviseOwn(permissions.getReviseOwn()); mp.setMarkAsRead(permissions.getMarkAsRead()); } mp.setRole(role); return mp; } /** * Create an empty forum message permission with system properties * populated (ie: uuid). */ public MessagePermissions createForumMessagePermissionForRole(String role, String typeId) { MessagePermissions permissions = new MessagePermissionsImpl(); MessagePermissions mp = getAreaMessagePermissionForRole(role, typeId); if (mp != null) { permissions.setDefaultValue(mp.getDefaultValue()); permissions.setDeleteAny(mp.getDeleteAny()); permissions.setDeleteOwn(mp.getDeleteOwn()); permissions.setRead(mp.getRead()); permissions.setReadDrafts(mp.getReadDrafts()); permissions.setReviseAny(mp.getReviseAny()); permissions.setReviseOwn(mp.getReviseOwn()); permissions.setMarkAsRead(mp.getMarkAsRead()); permissions.setRole(role); } return permissions; } /** * Save an forum message permission. This is backed in the database by a single * message permission (used for topics, forums, and topics). */ public void saveForumMessagePermissionForRole(BaseForum forum, MessagePermissions permission) { MessagePermissions permissions = forum == null || forum.getId() == null ? null : getMessagePermissionByKeyValue(permission.getRole(), "forumId", forum.getId().toString(), false); if (permissions == null) { permissions = new MessagePermissionsImpl(); } boolean isNew = permissions.getId() == null; permissions.setForum(forum); permissions.setDefaultValue(Boolean.FALSE); permissions.setDeleteAny(permission.getDeleteAny()); permissions.setDeleteOwn(permission.getDeleteOwn()); permissions.setRead(permission.getRead()); permissions.setReadDrafts(permission.getReadDrafts()); permissions.setReviseAny(permission.getReviseAny()); permissions.setReviseOwn(permission.getReviseOwn()); permissions.setMarkAsRead(permission.getMarkAsRead()); permissions.setRole(permission.getRole()); getHibernateTemplate().saveOrUpdate(permissions); if (eventTrackingService == null) // SAK-12988 throw new RuntimeException("eventTrackingService is null!"); if (isNew) { eventTrackingService.post(eventTrackingService.newEvent(DiscussionForumService.EVENT_FORUMS_FORUM_ADD, getEventMessage(forum, permissions), false)); } else { eventTrackingService.post(eventTrackingService.newEvent(DiscussionForumService.EVENT_FORUMS_FORUM_REVISE, getEventMessage(forum, permissions), false)); } } /** * Save a default forum message permission. This is backed in the database by a * single message permission (used for topics, forums, and topics). */ public void saveDefaultForumMessagePermissionForRole(BaseForum forum, MessagePermissions permission) { MessagePermissions permissions = forum == null || forum.getId() == null ? null : getMessagePermissionByKeyValue(permission.getRole(), "forumId", forum.getId().toString(), true); if (permissions == null) { permissions = new MessagePermissionsImpl(); } boolean isNew = permissions.getId() == null; permissions.setForum(forum); permissions.setDefaultValue(Boolean.TRUE); permissions.setDeleteAny(permission.getDeleteAny()); permissions.setDeleteOwn(permission.getDeleteOwn()); permissions.setRead(permission.getRead()); permissions.setReadDrafts(permission.getReadDrafts()); permissions.setReviseAny(permission.getReviseAny()); permissions.setReviseOwn(permission.getReviseOwn()); permissions.setMarkAsRead(permission.getMarkAsRead()); permissions.setRole(permission.getRole()); getHibernateTemplate().saveOrUpdate(permissions); if (eventTrackingService == null) // SAK-12988 throw new RuntimeException("eventTrackingService is null!"); if (isNew) { eventTrackingService.post(eventTrackingService.newEvent(DiscussionForumService.EVENT_FORUMS_FORUM_ADD, getEventMessage(forum, permissions), false)); } else { eventTrackingService.post(eventTrackingService.newEvent(DiscussionForumService.EVENT_FORUMS_FORUM_REVISE, getEventMessage(forum, permissions), false)); } } /** * Get the topic message permission for a given role. This provides the permissions * that the role currently has. */ public MessagePermissions getTopicMessagePermissionForRole(Topic topic, String role, String typeId) { MessagePermissions permissions = topic == null || topic.getId() == null ? null : getMessagePermissionByKeyValue(role, "topicId", topic.getId().toString(), false); MessagePermissions mp = new MessagePermissionsImpl(); if (permissions == null) { return null; } else { mp.setDeleteAny(permissions.getDeleteAny()); mp.setDeleteOwn(permissions.getDeleteOwn()); mp.setRead(permissions.getRead()); mp.setReadDrafts(permissions.getReadDrafts()); mp.setReviseAny(permissions.getReviseAny()); mp.setReviseOwn(permissions.getReviseOwn()); mp.setMarkAsRead(permissions.getMarkAsRead()); } mp.setRole(role); return mp; } /** * Get the default topic message permission for a given role. This provides the * permissions that the role currently has. */ public MessagePermissions getDefaultTopicMessagePermissionForRole(Topic topic, String role, String typeId) { MessagePermissions permissions = topic == null || topic.getId() == null ? null : getMessagePermissionByKeyValue(role, "topicId", topic.getId().toString(), true); MessagePermissions mp = new MessagePermissionsImpl(); if (permissions == null) { return null; } else { mp.setDeleteAny(permissions.getDeleteAny()); mp.setDeleteOwn(permissions.getDeleteOwn()); mp.setRead(permissions.getRead()); mp.setReadDrafts(permissions.getReadDrafts()); mp.setReviseAny(permissions.getReviseAny()); mp.setReviseOwn(permissions.getReviseOwn()); mp.setMarkAsRead(permissions.getMarkAsRead()); } mp.setRole(role); return mp; } /** * Create an empty topic message permission with system properties * populated (ie: uuid). */ public MessagePermissions createTopicMessagePermissionForRole(BaseForum forum, String role, String typeId) { MessagePermissions permissions = new MessagePermissionsImpl(); MessagePermissions mp = getForumMessagePermissionForRole(forum, role, typeId); if (mp != null) { permissions.setDefaultValue(mp.getDefaultValue()); permissions.setDeleteAny(mp.getDeleteAny()); permissions.setDeleteOwn(mp.getDeleteOwn()); permissions.setRead(mp.getRead()); permissions.setReadDrafts(mp.getReadDrafts()); permissions.setReviseAny(mp.getReviseAny()); permissions.setReviseOwn(mp.getReviseOwn()); permissions.setMarkAsRead(mp.getMarkAsRead()); permissions.setRole(role); } return permissions; } /** * Save an topic message permission. This is backed in the database by a single * message permission (used for areas, forums, and topics). */ public void saveTopicMessagePermissionForRole(Topic topic, MessagePermissions permission) { MessagePermissions permissions = topic == null || topic.getId() == null ? null : getMessagePermissionByKeyValue(permission.getRole(), "topicId", topic.getId().toString(), false); if (permissions == null) { permissions = new MessagePermissionsImpl(); } boolean isNew = permissions.getId() == null; permissions.setTopic(topic); permissions.setDefaultValue(Boolean.FALSE); permissions.setDeleteAny(permission.getDeleteAny()); permissions.setDeleteOwn(permission.getDeleteOwn()); permissions.setRead(permission.getRead()); permissions.setReadDrafts(permission.getReadDrafts()); permissions.setReviseAny(permission.getReviseAny()); permissions.setReviseOwn(permission.getReviseOwn()); permissions.setMarkAsRead(permission.getMarkAsRead()); permissions.setRole(permission.getRole()); getHibernateTemplate().saveOrUpdate(permissions); if (eventTrackingService == null) // SAK-12988 throw new RuntimeException("eventTrackingService is null!"); if (isNew) { eventTrackingService.post(eventTrackingService.newEvent(DiscussionForumService.EVENT_FORUMS_TOPIC_ADD, getEventMessage(topic, permissions), false)); } else { eventTrackingService.post(eventTrackingService.newEvent(DiscussionForumService.EVENT_FORUMS_TOPIC_REVISE, getEventMessage(topic, permissions), false)); } } /** * Save a default topic message permission. This is backed in the database by a * single message permission (used for areas, forums, and topics). */ public void saveDefaultTopicMessagePermissionForRole(Topic topic, MessagePermissions permission) { MessagePermissions permissions = topic == null || topic.getId() == null ? null : getMessagePermissionByKeyValue(permission.getRole(), "topicId", topic.getId().toString(), true); if (permissions == null) { permissions = new MessagePermissionsImpl(); } boolean isNew = permissions.getId() == null; permissions.setTopic(topic); permissions.setDefaultValue(Boolean.TRUE); permissions.setDeleteAny(permission.getDeleteAny()); permissions.setDeleteOwn(permission.getDeleteOwn()); permissions.setRead(permissions.getRead()); permissions.setReadDrafts(permission.getReadDrafts()); permissions.setReviseAny(permission.getReviseAny()); permissions.setReviseOwn(permission.getReviseOwn()); permissions.setMarkAsRead(permission.getMarkAsRead()); permissions.setRole(permission.getRole()); getHibernateTemplate().saveOrUpdate(permissions); if (eventTrackingService == null) // SAK-12988 throw new RuntimeException("eventTrackingService is null!"); if (isNew) { eventTrackingService.post(eventTrackingService.newEvent(DiscussionForumService.EVENT_FORUMS_TOPIC_ADD, getEventMessage(topic, permissions), false)); } else { eventTrackingService.post(eventTrackingService.newEvent(DiscussionForumService.EVENT_FORUMS_TOPIC_REVISE, getEventMessage(topic, permissions), false)); } } public MessagePermissions getAreaMessagePermissionByRoleAndType(final String roleId, final String typeId, final boolean defaultValue) { LOG.debug("getAreaMessagePermissionByRole executing for current user: " + getCurrentUser()); final Area area = areaManager.getAreaByContextIdAndTypeId(typeId); if (area == null) { return null; } HibernateCallback hcb = new HibernateCallback() { public Object doInHibernate(Session session) throws HibernateException, SQLException { Query q = session.getNamedQuery(QUERY_MP_BY_ROLE); q.setParameter("roleId", roleId, Hibernate.STRING); q.setParameter("areaId", area.getId().toString(), Hibernate.STRING); q.setParameter("defaultValue", Boolean.valueOf(defaultValue), Hibernate.BOOLEAN); return q.uniqueResult(); } }; return (MessagePermissions) getHibernateTemplate().execute(hcb); } // helpers private String getCurrentUser() { if (TestUtil.isRunningTests()) { return "test-user"; } return sessionManager.getCurrentSessionUserId(); } private String getEventMessage(Object parent, Object child) { return "/MessageCenter/site/" + getContextId() + "/" + parent.toString() + "/" + child.toString() + "/" + getCurrentUser(); //return "MessageCenter::" + getCurrentUser() + "::" + parent.toString() + "::" + child.toString(); } private String getContextId() { if (TestUtil.isRunningTests()) { return "test-context"; } final Placement placement = ToolManager.getCurrentPlacement(); final String presentSiteId = placement.getContext(); return presentSiteId; } }