Index: .classpath =================================================================== --- .classpath (revision 11429) +++ .classpath (working copy) @@ -32,5 +32,6 @@ + Index: messageforums-app/src/java/org/sakaiproject/tool/messageforums/DiscussionForumTool.java =================================================================== --- messageforums-app/src/java/org/sakaiproject/tool/messageforums/DiscussionForumTool.java (revision 11429) +++ messageforums-app/src/java/org/sakaiproject/tool/messageforums/DiscussionForumTool.java (working copy) @@ -35,13 +35,13 @@ import org.sakaiproject.api.app.messageforums.ui.UIPermissionsManager; //grading -import org.sakaiproject.api.app.messageforums.PrivateMessage; -import org.sakaiproject.service.gradebook.shared.GradebookService; -import org.sakaiproject.service.gradebook.shared.Assignment; -import org.sakaiproject.api.kernel.component.cover.ComponentManager; -import org.sakaiproject.api.app.messageforums.ui.PrivateMessageManager; -import org.sakaiproject.service.legacy.user.User; -import org.sakaiproject.service.legacy.user.cover.UserDirectoryService; +import org.sakaiproject.api.app.messageforums.PrivateMessage; +import org.sakaiproject.service.gradebook.shared.GradebookService; +import org.sakaiproject.service.gradebook.shared.Assignment; +import org.sakaiproject.api.kernel.component.cover.ComponentManager; +import org.sakaiproject.api.app.messageforums.ui.PrivateMessageManager; +import org.sakaiproject.service.legacy.user.User; +import org.sakaiproject.service.legacy.user.cover.UserDirectoryService; import org.sakaiproject.api.common.authorization.PermissionsMask; import org.sakaiproject.api.kernel.session.ToolSession; @@ -67,3813 +67,3593 @@ * @author Rashmi Shastri * @author Chen wen */ -public class DiscussionForumTool -{ - private static final Log LOG = LogFactory.getLog(DiscussionForumTool.class); - - /** - * List individual forum details - */ - private static final String MAIN = "main"; - private static final String TEMPLATE_SETTING = "dfTemplateSettings"; - private static final String FORUM_DETAILS = "dfForumDetail"; - private static final String FORUM_SETTING = "dfForumSettings"; - private static final String FORUM_SETTING_REVISE = "dfReviseForumSettings"; - private static final String TOPIC_SETTING = "dfTopicSettings"; - private static final String TOPIC_SETTING_REVISE = "dfReviseTopicSettings"; - private static final String MESSAGE_COMPOSE = "dfCompose"; - private static final String MESSAGE_VIEW = "dfViewMessage"; - private static final String ALL_MESSAGES = "dfAllMessages"; - private static final String THREADED_VIEW = "dfThreadedView"; - private static final String UNREAD_VIEW = "dfUnreadView"; - - private static final String PERMISSION_MODE_TEMPLATE = "template"; - private static final String PERMISSION_MODE_FORUM = "forum"; - private static final String PERMISSION_MODE_TOPIC = "topic"; - - private DiscussionForumBean selectedForum; - private DiscussionTopicBean selectedTopic; - private DiscussionTopicBean searchResults; - private DiscussionMessageBean selectedMessage; - private List groupsUsersList; - private List totalGroupsUsersList; - private List selectedGroupsUsersList; - private Map courseMemberMap; - private List permissions; - private List levels; - private AreaManager areaManager; - - private static final String TOPIC_ID = "topicId"; - private static final String FORUM_ID = "forumId"; - private static final String MESSAGE_ID = "messageId"; - private static final String REDIRECT_PROCESS_ACTION = "redirectToProcessAction"; - - private static final String INSUFFICIENT_PRIVILEGES_TO_EDIT_TEMPLATE_SETTINGS = "Insufficient privileges to edit Template Settings"; - private static final String SHORT_DESC_TOO_LONG = "Short description can not be longer than 255 characters."; - - private List forums = new ArrayList(); - - // compose - private MessageForumsMessageManager messageManager; - private String composeTitle; - private String composeBody; - private String composeLabel; - private String searchText = ""; - private String selectedMessageView = ALL_MESSAGES; - private boolean deleteMsg; - private boolean displayUnreadOnly; - private boolean errorSynch = false; - // attachment - private ArrayList attachments = new ArrayList(); - private ArrayList prepareRemoveAttach = new ArrayList(); - // private boolean attachCaneled = false; - // private ArrayList oldAttachments = new ArrayList(); - // private List allAttachments = new ArrayList(); - private boolean threaded = false; - private String expanded = "true"; - private boolean isDisplaySearchedMessages; - private List siteMembers = new ArrayList(); - private String selectedRole; - - private boolean editMode = false; - private String permissionMode; - - //grading - private boolean gradeNotify = false; - private List assignments; - private String selectedAssign = "Default_0"; - private String gradePoint = ""; - private String gradebookScore = ""; - private String gradeComment; - private boolean noGradeWarn = false; - private boolean noAssignWarn = false; - - /** - * Dependency Injected - */ - private DiscussionForumManager forumManager; - private UIPermissionsManager uiPermissionsManager; - private MessageForumsTypeManager typeManager; - private MembershipManager membershipManager; - private PermissionLevelManager permissionLevelManager; - /** - * - */ - public DiscussionForumTool() - { - LOG.debug("DiscussionForumTool()"); - ; - } - - /** - * @param forumManager - */ - public void setForumManager(DiscussionForumManager forumManager) - { - if (LOG.isDebugEnabled()) - { - LOG.debug("setForumManager(DiscussionForumManager " + forumManager + ")"); - } - this.forumManager = forumManager; - } - - /** - * @param uiPermissionsManager - * The uiPermissionsManager to set. - */ - public void setUiPermissionsManager(UIPermissionsManager uiPermissionsManager) - { - if (LOG.isDebugEnabled()) - { - LOG.debug("setUiPermissionsManager(UIPermissionsManager " - + uiPermissionsManager + ")"); - } - this.uiPermissionsManager = uiPermissionsManager; - } - - /** - * @param typeManager The typeManager to set. - */ - public void setTypeManager(MessageForumsTypeManager typeManager) - { - this.typeManager = typeManager; - } - - - - /** - * @param membershipManager The membershipManager to set. - */ - public void setMembershipManager(MembershipManager membershipManager) - { - this.membershipManager = membershipManager; - } - - /** - * @return - */ - public String processActionHome() - { - LOG.debug("processActionHome()"); - reset(); - return MAIN; - } - - /** - * @return - */ - public boolean isInstructor() - { - LOG.debug("isInstructor()"); - return forumManager.isInstructor(); - } - - /** - * @return - */ - public List getForums() - { - LOG.debug("getForums()"); - - if (forums == null || forums.size() < 1) - { - try - { - GradebookService gradebookService = (org.sakaiproject.service.gradebook.shared.GradebookService) - ComponentManager.get("org.sakaiproject.service.gradebook.GradebookService"); - List gradeAssignmentsBeforeFilter = gradebookService.getAssignments(ToolManager.getCurrentPlacement().getContext()); - List gradeAssignments = new ArrayList(); - for(int i=0; i 255)) - { - setErrorMessage(SHORT_DESC_TOO_LONG); - return null; - } - - if(selectedForum!=null && selectedForum.getForum()!=null && - (selectedForum.getForum().getTitle()==null - ||selectedForum.getForum().getTitle().trim().length()<1 )) - { - setErrorMessage("Please enter a valid forum title"); - return FORUM_SETTING_REVISE; - } - if(!uiPermissionsManager.isChangeSettings(selectedForum.getForum())) - { - setErrorMessage("Insufficient privileges to change forum settings"); - return MAIN; - } - - DiscussionForum forum = saveForumSettings(false); - if(!uiPermissionsManager.isNewTopic(selectedForum.getForum())) - { - setErrorMessage("Insufficient privileges to create new topic"); - return MAIN; - } - selectedTopic = createTopic(forum.getId()); - if (selectedTopic == null) - { - setErrorMessage("Create New Topic Failed!"); - attachments.clear(); - prepareRemoveAttach.clear(); - return MAIN; - } - attachments.clear(); - prepareRemoveAttach.clear(); - return TOPIC_SETTING_REVISE; - } - - /** - * @return - */ - public String processActionSaveForumSettings() - { - LOG.debug("processActionSaveForumSettings()"); - - if(selectedForum !=null && selectedForum.getForum()!=null && - (selectedForum.getForum().getShortDescription()!=null) && - (selectedForum.getForum().getShortDescription().length() > 255)) - { - setErrorMessage(SHORT_DESC_TOO_LONG); - return null; - } - - if(!uiPermissionsManager.isChangeSettings(selectedForum.getForum())) - { - setErrorMessage("Insufficient privileges to change forum settings"); - return MAIN; - } - if(selectedForum!=null && selectedForum.getForum()!=null && - (selectedForum.getForum().getTitle()==null - ||selectedForum.getForum().getTitle().trim().length()<1 )) - { - setErrorMessage("Please enter a valid forum title"); - return FORUM_SETTING_REVISE; - } - saveForumSettings(false); - - reset(); - return MAIN; - } - - /** - * @return - */ - public String processActionSaveForumAsDraft() - { - LOG.debug("processActionSaveForumAsDraft()"); - - if(selectedForum !=null && selectedForum.getForum()!=null && - (selectedForum.getForum().getShortDescription()!=null) && - (selectedForum.getForum().getShortDescription().length() > 255)) - { - setErrorMessage(SHORT_DESC_TOO_LONG); - return null; - } - - if(!uiPermissionsManager.isChangeSettings(selectedForum.getForum())) - { - setErrorMessage("Insufficient privileges to change forum settings"); - return MAIN; - } - if(selectedForum!=null && selectedForum.getForum()!=null && - (selectedForum.getForum().getTitle()==null - ||selectedForum.getForum().getTitle().trim().length()<1 )) - { - setErrorMessage("Please enter a valid forum title"); - return FORUM_SETTING_REVISE; - } - saveForumSettings(true); - - reset(); - return MAIN; - } - - private DiscussionForum saveForumSettings(boolean draft) - { - LOG.debug("saveForumSettings(boolean " + draft + ")"); - - if (selectedForum == null) - { - setErrorMessage("Selected Forum not found"); - return null; - } - - DiscussionForum forum = selectedForum.getForum(); - if (forum == null) - { - setErrorMessage("Forum not found"); - return null; - } - - saveForumSelectedAssignment(forum); - saveForumAttach(forum); - setObjectPermissions(forum); - if (draft) - forumManager.saveForumAsDraft(forum); - else - forumManager.saveForum(forum); - //forumManager.saveForumControlPermissions(forum, forumControlPermissions); - //forumManager.saveForumMessagePermissions(forum, forumMessagePermissions); - if (forum.getId() == null) - { - String forumUuid = forum.getUuid(); - forum = null; - forum = forumManager.getForumByUuid(forumUuid); - } - return forum; - } - - /** - * @return Returns the selectedTopic. - */ - public DiscussionTopicBean getSelectedTopic() - { - - if(threaded) - { - rearrageTopicMsgsThreaded(); - } - setMessageBeanPreNextStatus(); - - - return selectedTopic; - } - - - /** - * @return - */ - public String processActionNewTopic() - { - LOG.debug("processActionNewTopic()"); - - setEditMode(true); - setPermissionMode(PERMISSION_MODE_TOPIC); - - selectedTopic = createTopic(); - setNewTopicBeanAssign(); - if (selectedTopic == null) - { - setErrorMessage("Create New Topic Failed!"); - attachments.clear(); - prepareRemoveAttach.clear(); - return MAIN; - } - if(!uiPermissionsManager.isNewTopic(selectedForum.getForum())) - { - setErrorMessage("Insufficient privileges to create new topic"); - return MAIN; - } - attachments.clear(); - prepareRemoveAttach.clear(); - return TOPIC_SETTING_REVISE; - } - - /** - * @return - */ - public String processActionReviseTopicSettings() - { - LOG.debug("processActionReviseTopicSettings()"); - - setPermissionMode(PERMISSION_MODE_TOPIC); - setEditMode(true); - - DiscussionTopic topic = selectedTopic.getTopic(); - - if (topic == null) - { - topic = forumManager.getTopicById(new Long( - getExternalParameterByKey(TOPIC_ID))); - } - if (topic == null) - { - setErrorMessage("Topic with id '" + getExternalParameterByKey(TOPIC_ID) - + "'not found"); - return MAIN; - } - - setSelectedForumForCurrentTopic(topic); - selectedTopic = new DiscussionTopicBean(topic, selectedForum.getForum(), - uiPermissionsManager, forumManager); - setTopicBeanAssign(); - - if(!uiPermissionsManager.isChangeSettings(selectedTopic.getTopic(),selectedForum.getForum())) - { - setErrorMessage("Insufficient privileges to change topic settings"); - return MAIN; - } - List attachList = selectedTopic.getTopic().getAttachments(); - if (attachList != null) - { - for (int i = 0; i < attachList.size(); i++) - { - attachments.add((Attachment) attachList.get(i)); - } - } - return TOPIC_SETTING_REVISE; - } - - /** - * @return - */ - public String processActionSaveTopicAndAddTopic() - { - LOG.debug("processActionSaveTopicAndAddTopic()"); - - if(selectedTopic!=null && selectedTopic.getTopic()!=null && - (selectedTopic.getTopic().getShortDescription()!=null) && - (selectedTopic.getTopic().getShortDescription().length() > 255)) - { - setErrorMessage(SHORT_DESC_TOO_LONG); - return null; - } - - setPermissionMode(PERMISSION_MODE_TOPIC); - if(selectedTopic!=null && selectedTopic.getTopic()!=null && - (selectedTopic.getTopic().getTitle()==null - ||selectedTopic.getTopic().getTitle().trim().length()<1 )) - { - setErrorMessage("Please enter a valid topic title"); - return TOPIC_SETTING_REVISE; - } - saveTopicSettings(false); - Long forumId = selectedForum.getForum().getId(); - if (forumId == null) - { - setErrorMessage("Parent Forum not found"); - return MAIN; - } - selectedTopic = null; - selectedTopic = createTopic(forumId); - if (selectedTopic == null) - { - setErrorMessage("Create New Topic Failed!"); - attachments.clear(); - prepareRemoveAttach.clear(); - return MAIN; - } - attachments.clear(); - prepareRemoveAttach.clear(); - return TOPIC_SETTING_REVISE; - - } - - /** - * @return - */ - public String processActionSaveTopicSettings() - { - LOG.debug("processActionSaveTopicSettings()"); - - if(selectedTopic!=null && selectedTopic.getTopic()!=null && - (selectedTopic.getTopic().getShortDescription()!=null) && - (selectedTopic.getTopic().getShortDescription().length() > 255)) - { - setErrorMessage(SHORT_DESC_TOO_LONG); - return null; - } - - setPermissionMode(PERMISSION_MODE_TOPIC); - if(selectedTopic!=null && selectedTopic.getTopic()!=null && - (selectedTopic.getTopic().getTitle()==null - ||selectedTopic.getTopic().getTitle().trim().length()<1 )) - { - setErrorMessage("Please enter a valid topic title"); - return TOPIC_SETTING_REVISE; - } - saveTopicSettings(false); - reset(); - return MAIN; - } - - /** - * @return - */ - public String processActionSaveTopicAsDraft() - { - LOG.debug("processActionSaveTopicAsDraft()"); - - if(selectedTopic!=null && selectedTopic.getTopic()!=null && - (selectedTopic.getTopic().getShortDescription()!=null) && - (selectedTopic.getTopic().getShortDescription().length() > 255)) - { - setErrorMessage(SHORT_DESC_TOO_LONG); - return null; - } - - setPermissionMode(PERMISSION_MODE_TOPIC); - if(selectedTopic!=null && selectedTopic.getTopic()!=null && - (selectedTopic.getTopic().getTitle()==null - ||selectedTopic.getTopic().getTitle().trim().length()<1 )) - { - setErrorMessage("Please enter a valid topic title"); - return TOPIC_SETTING_REVISE; - } - if(!uiPermissionsManager.isChangeSettings(selectedTopic.getTopic(),selectedForum.getForum())) - { - setErrorMessage("Insufficient privileges to change topic settings"); - return MAIN; - } - saveTopicSettings(true); - reset(); - return MAIN; - } - - private String saveTopicSettings(boolean draft) - { - LOG.debug("saveTopicSettings(" + draft + ")"); - setPermissionMode(PERMISSION_MODE_TOPIC); - if (selectedTopic != null) - { - DiscussionTopic topic = selectedTopic.getTopic(); - if (selectedForum != null) - { - topic.setBaseForum(selectedForum.getForum()); - saveTopicSelectedAssignment(topic); - saveTopicAttach(topic); - setObjectPermissions(topic); - if (draft) - { - forumManager.saveTopicAsDraft(topic); - } - else - { - forumManager.saveTopic(topic); - } - //forumManager - // .saveTopicControlPermissions(topic, topicControlPermissions); - //forumManager - // .saveTopicMessagePermissions(topic, topicMessagePermissions); - } - } - return MAIN; - } - - /** - * @return - */ - public String processActionDeleteTopicConfirm() - { - LOG.debug("processActionDeleteTopicConfirm()"); - - if (selectedTopic == null) - { - LOG.debug("There is no topic selected for deletion"); - return MAIN; - } - if(!uiPermissionsManager.isChangeSettings(selectedTopic.getTopic(),selectedForum.getForum())) - { - setErrorMessage("Insufficient privileges to change topic settings"); - return MAIN; - } - selectedTopic.setMarkForDeletion(true); - return TOPIC_SETTING; - } - - /** - * @return - */ - public String processActionDeleteTopic() - { - LOG.debug("processActionDeleteTopic()"); - if (selectedTopic == null) - { - LOG.debug("There is no topic selected for deletion"); - } - if(!uiPermissionsManager.isChangeSettings(selectedTopic.getTopic(),selectedForum.getForum())) - { - setErrorMessage("Insufficient privileges to change topic settings"); - return MAIN; - } - forumManager.deleteTopic(selectedTopic.getTopic()); - reset(); - return MAIN; - } - - /** - * @return - */ - public String processActionTopicSettings() - { - LOG.debug("processActionTopicSettings()"); - - setEditMode(false); - setPermissionMode(PERMISSION_MODE_TOPIC); - DiscussionTopic topic = (DiscussionTopic) forumManager - .getTopicByIdWithAttachments(new Long( - getExternalParameterByKey(TOPIC_ID))); - if (topic == null) - { - return MAIN; - } - setSelectedForumForCurrentTopic(topic); - if(!uiPermissionsManager.isChangeSettings(topic,selectedForum.getForum())) - { - setErrorMessage("Insufficient privileges to change topic settings"); - return MAIN; - } - selectedTopic = new DiscussionTopicBean(topic, selectedForum.getForum(), - uiPermissionsManager, forumManager); - setTopicBeanAssign(); - - return TOPIC_SETTING; - } - - public String processActionToggleDisplayForumExtendedDescription() - { - LOG.debug("processActionToggleDisplayForumExtendedDescription()"); - String redirectTo = getExternalParameterByKey(REDIRECT_PROCESS_ACTION); - if (redirectTo == null) - { - setErrorMessage("Could not find a redirect page : Read / Hide full descriptions"); - return MAIN; - } - - if (redirectTo.equals("displayHome")) - { - displayHomeWithExtendedForumDescription(); - return MAIN; - } - if (redirectTo.equals("processActionDisplayForum")) - { - if (selectedForum.isReadFullDesciption()) - { - selectedForum.setReadFullDesciption(false); - } - else - { - selectedForum.setReadFullDesciption(true); - } - return FORUM_DETAILS; - } - return MAIN; - } - /** - * @return - */ - public String processActionToggleDisplayExtendedDescription() - { - LOG.debug("processActionToggleDisplayExtendedDescription()"); - String redirectTo = getExternalParameterByKey(REDIRECT_PROCESS_ACTION); - if (redirectTo == null) - { - setErrorMessage("Could not find a redirect page : Read / Hide full descriptions"); - return MAIN; - } - if (redirectTo.equals("displayHome")) - { - return displayHomeWithExtendedTopicDescription(); - } - if (redirectTo.equals("processActionDisplayTopic")) - { - if (selectedTopic.isReadFullDesciption()) - { - selectedTopic.setReadFullDesciption(false); - } - else - { - selectedTopic.setReadFullDesciption(true); - } - return ALL_MESSAGES; - } - if (redirectTo.equals("processActionDisplayMessage")) - { - if (selectedTopic.isReadFullDesciption()) - { - selectedTopic.setReadFullDesciption(false); - } - else - { - selectedTopic.setReadFullDesciption(true); - } - return MESSAGE_VIEW; - } - - return MAIN; - - } - - /** - * @return - */ - public String processActionDisplayTopic() - { - LOG.debug("processActionDisplayTopic()"); - - return displayTopicById(TOPIC_ID); - } - - /** - * @return - */ - public String processActionDisplayNextTopic() - { - LOG.debug("processActionDisplayNextTopic()"); - return displayTopicById("nextTopicId"); - } - - /** - * @return - */ - public String processActionDisplayPreviousTopic() - { - LOG.debug("processActionDisplayNextTopic()"); - return displayTopicById("previousTopicId"); - } - - /** - * @return Returns the selectedMessage. - */ - public DiscussionMessageBean getSelectedMessage() - { - return selectedMessage; - } - - /** - * @return - */ - public String processActionDisplayMessage() - { - LOG.debug("processActionDisplayMessage()"); - - String messageId = getExternalParameterByKey(MESSAGE_ID); - String topicId = getExternalParameterByKey(TOPIC_ID); - if (messageId == null) - { - setErrorMessage("Message reference not found"); - return MAIN; - } - if (topicId == null) - { - setErrorMessage("Topic reference not found for the message"); - return MAIN; - } - // Message message=forumManager.getMessageById(new Long(messageId)); - Message message = messageManager.getMessageByIdWithAttachments(new Long( - messageId)); - messageManager.markMessageReadForUser(new Long(topicId), - new Long(messageId), true); - if (message == null) - { - setErrorMessage("Message with id '" + messageId + "'not found"); - return MAIN; - } - message = messageManager.getMessageByIdWithAttachments(message.getId()); - selectedMessage = new DiscussionMessageBean(message, messageManager); - DiscussionTopic topic=forumManager.getTopicById(new Long( - getExternalParameterByKey(TOPIC_ID))); - setSelectedForumForCurrentTopic(topic); - selectedTopic = new DiscussionTopicBean(topic, selectedForum.getForum(), - uiPermissionsManager, forumManager); - setTopicBeanAssign(); - String currentForumId = getExternalParameterByKey(FORUM_ID); - if (currentForumId != null && (!currentForumId.trim().equals("")) - && (!currentForumId.trim().equals("null"))) - { - DiscussionForum forum = forumManager - .getForumById(new Long(currentForumId)); - selectedForum = getDecoratedForum(forum); - setForumBeanAssign(); - selectedTopic.getTopic().setBaseForum(forum); - } - selectedTopic = getDecoratedTopic(forumManager.getTopicById(new Long( - getExternalParameterByKey(TOPIC_ID)))); - setTopicBeanAssign(); - getSelectedTopic(); - List tempMsgs = selectedTopic.getMessages(); - if(tempMsgs != null) - { - for(int i=0; i 0) - { - DiscussionMessageBean thisDmb = (DiscussionMessageBean)tempMsgs.get(currentMsgPosition-1); - Message message = messageManager.getMessageByIdWithAttachments(thisDmb.getMessage().getId()); - selectedMessage = new DiscussionMessageBean(message, messageManager); +public class DiscussionForumTool { + private static final Log LOG = LogFactory.getLog(DiscussionForumTool.class); + + /** + * List individual forum details + */ + private static final String MAIN = "main"; + + private static final String TEMPLATE_SETTING = "dfTemplateSettings"; + + private static final String FORUM_DETAILS = "dfForumDetail"; + + private static final String FORUM_SETTING = "dfForumSettings"; + + private static final String FORUM_SETTING_REVISE = "dfReviseForumSettings"; + + private static final String TOPIC_SETTING = "dfTopicSettings"; + + private static final String TOPIC_SETTING_REVISE = "dfReviseTopicSettings"; + + private static final String MESSAGE_COMPOSE = "dfCompose"; + + private static final String MESSAGE_VIEW = "dfViewMessage"; + + private static final String ALL_MESSAGES = "dfAllMessages"; + + private static final String THREADED_VIEW = "dfThreadedView"; + + private static final String UNREAD_VIEW = "dfUnreadView"; + + private static final String PERMISSION_MODE_TEMPLATE = "template"; + + private static final String PERMISSION_MODE_FORUM = "forum"; + + private static final String PERMISSION_MODE_TOPIC = "topic"; + + private DiscussionForumBean selectedForum; + + private DiscussionTopicBean selectedTopic; + + private DiscussionTopicBean searchResults; + + private DiscussionMessageBean selectedMessage; + + private List groupsUsersList; + + private List totalGroupsUsersList; + + private List selectedGroupsUsersList; + + private Map courseMemberMap; + + private List permissions; + + private List levels; + + private AreaManager areaManager; + + private static final String TOPIC_ID = "topicId"; + + private static final String FORUM_ID = "forumId"; + + private static final String MESSAGE_ID = "messageId"; + + private static final String REDIRECT_PROCESS_ACTION = "redirectToProcessAction"; + + private static final String INSUFFICIENT_PRIVILEGES_TO_EDIT_TEMPLATE_SETTINGS = "Insufficient privileges to edit Template Settings"; + + private static final String SHORT_DESC_TOO_LONG = "Short description can not be longer than 255 characters."; + + private List forums = new ArrayList(); + + // compose + private MessageForumsMessageManager messageManager; + + private String composeTitle; + + private String composeBody; + + private String composeLabel; + + private String searchText = ""; + + private String selectedMessageView = ALL_MESSAGES; + + private boolean deleteMsg; + + private boolean displayUnreadOnly; + + private boolean errorSynch = false; + + // attachment + private ArrayList attachments = new ArrayList(); + + private ArrayList prepareRemoveAttach = new ArrayList(); + + // private boolean attachCaneled = false; + // private ArrayList oldAttachments = new ArrayList(); + // private List allAttachments = new ArrayList(); + private boolean threaded = false; + + private String expanded = "true"; + + private boolean isDisplaySearchedMessages; + + private List siteMembers = new ArrayList(); + + private String selectedRole; + + private boolean editMode = false; + + private String permissionMode; + + //grading + private boolean gradeNotify = false; + + private List assignments = new ArrayList(); + + private String selectedAssign = "Default_0"; + + private String gradePoint = ""; + + private String gradebookScore = ""; + + private String gradeComment; + + private boolean noGradeWarn = false; + + private boolean noAssignWarn = false; + + private boolean gradebookExist = false; + + /** + * Dependency Injected + */ + private DiscussionForumManager forumManager; + + private UIPermissionsManager uiPermissionsManager; + + private MessageForumsTypeManager typeManager; + + private MembershipManager membershipManager; + + private PermissionLevelManager permissionLevelManager; + + /** + * + */ + public DiscussionForumTool() { + LOG.debug("DiscussionForumTool()"); + ; + } + + /** + * @param forumManager + */ + public void setForumManager(DiscussionForumManager forumManager) { + if (LOG.isDebugEnabled()) { + LOG.debug("setForumManager(DiscussionForumManager " + forumManager + + ")"); + } + this.forumManager = forumManager; + } + + /** + * @param uiPermissionsManager + * The uiPermissionsManager to set. + */ + public void setUiPermissionsManager( + UIPermissionsManager uiPermissionsManager) { + if (LOG.isDebugEnabled()) { + LOG.debug("setUiPermissionsManager(UIPermissionsManager " + + uiPermissionsManager + ")"); + } + this.uiPermissionsManager = uiPermissionsManager; + } + + /** + * @param typeManager The typeManager to set. + */ + public void setTypeManager(MessageForumsTypeManager typeManager) { + this.typeManager = typeManager; + } + + /** + * @param membershipManager The membershipManager to set. + */ + public void setMembershipManager(MembershipManager membershipManager) { + this.membershipManager = membershipManager; + } + + /** + * @return + */ + public String processActionHome() { + LOG.debug("processActionHome()"); + reset(); + return MAIN; + } + + /** + * @return + */ + public boolean isInstructor() { + LOG.debug("isInstructor()"); + return forumManager.isInstructor(); + } + + /** + * @return + */ + public List getForums() { + LOG.debug("getForums()"); + + if (forums == null || forums.size() < 1) { + try { + assignments = new ArrayList(); + SelectItem item = new SelectItem("Default_0", + "Select an assignment"); + assignments.add(item); + + GradebookService gradebookService = (org.sakaiproject.service.gradebook.shared.GradebookService) ComponentManager + .get("org.sakaiproject.service.gradebook.GradebookService"); + + if (getGradebookExist()) { + List gradeAssignmentsBeforeFilter = gradebookService + .getAssignments(ToolManager.getCurrentPlacement() + .getContext()); + List gradeAssignments = new ArrayList(); + for (int i = 0; i < gradeAssignmentsBeforeFilter.size(); i++) { + Assignment thisAssign = (Assignment) gradeAssignmentsBeforeFilter + .get(i); + if (!thisAssign.isExternallyMaintained()) { + gradeAssignments.add(thisAssign); + } + } + + for (int i = 0; i < gradeAssignments.size(); i++) { + try { + Assignment thisAssign = (Assignment) gradeAssignments + .get(i); + + String assignName = thisAssign.getName(); + + item = new SelectItem((new Integer(i + 1)) + .toString(), assignName); + assignments.add(item); + } catch (Exception e) { + LOG.error("DiscussionForumTool - processDfMsgGrd:" + + e); + e.printStackTrace(); + } + } + } + } catch (Exception e1) { + LOG.error("DiscussionForumTool&processDfMsgGrad:" + e1); + e1.printStackTrace(); + } + forums = new ArrayList(); + List tempForum = forumManager.getDiscussionForums(); + if (tempForum == null) { + return null; + } + Iterator iterForum = tempForum.iterator(); + while (iterForum.hasNext()) { + DiscussionForum forum = (DiscussionForum) iterForum.next(); + if (forum == null) { + return forums; + } + List temp_topics = forum.getTopics(); + if (temp_topics == null) { + return forums; + } + // TODO: put this logic in database layer + if (forum.getDraft().equals(Boolean.FALSE) + || (forum.getDraft().equals(Boolean.TRUE) && forum + .getCreatedBy().equals( + SessionManager + .getCurrentSessionUserId())) + || SecurityService.isSuperUser() + || isInstructor() + || forum.getCreatedBy().equals( + SessionManager.getCurrentSessionUserId())) { + DiscussionForumBean decoForum = getDecoratedForum(forum); + decoForum.setGradeAssign("Default_0"); + for (int i = 0; i < assignments.size(); i++) { + if (((String) ((SelectItem) assignments.get(i)) + .getLabel()).equals(forum + .getDefaultAssignName())) { + decoForum.setGradeAssign(new Integer(i).toString()); + break; + } + } + forums.add(decoForum); + } + } + } + return forums; + } + + /** + * @return Returns the selectedForum. + */ + public DiscussionForumBean getSelectedForum() { + LOG.debug("getSelectedForum()"); + return selectedForum; + } + + /** + * @return + */ + public String processActionOrganize() { + LOG.debug("processActionOrganize()"); + return MAIN; + } + + /** + * @return + */ + public String processActionStatistics() { + LOG.debug("processActionStatistics()"); + return MAIN; + } + + /** + * @return + */ + public String processActionTemplateSettings() { + LOG.debug("processActionTemplateSettings()"); + + setEditMode(false); + setPermissionMode(PERMISSION_MODE_TEMPLATE); + + if (!isInstructor()) { + setErrorMessage(INSUFFICIENT_PRIVILEGES_TO_EDIT_TEMPLATE_SETTINGS); + return MAIN; + } + return TEMPLATE_SETTING; + } + + /** + * @return + */ + public List getPermissions() { + + if (permissions == null) { + siteMembers = null; + getSiteRoles(); + } + return permissions; + } + + /** + * @return + */ + public void setPermissions(List permissions) { + this.permissions = permissions; + } + + // /** + // * @return Returns the templateMessagePermissions. + // */ + // public List getTemplateMessagePermissions() + // { + // if (templateMessagePermissions == null) + // { + // templateMessagePermissions = forumManager.getAreaMessagePermissions(); + // } + // return templateMessagePermissions; + // } + // + // /** + // * @param templateMessagePermissions + // * The templateMessagePermissions to set. + // */ + // public void setTemplateMessagePermissions(List templateMessagePermissions) + // { + // this.templateMessagePermissions = templateMessagePermissions; + // } + + /** + * @return + */ + public String processActionReviseTemplateSettings() { + if (LOG.isDebugEnabled()) { + LOG.debug("processActionReviseTemplateSettings()"); + } + + setEditMode(true); + setPermissionMode(PERMISSION_MODE_TEMPLATE); + return TEMPLATE_SETTING; + } + + /** + * @return + */ + public String processActionSaveTemplateSettings() { + LOG.debug("processActionSaveTemplateSettings()"); + if (!isInstructor()) { + setErrorMessage(INSUFFICIENT_PRIVILEGES_TO_EDIT_TEMPLATE_SETTINGS); + return MAIN; + } + + Area area = areaManager.getDiscusionArea(); + setObjectPermissions(area); + areaManager.saveArea(area); + return MAIN; + } + + /** + * @return + */ + public String processActionRestoreDefaultTemplate() { + LOG.debug("processActionRestoreDefaultTemplate()"); + if (!isInstructor()) { + setErrorMessage(INSUFFICIENT_PRIVILEGES_TO_EDIT_TEMPLATE_SETTINGS); + return MAIN; + } + + Area area = null; + if ((area = areaManager.getDiscusionArea()) != null) { + area.setMembershipItemSet(new HashSet()); + areaManager.saveArea(area); + permissions = null; + } else { + throw new IllegalStateException("Could not obtain area for site: " + + getContextSiteId()); + } + + return TEMPLATE_SETTING; + } + + /** + * Check out if the user is allowed to create new forum + * + * @return + */ + public boolean getNewForum() { + LOG.debug("getNewForum()"); + return uiPermissionsManager.isNewForum(); + } + + /** + * Display Individual forum + * + * @return + */ + public String processActionDisplayForum() { + LOG.debug("processDisplayForum()"); + if (getDecoratedForum() == null) { + LOG.error("Forum not found"); + return MAIN; + } + return FORUM_DETAILS; + } + + /** + * Forward to delete forum confirmation screen + * + * @return + */ + public String processActionDeleteForumConfirm() { + LOG.debug("processActionDeleteForumConfirm()"); + if (selectedForum == null) { + LOG.debug("There is no forum selected for deletion"); + return MAIN; + } + // TODO: + if (!uiPermissionsManager.isChangeSettings(selectedForum.getForum())) { + setErrorMessage("Insufficient privileges to delete this forum"); + return MAIN; + } + selectedForum.setMarkForDeletion(true); + return FORUM_SETTING; + } + + /** + * @return + */ + public String processActionDeleteForum() { + if (selectedForum == null) { + LOG.debug("There is no forum selected for deletion"); + } + if (!uiPermissionsManager.isChangeSettings(selectedForum.getForum())) { + setErrorMessage("Insufficient privileges to"); + return MAIN; + } + forumManager.deleteForum(selectedForum.getForum()); + reset(); + return MAIN; + } + + /** + * @return + */ + public String processActionNewForum() { + LOG.debug("processActionNewForum()"); + + setEditMode(true); + setPermissionMode(PERMISSION_MODE_FORUM); + + if (getNewForum()) { + DiscussionForum forum = forumManager.createForum(); + selectedForum = null; + selectedForum = new DiscussionForumBean(forum, + uiPermissionsManager, forumManager); + setNewForumBeanAssign(); + + return FORUM_SETTING_REVISE; + } else { + setErrorMessage("User is not allowed to create a new forum"); + return MAIN; + } + } + + /** + * @return + */ + public String processActionForumSettings() { + LOG.debug("processForumSettings()"); + setEditMode(false); + setPermissionMode(PERMISSION_MODE_FORUM); + + String forumId = getExternalParameterByKey(FORUM_ID); + if ((forumId) == null) { + setErrorMessage("Invalid forum selected"); + return MAIN; + } + DiscussionForum forum = forumManager.getForumById(new Long(forumId)); + if (!uiPermissionsManager.isChangeSettings(forum)) { + setErrorMessage("Insufficient privileges to change forum settings"); + return MAIN; + } + selectedForum = new DiscussionForumBean(forum, uiPermissionsManager, + forumManager); + setForumBeanAssign(); + + return FORUM_SETTING; + + } + + /** + * @return + */ + public String processActionReviseForumSettings() { + LOG.debug("processActionReviseForumSettings()"); + setEditMode(true); + setPermissionMode(PERMISSION_MODE_FORUM); + if ((selectedForum) == null) { + setErrorMessage("Forum not found"); + return MAIN; + } + if (!uiPermissionsManager.isChangeSettings(selectedForum.getForum())) { + setErrorMessage("Insufficient privileges to change forum settings"); + return MAIN; + } + List attachList = selectedForum.getForum().getAttachments(); + if (attachList != null) { + for (int i = 0; i < attachList.size(); i++) { + attachments.add((Attachment) attachList.get(i)); + } + } + + return FORUM_SETTING_REVISE; // + } + + /** + * @return + */ + public String processActionSaveForumAndAddTopic() { + LOG.debug("processActionSaveForumAndAddTopic()"); + + if (selectedForum != null + && selectedForum.getForum() != null + && (selectedForum.getForum().getShortDescription() != null) + && (selectedForum.getForum().getShortDescription().length() > 255)) { + setErrorMessage(SHORT_DESC_TOO_LONG); + return null; + } + + if (selectedForum != null + && selectedForum.getForum() != null + && (selectedForum.getForum().getTitle() == null || selectedForum + .getForum().getTitle().trim().length() < 1)) { + setErrorMessage("Please enter a valid forum title"); + return FORUM_SETTING_REVISE; + } + if (!uiPermissionsManager.isChangeSettings(selectedForum.getForum())) { + setErrorMessage("Insufficient privileges to change forum settings"); + return MAIN; + } + + DiscussionForum forum = saveForumSettings(false); + if (!uiPermissionsManager.isNewTopic(selectedForum.getForum())) { + setErrorMessage("Insufficient privileges to create new topic"); + return MAIN; + } + selectedTopic = createTopic(forum.getId()); + if (selectedTopic == null) { + setErrorMessage("Create New Topic Failed!"); + attachments.clear(); + prepareRemoveAttach.clear(); + return MAIN; + } + attachments.clear(); + prepareRemoveAttach.clear(); + return TOPIC_SETTING_REVISE; + } + + /** + * @return + */ + public String processActionSaveForumSettings() { + LOG.debug("processActionSaveForumSettings()"); + + if (selectedForum != null + && selectedForum.getForum() != null + && (selectedForum.getForum().getShortDescription() != null) + && (selectedForum.getForum().getShortDescription().length() > 255)) { + setErrorMessage(SHORT_DESC_TOO_LONG); + return null; + } + + if (!uiPermissionsManager.isChangeSettings(selectedForum.getForum())) { + setErrorMessage("Insufficient privileges to change forum settings"); + return MAIN; + } + if (selectedForum != null + && selectedForum.getForum() != null + && (selectedForum.getForum().getTitle() == null || selectedForum + .getForum().getTitle().trim().length() < 1)) { + setErrorMessage("Please enter a valid forum title"); + return FORUM_SETTING_REVISE; + } + saveForumSettings(false); + + reset(); + return MAIN; + } + + /** + * @return + */ + public String processActionSaveForumAsDraft() { + LOG.debug("processActionSaveForumAsDraft()"); + + if (selectedForum != null + && selectedForum.getForum() != null + && (selectedForum.getForum().getShortDescription() != null) + && (selectedForum.getForum().getShortDescription().length() > 255)) { + setErrorMessage(SHORT_DESC_TOO_LONG); + return null; + } + + if (!uiPermissionsManager.isChangeSettings(selectedForum.getForum())) { + setErrorMessage("Insufficient privileges to change forum settings"); + return MAIN; + } + if (selectedForum != null + && selectedForum.getForum() != null + && (selectedForum.getForum().getTitle() == null || selectedForum + .getForum().getTitle().trim().length() < 1)) { + setErrorMessage("Please enter a valid forum title"); + return FORUM_SETTING_REVISE; + } + saveForumSettings(true); + + reset(); + return MAIN; + } + + private DiscussionForum saveForumSettings(boolean draft) { + LOG.debug("saveForumSettings(boolean " + draft + ")"); + + if (selectedForum == null) { + setErrorMessage("Selected Forum not found"); + return null; + } + + DiscussionForum forum = selectedForum.getForum(); + if (forum == null) { + setErrorMessage("Forum not found"); + return null; + } + + saveForumSelectedAssignment(forum); + saveForumAttach(forum); + setObjectPermissions(forum); + if (draft) + forumManager.saveForumAsDraft(forum); + else + forumManager.saveForum(forum); + //forumManager.saveForumControlPermissions(forum, forumControlPermissions); + //forumManager.saveForumMessagePermissions(forum, forumMessagePermissions); + if (forum.getId() == null) { + String forumUuid = forum.getUuid(); + forum = null; + forum = forumManager.getForumByUuid(forumUuid); + } + return forum; + } + + /** + * @return Returns the selectedTopic. + */ + public DiscussionTopicBean getSelectedTopic() { + + if (threaded) { + rearrageTopicMsgsThreaded(); + } + setMessageBeanPreNextStatus(); + + return selectedTopic; + } + + /** + * @return + */ + public String processActionNewTopic() { + LOG.debug("processActionNewTopic()"); + + setEditMode(true); + setPermissionMode(PERMISSION_MODE_TOPIC); + + selectedTopic = createTopic(); + setNewTopicBeanAssign(); + if (selectedTopic == null) { + setErrorMessage("Create New Topic Failed!"); + attachments.clear(); + prepareRemoveAttach.clear(); + return MAIN; + } + if (!uiPermissionsManager.isNewTopic(selectedForum.getForum())) { + setErrorMessage("Insufficient privileges to create new topic"); + return MAIN; + } + attachments.clear(); + prepareRemoveAttach.clear(); + return TOPIC_SETTING_REVISE; + } + + /** + * @return + */ + public String processActionReviseTopicSettings() { + LOG.debug("processActionReviseTopicSettings()"); + + setPermissionMode(PERMISSION_MODE_TOPIC); + setEditMode(true); + + DiscussionTopic topic = selectedTopic.getTopic(); + + if (topic == null) { + topic = forumManager.getTopicById(new Long( + getExternalParameterByKey(TOPIC_ID))); + } + if (topic == null) { + setErrorMessage("Topic with id '" + + getExternalParameterByKey(TOPIC_ID) + "'not found"); + return MAIN; + } + + setSelectedForumForCurrentTopic(topic); + selectedTopic = new DiscussionTopicBean(topic, + selectedForum.getForum(), uiPermissionsManager, forumManager); + setTopicBeanAssign(); + + if (!uiPermissionsManager.isChangeSettings(selectedTopic.getTopic(), + selectedForum.getForum())) { + setErrorMessage("Insufficient privileges to change topic settings"); + return MAIN; + } + List attachList = selectedTopic.getTopic().getAttachments(); + if (attachList != null) { + for (int i = 0; i < attachList.size(); i++) { + attachments.add((Attachment) attachList.get(i)); + } + } + return TOPIC_SETTING_REVISE; + } + + /** + * @return + */ + public String processActionSaveTopicAndAddTopic() { + LOG.debug("processActionSaveTopicAndAddTopic()"); + + if (selectedTopic != null + && selectedTopic.getTopic() != null + && (selectedTopic.getTopic().getShortDescription() != null) + && (selectedTopic.getTopic().getShortDescription().length() > 255)) { + setErrorMessage(SHORT_DESC_TOO_LONG); + return null; + } + + setPermissionMode(PERMISSION_MODE_TOPIC); + if (selectedTopic != null + && selectedTopic.getTopic() != null + && (selectedTopic.getTopic().getTitle() == null || selectedTopic + .getTopic().getTitle().trim().length() < 1)) { + setErrorMessage("Please enter a valid topic title"); + return TOPIC_SETTING_REVISE; + } + saveTopicSettings(false); + Long forumId = selectedForum.getForum().getId(); + if (forumId == null) { + setErrorMessage("Parent Forum not found"); + return MAIN; + } + selectedTopic = null; + selectedTopic = createTopic(forumId); + if (selectedTopic == null) { + setErrorMessage("Create New Topic Failed!"); + attachments.clear(); + prepareRemoveAttach.clear(); + return MAIN; + } + attachments.clear(); + prepareRemoveAttach.clear(); + return TOPIC_SETTING_REVISE; + + } + + /** + * @return + */ + public String processActionSaveTopicSettings() { + LOG.debug("processActionSaveTopicSettings()"); + + if (selectedTopic != null + && selectedTopic.getTopic() != null + && (selectedTopic.getTopic().getShortDescription() != null) + && (selectedTopic.getTopic().getShortDescription().length() > 255)) { + setErrorMessage(SHORT_DESC_TOO_LONG); + return null; + } + + setPermissionMode(PERMISSION_MODE_TOPIC); + if (selectedTopic != null + && selectedTopic.getTopic() != null + && (selectedTopic.getTopic().getTitle() == null || selectedTopic + .getTopic().getTitle().trim().length() < 1)) { + setErrorMessage("Please enter a valid topic title"); + return TOPIC_SETTING_REVISE; + } + saveTopicSettings(false); + reset(); + return MAIN; + } + + /** + * @return + */ + public String processActionSaveTopicAsDraft() { + LOG.debug("processActionSaveTopicAsDraft()"); + + if (selectedTopic != null + && selectedTopic.getTopic() != null + && (selectedTopic.getTopic().getShortDescription() != null) + && (selectedTopic.getTopic().getShortDescription().length() > 255)) { + setErrorMessage(SHORT_DESC_TOO_LONG); + return null; + } + + setPermissionMode(PERMISSION_MODE_TOPIC); + if (selectedTopic != null + && selectedTopic.getTopic() != null + && (selectedTopic.getTopic().getTitle() == null || selectedTopic + .getTopic().getTitle().trim().length() < 1)) { + setErrorMessage("Please enter a valid topic title"); + return TOPIC_SETTING_REVISE; + } + if (!uiPermissionsManager.isChangeSettings(selectedTopic.getTopic(), + selectedForum.getForum())) { + setErrorMessage("Insufficient privileges to change topic settings"); + return MAIN; + } + saveTopicSettings(true); + reset(); + return MAIN; + } + + private String saveTopicSettings(boolean draft) { + LOG.debug("saveTopicSettings(" + draft + ")"); + setPermissionMode(PERMISSION_MODE_TOPIC); + if (selectedTopic != null) { + DiscussionTopic topic = selectedTopic.getTopic(); + if (selectedForum != null) { + topic.setBaseForum(selectedForum.getForum()); + saveTopicSelectedAssignment(topic); + saveTopicAttach(topic); + setObjectPermissions(topic); + if (draft) { + forumManager.saveTopicAsDraft(topic); + } else { + forumManager.saveTopic(topic); + } + //forumManager + // .saveTopicControlPermissions(topic, topicControlPermissions); + //forumManager + // .saveTopicMessagePermissions(topic, topicMessagePermissions); + } + } + return MAIN; + } + + /** + * @return + */ + public String processActionDeleteTopicConfirm() { + LOG.debug("processActionDeleteTopicConfirm()"); + + if (selectedTopic == null) { + LOG.debug("There is no topic selected for deletion"); + return MAIN; + } + if (!uiPermissionsManager.isChangeSettings(selectedTopic.getTopic(), + selectedForum.getForum())) { + setErrorMessage("Insufficient privileges to change topic settings"); + return MAIN; + } + selectedTopic.setMarkForDeletion(true); + return TOPIC_SETTING; + } + + /** + * @return + */ + public String processActionDeleteTopic() { + LOG.debug("processActionDeleteTopic()"); + if (selectedTopic == null) { + LOG.debug("There is no topic selected for deletion"); + } + if (!uiPermissionsManager.isChangeSettings(selectedTopic.getTopic(), + selectedForum.getForum())) { + setErrorMessage("Insufficient privileges to change topic settings"); + return MAIN; + } + forumManager.deleteTopic(selectedTopic.getTopic()); + reset(); + return MAIN; + } + + /** + * @return + */ + public String processActionTopicSettings() { + LOG.debug("processActionTopicSettings()"); + + setEditMode(false); + setPermissionMode(PERMISSION_MODE_TOPIC); + DiscussionTopic topic = (DiscussionTopic) forumManager + .getTopicByIdWithAttachments(new Long( + getExternalParameterByKey(TOPIC_ID))); + if (topic == null) { + return MAIN; + } + setSelectedForumForCurrentTopic(topic); + if (!uiPermissionsManager.isChangeSettings(topic, selectedForum + .getForum())) { + setErrorMessage("Insufficient privileges to change topic settings"); + return MAIN; + } + selectedTopic = new DiscussionTopicBean(topic, + selectedForum.getForum(), uiPermissionsManager, forumManager); + setTopicBeanAssign(); + + return TOPIC_SETTING; + } + + public String processActionToggleDisplayForumExtendedDescription() { + LOG.debug("processActionToggleDisplayForumExtendedDescription()"); + String redirectTo = getExternalParameterByKey(REDIRECT_PROCESS_ACTION); + if (redirectTo == null) { + setErrorMessage("Could not find a redirect page : Read / Hide full descriptions"); + return MAIN; + } + + if (redirectTo.equals("displayHome")) { + displayHomeWithExtendedForumDescription(); + return MAIN; + } + if (redirectTo.equals("processActionDisplayForum")) { + if (selectedForum.isReadFullDesciption()) { + selectedForum.setReadFullDesciption(false); + } else { + selectedForum.setReadFullDesciption(true); + } + return FORUM_DETAILS; + } + return MAIN; + } + + /** + * @return + */ + public String processActionToggleDisplayExtendedDescription() { + LOG.debug("processActionToggleDisplayExtendedDescription()"); + String redirectTo = getExternalParameterByKey(REDIRECT_PROCESS_ACTION); + if (redirectTo == null) { + setErrorMessage("Could not find a redirect page : Read / Hide full descriptions"); + return MAIN; + } + if (redirectTo.equals("displayHome")) { + return displayHomeWithExtendedTopicDescription(); + } + if (redirectTo.equals("processActionDisplayTopic")) { + if (selectedTopic.isReadFullDesciption()) { + selectedTopic.setReadFullDesciption(false); + } else { + selectedTopic.setReadFullDesciption(true); + } + return ALL_MESSAGES; + } + if (redirectTo.equals("processActionDisplayMessage")) { + if (selectedTopic.isReadFullDesciption()) { + selectedTopic.setReadFullDesciption(false); + } else { + selectedTopic.setReadFullDesciption(true); + } + return MESSAGE_VIEW; + } + + return MAIN; + + } + + /** + * @return + */ + public String processActionDisplayTopic() { + LOG.debug("processActionDisplayTopic()"); + + return displayTopicById(TOPIC_ID); + } + + /** + * @return + */ + public String processActionDisplayNextTopic() { + LOG.debug("processActionDisplayNextTopic()"); + return displayTopicById("nextTopicId"); + } + + /** + * @return + */ + public String processActionDisplayPreviousTopic() { + LOG.debug("processActionDisplayNextTopic()"); + return displayTopicById("previousTopicId"); + } + + /** + * @return Returns the selectedMessage. + */ + public DiscussionMessageBean getSelectedMessage() { + return selectedMessage; + } + + /** + * @return + */ + public String processActionDisplayMessage() { + LOG.debug("processActionDisplayMessage()"); + + String messageId = getExternalParameterByKey(MESSAGE_ID); + String topicId = getExternalParameterByKey(TOPIC_ID); + if (messageId == null) { + setErrorMessage("Message reference not found"); + return MAIN; + } + if (topicId == null) { + setErrorMessage("Topic reference not found for the message"); + return MAIN; + } + // Message message=forumManager.getMessageById(new Long(messageId)); + Message message = messageManager + .getMessageByIdWithAttachments(new Long(messageId)); + messageManager.markMessageReadForUser(new Long(topicId), new Long( + messageId), true); + if (message == null) { + setErrorMessage("Message with id '" + messageId + "'not found"); + return MAIN; + } + message = messageManager.getMessageByIdWithAttachments(message.getId()); + selectedMessage = new DiscussionMessageBean(message, messageManager); + DiscussionTopic topic = forumManager.getTopicById(new Long( + getExternalParameterByKey(TOPIC_ID))); + setSelectedForumForCurrentTopic(topic); + selectedTopic = new DiscussionTopicBean(topic, + selectedForum.getForum(), uiPermissionsManager, forumManager); + setTopicBeanAssign(); + String currentForumId = getExternalParameterByKey(FORUM_ID); + if (currentForumId != null && (!currentForumId.trim().equals("")) + && (!currentForumId.trim().equals("null"))) { + DiscussionForum forum = forumManager.getForumById(new Long( + currentForumId)); + selectedForum = getDecoratedForum(forum); + setForumBeanAssign(); + selectedTopic.getTopic().setBaseForum(forum); + } + selectedTopic = getDecoratedTopic(forumManager.getTopicById(new Long( + getExternalParameterByKey(TOPIC_ID)))); + setTopicBeanAssign(); + getSelectedTopic(); + List tempMsgs = selectedTopic.getMessages(); + if (tempMsgs != null) { + for (int i = 0; i < tempMsgs.size(); i++) { + DiscussionMessageBean thisDmb = (DiscussionMessageBean) tempMsgs + .get(i); + if (((DiscussionMessageBean) tempMsgs.get(i)).getMessage() + .getId().toString().equals(messageId)) { + selectedMessage.setDepth(thisDmb.getDepth()); + selectedMessage.setHasNext(thisDmb.getHasNext()); + selectedMessage.setHasPre(thisDmb.getHasPre()); + break; + } + } + } + // selectedTopic= new DiscussionTopicBean(message.getTopic()); + return MESSAGE_VIEW; + } + + public String processDisplayPreviousMsg() { + List tempMsgs = selectedTopic.getMessages(); + int currentMsgPosition = -1; + if (tempMsgs != null) { + for (int i = 0; i < tempMsgs.size(); i++) { + DiscussionMessageBean thisDmb = (DiscussionMessageBean) tempMsgs + .get(i); + if (selectedMessage.getMessage().getId().equals( + thisDmb.getMessage().getId())) { + currentMsgPosition = i; + break; + } + } + } + + if (currentMsgPosition > 0) { + DiscussionMessageBean thisDmb = (DiscussionMessageBean) tempMsgs + .get(currentMsgPosition - 1); + Message message = messageManager + .getMessageByIdWithAttachments(thisDmb.getMessage().getId()); + selectedMessage = new DiscussionMessageBean(message, messageManager); selectedMessage.setDepth(thisDmb.getDepth()); selectedMessage.setHasNext(thisDmb.getHasNext()); selectedMessage.setHasPre(thisDmb.getHasPre()); - messageManager.markMessageReadForUser(selectedTopic.getTopic().getId(), - selectedMessage.getMessage().getId(), true); - } - - return null; - } - - public String processDfDisplayNextMsg() - { - List tempMsgs = selectedTopic.getMessages(); - int currentMsgPosition = -1; - if(tempMsgs != null) - { - for(int i=0; i -2 && currentMsgPosition < (tempMsgs.size()-1)) - { - DiscussionMessageBean thisDmb = (DiscussionMessageBean)tempMsgs.get(currentMsgPosition+1); - Message message = messageManager.getMessageByIdWithAttachments(thisDmb.getMessage().getId()); - selectedMessage = new DiscussionMessageBean(message, messageManager); + messageManager.markMessageReadForUser(selectedTopic.getTopic() + .getId(), selectedMessage.getMessage().getId(), true); + } + + return null; + } + + public String processDfDisplayNextMsg() { + List tempMsgs = selectedTopic.getMessages(); + int currentMsgPosition = -1; + if (tempMsgs != null) { + for (int i = 0; i < tempMsgs.size(); i++) { + DiscussionMessageBean thisDmb = (DiscussionMessageBean) tempMsgs + .get(i); + if (selectedMessage.getMessage().getId().equals( + thisDmb.getMessage().getId())) { + currentMsgPosition = i; + break; + } + } + } + + if (currentMsgPosition > -2 + && currentMsgPosition < (tempMsgs.size() - 1)) { + DiscussionMessageBean thisDmb = (DiscussionMessageBean) tempMsgs + .get(currentMsgPosition + 1); + Message message = messageManager + .getMessageByIdWithAttachments(thisDmb.getMessage().getId()); + selectedMessage = new DiscussionMessageBean(message, messageManager); selectedMessage.setDepth(thisDmb.getDepth()); selectedMessage.setHasNext(thisDmb.getHasNext()); selectedMessage.setHasPre(thisDmb.getHasPre()); - messageManager.markMessageReadForUser(selectedTopic.getTopic().getId(), - selectedMessage.getMessage().getId(), true); - } - - return null; - } - - // **************************************** helper methods********************************** - - private String getExternalParameterByKey(String parameterId) - { - ExternalContext context = FacesContext.getCurrentInstance() - .getExternalContext(); - Map paramMap = context.getRequestParameterMap(); - - return (String) paramMap.get(parameterId); - } - - - /** - * @param forum - * @return - */ - private DiscussionForumBean getDecoratedForum(DiscussionForum forum) - { - if (LOG.isDebugEnabled()) - { - LOG.debug("getDecoratedForum(DiscussionForum" + forum + ")"); - } - forum = forumManager.getForumByIdWithTopics(forum.getId()); - DiscussionForumBean decoForum = new DiscussionForumBean(forum, - uiPermissionsManager, forumManager); - List temp_topics = forum.getTopics(); - if (temp_topics == null) - { - return decoForum; - } - Iterator iter = temp_topics.iterator(); - while (iter.hasNext()) - { - DiscussionTopic topic = (DiscussionTopic) iter.next(); -// TODO: put this logic in database layer - if (topic.getDraft().equals(Boolean.FALSE)|| - (topic.getDraft().equals(Boolean.TRUE)&&topic.getCreatedBy().equals(SessionManager.getCurrentSessionUserId())) - ||isInstructor() - ||SecurityService.isSuperUser()||topic.getCreatedBy().equals( - SessionManager.getCurrentSessionUserId())) - { - topic = (DiscussionTopic) forumManager.getTopicByIdWithAttachments(topic - .getId()); - if (topic != null) - { - DiscussionTopicBean decoTopic = new DiscussionTopicBean(topic, forum, - uiPermissionsManager, forumManager); - decoTopic.setTotalNoMessages(forumManager.getTotalNoMessages(topic)); - decoTopic.setUnreadNoMessages(forumManager.getUnreadNoMessages(topic)); - decoForum.addTopic(decoTopic); - } - } - } - return decoForum; - } - - /** - * @return DiscussionForumBean - */ - private DiscussionForumBean getDecoratedForum() - { - LOG.debug("decorateSelectedForum()"); - String forumId = getExternalParameterByKey(FORUM_ID); - if ((forumId) != null) - { - DiscussionForum forum = forumManager.getForumById(new Long(forumId)); - if (forum == null) - { - return null; - } - selectedForum = getDecoratedForum(forum); - return selectedForum; - } - return null; - } - - - /** - * @return - */ - private String displayHomeWithExtendedForumDescription() - { - LOG.debug("displayHomeWithExtendedForumDescription()"); - List tmpForums = getForums(); - if (tmpForums != null) - { - Iterator iter = tmpForums.iterator(); - while (iter.hasNext()) - { - DiscussionForumBean decoForumBean = (DiscussionForumBean) iter.next(); - if (decoForumBean != null) - { - // if this forum is selected to display full desciption - if (getExternalParameterByKey("forumId_displayExtended") != null - && getExternalParameterByKey("forumId_displayExtended") - .trim().length() > 0 - && decoForumBean - .getForum() - .getId() - .equals( - new Long( - getExternalParameterByKey("forumId_displayExtended")))) - { - decoForumBean.setReadFullDesciption(true); - } - // if this topic is selected to display hide extended desciption - if (getExternalParameterByKey("forumId_hideExtended") != null - && getExternalParameterByKey("forumId_hideExtended").trim() - .length() > 0 - && decoForumBean.getForum().getId().equals( - new Long( - getExternalParameterByKey("forumId_hideExtended")))) - { - decoForumBean.setReadFullDesciption(false); - } - - - } - } - - } - return MAIN; - } - - /** - * @return - */ - private String displayHomeWithExtendedTopicDescription() - { - LOG.debug("displayHomeWithExtendedTopicDescription()"); - List tmpForums = getForums(); - if (tmpForums != null) - { - Iterator iter = tmpForums.iterator(); - while (iter.hasNext()) - { - DiscussionForumBean decoForumBean = (DiscussionForumBean) iter.next(); - if (decoForumBean != null) - { - List tmpTopics = decoForumBean.getTopics(); - Iterator iter2 = tmpTopics.iterator(); - while (iter2.hasNext()) - { - DiscussionTopicBean decoTopicBean = (DiscussionTopicBean) iter2 - .next(); - if (decoTopicBean != null) - { - // if this topic is selected to display full desciption - if (getExternalParameterByKey("topicId_displayExtended") != null - && getExternalParameterByKey("topicId_displayExtended") - .trim().length() > 0 - && decoTopicBean - .getTopic() - .getId() - .equals( - new Long( - getExternalParameterByKey("topicId_displayExtended")))) - { - decoTopicBean.setReadFullDesciption(true); - } - // if this topic is selected to display hide extended desciption - if (getExternalParameterByKey("topicId_hideExtended") != null - && getExternalParameterByKey("topicId_hideExtended").trim() - .length() > 0 - && decoTopicBean.getTopic().getId().equals( - new Long( - getExternalParameterByKey("topicId_hideExtended")))) - { - decoTopicBean.setReadFullDesciption(false); - } - } - } - } - } - - } - return MAIN; - } - - /** - * @param topic - * @return - */ - private DiscussionTopicBean getDecoratedTopic(DiscussionTopic topic) - { - if (LOG.isDebugEnabled()) - { - LOG.debug("getDecoratedTopic(DiscussionTopic " + topic + ")"); - } - DiscussionTopicBean decoTopic = new DiscussionTopicBean(topic, - selectedForum.getForum(), uiPermissionsManager, forumManager); - decoTopic.setTotalNoMessages(forumManager.getTotalNoMessages(topic)); - decoTopic.setUnreadNoMessages(forumManager.getUnreadNoMessages(topic)); - decoTopic.setHasNextTopic(forumManager.hasNextTopic(topic)); - decoTopic.setHasPreviousTopic(forumManager.hasPreviousTopic(topic)); - if (forumManager.hasNextTopic(topic)) - { - DiscussionTopic nextTopic= forumManager.getNextTopic(topic); - - decoTopic.setNextTopicId(nextTopic.getId()); - - } - if (forumManager.hasPreviousTopic(topic)) - { - DiscussionTopic previousTopic= forumManager.getPreviousTopic(topic); - - decoTopic - .setPreviousTopicId(forumManager.getPreviousTopic(topic).getId()); - - } - - List temp_messages = forumManager.getTopicByIdWithMessages(topic.getId()) - .getMessages(); - if (temp_messages == null || temp_messages.size() < 1) - { - return decoTopic; - } - Iterator iter = temp_messages.iterator(); - while (iter.hasNext()) - { - Message message = (Message) iter.next(); - if (topic != null) - { - decoTopic.setTotalNoMessages(forumManager.getTotalNoMessages(topic)); - decoTopic.setUnreadNoMessages(forumManager.getUnreadNoMessages(topic)); - if (message != null) - { - DiscussionMessageBean decoMsg = new DiscussionMessageBean(message, - messageManager); - if(decoTopic.getIsRead() || (decoTopic.getIsNewResponse()&& decoMsg.getIsOwn())) - { - decoMsg.setRead(messageManager.isMessageReadForUser(topic.getId(), - message.getId())); - decoTopic.addMessage(decoMsg); - } - } - - } - } - return decoTopic; - } - - /** - * @param externalTopicId - * @return - */ - private String displayTopicById(String externalTopicId) - { - if (LOG.isDebugEnabled()) - { - LOG.debug("processActionDisplayTopicById(String" + externalTopicId + ")"); - } - String topicId = null; - - selectedTopic = null; - try - { - topicId = getExternalParameterByKey(externalTopicId); - - if (topicId != null) - { - DiscussionTopic topic = null; - try - { - Long.parseLong(topicId); - topic = forumManager.getTopicById(new Long(topicId)); - } - catch (NumberFormatException e) - { - LOG.error(e.getMessage(), e); - setErrorMessage("Unable to retrieve topic"); - return MAIN; - } - - setSelectedForumForCurrentTopic(topic); - selectedTopic = getDecoratedTopic(topic); - } - else - { - LOG.error("Topic with id '" + externalTopicId + "' not found"); - setErrorMessage("Topic with id '" + externalTopicId + "' not found"); - return MAIN; - } - } - catch (Exception e) - { - LOG.error(e.getMessage(), e); - setErrorMessage(e.getMessage()); - return "main"; - } - return ALL_MESSAGES; - } - - private void reset() - { - this.forums = null; - this.selectedForum = null; - this.selectedTopic = null; - this.selectedMessage = null; -// this.templateControlPermissions = null; -// this.templateMessagePermissions = null; - this.permissions=null; - this.errorSynch = false; - this.siteMembers=null; - attachments.clear(); - prepareRemoveAttach.clear(); - assignments.clear(); - - } - - /** - * @return newly created topic - */ - private DiscussionTopicBean createTopic() - { - String forumId = getExternalParameterByKey(FORUM_ID); - if (forumId == null) - { - setErrorMessage("Parent Forum for new topic was not found"); - return null; - } - return createTopic(new Long(forumId)); - } - - /** - * @param forumID - * @return - */ - private DiscussionTopicBean createTopic(Long forumId) - { - if (forumId == null) - { - setErrorMessage("Parent Forum for new topic was not found"); - return null; - } - DiscussionForum forum = forumManager.getForumById(forumId); - if (forum == null) - { - setErrorMessage("Parent Forum for new topic was not found"); - return null; - } - selectedForum = new DiscussionForumBean(forum, uiPermissionsManager, forumManager); - setForumBeanAssign(); - - DiscussionTopic topic = forumManager.createTopic(forum); - if (topic == null) - { - setErrorMessage("Failed to create new topic"); - return null; - } - selectedTopic = new DiscussionTopicBean(topic, forum, uiPermissionsManager, forumManager); - setNewTopicBeanAssign(); - - DiscussionTopicBean thisDTB = new DiscussionTopicBean(topic, forum, uiPermissionsManager, forumManager); - setNewTopicBeanAssign(selectedForum, thisDTB); - return thisDTB; - //return new DiscussionTopicBean(topic, forum, uiPermissionsManager, forumManager); - } - - // compose - public String processAddMessage() - { - return MESSAGE_COMPOSE; - } - - public String processAddAttachmentRedirect() - { - LOG.debug("processAddAttachmentRedirect()"); - try - { - ExternalContext context = FacesContext.getCurrentInstance() - .getExternalContext(); - context.redirect("sakai.filepicker.helper/tool"); - return null; - } - catch (Exception e) - { - return null; - } - } - - public void setMessageManager(MessageForumsMessageManager messageManager) - { - this.messageManager = messageManager; - } - - public String getComposeTitle() - { - return composeTitle; - } - - public void setComposeTitle(String composeTitle) - { - this.composeTitle = composeTitle; - } - - public String getComposeBody() - { - return composeBody; - } - - public void setComposeBody(String composeBody) - { - this.composeBody = composeBody; - } - - public String getComposeLabel() - { - return composeLabel; - } - - public void setComposeLabel(String composeLabel) - { - this.composeLabel = composeLabel; - } - - public ArrayList getAttachments() - { - ToolSession session = SessionManager.getCurrentToolSession(); - if (session.getAttribute(FilePickerHelper.FILE_PICKER_CANCEL) == null - && session.getAttribute(FilePickerHelper.FILE_PICKER_ATTACHMENTS) != null) - { - List refs = (List) session - .getAttribute(FilePickerHelper.FILE_PICKER_ATTACHMENTS); - if(refs != null && refs.size()>0) - { - Reference ref = (Reference) refs.get(0); - - for (int i = 0; i < refs.size(); i++) - { - ref = (Reference) refs.get(i); - Attachment thisAttach = messageManager.createAttachment(); - thisAttach.setAttachmentName(ref.getProperties().getProperty( - ref.getProperties().getNamePropDisplayName())); - thisAttach.setAttachmentSize(ref.getProperties().getProperty( - ref.getProperties().getNamePropContentLength())); - thisAttach.setAttachmentType(ref.getProperties().getProperty( - ref.getProperties().getNamePropContentType())); - thisAttach.setAttachmentId(ref.getId()); - thisAttach.setAttachmentUrl(ref.getUrl()); - - attachments.add(thisAttach); - } - } - } - session.removeAttribute(FilePickerHelper.FILE_PICKER_ATTACHMENTS); - session.removeAttribute(FilePickerHelper.FILE_PICKER_CANCEL); - - return attachments; - } - - public void setAttachments(ArrayList attachments) - { - this.attachments = attachments; - } - - public String processDeleteAttach() - { - LOG.debug("processDeleteAttach()"); - - ExternalContext context = FacesContext.getCurrentInstance() - .getExternalContext(); - String attachId = null; - - Map paramMap = context.getRequestParameterMap(); - Iterator itr = paramMap.keySet().iterator(); - while (itr.hasNext()) - { - Object key = itr.next(); - if (key instanceof String) - { - String name = (String) key; - int pos = name.lastIndexOf("dfmsg_current_attach"); - - if (pos >= 0 && name.length() == pos + "dfmsg_current_attach".length()) - { - attachId = (String) paramMap.get(key); - break; - } - } - } - - if ((attachId != null) && (!attachId.equals(""))) - { - for (int i = 0; i < attachments.size(); i++) - { - if (attachId.equalsIgnoreCase(((Attachment) attachments.get(i)) - .getAttachmentId())) - { - attachments.remove(i); - break; - } - } - } - - return null; - } - - public String processDfMsgCancel() - { - this.composeBody = null; - this.composeLabel = null; - this.composeTitle = null; - - this.attachments.clear(); - - return ALL_MESSAGES; - } - - public String processDfMsgPost() - { - Message dMsg = constructMessage(); - - forumManager.saveMessage(dMsg); - setSelectedForumForCurrentTopic((DiscussionTopic) forumManager - .getTopicByIdWithMessages(selectedTopic.getTopic().getId())); - selectedTopic.setTopic((DiscussionTopic) forumManager - .getTopicByIdWithMessages(selectedTopic.getTopic().getId())); - selectedTopic.getTopic().setBaseForum(selectedForum.getForum()); - //selectedTopic.addMessage(new DiscussionMessageBean(dMsg, messageManager)); - selectedTopic.insertMessage(new DiscussionMessageBean(dMsg, messageManager)); - - selectedTopic.getTopic().addMessage(dMsg); - forumManager.saveTopic(selectedTopic.getTopic()); - - this.composeBody = null; - this.composeLabel = null; - this.composeTitle = null; - - this.attachments.clear(); - - return ALL_MESSAGES; - } - - public String processDfMsgSaveDraft() - { - Message dMsg = constructMessage(); - dMsg.setDraft(Boolean.TRUE); - - forumManager.saveMessage(dMsg); - setSelectedForumForCurrentTopic((DiscussionTopic) forumManager - .getTopicByIdWithMessages(selectedTopic.getTopic().getId())); - selectedTopic.setTopic((DiscussionTopic) forumManager - .getTopicByIdWithMessages(selectedTopic.getTopic().getId())); - selectedTopic.getTopic().setBaseForum(selectedForum.getForum()); - //selectedTopic.addMessage(new DiscussionMessageBean(dMsg, messageManager)); - selectedTopic.insertMessage(new DiscussionMessageBean(dMsg, messageManager)); - selectedTopic.getTopic().addMessage(dMsg); - forumManager.saveTopic(selectedTopic.getTopic()); - - this.composeBody = null; - this.composeLabel = null; - this.composeTitle = null; - - this.attachments.clear(); - - return ALL_MESSAGES; - } - - public Message constructMessage() - { - Message aMsg; - - aMsg = messageManager.createDiscussionMessage(); - - if (aMsg != null) - { - aMsg.setTitle(getComposeTitle()); - aMsg.setBody(getComposeBody()); - aMsg.setAuthor(getUserId()); - aMsg.setDraft(Boolean.FALSE); - aMsg.setApproved(Boolean.TRUE); - aMsg.setTopic(selectedTopic.getTopic()); - } - for (int i = 0; i < attachments.size(); i++) - { - aMsg.addAttachment((Attachment) attachments.get(i)); - } - attachments.clear(); - // oldAttachments.clear(); - - return aMsg; - } - - public String processDfComposeToggle() - { - String redirectTo = getExternalParameterByKey(REDIRECT_PROCESS_ACTION); - String expand = getExternalParameterByKey("composeExpand"); - - if (redirectTo == null) - { - return MAIN; - } - if (redirectTo.equals("dfCompose")) - { - if ((expand != null) && (expand.equalsIgnoreCase("true"))) - { - selectedTopic.setReadFullDesciption(true); - } - else - { - selectedTopic.setReadFullDesciption(false); - } - return MESSAGE_COMPOSE; - } - if (redirectTo.equals("dfViewMessage")) - { - if ((expand != null) && (expand.equalsIgnoreCase("true"))) - { - selectedTopic.setReadFullDesciption(true); - } - else - { - selectedTopic.setReadFullDesciption(false); - } - return MESSAGE_VIEW; - } - if (redirectTo.equals("dfTopicReply")) - { - if ((expand != null) && (expand.equalsIgnoreCase("true"))) - { - selectedTopic.setReadFullDesciption(true); - } - else - { - selectedTopic.setReadFullDesciption(false); - } - return "dfTopicReply"; - } - - return MAIN; - } - - public String getUserId() - { - return SessionManager.getCurrentSessionUserId(); - } - - public boolean getFullAccess() - { - return forumManager.isInstructor(); - } - - public String processDfMsgReplyMsg() - { - this.composeTitle = "Re: " + selectedMessage.getMessage().getTitle() + " "; - - return "dfMessageReply"; - } - - public String processDfMsgReplyTp() - { - return "dfTopicReply"; - } - - public String processDfMsgGrd() - { - selectedAssign = "Default_0"; - gradebookScore = ""; - gradeComment = ""; - - try - { - GradebookService gradebookService = (org.sakaiproject.service.gradebook.shared.GradebookService) - ComponentManager.get("org.sakaiproject.service.gradebook.GradebookService"); - if(selectedMessage.getMessage().getGradeAssignmentName() !=null && - selectedMessage.getMessage().getGradeAssignmentName().trim().length()>0) - { - if((gradebookService.getAssignmentScore(ToolManager.getCurrentPlacement().getContext(), - selectedMessage.getMessage().getGradeAssignmentName(), - UserDirectoryService.getUser(selectedMessage.getMessage().getAuthor()).getId())) != null) - { - gradePoint = (gradebookService.getAssignmentScore(ToolManager.getCurrentPlacement().getContext(), - selectedMessage.getMessage().getGradeAssignmentName(), - UserDirectoryService.getUser(selectedMessage.getMessage().getAuthor()).getId())).toString(); - gradePoint = new Double(gradePoint).toString(); - gradeComment = selectedMessage.getMessage().getGradeComment(); - String thisGradeAssign = selectedMessage.getMessage().getGradeAssignmentName(); - setSelectedAssignForMessage(thisGradeAssign); - } - } - else if(selectedTopic.getTopic().getDefaultAssignName() != null && - selectedTopic.getTopic().getDefaultAssignName().trim().length() > 0) - { - if((gradebookService.getAssignmentScore(ToolManager.getCurrentPlacement().getContext(), - selectedTopic.getTopic().getDefaultAssignName(), - UserDirectoryService.getUser(selectedMessage.getMessage().getAuthor()).getId())) != null) - { - gradePoint = (gradebookService.getAssignmentScore(ToolManager.getCurrentPlacement().getContext(), - selectedTopic.getTopic().getDefaultAssignName(), - UserDirectoryService.getUser(selectedMessage.getMessage().getAuthor()).getId())).toString(); - gradePoint = new Double(gradePoint).toString(); - String thisGradeAssign = selectedTopic.getTopic().getDefaultAssignName(); - setSelectedAssignForMessage(thisGradeAssign); - } - else - { - gradePoint = ""; - String thisGradeAssign = selectedTopic.getTopic().getDefaultAssignName(); - setSelectedAssignForMessage(thisGradeAssign); - } - } - else if(selectedForum.getForum().getDefaultAssignName() != null && - selectedForum.getForum().getDefaultAssignName().trim().length() > 0) - { - if( (gradebookService.getAssignmentScore(ToolManager.getCurrentPlacement().getContext(), - selectedForum.getForum().getDefaultAssignName(), - UserDirectoryService.getUser(selectedMessage.getMessage().getAuthor()).getId())) != null) - { - gradePoint = (gradebookService.getAssignmentScore(ToolManager.getCurrentPlacement().getContext(), - selectedForum.getForum().getDefaultAssignName(), - UserDirectoryService.getUser(selectedMessage.getMessage().getAuthor()).getId())).toString(); - gradePoint = new Double(gradePoint).toString(); - String thisGradeAssign = selectedForum.getForum().getDefaultAssignName(); - setSelectedAssignForMessage(thisGradeAssign); - } - else - { - gradePoint = ""; - String thisGradeAssign = selectedTopic.getTopic().getDefaultAssignName(); - setSelectedAssignForMessage(thisGradeAssign); - } - } - } - catch(Exception e) - { - LOG.error("processDfMsgGrd in DiscussionFOrumTool - " + e); - e.printStackTrace(); - return null; - } - - return "dfMsgGrade"; - } - - public String processDfMsgRvs() - { - attachments.clear(); - - composeBody = selectedMessage.getMessage().getBody(); - composeLabel = selectedMessage.getMessage().getLabel(); - composeTitle = selectedMessage.getMessage().getTitle(); - List attachList = selectedMessage.getMessage().getAttachments(); - if (attachList != null) - { - for (int i = 0; i < attachList.size(); i++) - { - attachments.add((Attachment) attachList.get(i)); - } - } - - return "dfMsgRevise"; - } - - public String processDfMsgMove() - { - List childMsgs = new ArrayList(); - messageManager - .getChildMsgs(selectedMessage.getMessage().getId(), childMsgs); - // selectedMessage.getMessage().setTopic(selectedTopic.getTopic()); - - return null; - } - - public String processDfMsgDeleteConfirm() - { - deleteMsg = true; - return null; - } - - public String processDfReplyMsgPost() - { - List tempList = forumManager.getMessagesByTopicId(selectedTopic.getTopic().getId()); - if(tempList != null) - { - boolean existed = false; - for(int i=0; i= 0 && name.length() == pos + "dfmsg_current_attach".length()) - { - attachId = (String) paramMap.get(key); - break; - } - } - } - - if ((attachId != null) && (!attachId.equals(""))) - { - for (int i = 0; i < attachments.size(); i++) - { - if (attachId.equalsIgnoreCase(((Attachment) attachments.get(i)) - .getAttachmentId())) - { - prepareRemoveAttach.add((Attachment) attachments.get(i)); - attachments.remove(i); - break; - } - } - } - - return null; - } - - public String processDfMsgRevisedPost() - { - Message dMsg = selectedMessage.getMessage(); - - for (int i = 0; i < prepareRemoveAttach.size(); i++) - { - Attachment removeAttach = (Attachment) prepareRemoveAttach.get(i); - dMsg.removeAttachment(removeAttach); - } - - List oldList = dMsg.getAttachments(); - for (int i = 0; i < attachments.size(); i++) - { - Attachment thisAttach = (Attachment) attachments.get(i); - boolean existed = false; - for (int j = 0; j < oldList.size(); j++) - { - Attachment existedAttach = (Attachment) oldList.get(j); - if (existedAttach.getAttachmentId() - .equals(thisAttach.getAttachmentId())) - { - existed = true; - break; - } - } - if (!existed) - { - dMsg.addAttachment(thisAttach); - } - } - String currentBody = getComposeBody(); - String revisedInfo = "Last Revised By " + this.getUserId() + " on "; - Date now = new Date(); - revisedInfo += now.toString() + "
"; - -/* if(currentBody != null && currentBody.length()>0 && currentBody.startsWith("Last Revised By ")) - { - if(currentBody.lastIndexOf("
") > 0) - { - currentBody = currentBody.substring(currentBody.lastIndexOf("
") + 7); - } - }*/ - - revisedInfo = revisedInfo.concat(currentBody); - - dMsg.setTitle(getComposeTitle()); - dMsg.setBody(revisedInfo); - dMsg.setDraft(Boolean.FALSE); - dMsg.setModified(new Date()); - dMsg.setModifiedBy(getUserId()); - // dMsg.setApproved(Boolean.TRUE); - - setSelectedForumForCurrentTopic((DiscussionTopic) forumManager - .getTopicByIdWithMessages(selectedTopic.getTopic().getId())); - selectedTopic.setTopic((DiscussionTopic) forumManager - .getTopicByIdWithMessages(selectedTopic.getTopic().getId())); - selectedTopic.getTopic().setBaseForum(selectedForum.getForum()); - dMsg.getTopic().setBaseForum(selectedTopic.getTopic().getBaseForum()); - forumManager.saveMessage(dMsg); - - List messageList = selectedTopic.getMessages(); - for (int i = 0; i < messageList.size(); i++) - { - DiscussionMessageBean dmb = (DiscussionMessageBean) messageList.get(i); - if (dmb.getMessage().getId().equals(dMsg.getId())) - { - selectedTopic.getMessages().set(i, - new DiscussionMessageBean(dMsg, messageManager)); - } - } - - try - { - DiscussionTopic topic = null; - try - { - topic = forumManager.getTopicById(selectedTopic.getTopic().getId()); - } - catch (NumberFormatException e) - { - LOG.error(e.getMessage(), e); - } - setSelectedForumForCurrentTopic(topic); - selectedTopic = getDecoratedTopic(topic); - - } - catch (Exception e) - { - LOG.error(e.getMessage(), e); - setErrorMessage(e.getMessage()); - return null; - } - - prepareRemoveAttach.clear(); - composeBody = null; - composeLabel = null; - composeTitle = null; - attachments.clear(); - - return ALL_MESSAGES; - } - - public String processDfMsgSaveRevisedDraft() - { - Message dMsg = selectedMessage.getMessage(); - - for (int i = 0; i < prepareRemoveAttach.size(); i++) - { - Attachment removeAttach = (Attachment) prepareRemoveAttach.get(i); - dMsg.removeAttachment(removeAttach); - } - - List oldList = dMsg.getAttachments(); - for (int i = 0; i < attachments.size(); i++) - { - Attachment thisAttach = (Attachment) attachments.get(i); - boolean existed = false; - for (int j = 0; j < oldList.size(); j++) - { - Attachment existedAttach = (Attachment) oldList.get(j); - if (existedAttach.getAttachmentId() - .equals(thisAttach.getAttachmentId())) - { - existed = true; - break; - } - } - if (!existed) - { - dMsg.addAttachment(thisAttach); - } - } - String currentBody = getComposeBody(); - String revisedInfo = "Last Revised By " + this.getUserId() + " on "; - Date now = new Date(); - revisedInfo += now.toString() + "
"; - revisedInfo = revisedInfo.concat(currentBody); - - dMsg.setTitle(getComposeTitle()); - dMsg.setBody(revisedInfo); - dMsg.setDraft(Boolean.TRUE); - dMsg.setModified(new Date()); - dMsg.setModifiedBy(getUserId()); - // dMsg.setApproved(Boolean.TRUE); - - setSelectedForumForCurrentTopic((DiscussionTopic) forumManager - .getTopicByIdWithMessages(selectedTopic.getTopic().getId())); - selectedTopic.setTopic((DiscussionTopic) forumManager - .getTopicByIdWithMessages(selectedTopic.getTopic().getId())); - selectedTopic.getTopic().setBaseForum(selectedForum.getForum()); - dMsg.getTopic().setBaseForum(selectedTopic.getTopic().getBaseForum()); - forumManager.saveMessage(dMsg); - - List messageList = selectedTopic.getMessages(); - for (int i = 0; i < messageList.size(); i++) - { - DiscussionMessageBean dmb = (DiscussionMessageBean) messageList.get(i); - if (dmb.getMessage().getId().equals(dMsg.getId())) - { - selectedTopic.getMessages().set(i, - new DiscussionMessageBean(dMsg, messageManager)); - } - } - - try - { - DiscussionTopic topic = null; - try - { - topic = forumManager.getTopicById(selectedTopic.getTopic().getId()); - } - catch (NumberFormatException e) - { - LOG.error(e.getMessage(), e); - } - setSelectedForumForCurrentTopic(topic); - selectedTopic = getDecoratedTopic(topic); - } - catch (Exception e) - { - LOG.error(e.getMessage(), e); - setErrorMessage(e.getMessage()); - return null; - } - - prepareRemoveAttach.clear(); - composeBody = null; - composeLabel = null; - composeTitle = null; - attachments.clear(); - - return ALL_MESSAGES; - } - - public String processDfReplyMsgCancel() - { - this.errorSynch = false; - this.composeBody = null; - this.composeLabel = null; - this.composeTitle = null; - - this.attachments.clear(); - - return ALL_MESSAGES; - } - - public String processDfReplyTopicPost() - { - Message dMsg = constructMessage(); - - forumManager.saveMessage(dMsg); - setSelectedForumForCurrentTopic((DiscussionTopic) forumManager - .getTopicByIdWithMessages(selectedTopic.getTopic().getId())); - selectedTopic.setTopic((DiscussionTopic) forumManager - .getTopicByIdWithMessages(selectedTopic.getTopic().getId())); - selectedTopic.getTopic().setBaseForum(selectedForum.getForum()); - //selectedTopic.addMessage(new DiscussionMessageBean(dMsg, messageManager)); - selectedTopic.insertMessage(new DiscussionMessageBean(dMsg, messageManager)); - selectedTopic.getTopic().addMessage(dMsg); - forumManager.saveTopic(selectedTopic.getTopic()); - - this.composeBody = null; - this.composeLabel = null; - this.composeTitle = null; - - this.attachments.clear(); - - return ALL_MESSAGES; - } - - public String processDfReplyTopicSaveDraft() - { - Message dMsg = constructMessage(); - dMsg.setDraft(Boolean.TRUE); - - forumManager.saveMessage(dMsg); - setSelectedForumForCurrentTopic((DiscussionTopic) forumManager - .getTopicByIdWithMessages(selectedTopic.getTopic().getId())); - selectedTopic.setTopic((DiscussionTopic) forumManager - .getTopicByIdWithMessages(selectedTopic.getTopic().getId())); - selectedTopic.getTopic().setBaseForum(selectedForum.getForum()); - //selectedTopic.addMessage(new DiscussionMessageBean(dMsg, messageManager)); - selectedTopic.insertMessage(new DiscussionMessageBean(dMsg, messageManager)); - selectedTopic.getTopic().addMessage(dMsg); - forumManager.saveTopic(selectedTopic.getTopic()); - - this.composeBody = null; - this.composeLabel = null; - this.composeTitle = null; - - this.attachments.clear(); - - return ALL_MESSAGES; - } - - public String processDfReplyTopicCancel() - { - this.composeBody = null; - this.composeLabel = null; - this.composeTitle = null; - - this.attachments.clear(); - - return ALL_MESSAGES; - } - - public boolean getDeleteMsg() - { - return deleteMsg; - } - - public String processDfMsgDeleteConfirmYes() - { - List delList = new ArrayList(); - messageManager.getChildMsgs(selectedMessage.getMessage().getId(), delList); - - if(delList.size() > 0) - { - if(!selectedTopic.getIsDeleteAny()) - { - errorSynch = true; - return null; - } - } - - selectedTopic.removeMessage(selectedMessage); - Topic tempTopic = forumManager.getTopicByIdWithMessages(selectedTopic - .getTopic().getId()); - tempTopic.removeMessage(selectedMessage.getMessage()); - // selectedTopic.getTopic().removeMessage(selectedMessage.getMessage()); - for (int i = 0; i < delList.size(); i++) - { - selectedTopic.removeMessage(new DiscussionMessageBean((Message) delList - .get(i), messageManager)); - // tempTopic.removeMessage((Message) delList.get(i)); - // selectedTopic.getTopic().removeMessage((Message) delList.get(i)); - } - - messageManager.deleteMsgWithChild(selectedMessage.getMessage().getId()); - - try - { - DiscussionTopic topic = null; - try - { - topic = forumManager.getTopicById(selectedTopic.getTopic().getId()); - } - catch (NumberFormatException e) - { - LOG.error(e.getMessage(), e); - } - setSelectedForumForCurrentTopic(topic); - selectedTopic = getDecoratedTopic(topic); - } - catch (Exception e) - { - LOG.error(e.getMessage(), e); - setErrorMessage(e.getMessage()); - this.deleteMsg = false; - return "main"; - } - - this.deleteMsg = false; - - return ALL_MESSAGES; - } - - public String processDfMsgDeleteCancel() - { - this.deleteMsg = false; - this.errorSynch = false; - - return null; - } - - public void setNewForumBeanAssign() - { - selectedForum.setGradeAssign("Default_0"); - } - - public void setNewTopicBeanAssign() - { - if(selectedForum !=null && selectedForum.getGradeAssign() != null && selectedForum.getForum() != null) - { - selectedTopic.setGradeAssign(selectedForum.getGradeAssign()); - selectedTopic.getTopic().setDefaultAssignName(selectedForum.getForum().getDefaultAssignName()); - } - } - - public void setNewTopicBeanAssign(DiscussionForumBean dfb, DiscussionTopicBean dtb) - { - if(dfb !=null && dfb.getGradeAssign() != null && dfb.getForum() != null) - { - dtb.setGradeAssign(dfb.getGradeAssign()); - dtb.getTopic().setDefaultAssignName(dfb.getForum().getDefaultAssignName()); - } - } - - public void setForumBeanAssign() - { - for(int i=0; i= 0 && name.length() == pos + "dfmsg_current_attach".length()) - { - attachId = (String) paramMap.get(key); - break; - } - } - } - - if ((attachId != null) && (!attachId.equals(""))) - { - for (int i = 0; i < attachments.size(); i++) - { - if (attachId.equalsIgnoreCase(((Attachment) attachments.get(i)) - .getAttachmentId())) - { - prepareRemoveAttach.add((Attachment) attachments.get(i)); - attachments.remove(i); - break; - } - } - } - - return null; - } - - public boolean getThreaded() - { - return threaded; - } - - public void setThreaded(boolean threaded) - { - this.threaded = threaded; - } - - public String getExpanded() - { - return expanded; - } - - public void setExpanded(String expanded) - { - this.expanded = expanded; - } - - public void setGradeNotify(boolean gradeNotify) - { - this.gradeNotify = gradeNotify; - } - - public boolean getGradeNotify() - { - return gradeNotify; - } - - public String getSelectedAssign() - { - return selectedAssign; - } - - public void setSelectedAssign(String selectedAssign) - { - this.selectedAssign = selectedAssign; - } - - public void setGradePoint(String gradePoint) - { - this.gradePoint = gradePoint; - } - - public String getGradePoint() - { - return gradePoint; - } - - public String getGradebookScore() - { - return gradebookScore; - } - - public void setGradebookScore(String gradebookScore) - { - this.gradebookScore = gradebookScore; - } - - public List getAssignments() - { - return assignments; - } - - public void setAssignments(List assignments) - { - this.assignments = assignments; - } - - public void setGradeComment(String gradeComment) - { - this.gradeComment = gradeComment; - } - - public String getGradeComment() - { - return gradeComment; - } - - public boolean getNoGradeWarn() - { - return noGradeWarn; - } - - public void setNoGradeWarn(boolean noGradeWarn) - { - this.noGradeWarn = noGradeWarn; - } - - public boolean getNoAssignWarn() - { - return noAssignWarn; - } - - public void setNoAssignWarn(boolean noAssignWarn) - { - this.noAssignWarn = noAssignWarn; - } - - public void rearrageTopicMsgsThreaded() - { - - - List msgsList = selectedTopic.getMessages(); - List orderedList = new ArrayList(); - - if(msgsList != null) - { - for(int i=0; i 0 + && decoForumBean + .getForum() + .getId() + .equals( + new Long( + getExternalParameterByKey("forumId_displayExtended")))) { + decoForumBean.setReadFullDesciption(true); + } + // if this topic is selected to display hide extended desciption + if (getExternalParameterByKey("forumId_hideExtended") != null + && getExternalParameterByKey("forumId_hideExtended") + .trim().length() > 0 + && decoForumBean + .getForum() + .getId() + .equals( + new Long( + getExternalParameterByKey("forumId_hideExtended")))) { + decoForumBean.setReadFullDesciption(false); + } + + } + } + + } + return MAIN; + } + + /** + * @return + */ + private String displayHomeWithExtendedTopicDescription() { + LOG.debug("displayHomeWithExtendedTopicDescription()"); + List tmpForums = getForums(); + if (tmpForums != null) { + Iterator iter = tmpForums.iterator(); + while (iter.hasNext()) { + DiscussionForumBean decoForumBean = (DiscussionForumBean) iter + .next(); + if (decoForumBean != null) { + List tmpTopics = decoForumBean.getTopics(); + Iterator iter2 = tmpTopics.iterator(); + while (iter2.hasNext()) { + DiscussionTopicBean decoTopicBean = (DiscussionTopicBean) iter2 + .next(); + if (decoTopicBean != null) { + // if this topic is selected to display full desciption + if (getExternalParameterByKey("topicId_displayExtended") != null + && getExternalParameterByKey( + "topicId_displayExtended").trim() + .length() > 0 + && decoTopicBean + .getTopic() + .getId() + .equals( + new Long( + getExternalParameterByKey("topicId_displayExtended")))) { + decoTopicBean.setReadFullDesciption(true); + } + // if this topic is selected to display hide extended desciption + if (getExternalParameterByKey("topicId_hideExtended") != null + && getExternalParameterByKey( + "topicId_hideExtended").trim() + .length() > 0 + && decoTopicBean + .getTopic() + .getId() + .equals( + new Long( + getExternalParameterByKey("topicId_hideExtended")))) { + decoTopicBean.setReadFullDesciption(false); + } + } + } + } + } + + } + return MAIN; + } + + /** + * @param topic + * @return + */ + private DiscussionTopicBean getDecoratedTopic(DiscussionTopic topic) { + if (LOG.isDebugEnabled()) { + LOG.debug("getDecoratedTopic(DiscussionTopic " + topic + ")"); + } + DiscussionTopicBean decoTopic = new DiscussionTopicBean(topic, + selectedForum.getForum(), uiPermissionsManager, forumManager); + decoTopic.setTotalNoMessages(forumManager.getTotalNoMessages(topic)); + decoTopic.setUnreadNoMessages(forumManager.getUnreadNoMessages(topic)); + decoTopic.setHasNextTopic(forumManager.hasNextTopic(topic)); + decoTopic.setHasPreviousTopic(forumManager.hasPreviousTopic(topic)); + if (forumManager.hasNextTopic(topic)) { + DiscussionTopic nextTopic = forumManager.getNextTopic(topic); + + decoTopic.setNextTopicId(nextTopic.getId()); + + } + if (forumManager.hasPreviousTopic(topic)) { + DiscussionTopic previousTopic = forumManager + .getPreviousTopic(topic); + + decoTopic.setPreviousTopicId(forumManager.getPreviousTopic(topic) + .getId()); + + } + + List temp_messages = forumManager.getTopicByIdWithMessages( + topic.getId()).getMessages(); + if (temp_messages == null || temp_messages.size() < 1) { + return decoTopic; + } + Iterator iter = temp_messages.iterator(); + while (iter.hasNext()) { + Message message = (Message) iter.next(); + if (topic != null) { + decoTopic.setTotalNoMessages(forumManager + .getTotalNoMessages(topic)); + decoTopic.setUnreadNoMessages(forumManager + .getUnreadNoMessages(topic)); + if (message != null) { + DiscussionMessageBean decoMsg = new DiscussionMessageBean( + message, messageManager); + if (decoTopic.getIsRead() + || (decoTopic.getIsNewResponse() && decoMsg + .getIsOwn())) { + decoMsg.setRead(messageManager.isMessageReadForUser( + topic.getId(), message.getId())); + decoTopic.addMessage(decoMsg); + } + } + + } + } + return decoTopic; + } + + /** + * @param externalTopicId + * @return + */ + private String displayTopicById(String externalTopicId) { + if (LOG.isDebugEnabled()) { + LOG.debug("processActionDisplayTopicById(String" + externalTopicId + + ")"); + } + String topicId = null; + + selectedTopic = null; + try { + topicId = getExternalParameterByKey(externalTopicId); + + if (topicId != null) { + DiscussionTopic topic = null; + try { + Long.parseLong(topicId); + topic = forumManager.getTopicById(new Long(topicId)); + } catch (NumberFormatException e) { + LOG.error(e.getMessage(), e); + setErrorMessage("Unable to retrieve topic"); + return MAIN; + } + + setSelectedForumForCurrentTopic(topic); + selectedTopic = getDecoratedTopic(topic); + } else { + LOG.error("Topic with id '" + externalTopicId + "' not found"); + setErrorMessage("Topic with id '" + externalTopicId + + "' not found"); + return MAIN; + } + } catch (Exception e) { + LOG.error(e.getMessage(), e); + setErrorMessage(e.getMessage()); + return "main"; + } + return ALL_MESSAGES; + } + + private void reset() { + this.forums = null; + this.selectedForum = null; + this.selectedTopic = null; + this.selectedMessage = null; + // this.templateControlPermissions = null; + // this.templateMessagePermissions = null; + this.permissions = null; + this.errorSynch = false; + this.siteMembers = null; + attachments.clear(); + prepareRemoveAttach.clear(); + assignments.clear(); + + } + + /** + * @return newly created topic + */ + private DiscussionTopicBean createTopic() { + String forumId = getExternalParameterByKey(FORUM_ID); + if (forumId == null) { + setErrorMessage("Parent Forum for new topic was not found"); + return null; + } + return createTopic(new Long(forumId)); + } + + /** + * @param forumID + * @return + */ + private DiscussionTopicBean createTopic(Long forumId) { + if (forumId == null) { + setErrorMessage("Parent Forum for new topic was not found"); + return null; + } + DiscussionForum forum = forumManager.getForumById(forumId); + if (forum == null) { + setErrorMessage("Parent Forum for new topic was not found"); + return null; + } + selectedForum = new DiscussionForumBean(forum, uiPermissionsManager, + forumManager); + setForumBeanAssign(); + + DiscussionTopic topic = forumManager.createTopic(forum); + if (topic == null) { + setErrorMessage("Failed to create new topic"); + return null; + } + selectedTopic = new DiscussionTopicBean(topic, forum, + uiPermissionsManager, forumManager); + setNewTopicBeanAssign(); + + DiscussionTopicBean thisDTB = new DiscussionTopicBean(topic, forum, + uiPermissionsManager, forumManager); + setNewTopicBeanAssign(selectedForum, thisDTB); + return thisDTB; + //return new DiscussionTopicBean(topic, forum, uiPermissionsManager, forumManager); + } + + // compose + public String processAddMessage() { + return MESSAGE_COMPOSE; + } + + public String processAddAttachmentRedirect() { + LOG.debug("processAddAttachmentRedirect()"); + try { + ExternalContext context = FacesContext.getCurrentInstance() + .getExternalContext(); + context.redirect("sakai.filepicker.helper/tool"); + return null; + } catch (Exception e) { + return null; + } + } + + public void setMessageManager(MessageForumsMessageManager messageManager) { + this.messageManager = messageManager; + } + + public String getComposeTitle() { + return composeTitle; + } + + public void setComposeTitle(String composeTitle) { + this.composeTitle = composeTitle; + } + + public String getComposeBody() { + return composeBody; + } + + public void setComposeBody(String composeBody) { + this.composeBody = composeBody; + } + + public String getComposeLabel() { + return composeLabel; + } + + public void setComposeLabel(String composeLabel) { + this.composeLabel = composeLabel; + } + + public ArrayList getAttachments() { + ToolSession session = SessionManager.getCurrentToolSession(); + if (session.getAttribute(FilePickerHelper.FILE_PICKER_CANCEL) == null + && session + .getAttribute(FilePickerHelper.FILE_PICKER_ATTACHMENTS) != null) { + List refs = (List) session + .getAttribute(FilePickerHelper.FILE_PICKER_ATTACHMENTS); + if (refs != null && refs.size() > 0) { + Reference ref = (Reference) refs.get(0); + + for (int i = 0; i < refs.size(); i++) { + ref = (Reference) refs.get(i); + Attachment thisAttach = messageManager.createAttachment(); + thisAttach.setAttachmentName(ref.getProperties() + .getProperty( + ref.getProperties() + .getNamePropDisplayName())); + thisAttach.setAttachmentSize(ref.getProperties() + .getProperty( + ref.getProperties() + .getNamePropContentLength())); + thisAttach.setAttachmentType(ref.getProperties() + .getProperty( + ref.getProperties() + .getNamePropContentType())); + thisAttach.setAttachmentId(ref.getId()); + thisAttach.setAttachmentUrl(ref.getUrl()); + + attachments.add(thisAttach); + } + } + } + session.removeAttribute(FilePickerHelper.FILE_PICKER_ATTACHMENTS); + session.removeAttribute(FilePickerHelper.FILE_PICKER_CANCEL); + + return attachments; + } + + public void setAttachments(ArrayList attachments) { + this.attachments = attachments; + } + + public String processDeleteAttach() { + LOG.debug("processDeleteAttach()"); + + ExternalContext context = FacesContext.getCurrentInstance() + .getExternalContext(); + String attachId = null; + + Map paramMap = context.getRequestParameterMap(); + Iterator itr = paramMap.keySet().iterator(); + while (itr.hasNext()) { + Object key = itr.next(); + if (key instanceof String) { + String name = (String) key; + int pos = name.lastIndexOf("dfmsg_current_attach"); + + if (pos >= 0 + && name.length() == pos + + "dfmsg_current_attach".length()) { + attachId = (String) paramMap.get(key); + break; + } + } + } + + if ((attachId != null) && (!attachId.equals(""))) { + for (int i = 0; i < attachments.size(); i++) { + if (attachId.equalsIgnoreCase(((Attachment) attachments.get(i)) + .getAttachmentId())) { + attachments.remove(i); + break; + } + } + } + + return null; + } + + public String processDfMsgCancel() { + this.composeBody = null; + this.composeLabel = null; + this.composeTitle = null; + + this.attachments.clear(); + + return ALL_MESSAGES; + } + + public String processDfMsgPost() { + Message dMsg = constructMessage(); + + forumManager.saveMessage(dMsg); + setSelectedForumForCurrentTopic((DiscussionTopic) forumManager + .getTopicByIdWithMessages(selectedTopic.getTopic().getId())); + selectedTopic.setTopic((DiscussionTopic) forumManager + .getTopicByIdWithMessages(selectedTopic.getTopic().getId())); + selectedTopic.getTopic().setBaseForum(selectedForum.getForum()); + //selectedTopic.addMessage(new DiscussionMessageBean(dMsg, messageManager)); + selectedTopic.insertMessage(new DiscussionMessageBean(dMsg, + messageManager)); + + selectedTopic.getTopic().addMessage(dMsg); + forumManager.saveTopic(selectedTopic.getTopic()); + + this.composeBody = null; + this.composeLabel = null; + this.composeTitle = null; + + this.attachments.clear(); + + return ALL_MESSAGES; + } + + public String processDfMsgSaveDraft() { + Message dMsg = constructMessage(); + dMsg.setDraft(Boolean.TRUE); + + forumManager.saveMessage(dMsg); + setSelectedForumForCurrentTopic((DiscussionTopic) forumManager + .getTopicByIdWithMessages(selectedTopic.getTopic().getId())); + selectedTopic.setTopic((DiscussionTopic) forumManager + .getTopicByIdWithMessages(selectedTopic.getTopic().getId())); + selectedTopic.getTopic().setBaseForum(selectedForum.getForum()); + //selectedTopic.addMessage(new DiscussionMessageBean(dMsg, messageManager)); + selectedTopic.insertMessage(new DiscussionMessageBean(dMsg, + messageManager)); + selectedTopic.getTopic().addMessage(dMsg); + forumManager.saveTopic(selectedTopic.getTopic()); + + this.composeBody = null; + this.composeLabel = null; + this.composeTitle = null; + + this.attachments.clear(); + + return ALL_MESSAGES; + } + + public Message constructMessage() { + Message aMsg; + + aMsg = messageManager.createDiscussionMessage(); + + if (aMsg != null) { + aMsg.setTitle(getComposeTitle()); + aMsg.setBody(getComposeBody()); + aMsg.setAuthor(getUserId()); + aMsg.setDraft(Boolean.FALSE); + aMsg.setApproved(Boolean.TRUE); + aMsg.setTopic(selectedTopic.getTopic()); + } + for (int i = 0; i < attachments.size(); i++) { + aMsg.addAttachment((Attachment) attachments.get(i)); + } + attachments.clear(); + // oldAttachments.clear(); + + return aMsg; + } + + public String processDfComposeToggle() { + String redirectTo = getExternalParameterByKey(REDIRECT_PROCESS_ACTION); + String expand = getExternalParameterByKey("composeExpand"); + + if (redirectTo == null) { + return MAIN; + } + if (redirectTo.equals("dfCompose")) { + if ((expand != null) && (expand.equalsIgnoreCase("true"))) { + selectedTopic.setReadFullDesciption(true); + } else { + selectedTopic.setReadFullDesciption(false); + } + return MESSAGE_COMPOSE; + } + if (redirectTo.equals("dfViewMessage")) { + if ((expand != null) && (expand.equalsIgnoreCase("true"))) { + selectedTopic.setReadFullDesciption(true); + } else { + selectedTopic.setReadFullDesciption(false); + } + return MESSAGE_VIEW; + } + if (redirectTo.equals("dfTopicReply")) { + if ((expand != null) && (expand.equalsIgnoreCase("true"))) { + selectedTopic.setReadFullDesciption(true); + } else { + selectedTopic.setReadFullDesciption(false); + } + return "dfTopicReply"; + } + + return MAIN; + } + + public String getUserId() { + return SessionManager.getCurrentSessionUserId(); + } + + public boolean getFullAccess() { + return forumManager.isInstructor(); + } + + public String processDfMsgReplyMsg() { + this.composeTitle = "Re: " + selectedMessage.getMessage().getTitle() + + " "; + + return "dfMessageReply"; + } + + public String processDfMsgReplyTp() { + return "dfTopicReply"; + } + + public String processDfMsgGrd() { + selectedAssign = "Default_0"; + gradebookScore = ""; + gradeComment = ""; + + try { + GradebookService gradebookService = (org.sakaiproject.service.gradebook.shared.GradebookService) ComponentManager + .get("org.sakaiproject.service.gradebook.GradebookService"); + if (selectedMessage.getMessage().getGradeAssignmentName() != null + && selectedMessage.getMessage().getGradeAssignmentName() + .trim().length() > 0) { + if ((gradebookService.getAssignmentScore(ToolManager + .getCurrentPlacement().getContext(), selectedMessage + .getMessage().getGradeAssignmentName(), + UserDirectoryService.getUser( + selectedMessage.getMessage().getAuthor()) + .getId())) != null) { + gradePoint = (gradebookService.getAssignmentScore( + ToolManager.getCurrentPlacement().getContext(), + selectedMessage.getMessage() + .getGradeAssignmentName(), + UserDirectoryService.getUser( + selectedMessage.getMessage().getAuthor()) + .getId())).toString(); + gradePoint = new Double(gradePoint).toString(); + gradeComment = selectedMessage.getMessage() + .getGradeComment(); + String thisGradeAssign = selectedMessage.getMessage() + .getGradeAssignmentName(); + setSelectedAssignForMessage(thisGradeAssign); + } + } else if (selectedTopic.getTopic().getDefaultAssignName() != null + && selectedTopic.getTopic().getDefaultAssignName().trim() + .length() > 0) { + if ((gradebookService.getAssignmentScore(ToolManager + .getCurrentPlacement().getContext(), selectedTopic + .getTopic().getDefaultAssignName(), + UserDirectoryService.getUser( + selectedMessage.getMessage().getAuthor()) + .getId())) != null) { + gradePoint = (gradebookService.getAssignmentScore( + ToolManager.getCurrentPlacement().getContext(), + selectedTopic.getTopic().getDefaultAssignName(), + UserDirectoryService.getUser( + selectedMessage.getMessage().getAuthor()) + .getId())).toString(); + gradePoint = new Double(gradePoint).toString(); + String thisGradeAssign = selectedTopic.getTopic() + .getDefaultAssignName(); + setSelectedAssignForMessage(thisGradeAssign); + } else { + gradePoint = ""; + String thisGradeAssign = selectedTopic.getTopic() + .getDefaultAssignName(); + setSelectedAssignForMessage(thisGradeAssign); + } + } else if (selectedForum.getForum().getDefaultAssignName() != null + && selectedForum.getForum().getDefaultAssignName().trim() + .length() > 0) { + if ((gradebookService.getAssignmentScore(ToolManager + .getCurrentPlacement().getContext(), selectedForum + .getForum().getDefaultAssignName(), + UserDirectoryService.getUser( + selectedMessage.getMessage().getAuthor()) + .getId())) != null) { + gradePoint = (gradebookService.getAssignmentScore( + ToolManager.getCurrentPlacement().getContext(), + selectedForum.getForum().getDefaultAssignName(), + UserDirectoryService.getUser( + selectedMessage.getMessage().getAuthor()) + .getId())).toString(); + gradePoint = new Double(gradePoint).toString(); + String thisGradeAssign = selectedForum.getForum() + .getDefaultAssignName(); + setSelectedAssignForMessage(thisGradeAssign); + } else { + gradePoint = ""; + String thisGradeAssign = selectedTopic.getTopic() + .getDefaultAssignName(); + setSelectedAssignForMessage(thisGradeAssign); + } + } + } catch (Exception e) { + LOG.error("processDfMsgGrd in DiscussionFOrumTool - " + e); + e.printStackTrace(); + return null; + } + + return "dfMsgGrade"; + } + + public String processDfMsgRvs() { + attachments.clear(); + + composeBody = selectedMessage.getMessage().getBody(); + composeLabel = selectedMessage.getMessage().getLabel(); + composeTitle = selectedMessage.getMessage().getTitle(); + List attachList = selectedMessage.getMessage().getAttachments(); + if (attachList != null) { + for (int i = 0; i < attachList.size(); i++) { + attachments.add((Attachment) attachList.get(i)); + } + } + + return "dfMsgRevise"; + } + + public String processDfMsgMove() { + List childMsgs = new ArrayList(); + messageManager.getChildMsgs(selectedMessage.getMessage().getId(), + childMsgs); + // selectedMessage.getMessage().setTopic(selectedTopic.getTopic()); + + return null; + } + + public String processDfMsgDeleteConfirm() { + deleteMsg = true; + return null; + } + + public String processDfReplyMsgPost() { + List tempList = forumManager.getMessagesByTopicId(selectedTopic + .getTopic().getId()); + if (tempList != null) { + boolean existed = false; + for (int i = 0; i < tempList.size(); i++) { + Message tempMsg = (Message) tempList.get(i); + if (tempMsg.getId() + .equals(selectedMessage.getMessage().getId())) { + existed = true; + break; + } + } + if (!existed) { + this.errorSynch = true; + return null; + } + } else { + this.errorSynch = true; + return null; + } + + Message dMsg = constructMessage(); + + dMsg.setInReplyTo(selectedMessage.getMessage()); + forumManager.saveMessage(dMsg); + setSelectedForumForCurrentTopic((DiscussionTopic) forumManager + .getTopicByIdWithMessages(selectedTopic.getTopic().getId())); + selectedTopic.setTopic((DiscussionTopic) forumManager + .getTopicByIdWithMessages(selectedTopic.getTopic().getId())); + selectedTopic.getTopic().setBaseForum(selectedForum.getForum()); + //selectedTopic.addMessage(new DiscussionMessageBean(dMsg, messageManager)); + selectedTopic.insertMessage(new DiscussionMessageBean(dMsg, + messageManager)); + selectedTopic.getTopic().addMessage(dMsg); + forumManager.saveTopic(selectedTopic.getTopic()); + + this.composeBody = null; + this.composeLabel = null; + this.composeTitle = null; + + this.attachments.clear(); + + return ALL_MESSAGES; + } + + public String processDfReplyMsgSaveDraft() { + List tempList = forumManager.getMessagesByTopicId(selectedTopic + .getTopic().getId()); + if (tempList != null) { + boolean existed = false; + for (int i = 0; i < tempList.size(); i++) { + Message tempMsg = (Message) tempList.get(i); + if (tempMsg.getId() + .equals(selectedMessage.getMessage().getId())) { + existed = true; + break; + } + } + if (!existed) { + this.errorSynch = true; + return null; + } + } else { + this.errorSynch = true; + return null; + } + + Message dMsg = constructMessage(); + dMsg.setDraft(Boolean.TRUE); + dMsg.setInReplyTo(selectedMessage.getMessage()); + forumManager.saveMessage(dMsg); + setSelectedForumForCurrentTopic((DiscussionTopic) forumManager + .getTopicByIdWithMessages(selectedTopic.getTopic().getId())); + selectedTopic.setTopic((DiscussionTopic) forumManager + .getTopicByIdWithMessages(selectedTopic.getTopic().getId())); + selectedTopic.getTopic().setBaseForum(selectedForum.getForum()); + //selectedTopic.addMessage(new DiscussionMessageBean(dMsg, messageManager)); + selectedTopic.insertMessage(new DiscussionMessageBean(dMsg, + messageManager)); + selectedTopic.getTopic().addMessage(dMsg); + forumManager.saveTopic(selectedTopic.getTopic()); + + this.composeBody = null; + this.composeLabel = null; + this.composeTitle = null; + + this.attachments.clear(); + + return ALL_MESSAGES; + } + + public String processDeleteAttachRevise() { + ExternalContext context = FacesContext.getCurrentInstance() + .getExternalContext(); + String attachId = null; + + Map paramMap = context.getRequestParameterMap(); + Iterator itr = paramMap.keySet().iterator(); + while (itr.hasNext()) { + Object key = itr.next(); + if (key instanceof String) { + String name = (String) key; + int pos = name.lastIndexOf("dfmsg_current_attach"); + + if (pos >= 0 + && name.length() == pos + + "dfmsg_current_attach".length()) { + attachId = (String) paramMap.get(key); + break; + } + } + } + + if ((attachId != null) && (!attachId.equals(""))) { + for (int i = 0; i < attachments.size(); i++) { + if (attachId.equalsIgnoreCase(((Attachment) attachments.get(i)) + .getAttachmentId())) { + prepareRemoveAttach.add((Attachment) attachments.get(i)); + attachments.remove(i); + break; + } + } + } + + return null; + } + + public String processDfMsgRevisedPost() { + Message dMsg = selectedMessage.getMessage(); + + for (int i = 0; i < prepareRemoveAttach.size(); i++) { + Attachment removeAttach = (Attachment) prepareRemoveAttach.get(i); + dMsg.removeAttachment(removeAttach); + } + + List oldList = dMsg.getAttachments(); + for (int i = 0; i < attachments.size(); i++) { + Attachment thisAttach = (Attachment) attachments.get(i); + boolean existed = false; + for (int j = 0; j < oldList.size(); j++) { + Attachment existedAttach = (Attachment) oldList.get(j); + if (existedAttach.getAttachmentId().equals( + thisAttach.getAttachmentId())) { + existed = true; + break; + } + } + if (!existed) { + dMsg.addAttachment(thisAttach); + } + } + String currentBody = getComposeBody(); + String revisedInfo = "Last Revised By " + this.getUserId() + " on "; + Date now = new Date(); + revisedInfo += now.toString() + "
"; + + /* if(currentBody != null && currentBody.length()>0 && currentBody.startsWith("Last Revised By ")) + { + if(currentBody.lastIndexOf("
") > 0) + { + currentBody = currentBody.substring(currentBody.lastIndexOf("
") + 7); + } + }*/ + + revisedInfo = revisedInfo.concat(currentBody); + + dMsg.setTitle(getComposeTitle()); + dMsg.setBody(revisedInfo); + dMsg.setDraft(Boolean.FALSE); + dMsg.setModified(new Date()); + dMsg.setModifiedBy(getUserId()); + // dMsg.setApproved(Boolean.TRUE); + + setSelectedForumForCurrentTopic((DiscussionTopic) forumManager + .getTopicByIdWithMessages(selectedTopic.getTopic().getId())); + selectedTopic.setTopic((DiscussionTopic) forumManager + .getTopicByIdWithMessages(selectedTopic.getTopic().getId())); + selectedTopic.getTopic().setBaseForum(selectedForum.getForum()); + dMsg.getTopic().setBaseForum(selectedTopic.getTopic().getBaseForum()); + forumManager.saveMessage(dMsg); + + List messageList = selectedTopic.getMessages(); + for (int i = 0; i < messageList.size(); i++) { + DiscussionMessageBean dmb = (DiscussionMessageBean) messageList + .get(i); + if (dmb.getMessage().getId().equals(dMsg.getId())) { + selectedTopic.getMessages().set(i, + new DiscussionMessageBean(dMsg, messageManager)); + } + } + + try { + DiscussionTopic topic = null; + try { + topic = forumManager.getTopicById(selectedTopic.getTopic() + .getId()); + } catch (NumberFormatException e) { + LOG.error(e.getMessage(), e); + } + setSelectedForumForCurrentTopic(topic); + selectedTopic = getDecoratedTopic(topic); + + } catch (Exception e) { + LOG.error(e.getMessage(), e); + setErrorMessage(e.getMessage()); + return null; + } + + prepareRemoveAttach.clear(); + composeBody = null; + composeLabel = null; + composeTitle = null; + attachments.clear(); + + return ALL_MESSAGES; + } + + public String processDfMsgSaveRevisedDraft() { + Message dMsg = selectedMessage.getMessage(); + + for (int i = 0; i < prepareRemoveAttach.size(); i++) { + Attachment removeAttach = (Attachment) prepareRemoveAttach.get(i); + dMsg.removeAttachment(removeAttach); + } + + List oldList = dMsg.getAttachments(); + for (int i = 0; i < attachments.size(); i++) { + Attachment thisAttach = (Attachment) attachments.get(i); + boolean existed = false; + for (int j = 0; j < oldList.size(); j++) { + Attachment existedAttach = (Attachment) oldList.get(j); + if (existedAttach.getAttachmentId().equals( + thisAttach.getAttachmentId())) { + existed = true; + break; + } + } + if (!existed) { + dMsg.addAttachment(thisAttach); + } + } + String currentBody = getComposeBody(); + String revisedInfo = "Last Revised By " + this.getUserId() + " on "; + Date now = new Date(); + revisedInfo += now.toString() + "
"; + revisedInfo = revisedInfo.concat(currentBody); + + dMsg.setTitle(getComposeTitle()); + dMsg.setBody(revisedInfo); + dMsg.setDraft(Boolean.TRUE); + dMsg.setModified(new Date()); + dMsg.setModifiedBy(getUserId()); + // dMsg.setApproved(Boolean.TRUE); + + setSelectedForumForCurrentTopic((DiscussionTopic) forumManager + .getTopicByIdWithMessages(selectedTopic.getTopic().getId())); + selectedTopic.setTopic((DiscussionTopic) forumManager + .getTopicByIdWithMessages(selectedTopic.getTopic().getId())); + selectedTopic.getTopic().setBaseForum(selectedForum.getForum()); + dMsg.getTopic().setBaseForum(selectedTopic.getTopic().getBaseForum()); + forumManager.saveMessage(dMsg); + + List messageList = selectedTopic.getMessages(); + for (int i = 0; i < messageList.size(); i++) { + DiscussionMessageBean dmb = (DiscussionMessageBean) messageList + .get(i); + if (dmb.getMessage().getId().equals(dMsg.getId())) { + selectedTopic.getMessages().set(i, + new DiscussionMessageBean(dMsg, messageManager)); + } + } + + try { + DiscussionTopic topic = null; + try { + topic = forumManager.getTopicById(selectedTopic.getTopic() + .getId()); + } catch (NumberFormatException e) { + LOG.error(e.getMessage(), e); + } + setSelectedForumForCurrentTopic(topic); + selectedTopic = getDecoratedTopic(topic); + } catch (Exception e) { + LOG.error(e.getMessage(), e); + setErrorMessage(e.getMessage()); + return null; + } + + prepareRemoveAttach.clear(); + composeBody = null; + composeLabel = null; + composeTitle = null; + attachments.clear(); + + return ALL_MESSAGES; + } + + public String processDfReplyMsgCancel() { + this.errorSynch = false; + this.composeBody = null; + this.composeLabel = null; + this.composeTitle = null; + + this.attachments.clear(); + + return ALL_MESSAGES; + } + + public String processDfReplyTopicPost() { + Message dMsg = constructMessage(); + + forumManager.saveMessage(dMsg); + setSelectedForumForCurrentTopic((DiscussionTopic) forumManager + .getTopicByIdWithMessages(selectedTopic.getTopic().getId())); + selectedTopic.setTopic((DiscussionTopic) forumManager + .getTopicByIdWithMessages(selectedTopic.getTopic().getId())); + selectedTopic.getTopic().setBaseForum(selectedForum.getForum()); + //selectedTopic.addMessage(new DiscussionMessageBean(dMsg, messageManager)); + selectedTopic.insertMessage(new DiscussionMessageBean(dMsg, + messageManager)); + selectedTopic.getTopic().addMessage(dMsg); + forumManager.saveTopic(selectedTopic.getTopic()); + + this.composeBody = null; + this.composeLabel = null; + this.composeTitle = null; + + this.attachments.clear(); + + return ALL_MESSAGES; + } + + public String processDfReplyTopicSaveDraft() { + Message dMsg = constructMessage(); + dMsg.setDraft(Boolean.TRUE); + + forumManager.saveMessage(dMsg); + setSelectedForumForCurrentTopic((DiscussionTopic) forumManager + .getTopicByIdWithMessages(selectedTopic.getTopic().getId())); + selectedTopic.setTopic((DiscussionTopic) forumManager + .getTopicByIdWithMessages(selectedTopic.getTopic().getId())); + selectedTopic.getTopic().setBaseForum(selectedForum.getForum()); + //selectedTopic.addMessage(new DiscussionMessageBean(dMsg, messageManager)); + selectedTopic.insertMessage(new DiscussionMessageBean(dMsg, + messageManager)); + selectedTopic.getTopic().addMessage(dMsg); + forumManager.saveTopic(selectedTopic.getTopic()); + + this.composeBody = null; + this.composeLabel = null; + this.composeTitle = null; + + this.attachments.clear(); + + return ALL_MESSAGES; + } + + public String processDfReplyTopicCancel() { + this.composeBody = null; + this.composeLabel = null; + this.composeTitle = null; + + this.attachments.clear(); + + return ALL_MESSAGES; + } + + public boolean getDeleteMsg() { + return deleteMsg; + } + + public String processDfMsgDeleteConfirmYes() { + List delList = new ArrayList(); + messageManager.getChildMsgs(selectedMessage.getMessage().getId(), + delList); + + if (delList.size() > 0) { + if (!selectedTopic.getIsDeleteAny()) { + errorSynch = true; + return null; + } + } + + selectedTopic.removeMessage(selectedMessage); + Topic tempTopic = forumManager.getTopicByIdWithMessages(selectedTopic + .getTopic().getId()); + tempTopic.removeMessage(selectedMessage.getMessage()); + // selectedTopic.getTopic().removeMessage(selectedMessage.getMessage()); + for (int i = 0; i < delList.size(); i++) { + selectedTopic.removeMessage(new DiscussionMessageBean( + (Message) delList.get(i), messageManager)); + // tempTopic.removeMessage((Message) delList.get(i)); + // selectedTopic.getTopic().removeMessage((Message) delList.get(i)); + } + + messageManager.deleteMsgWithChild(selectedMessage.getMessage().getId()); + + try { + DiscussionTopic topic = null; + try { + topic = forumManager.getTopicById(selectedTopic.getTopic() + .getId()); + } catch (NumberFormatException e) { + LOG.error(e.getMessage(), e); + } + setSelectedForumForCurrentTopic(topic); + selectedTopic = getDecoratedTopic(topic); + } catch (Exception e) { + LOG.error(e.getMessage(), e); + setErrorMessage(e.getMessage()); + this.deleteMsg = false; + return "main"; + } + + this.deleteMsg = false; + + return ALL_MESSAGES; + } + + public String processDfMsgDeleteCancel() { + this.deleteMsg = false; + this.errorSynch = false; + + return null; + } + + public void setNewForumBeanAssign() { + selectedForum.setGradeAssign("Default_0"); + } + + public void setNewTopicBeanAssign() { + if (selectedForum != null && selectedForum.getGradeAssign() != null + && selectedForum.getForum() != null) { + selectedTopic.setGradeAssign(selectedForum.getGradeAssign()); + selectedTopic.getTopic().setDefaultAssignName( + selectedForum.getForum().getDefaultAssignName()); + } + } + + public void setNewTopicBeanAssign(DiscussionForumBean dfb, + DiscussionTopicBean dtb) { + if (dfb != null && dfb.getGradeAssign() != null + && dfb.getForum() != null) { + dtb.setGradeAssign(dfb.getGradeAssign()); + dtb.getTopic().setDefaultAssignName( + dfb.getForum().getDefaultAssignName()); + } + } + + public void setForumBeanAssign() { + if(assignments != null) { - Message currentChild = (Message)childList.get(j); - for(int k=0; k= 0) - return true; - else - return false; - } - catch (NumberFormatException e) - { - e.printStackTrace(); - return false; - } - } - - public boolean isFewerDigit(String validateString) - { - String stringValue = new Double(validateString).toString(); - if(stringValue.lastIndexOf(".") >= 0) - { - String subString = stringValue.substring(stringValue.lastIndexOf(".")); - if(subString != null && subString.length() > 3) - return false; - } - - return true; - } - - private boolean validateGradeInput() - { - if(!isNumber(gradePoint)) - { - FacesContext currentContext = FacesContext.getCurrentInstance(); - String uiComponentId = "DF-1:dfMsgGradeGradePoint"; - FacesMessage validateMessage = new FacesMessage("Please input number greater than 0."); - validateMessage.setSeverity(FacesMessage.SEVERITY_ERROR); - currentContext.addMessage(uiComponentId, validateMessage); - - return false; - } - else if(!isFewerDigit(gradePoint)) - { - FacesContext currentContext = FacesContext.getCurrentInstance(); - String uiComponentId = "DF-1:dfMsgGradeGradePoint"; - FacesMessage validateMessage = new FacesMessage("Please input number with 2 or fewer digits after decimal point."); - validateMessage.setSeverity(FacesMessage.SEVERITY_ERROR); - currentContext.addMessage(uiComponentId, validateMessage); - - return false; - } - - return true; - } - - public String processDfGradeSubmit() - { - if(selectedAssign == null || selectedAssign.trim().length()==0 || selectedAssign.equalsIgnoreCase("Default_0")) - { - noAssignWarn = true; - return null; - } - else - noAssignWarn = false; - if(gradePoint == null || gradePoint.trim().length()==0) - { - noGradeWarn = true; - return null; - } - else - noGradeWarn = false; - - if(!validateGradeInput()) - return null; - - try - { - if(selectedAssign != null && selectedAssign.trim().length()>0) - { - if(!selectedAssign.equalsIgnoreCase("Default_0")) - { - if(gradePoint != null && gradePoint.trim().length()>0) - { - GradebookService gradebookService = (org.sakaiproject.service.gradebook.shared.GradebookService) - ComponentManager.get("org.sakaiproject.service.gradebook.GradebookService"); - String selectedAssignName = ((SelectItem)assignments.get((new Integer(selectedAssign)).intValue())).getLabel(); - String tempName = UserDirectoryService.getUser(selectedMessage.getMessage().getAuthor()).getId(); - gradebookService.setAssignmentScore(ToolManager.getCurrentPlacement().getContext(), - selectedAssignName, - UserDirectoryService.getUser(selectedMessage.getMessage().getAuthor()).getId(), - new Double(gradePoint), - ""); - setGradeNoticeMessage(); - selectedMessage.getMessage().setGradeAssignmentName(selectedAssignName); - selectedMessage.getMessage().setGradeComment(gradeComment); - forumManager.saveMessage(selectedMessage.getMessage()); - - if(gradeNotify) - { - PrivateMessageManager pvtMsgManager = (PrivateMessageManager) ComponentManager.get( - "org.sakaiproject.api.app.messageforums.ui.PrivateMessageManager"); - User sendTo = UserDirectoryService.getUser(selectedMessage.getMessage().getAuthor()); - Set sendToSet = new HashSet(); - sendToSet.add(sendTo); - - PrivateMessage pvtMsg = messageManager.createPrivateMessage() ; - - pvtMsg.setTitle(selectedMessage.getMessage().getTitle()); - String msgBody = ""; - for(int i=0; i "); - break; - } - } - msgBody = msgBody.concat("GRADE: " + gradePoint + "
"); - msgBody = msgBody.concat("COMMENTS: " + gradeComment + "

"); - msgBody = msgBody.concat(selectedMessage.getMessage().getBody() + "
"); - pvtMsg.setBody(msgBody); - pvtMsg.setAuthor(UserDirectoryService.getCurrentUser().getId()); - pvtMsg.setApproved(Boolean.TRUE); - pvtMsg.setModified(new Date()); - pvtMsg.setModifiedBy(UserDirectoryService.getCurrentUser().getId()); - - pvtMsgManager.sendPrivateMessage(pvtMsg, sendToSet, false); - } - } - } - } - } - catch(Exception e) - { - LOG.error("DiscussionForumTool - processDfGradeSubmit:" + e); - e.printStackTrace(); - } - - gradeNotify = false; - selectedAssign = "Default_0"; - gradePoint = ""; - gradebookScore = ""; - gradeComment = ""; - noAssignWarn = false; - noGradeWarn = false; - return MESSAGE_VIEW; - } - - public String processCheckAll() - { - for(int i=0; i= 0 + && name.length() == pos + + "dfmsg_current_attach".length()) { + attachId = (String) paramMap.get(key); + break; + } + } + } + + if ((attachId != null) && (!attachId.equals(""))) { + for (int i = 0; i < attachments.size(); i++) { + if (attachId.equalsIgnoreCase(((Attachment) attachments.get(i)) + .getAttachmentId())) { + prepareRemoveAttach.add((Attachment) attachments.get(i)); + attachments.remove(i); + break; + } + } + } + + return null; + } + + public boolean getThreaded() { + return threaded; + } + + public void setThreaded(boolean threaded) { + this.threaded = threaded; + } + + public String getExpanded() { + return expanded; + } + + public void setExpanded(String expanded) { + this.expanded = expanded; + } + + public void setGradeNotify(boolean gradeNotify) { + this.gradeNotify = gradeNotify; + } + + public boolean getGradeNotify() { + return gradeNotify; + } + + public String getSelectedAssign() { + return selectedAssign; + } + + public void setSelectedAssign(String selectedAssign) { + this.selectedAssign = selectedAssign; + } + + public void setGradePoint(String gradePoint) { + this.gradePoint = gradePoint; + } + + public String getGradePoint() { + return gradePoint; + } + + public String getGradebookScore() { + return gradebookScore; + } + + public void setGradebookScore(String gradebookScore) { + this.gradebookScore = gradebookScore; + } + + public List getAssignments() { + return assignments; + } + + public void setAssignments(List assignments) { + this.assignments = assignments; + } + + public void setGradeComment(String gradeComment) { + this.gradeComment = gradeComment; + } + + public String getGradeComment() { + return gradeComment; + } + + public boolean getNoGradeWarn() { + return noGradeWarn; + } + + public void setNoGradeWarn(boolean noGradeWarn) { + this.noGradeWarn = noGradeWarn; + } + + public boolean getNoAssignWarn() { + return noAssignWarn; + } + + public void setNoAssignWarn(boolean noAssignWarn) { + this.noAssignWarn = noAssignWarn; + } + + public void rearrageTopicMsgsThreaded() { + + List msgsList = selectedTopic.getMessages(); + List orderedList = new ArrayList(); + + if (msgsList != null) { + for (int i = 0; i < msgsList.size(); i++) { + DiscussionMessageBean dmb = (DiscussionMessageBean) msgsList + .get(i); + if (dmb.getMessage().getInReplyTo() == null) { + dmb.setDepth(0); + orderedList.add(dmb); + //for performance speed - operate with existing selectedTopic msgs instead of getting from manager through DB again + //recursiveGetThreadedMsgs(msgsList, orderedList, dmb); + recursiveGetThreadedMsgsFromList(msgsList, orderedList, dmb); + } + } + } + selectedTopic.setMessages(orderedList); + + } + + public void recursiveGetThreadedMsgs(List msgsList, List returnList, + DiscussionMessageBean currentMsg) { + List childList = messageManager.getFirstLevelChildMsgs(currentMsg + .getMessage().getId()); + + for (int j = 0; j < childList.size(); j++) { + Message currentChild = (Message) childList.get(j); + for (int k = 0; k < msgsList.size(); k++) { + Message existedMsg = ((DiscussionMessageBean) msgsList.get(k)) + .getMessage(); + if (currentChild.getId().equals(existedMsg.getId())) { + DiscussionMessageBean dmb = new DiscussionMessageBean( + currentChild, messageManager); + /* dmb.setDepth(currentMsg.getDepth() + 1); + returnList.add(dmb);*/ + ((DiscussionMessageBean) msgsList.get(k)) + .setDepth(currentMsg.getDepth() + 1); + returnList.add(((DiscussionMessageBean) msgsList.get(k))); + recursiveGetThreadedMsgs(msgsList, returnList, + ((DiscussionMessageBean) msgsList.get(k))); + break; + } + } + } + + } + + private void recursiveGetThreadedMsgsFromList(List msgsList, + List returnList, DiscussionMessageBean currentMsg) { + for (int i = 0; i < msgsList.size(); i++) { + DiscussionMessageBean thisMsgBean = (DiscussionMessageBean) msgsList + .get(i); + Message thisMsg = thisMsgBean.getMessage(); + if (thisMsg.getInReplyTo() != null + && thisMsg.getInReplyTo().getId().equals( + currentMsg.getMessage().getId())) { + /* + * DiscussionMessageBean dmb = new DiscussionMessageBean(thisMsg, messageManager); + * dmb.setDepth(currentMsg.getDepth() + 1); returnList.add(dmb); + * this.recursiveGetThreadedMsgsFromList(msgsList, returnList, dmb); + */ + thisMsgBean.setDepth(currentMsg.getDepth() + 1); + returnList.add(thisMsgBean); + this.recursiveGetThreadedMsgsFromList(msgsList, returnList, + thisMsgBean); + } + } + } + + public String processDfGradeCancel() { + + gradeNotify = false; + selectedAssign = "Default_0"; + gradePoint = ""; + gradebookScore = ""; + gradeComment = ""; + noGradeWarn = false; + noAssignWarn = false; + return MESSAGE_VIEW; + } + + public String processGradeAssignChange(ValueChangeEvent vce) { + String changeAssign = (String) vce.getNewValue(); + if (changeAssign == null) { + return null; + } else { + try { + selectedAssign = changeAssign; + + GradebookService gradebookService = (org.sakaiproject.service.gradebook.shared.GradebookService) ComponentManager + .get("org.sakaiproject.service.gradebook.GradebookService"); + + if ((!selectedAssign.equalsIgnoreCase("Default_0")) + && ((gradebookService.getAssignmentScore(ToolManager + .getCurrentPlacement().getContext(), + ((SelectItem) assignments.get((new Integer( + selectedAssign)).intValue())) + .getLabel(), UserDirectoryService + .getUser( + selectedMessage.getMessage() + .getAuthor()).getId())) != null)) { + gradebookScore = (gradebookService.getAssignmentScore( + ToolManager.getCurrentPlacement().getContext(), + ((SelectItem) assignments.get((new Integer( + selectedAssign)).intValue())).getLabel(), + UserDirectoryService.getUser( + selectedMessage.getMessage().getAuthor()) + .getId())).toString(); + } else { + gradebookScore = ""; + } + + return "dfMsgGrade"; + } catch (Exception e) { + LOG.error("processGradeAssignChange in DiscussionFOrumTool - " + + e); + e.printStackTrace(); + return null; + } + } + } + + public boolean isNumber(String validateString) { + try { + double d = Double.valueOf(validateString).doubleValue(); + if (d >= 0) + return true; + else + return false; + } catch (NumberFormatException e) { + e.printStackTrace(); + return false; + } + } + + public boolean isFewerDigit(String validateString) { + String stringValue = new Double(validateString).toString(); + if (stringValue.lastIndexOf(".") >= 0) { + String subString = stringValue.substring(stringValue + .lastIndexOf(".")); + if (subString != null && subString.length() > 3) + return false; + } + + return true; + } + + private boolean validateGradeInput() { + if (!isNumber(gradePoint)) { + FacesContext currentContext = FacesContext.getCurrentInstance(); + String uiComponentId = "DF-1:dfMsgGradeGradePoint"; + FacesMessage validateMessage = new FacesMessage( + "Please input number greater than 0."); + validateMessage.setSeverity(FacesMessage.SEVERITY_ERROR); + currentContext.addMessage(uiComponentId, validateMessage); + + return false; + } else if (!isFewerDigit(gradePoint)) { + FacesContext currentContext = FacesContext.getCurrentInstance(); + String uiComponentId = "DF-1:dfMsgGradeGradePoint"; + FacesMessage validateMessage = new FacesMessage( + "Please input number with 2 or fewer digits after decimal point."); + validateMessage.setSeverity(FacesMessage.SEVERITY_ERROR); + currentContext.addMessage(uiComponentId, validateMessage); + + return false; + } + + return true; + } + + public String processDfGradeSubmit() { + if (selectedAssign == null || selectedAssign.trim().length() == 0 + || selectedAssign.equalsIgnoreCase("Default_0")) { + noAssignWarn = true; + return null; + } else + noAssignWarn = false; + if (gradePoint == null || gradePoint.trim().length() == 0) { + noGradeWarn = true; + return null; + } else + noGradeWarn = false; + + if (!validateGradeInput()) + return null; + + try { + if (selectedAssign != null && selectedAssign.trim().length() > 0) { + if (!selectedAssign.equalsIgnoreCase("Default_0")) { + if (gradePoint != null && gradePoint.trim().length() > 0) { + GradebookService gradebookService = (org.sakaiproject.service.gradebook.shared.GradebookService) ComponentManager + .get("org.sakaiproject.service.gradebook.GradebookService"); + String selectedAssignName = ((SelectItem) assignments + .get((new Integer(selectedAssign)).intValue())) + .getLabel(); + String tempName = UserDirectoryService.getUser( + selectedMessage.getMessage().getAuthor()) + .getId(); + gradebookService.setAssignmentScore(ToolManager + .getCurrentPlacement().getContext(), + selectedAssignName, UserDirectoryService + .getUser( + selectedMessage.getMessage() + .getAuthor()).getId(), + new Double(gradePoint), ""); + setGradeNoticeMessage(); + selectedMessage.getMessage().setGradeAssignmentName( + selectedAssignName); + selectedMessage.getMessage().setGradeComment( + gradeComment); + forumManager.saveMessage(selectedMessage.getMessage()); + + if (gradeNotify) { + PrivateMessageManager pvtMsgManager = (PrivateMessageManager) ComponentManager + .get("org.sakaiproject.api.app.messageforums.ui.PrivateMessageManager"); + User sendTo = UserDirectoryService + .getUser(selectedMessage.getMessage() + .getAuthor()); + Set sendToSet = new HashSet(); + sendToSet.add(sendTo); + + PrivateMessage pvtMsg = messageManager + .createPrivateMessage(); + + pvtMsg.setTitle(selectedMessage.getMessage() + .getTitle()); + String msgBody = ""; + for (int i = 0; i < assignments.size(); i++) { + if (selectedAssign + .equalsIgnoreCase((String) ((SelectItem) assignments + .get(i)).getValue())) { + msgBody = msgBody.concat("ASSIGNMENT: " + + ((SelectItem) assignments.get(i)) + .getLabel() + "
"); + break; + } + } + msgBody = msgBody.concat("GRADE: " + gradePoint + + "
"); + msgBody = msgBody.concat("COMMENTS: " + + gradeComment + "

"); + msgBody = msgBody.concat(selectedMessage + .getMessage().getBody() + + "
"); + pvtMsg.setBody(msgBody); + pvtMsg.setAuthor(UserDirectoryService + .getCurrentUser().getId()); + pvtMsg.setApproved(Boolean.TRUE); + pvtMsg.setModified(new Date()); + pvtMsg.setModifiedBy(UserDirectoryService + .getCurrentUser().getId()); + + pvtMsgManager.sendPrivateMessage(pvtMsg, sendToSet, + false); + } + } + } + } + } catch (Exception e) { + LOG.error("DiscussionForumTool - processDfGradeSubmit:" + e); + e.printStackTrace(); + } + + gradeNotify = false; + selectedAssign = "Default_0"; + gradePoint = ""; + gradebookScore = ""; + gradeComment = ""; + noAssignWarn = false; + noGradeWarn = false; + return MESSAGE_VIEW; + } + + public String processCheckAll() { + for (int i = 0; i < selectedTopic.getMessages().size(); i++) { + ((DiscussionMessageBean) selectedTopic.getMessages().get(i)) + .setSelected(true); + } + return null; + } + + private void setMessageBeanPreNextStatus() { + if (selectedTopic != null) { + if (selectedTopic.getMessages() != null) { + List tempMsgs = selectedTopic.getMessages(); + for (int i = 0; i < tempMsgs.size(); i++) { + DiscussionMessageBean dmb = (DiscussionMessageBean) tempMsgs + .get(i); + if (i == 0) { dmb.setHasPre(false); - if(i==(tempMsgs.size()-1)) - { + if (i == (tempMsgs.size() - 1)) { dmb.setHasNext(false); - } - else - { + } else { dmb.setHasNext(true); } - } - else if(i==(tempMsgs.size()-1)) - { + } else if (i == (tempMsgs.size() - 1)) { dmb.setHasPre(true); dmb.setHasNext(false); - } - else - { + } else { dmb.setHasNext(true); dmb.setHasPre(true); } } - } - } - } - - - /** - * @return Returns the selectedMessageView. - */ - public String getSelectedMessageView() - { - return selectedMessageView; - } - - /** - * @param selectedMessageView - * The selectedMessageView to set. - */ - public void setSelectedMessageView(String selectedMessageView) - { - this.selectedMessageView = selectedMessageView; - } - - /** - * @return Returns the displayUnreadOnly. - */ - public boolean getDisplayUnreadOnly() - { - return displayUnreadOnly; - } - - /** - * @param vce - */ - public void processValueChangeForMessageView(ValueChangeEvent vce) - { - if (LOG.isDebugEnabled()) - LOG.debug("processValueChangeForMessageView(ValueChangeEvent " + vce - + ")"); - isDisplaySearchedMessages=false; - searchText=""; - String changeView = (String) vce.getNewValue(); - this.displayUnreadOnly = false; - if (changeView == null) - { - threaded = false; - setErrorMessage("Failed Rending Messages"); - return; - } - if (changeView.equals(ALL_MESSAGES)) - { - threaded = false; - setSelectedMessageView(ALL_MESSAGES); - - DiscussionTopic topic = null; - topic = forumManager.getTopicById(selectedTopic.getTopic().getId()); - setSelectedForumForCurrentTopic(topic); - selectedTopic = getDecoratedTopic(topic); - - return; - } - else - if (changeView.equals(UNREAD_VIEW)) - { - threaded = false; - this.displayUnreadOnly = true; - return; - } - else - if (changeView.equals(THREADED_VIEW)) - { - threaded = true; - expanded = "true"; - return; - } - else - if (changeView.equals("expand")) - { - threaded = true; - expanded = "true"; - return; - } - else - if (changeView.equals("collapse")) - { - threaded = true; - expanded = "false"; - return; - } - else - { - threaded = false; - setErrorMessage("This view is under contruction"); - return; - } - } - - public boolean getErrorSynch() - { - return errorSynch; - } - - public void setErrorSynch(boolean errorSynch) - { - this.errorSynch = errorSynch; - } - - /** - * @return - */ - public String processActionSearch() - { - LOG.debug("processActionSearch()"); - -// //TODO : should be fetched via a query in db -// //Subject, Authored By, Date, -// isDisplaySearchedMessages=true; -// -// if(searchText==null || searchText.trim().length()<1) -// { -// setErrorMessage("Invalid search criteria"); -// return ALL_MESSAGES; -// } -// if(selectedTopic == null) -// { -// setErrorMessage("There is no topic selected for search"); -// return ALL_MESSAGES; -// } -// searchResults=new DiscussionTopicBean(selectedTopic.getTopic(),selectedForum.getForum() ,uiPermissionsManager); -// if(selectedTopic.getMessages()!=null) -// { -// Iterator iter = selectedTopic.getMessages().iterator(); -// -// while (iter.hasNext()) -// { -// DiscussionMessageBean decoMessage = (DiscussionMessageBean) iter.next(); -// if((decoMessage.getMessage()!= null && (decoMessage.getMessage().getTitle().matches(".*"+searchText+".*") || -// decoMessage.getMessage().getCreatedBy().matches(".*"+searchText+".*") || -// decoMessage.getMessage().getCreated().toString().matches(".*"+searchText+".*") ))) -// { -// searchResults.addMessage(decoMessage); -// } -// } -// } - return ALL_MESSAGES; - } - - /** - * @return - */ - public String processActionMarkCheckedAsRead() - { - return markCheckedMessages(true); - } - - /** - * @return - */ - public String processActionMarkCheckedAsUnread() - { - return markCheckedMessages(false); - } - - private String markCheckedMessages(boolean readStatus) - { - if (selectedTopic == null) - { - setErrorMessage("Lost association with current topic"); - return ALL_MESSAGES; - } - List messages = selectedTopic.getMessages(); - if (messages == null || messages.size() < 1) - { - setErrorMessage("No message selected to mark as read. Please select a message"); - return ALL_MESSAGES; - } - Iterator iter = messages.iterator(); - while (iter.hasNext()) - { - DiscussionMessageBean decoMessage = (DiscussionMessageBean) iter.next(); - if (decoMessage.isSelected()) - { - forumManager.markMessageAs(decoMessage.getMessage(), readStatus); - } - } - return displayTopicById(TOPIC_ID); // reconstruct topic again; - } - - - /** - * @return Returns the isDisplaySearchedMessages. - */ - public boolean getIsDisplaySearchedMessages() - { - return isDisplaySearchedMessages; - } - - /** - * @return Returns the searchText. - */ - public String getSearchText() - { - return searchText; - } - - /** - * @param searchText - * The searchText to set. - */ - public void setSearchText(String searchText) - { - this.searchText = searchText; - } - - public List getSiteMembers() - { - return getSiteMembers(true); - } - public List getSiteRoles() - { - return getSiteMembers(false); - } - - public List getSiteMembers(boolean includeGroup) - { - LOG.debug("getSiteMembers()"); - - if(siteMembers!=null && siteMembers.size()>0) - { - return siteMembers; - } - - permissions=new ArrayList(); - - Set membershipItems = null; - - if (PERMISSION_MODE_TEMPLATE.equals(getPermissionMode())){ - membershipItems = forumManager.getDiscussionForumArea().getMembershipItemSet(); - } - else if (PERMISSION_MODE_FORUM.equals(getPermissionMode())){ - membershipItems = selectedForum.getForum().getMembershipItemSet(); - - if (membershipItems == null || membershipItems.size() == 0){ - membershipItems = forumManager.getDiscussionForumArea().getMembershipItemSet(); - } - } - else if (PERMISSION_MODE_TOPIC.equals(getPermissionMode())){ - membershipItems = selectedTopic.getTopic().getMembershipItemSet(); - - if (membershipItems == null || membershipItems.size() == 0){ - //membershipItems = forumManager.getDiscussionForumArea().getMembershipItemSet(); - if (selectedForum != null && selectedForum.getForum() != null){ - membershipItems = selectedForum.getForum().getMembershipItemSet(); - } - } - } - - siteMembers=new ArrayList(); - // get Roles - AuthzGroup realm; - Site currentSite = null; - int i=0; - try - { - realm = AuthzGroupService.getAuthzGroup(getContextSiteId()); - Set roles1 = realm.getRoles(); - if (roles1 != null && roles1.size() > 0) - { - Iterator roleIter = roles1.iterator(); - while (roleIter.hasNext()) - { - Role role = (Role) roleIter.next(); - if (role != null) - { - if(i==0) - { - selectedRole = role.getId(); - i=1; - } - DBMembershipItem item = forumManager.getAreaDBMember(membershipItems, role.getId(), DBMembershipItem.TYPE_ROLE); - siteMembers.add(new SelectItem(role.getId(), role.getId() + "("+item.getPermissionLevelName()+")")); - permissions.add(new PermissionBean(item, permissionLevelManager)); - } - } - } - - if(includeGroup) - { - currentSite = SiteService.getSite(ToolManager.getCurrentPlacement().getContext()); - - Collection groups = currentSite.getGroups(); - for (Iterator groupIterator = groups.iterator(); groupIterator.hasNext();) - { - Group currentGroup = (Group) groupIterator.next(); - DBMembershipItem item = forumManager.getAreaDBMember(membershipItems,currentGroup.getTitle(), DBMembershipItem.TYPE_GROUP); - siteMembers.add(new SelectItem(currentGroup.getTitle(), currentGroup.getTitle() + " ("+item.getPermissionLevel().getName()+")")); - permissions.add(new PermissionBean(item, permissionLevelManager)); - } - } - } - catch (IdUnusedException e) - { - LOG.error(e.getMessage(), e); - } - - return siteMembers; - } - - - /** - * @return siteId - */ - private String getContextSiteId() - { - LOG.debug("getContextSiteId()"); - return ("/site/" + ToolManager.getCurrentPlacement().getContext()); - } - - /** - * @param topic - */ - private void setSelectedForumForCurrentTopic(DiscussionTopic topic) - { - if (selectedForum != null) - { - return; - } - DiscussionForum forum = (DiscussionForum) topic.getBaseForum(); - if (forum == null) - { - - String forumId = getExternalParameterByKey(FORUM_ID); - if (forumId == null || forumId.trim().length() < 1) - { - selectedForum = null; - return; - } - forum = forumManager.getForumById(new Long(forumId)); - if (forum == null) - { - selectedForum = null; - return; - } - } - selectedForum = new DiscussionForumBean(forum, uiPermissionsManager, forumManager); - setForumBeanAssign(); - } - - /** - * @param errorMsg - */ - private void setErrorMessage(String errorMsg) - { - LOG.debug("setErrorMessage(String " + errorMsg + ")"); - FacesContext.getCurrentInstance().addMessage(null, - new FacesMessage("Alert: " + errorMsg)); - } - - private void setGradeNoticeMessage() - { - FacesContext.getCurrentInstance().addMessage(null, - new FacesMessage(" Grade submission successful. ")); - } - - - public void processPost(){ - - } - - public String generatePermissionScript(){ - - PermissionLevel ownerLevel = permissionLevelManager.getDefaultOwnerPermissionLevel(); - PermissionLevel authorLevel = permissionLevelManager.getDefaultAuthorPermissionLevel(); - PermissionLevel noneditingAuthorLevel = permissionLevelManager.getDefaultNoneditingAuthorPermissionLevel(); - PermissionLevel reviewerLevel = permissionLevelManager.getDefaultReviewerPermissionLevel(); - PermissionLevel noneLevel = permissionLevelManager.getDefaultNonePermissionLevel(); - PermissionLevel contributorLevel = permissionLevelManager.getDefaultContributorPermissionLevel(); - - StringBuffer sBuffer = new StringBuffer(); - sBuffer.append(""); - return sBuffer.toString(); - } - - public void setObjectPermissions(Object target){ - Set membershipItemSet = null; - - DiscussionForum forum = null; - Area area = null; - Topic topic = null; - - /** get membership item set */ - if (target instanceof DiscussionForum){ - forum = ((DiscussionForum) target); - membershipItemSet = forum.getMembershipItemSet(); - } - else if (target instanceof Area){ - area = ((Area) target); - membershipItemSet = area.getMembershipItemSet(); - } - else if (target instanceof Topic){ - topic = ((Topic) target); - membershipItemSet = topic.getMembershipItemSet(); - } - - if (membershipItemSet != null){ - membershipItemSet.clear(); - } - else{ - membershipItemSet = new HashSet(); - } - - if(permissions!=null ){ - Iterator iter = permissions.iterator(); - while (iter.hasNext()) - { - PermissionBean permBean = (PermissionBean) iter.next(); - DBMembershipItem membershipItem = permissionLevelManager.createDBMembershipItem(permBean.getItem().getName(), permBean.getSelectedLevel(), DBMembershipItem.TYPE_ROLE); - - - if (PermissionLevelManager.PERMISSION_LEVEL_NAME_CUSTOM.equals(membershipItem.getPermissionLevelName())){ - PermissionsMask mask = new PermissionsMask(); - mask.put(PermissionLevel.NEW_FORUM, new Boolean(permBean.getNewForum())); - mask.put(PermissionLevel.NEW_TOPIC, new Boolean(permBean.getNewTopic())); - mask.put(PermissionLevel.NEW_RESPONSE, new Boolean(permBean.getNewResponse())); - mask.put(PermissionLevel.NEW_RESPONSE_TO_RESPONSE, new Boolean(permBean.getResponseToResponse())); - mask.put(PermissionLevel.MOVE_POSTING, new Boolean(permBean.getMovePosting())); - mask.put(PermissionLevel.CHANGE_SETTINGS,new Boolean(permBean.getChangeSettings())); - mask.put(PermissionLevel.POST_TO_GRADEBOOK, new Boolean(permBean.getPostToGradebook())); - mask.put(PermissionLevel.READ, new Boolean(permBean.getRead())); - mask.put(PermissionLevel.MARK_AS_READ,new Boolean(permBean.getMarkAsRead())); - mask.put(PermissionLevel.MODERATE_POSTINGS, new Boolean(permBean.getModeratePostings())); - mask.put(PermissionLevel.DELETE_OWN, new Boolean(permBean.getDeleteOwn())); - mask.put(PermissionLevel.DELETE_ANY, new Boolean(permBean.getDeleteAny())); - mask.put(PermissionLevel.REVISE_OWN, new Boolean(permBean.getReviseOwn())); - mask.put(PermissionLevel.REVISE_ANY, new Boolean(permBean.getReviseAny())); - - PermissionLevel level = permissionLevelManager.createPermissionLevel(permBean.getSelectedLevel(), typeManager.getCustomLevelType(), mask); - membershipItem.setPermissionLevel(level); - } - - // save DBMembershiptItem here to get an id so we can add to the set - permissionLevelManager.saveDBMembershipItem(membershipItem); - membershipItemSet.add(membershipItem); - } - - if (target instanceof DiscussionForum){ - forum.setMembershipItemSet(membershipItemSet); - //forumManager.saveForum(forum); - } - else if (area != null){ - area.setMembershipItemSet(membershipItemSet); - //areaManager.saveArea(area); - } - else if (topic != null){ - topic.setMembershipItemSet(membershipItemSet); - //forumManager.saveTopic((DiscussionTopic) topic); - } - } - siteMembers = null; - } - - /** - * processActionAddGroupsUsers - * @return navigation String - */ - public String processActionAddGroupsUsers(){ - - totalGroupsUsersList = null; - - ExternalContext exContext = FacesContext.getCurrentInstance().getExternalContext(); - HttpSession session = (HttpSession) exContext.getSession(false); - - String attr = null; - - if (session != null){ - /** get navigation string of previous navigation (set by navigation handler) */ - attr = (String) session.getAttribute("MC_PREVIOUS_NAV"); - } - - /** store caller navigation string in session (used to return from add groups/users) */ - session.setAttribute("MC_ADD_GROUPS_USERS_CALLER", attr); - - return "addGroupsUsers"; - } - - /** - * processAddGroupsUsersSubmit - * @return navigation String - */ - public String processAddGroupsUsersSubmit(){ - - - ExternalContext exContext = FacesContext.getCurrentInstance().getExternalContext(); - HttpSession session = (HttpSession) exContext.getSession(false); - - /** get navigation string of previous navigation (set by navigation handler) */ - return (String) session.getAttribute("MC_ADD_GROUPS_USERS_CALLER"); - } - - /** - * processAddGroupsUsersCancel - * @return navigation String - */ - public String processAddGroupsUsersCancel(){ - - ExternalContext exContext = FacesContext.getCurrentInstance().getExternalContext(); - HttpSession session = (HttpSession) exContext.getSession(false); - - /** get navigation string of previous navigation (set by navigation handler) */ - return (String) session.getAttribute("MC_ADD_GROUPS_USERS_CALLER"); - } - - public List getTotalGroupsUsersList() - { - - /** protect from jsf calling multiple times */ - if (totalGroupsUsersList != null){ - return totalGroupsUsersList; - } - - courseMemberMap = membershipManager.getAllCourseMembers(true, false, false); - - List members = membershipManager.convertMemberMapToList(courseMemberMap); - totalGroupsUsersList = new ArrayList(); - - /** create a list of SelectItem elements */ - for (Iterator i = members.iterator(); i.hasNext();){ - - MembershipItem item = (MembershipItem) i.next(); - totalGroupsUsersList.add( - new SelectItem(item.getId(), item.getName())); - } - - return totalGroupsUsersList; - } - - public void setPermissionLevelManager( - PermissionLevelManager permissionLevelManager) { - this.permissionLevelManager = permissionLevelManager; + } + } } - - public List getPostingOptions() - { - List postingOptions = new ArrayList(); - postingOptions.add(new SelectItem(PermissionBean.NONE,PermissionBean.NONE)); - postingOptions.add(new SelectItem(PermissionBean.OWN,PermissionBean.OWN)); - postingOptions.add(new SelectItem(PermissionBean.ALL,PermissionBean.ALL)); - - return postingOptions; - } - - /** - * @return Returns the levels. - */ - public List getLevels() - { - boolean hasCustom = false; - if (levels == null || levels.size() == 0) - { - levels = new ArrayList(); - List origLevels = permissionLevelManager.getOrderedPermissionLevelNames(); - if (origLevels != null) - { - Iterator iter = origLevels.iterator(); - - while (iter.hasNext()) - { - String level = (String) iter.next(); - levels.add(new SelectItem(level)); - if(level.equals("Custom")) - { - hasCustom =true; - } - } - } - if(!hasCustom) - { - levels.add(new SelectItem("Custom")); - } - } - return levels; - } - - /** - * @param areaManager The areaManager to set. - */ - public void setAreaManager(AreaManager areaManager) - { - this.areaManager = areaManager; - } - - /** - * @return Returns the selectedRole. - */ - public String getSelectedRole() - { - return selectedRole; - } - - /** - * @param selectedRole The selectedRole to set. - */ - public void setSelectedRole(String selectedRole) - { - this.selectedRole = selectedRole; - } - - public boolean getEditMode() { - return editMode; + + /** + * @return Returns the selectedMessageView. + */ + public String getSelectedMessageView() { + return selectedMessageView; + } + + /** + * @param selectedMessageView + * The selectedMessageView to set. + */ + public void setSelectedMessageView(String selectedMessageView) { + this.selectedMessageView = selectedMessageView; + } + + /** + * @return Returns the displayUnreadOnly. + */ + public boolean getDisplayUnreadOnly() { + return displayUnreadOnly; + } + + /** + * @param vce + */ + public void processValueChangeForMessageView(ValueChangeEvent vce) { + if (LOG.isDebugEnabled()) + LOG.debug("processValueChangeForMessageView(ValueChangeEvent " + + vce + ")"); + isDisplaySearchedMessages = false; + searchText = ""; + String changeView = (String) vce.getNewValue(); + this.displayUnreadOnly = false; + if (changeView == null) { + threaded = false; + setErrorMessage("Failed Rending Messages"); + return; } - - public void setEditMode(boolean editMode) { - this.editMode = editMode; + if (changeView.equals(ALL_MESSAGES)) { + threaded = false; + setSelectedMessageView(ALL_MESSAGES); + + DiscussionTopic topic = null; + topic = forumManager.getTopicById(selectedTopic.getTopic().getId()); + setSelectedForumForCurrentTopic(topic); + selectedTopic = getDecoratedTopic(topic); + + return; + } else if (changeView.equals(UNREAD_VIEW)) { + threaded = false; + this.displayUnreadOnly = true; + return; + } else if (changeView.equals(THREADED_VIEW)) { + threaded = true; + expanded = "true"; + return; + } else if (changeView.equals("expand")) { + threaded = true; + expanded = "true"; + return; + } else if (changeView.equals("collapse")) { + threaded = true; + expanded = "false"; + return; + } else { + threaded = false; + setErrorMessage("This view is under contruction"); + return; } - - public String getPermissionMode() { - return permissionMode; + } + + public boolean getErrorSynch() { + return errorSynch; + } + + public void setErrorSynch(boolean errorSynch) { + this.errorSynch = errorSynch; + } + + /** + * @return + */ + public String processActionSearch() { + LOG.debug("processActionSearch()"); + + // //TODO : should be fetched via a query in db + // //Subject, Authored By, Date, + // isDisplaySearchedMessages=true; + // + // if(searchText==null || searchText.trim().length()<1) + // { + // setErrorMessage("Invalid search criteria"); + // return ALL_MESSAGES; + // } + // if(selectedTopic == null) + // { + // setErrorMessage("There is no topic selected for search"); + // return ALL_MESSAGES; + // } + // searchResults=new DiscussionTopicBean(selectedTopic.getTopic(),selectedForum.getForum() ,uiPermissionsManager); + // if(selectedTopic.getMessages()!=null) + // { + // Iterator iter = selectedTopic.getMessages().iterator(); + // + // while (iter.hasNext()) + // { + // DiscussionMessageBean decoMessage = (DiscussionMessageBean) iter.next(); + // if((decoMessage.getMessage()!= null && (decoMessage.getMessage().getTitle().matches(".*"+searchText+".*") || + // decoMessage.getMessage().getCreatedBy().matches(".*"+searchText+".*") || + // decoMessage.getMessage().getCreated().toString().matches(".*"+searchText+".*") ))) + // { + // searchResults.addMessage(decoMessage); + // } + // } + // } + return ALL_MESSAGES; + } + + /** + * @return + */ + public String processActionMarkCheckedAsRead() { + return markCheckedMessages(true); + } + + /** + * @return + */ + public String processActionMarkCheckedAsUnread() { + return markCheckedMessages(false); + } + + private String markCheckedMessages(boolean readStatus) { + if (selectedTopic == null) { + setErrorMessage("Lost association with current topic"); + return ALL_MESSAGES; } - - public void setPermissionMode(String permissionMode) { - this.permissionMode = permissionMode; + List messages = selectedTopic.getMessages(); + if (messages == null || messages.size() < 1) { + setErrorMessage("No message selected to mark as read. Please select a message"); + return ALL_MESSAGES; } - - public List getSelectedGroupsUsersList() { - return selectedGroupsUsersList; + Iterator iter = messages.iterator(); + while (iter.hasNext()) { + DiscussionMessageBean decoMessage = (DiscussionMessageBean) iter + .next(); + if (decoMessage.isSelected()) { + forumManager + .markMessageAs(decoMessage.getMessage(), readStatus); + } } - - public void setSelectedGroupsUsersList(List selectedGroupsUsersList) { - this.selectedGroupsUsersList = selectedGroupsUsersList; - } - - public void setTotalGroupsUsersList(List totalGroupsUsersList) { - this.totalGroupsUsersList = totalGroupsUsersList; - } + return displayTopicById(TOPIC_ID); // reconstruct topic again; + } + + /** + * @return Returns the isDisplaySearchedMessages. + */ + public boolean getIsDisplaySearchedMessages() { + return isDisplaySearchedMessages; + } + + /** + * @return Returns the searchText. + */ + public String getSearchText() { + return searchText; + } + + /** + * @param searchText + * The searchText to set. + */ + public void setSearchText(String searchText) { + this.searchText = searchText; + } + + public List getSiteMembers() { + return getSiteMembers(true); + } + + public List getSiteRoles() { + return getSiteMembers(false); + } + + public List getSiteMembers(boolean includeGroup) { + LOG.debug("getSiteMembers()"); + + if (siteMembers != null && siteMembers.size() > 0) { + return siteMembers; + } + + permissions = new ArrayList(); + + Set membershipItems = null; + + if (PERMISSION_MODE_TEMPLATE.equals(getPermissionMode())) { + membershipItems = forumManager.getDiscussionForumArea() + .getMembershipItemSet(); + } else if (PERMISSION_MODE_FORUM.equals(getPermissionMode())) { + membershipItems = selectedForum.getForum().getMembershipItemSet(); + + if (membershipItems == null || membershipItems.size() == 0) { + membershipItems = forumManager.getDiscussionForumArea() + .getMembershipItemSet(); + } + } else if (PERMISSION_MODE_TOPIC.equals(getPermissionMode())) { + membershipItems = selectedTopic.getTopic().getMembershipItemSet(); + + if (membershipItems == null || membershipItems.size() == 0) { + //membershipItems = forumManager.getDiscussionForumArea().getMembershipItemSet(); + if (selectedForum != null && selectedForum.getForum() != null) { + membershipItems = selectedForum.getForum() + .getMembershipItemSet(); + } + } + } + + siteMembers = new ArrayList(); + // get Roles + AuthzGroup realm; + Site currentSite = null; + int i = 0; + try { + realm = AuthzGroupService.getAuthzGroup(getContextSiteId()); + Set roles1 = realm.getRoles(); + if (roles1 != null && roles1.size() > 0) { + Iterator roleIter = roles1.iterator(); + while (roleIter.hasNext()) { + Role role = (Role) roleIter.next(); + if (role != null) { + if (i == 0) { + selectedRole = role.getId(); + i = 1; + } + DBMembershipItem item = forumManager.getAreaDBMember( + membershipItems, role.getId(), + DBMembershipItem.TYPE_ROLE); + siteMembers.add(new SelectItem(role.getId(), role + .getId() + + "(" + item.getPermissionLevelName() + ")")); + permissions.add(new PermissionBean(item, + permissionLevelManager)); + } + } + } + + if (includeGroup) { + currentSite = SiteService.getSite(ToolManager + .getCurrentPlacement().getContext()); + + Collection groups = currentSite.getGroups(); + for (Iterator groupIterator = groups.iterator(); groupIterator + .hasNext();) { + Group currentGroup = (Group) groupIterator.next(); + DBMembershipItem item = forumManager.getAreaDBMember( + membershipItems, currentGroup.getTitle(), + DBMembershipItem.TYPE_GROUP); + siteMembers + .add(new SelectItem(currentGroup.getTitle(), + currentGroup.getTitle() + + " (" + + item.getPermissionLevel() + .getName() + ")")); + permissions.add(new PermissionBean(item, + permissionLevelManager)); + } + } + } catch (IdUnusedException e) { + LOG.error(e.getMessage(), e); + } + + return siteMembers; + } + + /** + * @return siteId + */ + private String getContextSiteId() { + LOG.debug("getContextSiteId()"); + return ("/site/" + ToolManager.getCurrentPlacement().getContext()); + } + + /** + * @param topic + */ + private void setSelectedForumForCurrentTopic(DiscussionTopic topic) { + if (selectedForum != null) { + return; + } + DiscussionForum forum = (DiscussionForum) topic.getBaseForum(); + if (forum == null) { + + String forumId = getExternalParameterByKey(FORUM_ID); + if (forumId == null || forumId.trim().length() < 1) { + selectedForum = null; + return; + } + forum = forumManager.getForumById(new Long(forumId)); + if (forum == null) { + selectedForum = null; + return; + } + } + selectedForum = new DiscussionForumBean(forum, uiPermissionsManager, + forumManager); + setForumBeanAssign(); + } + + /** + * @param errorMsg + */ + private void setErrorMessage(String errorMsg) { + LOG.debug("setErrorMessage(String " + errorMsg + ")"); + FacesContext.getCurrentInstance().addMessage(null, + new FacesMessage("Alert: " + errorMsg)); + } + + private void setGradeNoticeMessage() { + FacesContext.getCurrentInstance().addMessage(null, + new FacesMessage(" Grade submission successful. ")); + } + + public void processPost() { + + } + + public String generatePermissionScript() { + + PermissionLevel ownerLevel = permissionLevelManager + .getDefaultOwnerPermissionLevel(); + PermissionLevel authorLevel = permissionLevelManager + .getDefaultAuthorPermissionLevel(); + PermissionLevel noneditingAuthorLevel = permissionLevelManager + .getDefaultNoneditingAuthorPermissionLevel(); + PermissionLevel reviewerLevel = permissionLevelManager + .getDefaultReviewerPermissionLevel(); + PermissionLevel noneLevel = permissionLevelManager + .getDefaultNonePermissionLevel(); + PermissionLevel contributorLevel = permissionLevelManager + .getDefaultContributorPermissionLevel(); + + StringBuffer sBuffer = new StringBuffer(); + sBuffer.append(""); + return sBuffer.toString(); + } + + public void setObjectPermissions(Object target) { + Set membershipItemSet = null; + + DiscussionForum forum = null; + Area area = null; + Topic topic = null; + + /** get membership item set */ + if (target instanceof DiscussionForum) { + forum = ((DiscussionForum) target); + membershipItemSet = forum.getMembershipItemSet(); + } else if (target instanceof Area) { + area = ((Area) target); + membershipItemSet = area.getMembershipItemSet(); + } else if (target instanceof Topic) { + topic = ((Topic) target); + membershipItemSet = topic.getMembershipItemSet(); + } + + if (membershipItemSet != null) { + membershipItemSet.clear(); + } else { + membershipItemSet = new HashSet(); + } + + if (permissions != null) { + Iterator iter = permissions.iterator(); + while (iter.hasNext()) { + PermissionBean permBean = (PermissionBean) iter.next(); + DBMembershipItem membershipItem = permissionLevelManager + .createDBMembershipItem(permBean.getItem().getName(), + permBean.getSelectedLevel(), + DBMembershipItem.TYPE_ROLE); + + if (PermissionLevelManager.PERMISSION_LEVEL_NAME_CUSTOM + .equals(membershipItem.getPermissionLevelName())) { + PermissionsMask mask = new PermissionsMask(); + mask.put(PermissionLevel.NEW_FORUM, new Boolean(permBean + .getNewForum())); + mask.put(PermissionLevel.NEW_TOPIC, new Boolean(permBean + .getNewTopic())); + mask.put(PermissionLevel.NEW_RESPONSE, new Boolean(permBean + .getNewResponse())); + mask.put(PermissionLevel.NEW_RESPONSE_TO_RESPONSE, + new Boolean(permBean.getResponseToResponse())); + mask.put(PermissionLevel.MOVE_POSTING, new Boolean(permBean + .getMovePosting())); + mask.put(PermissionLevel.CHANGE_SETTINGS, new Boolean( + permBean.getChangeSettings())); + mask.put(PermissionLevel.POST_TO_GRADEBOOK, new Boolean( + permBean.getPostToGradebook())); + mask.put(PermissionLevel.READ, new Boolean(permBean + .getRead())); + mask.put(PermissionLevel.MARK_AS_READ, new Boolean(permBean + .getMarkAsRead())); + mask.put(PermissionLevel.MODERATE_POSTINGS, new Boolean( + permBean.getModeratePostings())); + mask.put(PermissionLevel.DELETE_OWN, new Boolean(permBean + .getDeleteOwn())); + mask.put(PermissionLevel.DELETE_ANY, new Boolean(permBean + .getDeleteAny())); + mask.put(PermissionLevel.REVISE_OWN, new Boolean(permBean + .getReviseOwn())); + mask.put(PermissionLevel.REVISE_ANY, new Boolean(permBean + .getReviseAny())); + + PermissionLevel level = permissionLevelManager + .createPermissionLevel(permBean.getSelectedLevel(), + typeManager.getCustomLevelType(), mask); + membershipItem.setPermissionLevel(level); + } + + // save DBMembershiptItem here to get an id so we can add to the set + permissionLevelManager.saveDBMembershipItem(membershipItem); + membershipItemSet.add(membershipItem); + } + + if (target instanceof DiscussionForum) { + forum.setMembershipItemSet(membershipItemSet); + //forumManager.saveForum(forum); + } else if (area != null) { + area.setMembershipItemSet(membershipItemSet); + //areaManager.saveArea(area); + } else if (topic != null) { + topic.setMembershipItemSet(membershipItemSet); + //forumManager.saveTopic((DiscussionTopic) topic); + } + } + siteMembers = null; + } + + /** + * processActionAddGroupsUsers + * @return navigation String + */ + public String processActionAddGroupsUsers() { + + totalGroupsUsersList = null; + + ExternalContext exContext = FacesContext.getCurrentInstance() + .getExternalContext(); + HttpSession session = (HttpSession) exContext.getSession(false); + + String attr = null; + + if (session != null) { + /** get navigation string of previous navigation (set by navigation handler) */ + attr = (String) session.getAttribute("MC_PREVIOUS_NAV"); + } + + /** store caller navigation string in session (used to return from add groups/users) */ + session.setAttribute("MC_ADD_GROUPS_USERS_CALLER", attr); + + return "addGroupsUsers"; + } + + /** + * processAddGroupsUsersSubmit + * @return navigation String + */ + public String processAddGroupsUsersSubmit() { + + ExternalContext exContext = FacesContext.getCurrentInstance() + .getExternalContext(); + HttpSession session = (HttpSession) exContext.getSession(false); + + /** get navigation string of previous navigation (set by navigation handler) */ + return (String) session.getAttribute("MC_ADD_GROUPS_USERS_CALLER"); + } + + /** + * processAddGroupsUsersCancel + * @return navigation String + */ + public String processAddGroupsUsersCancel() { + + ExternalContext exContext = FacesContext.getCurrentInstance() + .getExternalContext(); + HttpSession session = (HttpSession) exContext.getSession(false); + + /** get navigation string of previous navigation (set by navigation handler) */ + return (String) session.getAttribute("MC_ADD_GROUPS_USERS_CALLER"); + } + + public List getTotalGroupsUsersList() { + + /** protect from jsf calling multiple times */ + if (totalGroupsUsersList != null) { + return totalGroupsUsersList; + } + + courseMemberMap = membershipManager.getAllCourseMembers(true, false, + false); + + List members = membershipManager + .convertMemberMapToList(courseMemberMap); + totalGroupsUsersList = new ArrayList(); + + /** create a list of SelectItem elements */ + for (Iterator i = members.iterator(); i.hasNext();) { + + MembershipItem item = (MembershipItem) i.next(); + totalGroupsUsersList.add(new SelectItem(item.getId(), item + .getName())); + } + + return totalGroupsUsersList; + } + + public void setPermissionLevelManager( + PermissionLevelManager permissionLevelManager) { + this.permissionLevelManager = permissionLevelManager; + } + + public List getPostingOptions() { + List postingOptions = new ArrayList(); + postingOptions.add(new SelectItem(PermissionBean.NONE, + PermissionBean.NONE)); + postingOptions.add(new SelectItem(PermissionBean.OWN, + PermissionBean.OWN)); + postingOptions.add(new SelectItem(PermissionBean.ALL, + PermissionBean.ALL)); + + return postingOptions; + } + + /** + * @return Returns the levels. + */ + public List getLevels() { + boolean hasCustom = false; + if (levels == null || levels.size() == 0) { + levels = new ArrayList(); + List origLevels = permissionLevelManager + .getOrderedPermissionLevelNames(); + if (origLevels != null) { + Iterator iter = origLevels.iterator(); + + while (iter.hasNext()) { + String level = (String) iter.next(); + levels.add(new SelectItem(level)); + if (level.equals("Custom")) { + hasCustom = true; + } + } + } + if (!hasCustom) { + levels.add(new SelectItem("Custom")); + } + } + return levels; + } + + /** + * @param areaManager The areaManager to set. + */ + public void setAreaManager(AreaManager areaManager) { + this.areaManager = areaManager; + } + + /** + * @return Returns the selectedRole. + */ + public String getSelectedRole() { + return selectedRole; + } + + /** + * @param selectedRole The selectedRole to set. + */ + public void setSelectedRole(String selectedRole) { + this.selectedRole = selectedRole; + } + + public boolean getEditMode() { + return editMode; + } + + public void setEditMode(boolean editMode) { + this.editMode = editMode; + } + + public String getPermissionMode() { + return permissionMode; + } + + public void setPermissionMode(String permissionMode) { + this.permissionMode = permissionMode; + } + + public List getSelectedGroupsUsersList() { + return selectedGroupsUsersList; + } + + public void setSelectedGroupsUsersList(List selectedGroupsUsersList) { + this.selectedGroupsUsersList = selectedGroupsUsersList; + } + + public void setTotalGroupsUsersList(List totalGroupsUsersList) { + this.totalGroupsUsersList = totalGroupsUsersList; + } + + public boolean getGradebookExist() { + try { + GradebookService gradebookService = (org.sakaiproject.service.gradebook.shared.GradebookService) ComponentManager + .get("org.sakaiproject.service.gradebook.GradebookService"); + gradebookExist = gradebookService.isGradebookDefined(ToolManager + .getCurrentPlacement().getContext()); + return gradebookExist; + } catch (Exception e) { + gradebookExist = false; + return gradebookExist; + } + } + + public void setGradebookExist(boolean gradebookExist) { + this.gradebookExist = gradebookExist; + } } \ No newline at end of file Index: messageforums-app/src/webapp/jsp/discussionForum/message/dfViewMessage.jsp =================================================================== --- messageforums-app/src/webapp/jsp/discussionForum/message/dfViewMessage.jsp (revision 11430) +++ messageforums-app/src/webapp/jsp/discussionForum/message/dfViewMessage.jsp (working copy) @@ -137,7 +137,7 @@ + rendered="#{ForumTool.selectedTopic.isPostToGradebook && ForumTool.gradebookExist}"/>