/* * Copyright (C) 2003-2012 eXo Platform SAS. * * This program is free software; you can redistribute it and/or * modify it under the terms of the GNU Affero General Public License * as published by the Free Software Foundation; either version 3 * of the License, or (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, see<http://www.gnu.org/licenses/>. */ package org.exoplatform.forum.webui; import java.util.ArrayList; import java.util.List; import org.exoplatform.forum.ForumSessionUtils; import org.exoplatform.forum.ForumUtils; import org.exoplatform.forum.service.Category; import org.exoplatform.forum.service.Forum; import org.exoplatform.forum.service.ForumServiceUtils; import org.exoplatform.forum.service.Topic; import org.exoplatform.forum.service.UserProfile; public class BaseDataForm extends BaseForumForm { public String topicId; public String forumId; public boolean isMoveTopic = false; public boolean isMovePost = false; public String pathTopic = ForumUtils.EMPTY_STR; public String pathPost = ForumUtils.EMPTY_STR; public List<String> canAddTopics = new ArrayList<String>(); public List<String> canAddPosts = new ArrayList<String>(); public List<String> canViewPosts = new ArrayList<String>(); public BaseDataForm() { } public List<Category> getCategories() throws Exception { List<Category> categories = new ArrayList<Category>(); for (Category category : getForumService().getCategories()) { if (getUserProfile().getUserRole() == 1) { if (!ForumServiceUtils.hasPermission(category.getUserPrivate(), userProfile.getUserId())) { continue; } if (isMoveTopic == true && ForumServiceUtils.hasPermission(category.getCreateTopicRole(), userProfile.getUserId())) { canAddTopics.add(category.getId()); } if (isMovePost == true && ForumServiceUtils.hasPermission(category.getPoster(), userProfile.getUserId())) { canAddPosts.add(category.getId()); } if (isMovePost == true && ForumServiceUtils.hasPermission(category.getViewer(), userProfile.getUserId())) { canViewPosts.add(category.getId()); } } categories.add(category); } return categories; } public List<Forum> getForums(String categoryId) throws Exception { List<Forum> forums = new ArrayList<Forum>(); for (Forum forum : ForumSessionUtils.getForumsOfCategory(categoryId, getUserProfile())) { if (forum.getId().equals(forumId)) { if (pathTopic.indexOf(categoryId) >= 0) { continue; } } if (getUserProfile().getUserRole() == UserProfile.MODERATOR) { if (forum.getIsClosed()) { continue; } if (!ForumServiceUtils.isModerator(forum.getModerators(), userProfile.getUserId())) { if (forum.getIsLock()) { continue; } if (isMoveTopic == true && !canAddTopics.contains(categoryId) && !ForumServiceUtils.hasPermission(forum.getCreateTopicRole(), userProfile.getUserId())) { continue; } } if (isMovePost == true && ForumServiceUtils.hasPermission(forum.getPoster(), userProfile.getUserId())) { canAddPosts.add(forum.getId()); } if (isMovePost == true && ForumServiceUtils.hasPermission(forum.getViewer(), userProfile.getUserId())) { canViewPosts.add(forum.getId()); } } else if (userProfile.getUserRole() > 1) { continue; } forums.add(forum); } return forums; } public List<Topic> getTopics(String categoryId, String forumId) throws Exception { List<Topic> topics = new ArrayList<Topic>(); Forum forum = getForumService().getForum(categoryId, forumId); boolean isMode = (getUserProfile().getUserRole() == 0 || ForumServiceUtils.isModerator(forum.getModerators(), userProfile.getUserId())); for (Topic topic : getForumService().getTopics(categoryId, forumId)) { if (topic.getId().equalsIgnoreCase(topicId)) { if (pathPost.indexOf(categoryId) >= 0 && pathPost.indexOf(forumId) > 0) continue; } if (!isMode) { if (!topic.getIsActive() || !topic.getIsActiveByForum() || !topic.getIsApproved() || topic.getIsClosed() || topic.getIsLock() || topic.getIsWaiting()) continue; if (!canViewPosts.contains(categoryId) && canViewPosts.contains(forumId) && !ForumServiceUtils.hasPermission(topic.getCanView(), userProfile.getUserId())) continue; if (!canAddPosts.contains(categoryId) && canAddPosts.contains(forumId) && !ForumServiceUtils.hasPermission(topic.getCanPost(), userProfile.getUserId())) continue; } topics.add(topic); } return topics; } }