/***************************************************************************
* Copyright (C) 2003-2007 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.List;
import org.exoplatform.container.ExoContainerContext;
import org.exoplatform.forum.ForumUtils;
import org.exoplatform.forum.service.Forum;
import org.exoplatform.forum.service.ForumService;
import org.exoplatform.forum.service.ForumServiceUtils;
import org.exoplatform.forum.service.UserProfile;
import org.exoplatform.ks.common.webui.WebUIUtils;
import org.exoplatform.webui.config.annotation.ComponentConfig;
import org.exoplatform.webui.core.UIContainer;
/**
* Created by The eXo Platform SARL
* Author : Hung Nguyen
* hung.nguyen@exoplatform.com
* Aus 01, 2007 2:48:18 PM
*/
@ComponentConfig(
template = "app:/templates/forum/webui/UIForumInfos.gtmpl"
)
public class UIForumInfos extends UIContainer {
private UserProfile userProfile;
private boolean enableIPLogging = true;
public UIForumInfos() throws Exception {
addChild(UIPostRules.class, null, null);
addChild(UIForumModerator.class, null, null);
}
private String getRemoteIP() throws Exception {
if (enableIPLogging) {
return WebUIUtils.getRemoteIP();
}
return ForumUtils.EMPTY_STR;
}
public void setForum(Forum forum) throws Exception {
UIForumPortlet forumPortlet = this.getAncestorOfType(UIForumPortlet.class);
enableIPLogging = forumPortlet.isEnableIPLogging();
this.userProfile = forumPortlet.getUserProfile();
String[] mods = forum.getModerators();
if (ForumUtils.isArrayEmpty(mods))
mods = new String[] {};
List<String> moderators = ForumServiceUtils.getUserPermission(mods);
UIPostRules postRules = getChild(UIPostRules.class);
boolean isShowRule = forumPortlet.isShowRules();
postRules.setRendered(isShowRule);
if (isShowRule) {
boolean isLock = forum.getIsClosed();
if (!isLock)
isLock = forum.getIsLock();
if (!isLock && userProfile.getUserRole() != 0) {
if (!moderators.contains(userProfile.getUserId())) {
List<String> ipBaneds = forum.getBanIP();
if (ipBaneds.contains(getRemoteIP()))
isLock = true;
if (!isLock) {
String[] listUser = forum.getCreateTopicRole();
boolean isEmpty = false;
if (!ForumUtils.isArrayEmpty(listUser)) {
isLock = !ForumServiceUtils.hasPermission(listUser, userProfile.getUserId());
} else
isEmpty = true;
if (isEmpty || isLock) {
ForumService forumService = (ForumService) ExoContainerContext.getCurrentContainer().getComponentInstanceOfType(ForumService.class);
listUser = forumService.getPermissionTopicByCategory(forum.getCategoryId(), "createTopicRole");
if (!ForumUtils.isArrayEmpty(listUser)) {
isLock = !ForumServiceUtils.hasPermission(listUser, userProfile.getUserId());
}
}
}
}
}
postRules.setLock(isLock);
postRules.setUserProfile(this.userProfile);
}
UIForumModerator forumModerator = getChild(UIForumModerator.class);
if (forumPortlet.isShowModerators()) {
forumModerator.setModeratorsForum(moderators);
forumModerator.setUserRole(userProfile.getUserRole());
}
forumModerator.setRendered(forumPortlet.isShowModerators());
}
}