/***************************************************************************
* 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.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import org.exoplatform.container.PortalContainer;
import org.exoplatform.forum.ForumUtils;
import org.exoplatform.forum.service.Category;
import org.exoplatform.forum.service.Forum;
import org.exoplatform.forum.service.ForumSearch;
import org.exoplatform.forum.service.Topic;
import org.exoplatform.forum.service.UserProfile;
import org.exoplatform.forum.service.Utils;
import org.exoplatform.forum.webui.popup.UICategoryForm;
import org.exoplatform.forum.webui.popup.UIExportForm;
import org.exoplatform.forum.webui.popup.UIForumForm;
import org.exoplatform.forum.webui.popup.UIImportForm;
import org.exoplatform.forum.webui.popup.UIMoveForumForm;
import org.exoplatform.forum.webui.popup.UIWatchToolsForm;
import org.exoplatform.ks.common.webui.BaseEventListener;
import org.exoplatform.web.application.ApplicationMessage;
import org.exoplatform.webui.application.WebuiRequestContext;
import org.exoplatform.webui.config.annotation.ComponentConfig;
import org.exoplatform.webui.config.annotation.EventConfig;
import org.exoplatform.webui.core.UIApplication;
import org.exoplatform.webui.core.UIComponent;
import org.exoplatform.webui.core.lifecycle.UIFormLifecycle;
import org.exoplatform.webui.event.Event;
import org.exoplatform.webui.form.UIFormCheckBoxInput;
import org.exoplatform.webui.form.UIFormStringInput;
/**
* Created by The eXo Platform SARL
* Author : Hung Nguyen
* hung.nguyen@exoplatform.com
* Aus 01, 2007 2:48:18 PM
*/
@ComponentConfig(
lifecycle = UIFormLifecycle.class ,
template = "app:/templates/forum/webui/UICategory.gtmpl",
events = {
@EventConfig(listeners = UICategory.SearchFormActionListener.class),
@EventConfig(listeners = UICategory.EditCategoryActionListener.class),
@EventConfig(listeners = UICategory.WatchOptionActionListener.class),
@EventConfig(listeners = UICategory.ExportCategoryActionListener.class),
@EventConfig(listeners = UICategory.ImportForumActionListener.class),
@EventConfig(listeners = UICategory.DeleteCategoryActionListener.class,confirm="UICategory.confirm.DeleteCategory"),
@EventConfig(listeners = UICategory.AddForumActionListener.class),
@EventConfig(listeners = UICategory.EditForumActionListener.class),
@EventConfig(listeners = UICategory.SetLockedActionListener.class),
@EventConfig(listeners = UICategory.SetUnLockActionListener.class),
@EventConfig(listeners = UICategory.SetOpenActionListener.class),
@EventConfig(listeners = UICategory.SetCloseActionListener.class),
@EventConfig(listeners = UICategory.MoveForumActionListener.class),
@EventConfig(listeners = UICategory.RemoveForumActionListener.class),
@EventConfig(listeners = UICategory.OpenForumLinkActionListener.class),
@EventConfig(listeners = UICategory.OpenLastTopicLinkActionListener.class),
@EventConfig(listeners = UICategory.OpenLastReadTopicActionListener.class),
@EventConfig(listeners = UICategory.AddBookMarkActionListener.class),
@EventConfig(listeners = UICategory.AddWatchingActionListener.class),
@EventConfig(listeners = UICategory.UnWatchActionListener.class),
@EventConfig(listeners = UICategory.RSSActionListener.class),
@EventConfig(listeners = UICategory.AdvancedSearchActionListener.class)
}
)
@SuppressWarnings({ "unused", "unchecked"})
public class UICategory extends BaseForumForm {
private String categoryId;
private Category category;
private boolean isEditCategory = false;
private boolean isEditForum = false;
private boolean useAjax = true;
private int dayForumNewPost = 0;
private List<Forum> forums = new ArrayList<Forum>();
private Map<String, Topic> MaptopicLast = new HashMap<String, Topic>();
private String linkUserInfo = ForumUtils.EMPTY_STR;
static public boolean isUnWatch = false;
public UICategory() throws Exception {
addUIFormInput(new UIFormStringInput(ForumUtils.SEARCHFORM_ID, null));
setActions(new String[] { "EditCategory", "ExportCategory", "ImportForum", "DeleteCategory", "WatchOption", "AddForum", "EditForum", "SetLocked", "SetUnLock", "SetOpen", "SetClose", "MoveForum", "RemoveForum" });
}
public void initForm() throws Exception {
UIForumPortlet forumPortlet = this.getAncestorOfType(UIForumPortlet.class);
useAjax = forumPortlet.isUseAjax();
dayForumNewPost = forumPortlet.getDayForumNewPost();
linkUserInfo = forumPortlet.getPortletLink();
setListWatches();
}
private String getActionViewInfoUser(String linkType, String userName) {
String link = linkUserInfo.replace("ViewPublicUserInfo", linkType).replace("userName", userName);
return link;
}
public String getRSSLink(String cateId) {
PortalContainer pcontainer = PortalContainer.getInstance();
return org.exoplatform.ks.common.Utils.getRSSLink("forum", pcontainer.getPortalContainerInfo().getContainerName(), cateId);
}
private int getDayForumNewPost() {
return dayForumNewPost;
}
private String getLastReadPostOfForum(String forumId) throws Exception {
return userProfile.getLastPostIdReadOfForum(forumId);
}
public void update(Category category, List<Forum> forums) throws Exception {
this.category = category;
if (forums == null) {
this.isEditForum = true;
} else {
this.forums = forums;
}
categoryId = category.getId();
this.getAncestorOfType(UIForumPortlet.class).getChild(UIBreadcumbs.class).setUpdataPath((categoryId));
}
public void updateByBreadcumbs(String categoryId) {
this.categoryId = categoryId;
this.isEditCategory = true;
this.isEditForum = true;
}
public void updateByLink(Category category) {
this.categoryId = category.getId();
this.isEditCategory = false;
this.isEditForum = true;
this.category = category;
}
public String getCategoryId() {
return this.categoryId;
}
private Category getCategory() throws Exception {
if (this.isEditCategory || this.category == null) {
try {
this.category = getForumService().getCategory(this.categoryId);
} catch (Exception e) {
log.debug("Failed to get category", e);
}
this.isEditCategory = false;
}
if(category != null) {
initForm();
}
return category;
}
private Category refreshCategory() throws Exception {
try {
this.category = getForumService().getCategory(this.categoryId);
} catch (Exception e) {
log.debug("Failed to get category", e);
}
return category;
}
private boolean isShowForum(String id) {
if (this.getAncestorOfType(UIForumPortlet.class).getInvisibleCategories().isEmpty())
return true;
List<String> list = new ArrayList<String>();
list.addAll(this.getAncestorOfType(UIForumPortlet.class).getInvisibleForums());
return (list.contains(id)) ? true : false;
}
private List<Forum> getForumList() throws Exception {
if (this.isEditForum) {
String strQuery = ForumUtils.EMPTY_STR;
if (this.userProfile.getUserRole() > 0)
strQuery = "(@exo:isClosed='false') or (exo:moderators='" + this.userProfile.getUserId() + "')";
try {
this.forums = getForumService().getForumSummaries(this.categoryId, strQuery);
} catch (Exception e) {
log.debug("Failed to get forum summaries", e);
}
this.isEditForum = false;
this.getAncestorOfType(UICategoryContainer.class).getChild(UICategories.class).setIsgetForumList(true);
}
List<Forum> listForum = new ArrayList<Forum>();
for (Forum forum : this.forums) {
String forumId = forum.getId();
if (getUIFormCheckBoxInput(forumId) != null) {
getUIFormCheckBoxInput(forumId).setChecked(false);
} else {
addUIFormInput(new UIFormCheckBoxInput(forumId, forumId, false));
}
if (isShowForum(forumId))
listForum.add(forum);
}
return listForum;
}
public void setIsEditCategory(boolean isEdit) {
this.isEditCategory = isEdit;
}
public void setIsEditForum(boolean isEdit) {
this.isEditForum = isEdit;
}
private Forum getForum(String forumId) throws Exception {
for (Forum forum : this.forums) {
if (forum.getId().equals(forumId))
return forum;
}
return null;
}
private Topic getLastTopic(Category cate, Forum forum) throws Exception {
Topic topic = null;
String topicPath = forum.getLastTopicPath();
if (!ForumUtils.isEmpty(topicPath)) {
try {
topic = getForumService().getTopicSummary(topicPath);
} catch (Exception e) {
topic = null;
log.warn(e);
}
if (topic != null) {
String topicId = topic.getId();
if (getAncestorOfType(UIForumPortlet.class).checkCanView(cate, forum, topic)) {
this.MaptopicLast.put(topicId, topic);
} else {
if (this.MaptopicLast.containsKey(topicId)) {
this.MaptopicLast.remove(topicId);
}
return null;
}
}
}
return topic;
}
private Topic getTopic(String topicId) throws Exception {
if (this.MaptopicLast.containsKey(topicId)) {
return this.MaptopicLast.get(topicId);
}
return null;
}
private List<Forum> getForumsChecked(boolean isBreak) throws Exception {
List<UIComponent> children = this.getChildren();
List<Forum> forums = new ArrayList<Forum>();
for (UIComponent child : children) {
if (child instanceof UIFormCheckBoxInput) {
if (((UIFormCheckBoxInput) child).isChecked()) {
forums.add(this.getForum(((UIFormCheckBoxInput) child).getName()));
if(isBreak) break;
}
}
}
return forums;
}
static public class EditCategoryActionListener extends BaseEventListener<UICategory> {
public void onEvent(Event<UICategory> event, UICategory uiCategory, final String objectId) throws Exception {
UICategoryForm categoryForm = uiCategory.openPopup(UICategoryForm.class, "EditCategoryForm", 550, 380);
categoryForm.setCategoryValue(uiCategory.getCategory(), true);
uiCategory.isEditCategory = true;
}
}
static public class DeleteCategoryActionListener extends BaseEventListener<UICategory> {
public void onEvent(Event<UICategory> event, UICategory uiCategory, final String objectId) throws Exception {
try {
uiCategory.getForumService().removeCategory(uiCategory.categoryId);
} catch (Exception e) {
}
UIForumPortlet forumPortlet = uiCategory.getAncestorOfType(UIForumPortlet.class);
forumPortlet.rederForumHome();
event.getRequestContext().addUIComponentToUpdateByAjax(forumPortlet);
}
}
static public class AddForumActionListener extends BaseEventListener<UICategory> {
public void onEvent(Event<UICategory> event, UICategory uiCategory, final String objectId) throws Exception {
UIForumForm forumForm = uiCategory.openPopup(UIForumForm.class, "AddNewForumForm", 650, 480);
forumForm.initForm();
forumForm.setCategoryValue(uiCategory.categoryId, false);
forumForm.setForumUpdate(false);
uiCategory.isEditForum = true;
}
}
static public class EditForumActionListener extends BaseEventListener<UICategory> {
public void onEvent(Event<UICategory> event, UICategory uiCategory, final String objectId) throws Exception {
List<UIComponent> children = uiCategory.getChildren();
List<Forum> forums = uiCategory.getForumsChecked(true);
if (forums.size() > 0) {
UIForumForm forumForm = uiCategory.openPopup(UIForumForm.class, "EditForumForm", 650, 480);
forumForm.setMode(false);
forumForm.initForm();
forumForm.setCategoryValue(uiCategory.categoryId, false);
forumForm.setForumValue(forums.get(0), true);
forumForm.setForumUpdate(false);
uiCategory.isEditForum = true;
} else {
warning("UICategory.msg.notCheck");
return;
}
}
}
static public class SetLockedActionListener extends BaseEventListener<UICategory> {
public void onEvent(Event<UICategory> event, UICategory uiCategory, final String objectId) throws Exception {
List<Forum> forums = uiCategory.getForumsChecked(false);
if (forums.size() > 0) {
try {
for (Forum forum : forums) {
if (forum.getIsLock())
continue;
forum.setIsLock(true);
uiCategory.getForumService().modifyForum(forum, Utils.LOCK);
}
uiCategory.isEditForum = true;
} catch (Exception e) {
}
} else {
warning("UICategory.msg.notCheck");
return;
}
}
}
static public class SetUnLockActionListener extends BaseEventListener<UICategory> {
public void onEvent(Event<UICategory> event, UICategory uiCategory, final String objectId) throws Exception {
List<Forum> forums = uiCategory.getForumsChecked(false);
if (forums.size() > 0) {
try {
for (Forum forum : forums) {
if (!forum.getIsLock())
continue;
forum.setIsLock(false);
uiCategory.getForumService().modifyForum(forum, Utils.LOCK);
}
uiCategory.isEditForum = true;
} catch (Exception e) {
}
} else {
warning("UICategory.msg.notCheck");
return;
}
}
}
static public class SetOpenActionListener extends BaseEventListener<UICategory> {
public void onEvent(Event<UICategory> event, UICategory uiCategory, final String objectId) throws Exception {
List<Forum> forums = uiCategory.getForumsChecked(false);
if (forums.size() > 0) {
try {
for (Forum forum : forums) {
forum.setIsClosed(false);
uiCategory.getForumService().modifyForum(forum, Utils.CLOSE);
}
uiCategory.isEditForum = true;
} catch (Exception e) {
}
}
if (forums.size() == 0) {
warning("UICategory.msg.notCheck");
}
}
}
static public class SetCloseActionListener extends BaseEventListener<UICategory> {
public void onEvent(Event<UICategory> event, UICategory uiCategory, final String objectId) throws Exception {
List<Forum> forums = uiCategory.getForumsChecked(false);
if (forums.size() > 0) {
try {
for (Forum forum : forums) {
forum.setIsClosed(true);
uiCategory.getForumService().modifyForum(forum, Utils.CLOSE);
}
uiCategory.isEditForum = true;
} catch (Exception e) {
}
}
if (forums.size() <= 0) {
warning("UICategory.msg.notCheck");
}
}
}
static public class MoveForumActionListener extends BaseEventListener<UICategory> {
public void onEvent(Event<UICategory> event, UICategory uiCategory, final String objectId) throws Exception {
List<Forum> forums = uiCategory.getForumsChecked(false);
if ((forums.size() > 0)) {
UIMoveForumForm moveForumForm = uiCategory.openPopup(UIMoveForumForm.class, 315, 365);
moveForumForm.setListForum(forums, uiCategory.categoryId);
moveForumForm.setForumUpdate(false);
uiCategory.isEditForum = true;
} else {
warning("UICategory.msg.notCheck");
}
}
}
static public class RemoveForumActionListener extends BaseEventListener<UICategory> {
public void onEvent(Event<UICategory> event, UICategory uiCategory, final String objectId) throws Exception {
List<Forum> forums = uiCategory.getForumsChecked(false);
if ((forums.size() > 0)) {
try {
for (Forum forum : forums) {
uiCategory.getForumService().removeForum(uiCategory.categoryId, forum.getId());
}
uiCategory.getAncestorOfType(UIForumPortlet.class).getChild(UIForumLinks.class).setUpdateForumLinks();
uiCategory.isEditForum = true;
} catch (Exception e) {
}
} else {
warning("UICategory.msg.notCheck");
}
}
}
static public class OpenForumLinkActionListener extends BaseEventListener<UICategory> {
public void onEvent(Event<UICategory> event, UICategory uiCategory, final String forumId) throws Exception {
Forum forum = uiCategory.getForumService().getForum(uiCategory.categoryId, forumId);
if (forum != null) {
UIForumPortlet forumPortlet = uiCategory.getAncestorOfType(UIForumPortlet.class);
forumPortlet.updateIsRendered(ForumUtils.FORUM);
UIForumContainer uiForumContainer = forumPortlet.getChild(UIForumContainer.class);
uiForumContainer.setIsRenderChild(true);
uiForumContainer.getChild(UIForumDescription.class).setForum(forum);
UITopicContainer uiTopicContainer = uiForumContainer.getChild(UITopicContainer.class);
uiTopicContainer.setUpdateForum(uiCategory.categoryId, forum, 0);
forumPortlet.getChild(UIForumLinks.class).setValueOption((uiCategory.categoryId + ForumUtils.SLASH + forumId));
event.getRequestContext().addUIComponentToUpdateByAjax(forumPortlet);
} else {
uiCategory.isEditForum = true;
warning("UITopicContainer.msg.forum-deleted");
event.getRequestContext().addUIComponentToUpdateByAjax(uiCategory);
}
}
}
static public class OpenLastTopicLinkActionListener extends BaseEventListener<UICategory> {
public void onEvent(Event<UICategory> event, UICategory uiCategory, final String Id) throws Exception {
String[] id = Id.trim().split(ForumUtils.SLASH);
UIForumPortlet forumPortlet = uiCategory.getAncestorOfType(UIForumPortlet.class);
Topic topic = uiCategory.getForumService().getTopicSummary(uiCategory.categoryId+ForumUtils.SLASH+Id);
if(topic != null) {
forumPortlet.updateIsRendered(ForumUtils.FORUM);
UIForumContainer uiForumContainer = forumPortlet.getChild(UIForumContainer.class);
UITopicDetailContainer uiTopicDetailContainer = uiForumContainer.getChild(UITopicDetailContainer.class);
uiForumContainer.setIsRenderChild(false);
UITopicDetail uiTopicDetail = uiTopicDetailContainer.getChild(UITopicDetail.class);
uiForumContainer.getChild(UIForumDescription.class).setForum(uiCategory.getForum(id[0]));
topic = uiCategory.getForumService().getTopicUpdate(topic, true);
uiTopicDetail.setUpdateForum(uiCategory.getForum(id[0]));
uiTopicDetail.initInfoTopic(uiCategory.categoryId, id[0], topic, 0);
String lastPostId = ForumUtils.EMPTY_STR;
uiTopicDetail.setLastPostId(lastPostId);
if (lastPostId == null || lastPostId.length() < 0)
lastPostId = "lastpost";
uiTopicDetail.setIdPostView(lastPostId);
uiTopicDetailContainer.getChild(UITopicPoll.class).updateFormPoll(uiCategory.categoryId, id[0], topic.getId());
forumPortlet.getChild(UIForumLinks.class).setValueOption((uiCategory.categoryId + ForumUtils.SLASH + id[0] + " "));
} else {
Object[] args = { ForumUtils.EMPTY_STR };
UIApplication uiApp = (UIApplication)forumPortlet;
uiApp.addMessage(new ApplicationMessage("UIForumPortlet.msg.topicEmpty", args, ApplicationMessage.WARNING));
event.getRequestContext().addUIComponentToUpdateByAjax(uiApp.getUIPopupMessages());
}
event.getRequestContext().addUIComponentToUpdateByAjax(forumPortlet);
}
}
static public class OpenLastReadTopicActionListener extends BaseEventListener<UICategory> {
public void onEvent(Event<UICategory> event, UICategory uiCategory, String path) throws Exception {
WebuiRequestContext context = event.getRequestContext();
String[] id = path.trim().split(ForumUtils.SLASH);
Topic topic = uiCategory.getForumService().getTopicSummary(id[0]+ForumUtils.SLASH+id[1]+ForumUtils.SLASH+id[2]);
UIForumPortlet forumPortlet = uiCategory.getAncestorOfType(UIForumPortlet.class);
if (topic == null) {
warning("UIForumPortlet.msg.topicEmpty");
forumPortlet.updateUserProfileInfo();
} else {
topic = uiCategory.getForumService().getTopicUpdate(topic, true);
path = topic.getPath();
Forum forum;
if (path.indexOf(id[1]) < 0) {
if (id[id.length - 1].indexOf(Utils.POST) == 0) {
path = path.substring(path.indexOf(Utils.CATEGORY)) + ForumUtils.SLASH + id[id.length - 1];
} else {
path = path.substring(path.indexOf(Utils.CATEGORY));
}
id = path.trim().split(ForumUtils.SLASH);
forum = uiCategory.getForumService().getForum(id[0], id[1]);
forumPortlet.updateUserProfileInfo();
} else {
forum = uiCategory.getForum(id[1]);
}
Category category = uiCategory.getCategory();
if (forumPortlet.checkCanView(category, forum, topic)) {
forumPortlet.updateIsRendered(ForumUtils.FORUM);
UIForumContainer uiForumContainer = forumPortlet.getChild(UIForumContainer.class);
UITopicDetailContainer uiTopicDetailContainer = uiForumContainer.getChild(UITopicDetailContainer.class);
uiForumContainer.setIsRenderChild(false);
UITopicDetail uiTopicDetail = uiTopicDetailContainer.getChild(UITopicDetail.class);
uiForumContainer.getChild(UIForumDescription.class).setForum(forum);
uiTopicDetail.setUpdateForum(forum);
uiTopicDetail.initInfoTopic(id[0], id[1], topic, 0);
if (id[id.length - 1].indexOf(Utils.POST) == 0) {
uiTopicDetail.setIdPostView(id[id.length - 1]);
uiTopicDetail.setLastPostId(id[id.length - 1]);
} else {
uiTopicDetail.setIdPostView("lastpost");
}
uiTopicDetailContainer.getChild(UITopicPoll.class).updateFormPoll(id[0], id[1], topic.getId());
forumPortlet.getChild(UIForumLinks.class).setValueOption((id[0] + ForumUtils.SLASH + id[1] + " "));
event.getRequestContext().addUIComponentToUpdateByAjax(forumPortlet);
} else {
uiCategory.userProfile.addLastPostIdReadOfForum(forum.getId(), ForumUtils.EMPTY_STR);
uiCategory.getForumService().saveLastPostIdRead(uiCategory.userProfile.getUserId(), uiCategory.userProfile.getLastReadPostOfForum(), uiCategory.userProfile.getLastReadPostOfTopic());
((UIApplication) forumPortlet).addMessage(new ApplicationMessage("UIForumPortlet.msg.do-not-permission", new String[] { "this", "topic" }, ApplicationMessage.WARNING));
context.addUIComponentToUpdateByAjax(uiCategory);
}
}
context.addUIComponentToUpdateByAjax(forumPortlet);
}
}
static public class SearchFormActionListener extends BaseEventListener<UICategory> {
public void onEvent(Event<UICategory> event, UICategory uiCategory, final String objectId) throws Exception {
String path = uiCategory.category.getPath();
UIFormStringInput formStringInput = uiCategory.getUIStringInput(ForumUtils.SEARCHFORM_ID);
String text = formStringInput.getValue();
if (!ForumUtils.isEmpty(text) && !ForumUtils.isEmpty(path)) {
String special = "\\,.?!`~/][)(;#@$%^&*<>-_+=|:\"'";
for (int i = 0; i < special.length(); i++) {
char c = special.charAt(i);
if (text.indexOf(c) >= 0) {
warning("UIQuickSearchForm.msg.failure");
return;
}
}
StringBuffer type = new StringBuffer();
List<String> forumIdsOfModerator = new ArrayList<String>();
if (uiCategory.userProfile.getUserRole() == 0) {
type.append("true,").append(Utils.FORUM).append(ForumUtils.SLASH).append(Utils.TOPIC).append(ForumUtils.SLASH).append(Utils.POST);
} else {
type.append("false,").append(Utils.FORUM).append(ForumUtils.SLASH).append(Utils.TOPIC).append(ForumUtils.SLASH).append(Utils.POST);
if (uiCategory.userProfile.getUserRole() == 1) {
String[] strings = uiCategory.userProfile.getModerateForums();
for (int i = 0; i < strings.length; i++) {
String str = strings[i].substring(strings[i].lastIndexOf(ForumUtils.SLASH) + 1);
if (str.length() > 0)
forumIdsOfModerator.add(str);
}
}
}
UIForumPortlet forumPortlet = uiCategory.getAncestorOfType(UIForumPortlet.class);
forumPortlet.updateIsRendered(ForumUtils.CATEGORIES);
UICategoryContainer categoryContainer = forumPortlet.getChild(UICategoryContainer.class);
categoryContainer.updateIsRender(true);
UICategories categories = categoryContainer.getChild(UICategories.class);
categories.setIsRenderChild(true);
List<ForumSearch> list = uiCategory.getForumService().getQuickSearch(text, type.toString(), path, uiCategory.userProfile.getUserId(), forumPortlet.getInvisibleCategories(), forumPortlet.getInvisibleForums(), forumIdsOfModerator);
UIForumListSearch listSearchEvent = categories.getChild(UIForumListSearch.class);
listSearchEvent.setListSearchEvent(list, uiCategory.category.getId());
forumPortlet.getChild(UIBreadcumbs.class).setUpdataPath(ForumUtils.FIELD_EXOFORUM_LABEL);
formStringInput.setValue(ForumUtils.EMPTY_STR);
event.getRequestContext().addUIComponentToUpdateByAjax(forumPortlet);
} else {
warning("UIQuickSearchForm.msg.checkEmpty");
}
}
}
static public class AddBookMarkActionListener extends BaseEventListener<UICategory> {
public void onEvent(Event<UICategory> event, UICategory uiCategory, String path) throws Exception {
if (!ForumUtils.isEmpty(path)) {
int t = path.indexOf("//");
String type = path.substring(0, t);
if (type.equals("forum")) {
path = path.substring(t + 2);
String forumId = path.substring(path.indexOf(ForumUtils.SLASH) + 1);
Forum forum = uiCategory.getForum(forumId);
path = "ForumNormalIcon//" + forum.getForumName() + "//" + forumId;
} else if (type.equals("category")) {
path = path.substring(path.indexOf("//") + 2);
Category category = uiCategory.getCategory();
path = "CategoryNormalIcon//" + category.getCategoryName() + "//" + path;
} else {
path = path.substring(t + 2);
String topicId = path.substring(path.lastIndexOf(ForumUtils.SLASH) + 1);
Topic topic = uiCategory.getTopic(topicId);
path = "ThreadNoNewPost//" + topic.getTopicName() + "//" + topicId;
}
String userName = uiCategory.userProfile.getUserId();
try {
uiCategory.getForumService().saveUserBookmark(userName, path, true);
} catch (Exception e) {
}
UIForumPortlet forumPortlet = uiCategory.getAncestorOfType(UIForumPortlet.class);
forumPortlet.updateUserProfileInfo();
}
}
}
static public class AddWatchingActionListener extends BaseEventListener<UICategory> {
public void onEvent(Event<UICategory> event, UICategory uiform, final String path) throws Exception {
isUnWatch = !uiform.addWatch(path, uiform.userProfile);
if(!isUnWatch) uiform.isEditCategory = true;
event.getRequestContext().addUIComponentToUpdateByAjax(uiform);
}
}
static public class UnWatchActionListener extends BaseEventListener<UICategory> {
public void onEvent(Event<UICategory> event, UICategory uiCategory, final String path) throws Exception {
if(uiCategory.unWatch(path, uiCategory.userProfile)) {
isUnWatch = true;
uiCategory.isEditCategory = true;
}
event.getRequestContext().addUIComponentToUpdateByAjax(uiCategory);
}
}
static public class AdvancedSearchActionListener extends BaseEventListener<UICategory> {
public void onEvent(Event<UICategory> event, UICategory uiCategory, final String objectId) throws Exception {
UIForumPortlet forumPortlet = uiCategory.getAncestorOfType(UIForumPortlet.class);
forumPortlet.updateIsRendered(ForumUtils.FIELD_SEARCHFORUM_LABEL);
forumPortlet.getChild(UIBreadcumbs.class).setUpdataPath(ForumUtils.FIELD_EXOFORUM_LABEL);
UISearchForm searchForm = forumPortlet.getChild(UISearchForm.class);
searchForm.setUserProfile(forumPortlet.getUserProfile());
searchForm.setSelectType(Utils.FORUM);
searchForm.setPath(uiCategory.category.getPath());
event.getRequestContext().addUIComponentToUpdateByAjax(forumPortlet);
}
}
static public class ExportCategoryActionListener extends BaseEventListener<UICategory> {
public void onEvent(Event<UICategory> event, UICategory uiCategory, final String path) throws Exception {
uiCategory.isEditCategory = true;
Category category = uiCategory.getCategory();
if (category == null) {
UIForumPortlet forumPortlet = uiCategory.getAncestorOfType(UIForumPortlet.class);
forumPortlet.rederForumHome();
warning("UIForumPortlet.msg.catagory-deleted");
event.getRequestContext().addUIComponentToUpdateByAjax(forumPortlet);
return;
}
UIExportForm exportForm = uiCategory.openPopup(UIExportForm.class, 450, 300);
exportForm.setObjectId(category);
}
}
static public class ImportForumActionListener extends BaseEventListener<UICategory> {
public void onEvent(Event<UICategory> event, UICategory uiCategory, final String path) throws Exception {
Category cate = uiCategory.getCategory();
if (cate == null) {
UIForumPortlet forumPortlet = uiCategory.getAncestorOfType(UIForumPortlet.class);
forumPortlet.rederForumHome();
warning("UITopicContainer.msg.forum-deleted");
event.getRequestContext().addUIComponentToUpdateByAjax(forumPortlet);
return;
}
UIImportForm importForm = uiCategory.openPopup(UIImportForm.class, 450, 160);
importForm.setPath(cate.getPath());
}
}
static public class WatchOptionActionListener extends BaseEventListener<UICategory> {
public void onEvent(Event<UICategory> event, UICategory uiCategory, final String objectId) throws Exception {
Category category;
if (UICategory.isUnWatch) {
category = uiCategory.refreshCategory();
} else {
category = uiCategory.category;
}
UIWatchToolsForm watchToolsForm = uiCategory.openPopup(UIWatchToolsForm.class, 500, 365);
watchToolsForm.setPath(category.getPath());
watchToolsForm.setEmails(category.getEmailNotification());
}
}
static public class RSSActionListener extends BaseEventListener<UICategory> {
public void onEvent(Event<UICategory> event, UICategory uiCategory, final String cateId) throws Exception {
String userId = uiCategory.getUserProfile().getUserId();
if (!userId.equals(UserProfile.USER_GUEST)) {
uiCategory.getForumService().addWatch(-1, cateId, null, userId);
event.getRequestContext().addUIComponentToUpdateByAjax(uiCategory);
}
}
}
}