/* * Copyright (C) 2003-2008 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.popup; import java.util.ArrayList; import java.util.Arrays; import java.util.List; import org.exoplatform.forum.ForumTransformHTML; 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.JCRPageList; import org.exoplatform.forum.service.Post; import org.exoplatform.forum.service.Topic; import org.exoplatform.forum.service.UserProfile; import org.exoplatform.forum.service.Utils; import org.exoplatform.forum.webui.BaseForumForm; import org.exoplatform.forum.webui.UIForumPageIterator; import org.exoplatform.forum.webui.UIForumPortlet; import org.exoplatform.ks.bbcode.core.ExtendedBBCodeProvider; import org.exoplatform.ks.common.webui.BaseEventListener; import org.exoplatform.ks.common.webui.UIPopupAction; import org.exoplatform.ks.common.webui.UIPopupContainer; import org.exoplatform.webui.config.annotation.ComponentConfig; import org.exoplatform.webui.config.annotation.EventConfig; import org.exoplatform.webui.core.UIPopupComponent; import org.exoplatform.webui.core.lifecycle.UIFormLifecycle; import org.exoplatform.webui.event.Event; import org.exoplatform.webui.event.EventListener; /** * Created by The eXo Platform SAS * Author : Vu Duy Tu * tu.duy@exoplatform.com * 06-03-2008, 04:41:47 */ @ComponentConfig( lifecycle = UIFormLifecycle.class , template = "app:/templates/forum/webui/popup/UIPageListPostByIP.gtmpl", events = { @EventConfig(listeners = UIPageListPostByIP.OpenPostLinkActionListener.class), @EventConfig(listeners = UIPageListPostByIP.SetOrderByActionListener.class), @EventConfig(listeners = UIPageListPostByIP.CancelActionListener.class), @EventConfig(listeners = UIPageListPostByIP.DeletePostLinkActionListener.class) } ) public class UIPageListPostByIP extends BaseForumForm implements UIPopupComponent { private String userName = ForumUtils.EMPTY_STR; private String ip_ = null; private String strOrderBy = "createdDate descending"; private boolean hasEnableIPLogging = true; private List<Post> posts = new ArrayList<Post>(); public UIPageListPostByIP() throws Exception { this.userName = null; addChild(UIForumPageIterator.class, null, "PageListPostByUser"); this.setActions(new String[] { "Cancel" }); } public boolean getHasEnableIPLogging() { return hasEnableIPLogging; } public UserProfile getUserProfile() throws Exception { if (this.userProfile == null) { UIForumPortlet forumPortlet = this.getAncestorOfType(UIForumPortlet.class); this.userProfile = forumPortlet.getUserProfile(); hasEnableIPLogging = forumPortlet.isEnableIPLogging(); } return this.userProfile; } public String getUserName() { return userName; } public void setUserName(String userId) { this.userName = userId; } @SuppressWarnings("unused") private String getTitleInHTMLCode(String s) { return ForumTransformHTML.getTitleInHTMLCode(s, new ArrayList<String>((new ExtendedBBCodeProvider()).getSupportedBBCodes())); } public void setIp(String ip) { this.ip_ = ip; strOrderBy = "createdDate descending"; } @SuppressWarnings( { "unchecked", "unused" }) private List<Post> getPostsByUser() throws Exception { UIForumPageIterator forumPageIterator = this.getChild(UIForumPageIterator.class); List<Post> posts = null; try { boolean isMod = false; if (this.userProfile.getUserRole() < 2) isMod = true; JCRPageList pageList = getForumService().getListPostsByIP(ip_, strOrderBy); forumPageIterator.updatePageList(pageList); if (pageList != null) pageList.setPageSize(6); posts = pageList.getPage(forumPageIterator.getPageSelected()); forumPageIterator.setSelectPage(pageList.getCurrentPage()); } catch (Exception e) { } if (posts == null) posts = new ArrayList<Post>(); this.posts = posts; return posts; } private Post getPostById(String postId) { for (Post post : this.posts) { if (post.getId().equals(postId)) return post; } return null; } static public class OpenPostLinkActionListener extends BaseEventListener<UIPageListPostByIP> { public void onEvent(Event<UIPageListPostByIP> event, UIPageListPostByIP uiForm, final String postId) throws Exception { Post post = uiForm.getPostById(postId); if (post == null) { warning("UIShowBookMarkForm.msg.link-not-found"); return; } boolean isRead = true; if (uiForm.userProfile.getUserRole() > 0) { String ids[] = post.getPath().split(ForumUtils.SLASH); int leng = ids.length; String categoryId = ids[leng - 4]; String forumId = ids[leng - 3]; String topicId = ids[leng - 2]; try { Category category = uiForm.getForumService().getCategory(categoryId); if (category == null) { warning("UIShowBookMarkForm.msg.link-not-found"); return; } String[] privateUser = category.getUserPrivate(); if (privateUser != null && privateUser.length > 0) { if (privateUser.length == 1 && privateUser[0].equals(" ")) { isRead = true; } else { isRead = ForumServiceUtils.hasPermission(privateUser, uiForm.userProfile.getUserId()); } } if (isRead) { String path_ = ForumUtils.EMPTY_STR; Forum forum = uiForm.getForumService().getForum(categoryId, forumId); if (forum != null) path_ = forum.getPath() + ForumUtils.SLASH + topicId; Topic topic = uiForm.getForumService().getTopicByPath(path_, false); if (forum == null || topic == null) { warning("UIForumPortlet.msg.do-not-permission"); return; } if (uiForm.userProfile.getUserRole() == 1 && (forum.getModerators() != null && forum.getModerators().length > 0 && ForumServiceUtils.hasPermission(forum.getModerators(), uiForm.userProfile.getUserId()))) isRead = true; else isRead = false; if (!isRead && !forum.getIsClosed()) { List<String> listUserPermission = new ArrayList<String>(); if (forum.getCreateTopicRole() != null && forum.getCreateTopicRole().length > 0) listUserPermission.addAll(Arrays.asList(forum.getCreateTopicRole())); if (forum.getViewer() != null && forum.getViewer().length > 0) listUserPermission.addAll(Arrays.asList(forum.getViewer())); if (ForumServiceUtils.hasPermission(listUserPermission.toArray(new String[] {}), uiForm.userProfile.getUserId())) isRead = true; // check for topic: if (!isRead && post.getIsActiveByTopic() && post.getIsApproved() && !post.getIsHidden() && topic.getIsActive() && topic.getIsActiveByForum() && topic.getIsApproved() && !topic.getIsClosed() && !topic.getIsWaiting()) { if ((topic.getCanPost().length == 1 && topic.getCanPost()[0].equals(" ")) || ForumServiceUtils.hasPermission(topic.getCanPost(), uiForm.userProfile.getUserId()) || (topic.getCanView().length == 1 && topic.getCanView()[0].equals(" ")) || ForumServiceUtils.hasPermission(topic.getCanView(), uiForm.userProfile.getUserId())) isRead = true; else isRead = false; } else { isRead = false; } } } } catch (Exception e) { warning("UIShowBookMarkForm.msg.link-not-found"); } } if (isRead) { UIPopupContainer popupContainer = uiForm.getAncestorOfType(UIPopupContainer.class); UIPopupAction popupAction = popupContainer.getChild(UIPopupAction.class).setRendered(true); UIViewPost viewPost = popupAction.activate(UIViewPost.class, 700); viewPost.setPostView(post); viewPost.setViewUserInfo(false); viewPost.setActionForm(new String[] { "Close", "OpenTopicLink" }); event.getRequestContext().addUIComponentToUpdateByAjax(popupAction); } else { warning("UIForumPortlet.msg.do-not-permission"); return; } } } static public class DeletePostLinkActionListener extends BaseEventListener<UIPageListPostByIP> { public void onEvent(Event<UIPageListPostByIP> event, UIPageListPostByIP uiForm, final String postId) throws Exception { Post post = uiForm.getPostById(postId); String[] path = post.getPath().split(ForumUtils.SLASH); int length = path.length; String topicId = path[length - 2]; String forumId = path[length - 3]; String categoryId = path[length - 4]; if (topicId.replaceFirst(Utils.TOPIC, Utils.POST).equals(postId)) { try { uiForm.getForumService().removeTopic(categoryId, forumId, topicId); } catch (Exception e) { } } else { try { uiForm.getForumService().removePost(categoryId, forumId, topicId, postId); } catch (Exception e) { } } event.getRequestContext().addUIComponentToUpdateByAjax(uiForm); } } static public class SetOrderByActionListener extends BaseEventListener<UIPageListPostByIP> { public void onEvent(Event<UIPageListPostByIP> event, UIPageListPostByIP uiContainer, final String path) throws Exception { uiContainer.strOrderBy = ForumUtils.getOrderBy(uiContainer.strOrderBy, path); event.getRequestContext().addUIComponentToUpdateByAjax(uiContainer); } } static public class CancelActionListener extends EventListener<UIPageListPostByIP> { public void execute(Event<UIPageListPostByIP> event) throws Exception { UIPageListPostByIP listPostByIP = event.getSource(); listPostByIP.cancelChildPopupAction(); UIBanIPForumManagerForm form = listPostByIP.getAncestorOfType(UIForumPortlet.class).findFirstComponentOfType(UIBanIPForumManagerForm.class); if (form != null) { event.getRequestContext().addUIComponentToUpdateByAjax(form); } } } public void activate() throws Exception { } public void deActivate() throws Exception { } }