/*
* 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.faq.webui;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;
import org.exoplatform.container.PortalContainer;
import org.exoplatform.faq.service.Category;
import org.exoplatform.faq.service.FAQService;
import org.exoplatform.faq.service.FAQSetting;
import org.exoplatform.faq.service.Utils;
import org.exoplatform.ks.common.UserHelper;
import org.exoplatform.portal.application.PortalRequestContext;
import org.exoplatform.portal.webui.util.Util;
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/faq/webui/UIAnswersContainer.gtmpl"
)
public class UIAnswersContainer extends UIContainer {
private FAQSetting faqSetting_ = null;
private String currentUser_;
private FAQService faqService_;
private boolean isRenderChild = true;
private boolean hasPermission = true;
private List<String> propetyOfUser = new ArrayList<String>();
public UIAnswersContainer() throws Exception {
faqService_ = (FAQService) PortalContainer.getInstance().getComponentInstanceOfType(FAQService.class);
UIBreadcumbs uiBreadcumbs = addChild(UIBreadcumbs.class, null, null);
UIQuestions uiQuestions = addChild(UIQuestions.class, null, null);
UICategories uiCategories = addChild(UICategories.class, null, null);
currentUser_ = FAQUtils.getCurrentUser();
faqSetting_ = new FAQSetting();
FAQUtils.getPorletPreference(faqSetting_);
faqSetting_.setCurrentUser(currentUser_);
if (!FAQUtils.isFieldEmpty(currentUser_)) {
if (faqService_.isAdminRole(currentUser_))
faqSetting_.setIsAdmin("TRUE");
else
faqSetting_.setIsAdmin("FALSE");
faqService_.getUserSetting(currentUser_, faqSetting_);
} else {
faqSetting_.setIsAdmin("FALSE");
}
String cateIdView = Utils.CATEGORY_HOME;
if (!faqSetting_.isAdmin() && !faqSetting_.isPostQuestionInRootCategory()) {
propetyOfUser = UserHelper.getAllGroupAndMembershipOfUser(currentUser_);
List<Category> cates = faqService_.getSubCategories(cateIdView, faqSetting_, false, propetyOfUser);
if (cates != null && cates.size() > 0)
cateIdView = cateIdView + "/" + cates.get(0).getId();
}
isRenderChild = isRenderCategory(cateIdView);
hasPermission = isRenderChild;
uiBreadcumbs.setUpdataPath(cateIdView);
uiQuestions.setFAQService(faqService_);
uiQuestions.setFAQSetting(faqSetting_);
uiQuestions.setCategoryId(cateIdView);
uiBreadcumbs.setRenderSearch(uiQuestions.isViewRootCate());
uiCategories.setFAQSetting(faqSetting_);
uiCategories.setFAQService(faqService_);
if (uiCategories.getCategoryPath() == null)
uiCategories.setPathCategory(cateIdView);
}
public void setViewRootCate() {
PortalRequestContext portalContext = Util.getPortalRequestContext();
String isAjax = portalContext.getRequestParameter("ajaxRequest");
if (isAjax != null && Boolean.parseBoolean(isAjax))
return;
FAQUtils.getPorletPreference(faqSetting_);
try {
UIQuestions questions = getChild(UIQuestions.class);
questions.setViewRootCate();
boolean b = questions.isViewRootCate();
if (b != hasPermission) {
hasPermission = b;
}
if (Utils.CATEGORY_HOME.equals(questions.getCategoryId()))
isRenderChild = hasPermission;
} catch (Exception e) {
}
}
public boolean isRenderCategory(String categoryId) throws Exception {
try {
Category category = faqService_.getCategoryById(categoryId);
if (currentUser_ != null && currentUser_.trim().length() > 0) {
faqSetting_.setCurrentUser(currentUser_);
faqSetting_.setCanEdit(false);
if (faqSetting_.getIsAdmin() != null && faqSetting_.getIsAdmin().equals("TRUE")) {
faqSetting_.setCanEdit(true);
} else if (category.getModerators() != null && category.getModerators().length > 0 && category.getModerators()[0].trim().length() > 0) {
if (propetyOfUser.isEmpty())
propetyOfUser = UserHelper.getAllGroupAndMembershipOfUser(currentUser_);
faqSetting_.setCanEdit(Utils.hasPermission(propetyOfUser, Arrays.asList(category.getModerators())));
}
}
if (!faqSetting_.isCanEdit() && category.getUserPrivate() != null && category.getUserPrivate().length > 0 && category.getUserPrivate()[0].trim().length() > 0) {
if (propetyOfUser.isEmpty())
propetyOfUser = UserHelper.getAllGroupAndMembershipOfUser(currentUser_);
return Utils.hasPermission(propetyOfUser, Arrays.asList(category.getUserPrivate()));
}
} catch (Exception e) {
}
return true;
}
public FAQSetting getFAQSetting() {
return faqSetting_;
}
public boolean getRenderChild() {
return hasPermission;
}
public void updateIsRender(boolean isRender) throws Exception {
getChild(UICategories.class).setRendered(isRender);
getChild(UIBreadcumbs.class).setRendered(isRender);
getChild(UIQuestions.class).setRendered(isRender);
}
}