/*************************************************************************** * 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.popup; import java.util.ArrayList; import java.util.Date; 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.webui.BaseForumForm; import org.exoplatform.forum.webui.UIBreadcumbs; import org.exoplatform.forum.webui.UICategories; import org.exoplatform.forum.webui.UICategory; import org.exoplatform.forum.webui.UIForumContainer; import org.exoplatform.forum.webui.UIForumDescription; import org.exoplatform.forum.webui.UIForumLinks; import org.exoplatform.forum.webui.UIForumPortlet; import org.exoplatform.forum.webui.UITopicContainer; import org.exoplatform.ks.common.UserHelper; import org.exoplatform.ks.common.Utils; import org.exoplatform.ks.common.webui.BaseEventListener; import org.exoplatform.ks.common.webui.UIPopupContainer; import org.exoplatform.ks.common.webui.UISelector; import org.exoplatform.ks.common.webui.UIUserSelect; import org.exoplatform.services.organization.User; import org.exoplatform.webui.application.WebuiRequestContext; import org.exoplatform.webui.config.annotation.ComponentConfig; import org.exoplatform.webui.config.annotation.ComponentConfigs; import org.exoplatform.webui.config.annotation.EventConfig; import org.exoplatform.webui.core.UIPopupComponent; import org.exoplatform.webui.core.UIPopupWindow; import org.exoplatform.webui.core.UITree; import org.exoplatform.webui.core.lifecycle.UIFormLifecycle; import org.exoplatform.webui.core.model.SelectItemOption; import org.exoplatform.webui.event.Event; import org.exoplatform.webui.event.EventListener; import org.exoplatform.webui.event.Event.Phase; import org.exoplatform.webui.form.UIFormCheckBoxInput; import org.exoplatform.webui.form.UIFormInputWithActions; import org.exoplatform.webui.form.UIFormSelectBox; import org.exoplatform.webui.form.UIFormStringInput; import org.exoplatform.webui.form.UIFormTextAreaInput; import org.exoplatform.webui.form.UIFormInputWithActions.ActionData; import org.exoplatform.webui.form.validator.MandatoryValidator; import org.exoplatform.webui.form.validator.PositiveNumberFormatValidator; import org.exoplatform.webui.organization.account.UIUserSelector; /** * Created by The eXo Platform SARL * Author : Hung Nguyen * hung.nguyen@exoplatform.com * Aus 01, 2007 2:48:18 PM */ @ComponentConfigs ( { @ComponentConfig( lifecycle = UIFormLifecycle.class, template = "app:/templates/forum/webui/popup/UIForumForm.gtmpl", events = { @EventConfig(listeners = UIForumForm.SaveActionListener.class), @EventConfig(listeners = UIForumForm.AddValuesUserActionListener.class, phase=Phase.DECODE), @EventConfig(listeners = UIForumForm.AddUserActionListener.class, phase=Phase.DECODE), @EventConfig(listeners = UIForumForm.CancelActionListener.class, phase=Phase.DECODE), @EventConfig(listeners = UIForumForm.SelectTabActionListener.class, phase=Phase.DECODE), @EventConfig(listeners = UIForumForm.OnChangeAutoEmailActionListener.class, phase=Phase.DECODE) } ) , @ComponentConfig( id = "UIForumUserPopupWindow", type = UIPopupWindow.class, template = "system:/groovy/webui/core/UIPopupWindow.gtmpl", events = { @EventConfig(listeners = UIForumForm.ClosePopupActionListener.class, name = "ClosePopup") , @EventConfig(listeners = UIForumForm.AddActionListener.class, name = "Add", phase = Phase.DECODE), @EventConfig(listeners = UIForumForm.CloseActionListener.class, name = "Close", phase = Phase.DECODE) } ) } ) public class UIForumForm extends BaseForumForm implements UIPopupComponent, UISelector { private boolean isCategoriesUpdate = true; private boolean isForumUpdate = false; private boolean isActionBar = false; private boolean isMode = false; private boolean isAddValue = true; private boolean isUpdate = false; private String forumId = ForumUtils.EMPTY_STR; private String categoryId = ForumUtils.EMPTY_STR; private String listEmailAutoUpdate = ForumUtils.EMPTY_STR; private int id = 0; private boolean isDoubleClickSubmit; public static final String FIELD_NEWFORUM_FORM = "newForum"; public static final String FIELD_MODERATOROPTION_FORM = "moderationOptions"; public static final String FIELD_FORUMPERMISSION_FORM = "forumPermission"; public static final String FIELD_CATEGORY_SELECTBOX = "Category"; public static final String FIELD_FORUMTITLE_INPUT = "ForumTitle"; public static final String FIELD_FORUMORDER_INPUT = "ForumOrder"; public static final String FIELD_FORUMSTATUS_SELECTBOX = "ForumStatus"; public static final String FIELD_FORUMSTATE_SELECTBOX = "ForumState"; public static final String FIELD_DESCRIPTION_TEXTAREA = "Description"; public static final String FIELD_AUTOADDEMAILNOTIFY_CHECKBOX = "AutoAddEmailNotify"; public static final String FIELD_NOTIFYWHENADDTOPIC_MULTIVALUE = "NotifyWhenAddTopic"; public static final String FIELD_NOTIFYWHENADDPOST_MULTIVALUE = "NotifyWhenAddPost"; public static final String FIELD_MODERATETHREAD_CHECKBOX = "ModerateThread"; public static final String FIELD_MODERATEPOST_CHECKBOX = "ModeratePost"; public static final String FIELD_MODERATOR_MULTIVALUE = "Moderator"; public static final String FIELD_VIEWER_MULTIVALUE = "Viewer"; public static final String FIELD_POSTABLE_MULTIVALUE = "Postable"; public static final String FIELD_TOPICABLE_MULTIVALUE = "Topicable"; public static final String USER_SELECTOR_POPUPWINDOW = "UIForumUserPopupWindow"; public UIForumForm() throws Exception { isDoubleClickSubmit = false; } public boolean isMode() { return isMode; } public void setMode(boolean isMode) { this.isMode = isMode; } public void initForm() throws Exception { List<SelectItemOption<String>> list = new ArrayList<SelectItemOption<String>>(); if (ForumUtils.isEmpty(categoryId)) { List<Category> categorys = getForumService().getCategories(); for (Category category : categorys) { list.add(new SelectItemOption<String>(category.getCategoryName(), category.getId())); } categoryId = categorys.get(0).getId(); } else { Category category = getForumService().getCategory(categoryId); list.add(new SelectItemOption<String>(category.getCategoryName(), categoryId)); } UIFormSelectBox selictCategoryId = new UIFormSelectBox(FIELD_CATEGORY_SELECTBOX, FIELD_CATEGORY_SELECTBOX, list); selictCategoryId.setDefaultValue(categoryId); UIFormStringInput forumTitle = new UIFormStringInput(FIELD_FORUMTITLE_INPUT, FIELD_FORUMTITLE_INPUT, null); forumTitle.addValidator(MandatoryValidator.class); UIFormStringInput forumOrder = new UIFormStringInput(FIELD_FORUMORDER_INPUT, FIELD_FORUMORDER_INPUT, "0"); forumOrder.addValidator(PositiveNumberFormatValidator.class); List<SelectItemOption<String>> ls = new ArrayList<SelectItemOption<String>>(); ls.add(new SelectItemOption<String>(getLabel("Open"), "open")); ls.add(new SelectItemOption<String>(getLabel("Closed"), "closed")); UIFormSelectBox forumState = new UIFormSelectBox(FIELD_FORUMSTATE_SELECTBOX, FIELD_FORUMSTATE_SELECTBOX, ls); forumState.setDefaultValue("open"); ls = new ArrayList<SelectItemOption<String>>(); ls.add(new SelectItemOption<String>(this.getLabel("UnLock"), "unlock")); ls.add(new SelectItemOption<String>(this.getLabel("Locked"), "locked")); UIFormSelectBox forumStatus = new UIFormSelectBox(FIELD_FORUMSTATUS_SELECTBOX, FIELD_FORUMSTATUS_SELECTBOX, ls); forumStatus.setDefaultValue("unlock"); UIFormTextAreaInput description = new UIFormTextAreaInput(FIELD_DESCRIPTION_TEXTAREA, FIELD_DESCRIPTION_TEXTAREA, null); UIFormCheckBoxInput<Boolean> checkWhenAddTopic = new UIFormCheckBoxInput<Boolean>(FIELD_MODERATETHREAD_CHECKBOX, FIELD_MODERATETHREAD_CHECKBOX, false); UIFormTextAreaInput notifyWhenAddPost = new UIFormTextAreaInput(FIELD_NOTIFYWHENADDPOST_MULTIVALUE, FIELD_NOTIFYWHENADDPOST_MULTIVALUE, null); UIFormTextAreaInput notifyWhenAddTopic = new UIFormTextAreaInput(FIELD_NOTIFYWHENADDTOPIC_MULTIVALUE, FIELD_NOTIFYWHENADDTOPIC_MULTIVALUE, null); UIFormTextAreaInput moderator = new UIFormTextAreaInput(FIELD_MODERATOR_MULTIVALUE, FIELD_MODERATOR_MULTIVALUE, null); UIFormTextAreaInput viewer = new UIFormTextAreaInput(FIELD_VIEWER_MULTIVALUE, FIELD_VIEWER_MULTIVALUE, null); UIFormTextAreaInput postable = new UIFormTextAreaInput(FIELD_POSTABLE_MULTIVALUE, FIELD_POSTABLE_MULTIVALUE, null); UIFormTextAreaInput topicable = new UIFormTextAreaInput(FIELD_TOPICABLE_MULTIVALUE, FIELD_TOPICABLE_MULTIVALUE, null); UIFormCheckBoxInput<Boolean> autoAddEmailNotify = new UIFormCheckBoxInput<Boolean>(FIELD_AUTOADDEMAILNOTIFY_CHECKBOX, FIELD_AUTOADDEMAILNOTIFY_CHECKBOX, true); autoAddEmailNotify.setValue(true); autoAddEmailNotify.setOnChange("OnChangeAutoEmail"); addUIFormInput(selictCategoryId); UIFormInputWithActions newForum = new UIFormInputWithActions(FIELD_NEWFORUM_FORM); newForum.addUIFormInput(forumTitle); newForum.addUIFormInput(forumOrder); newForum.addUIFormInput(forumState); newForum.addUIFormInput(forumStatus); newForum.addUIFormInput(description); UIFormInputWithActions moderationOptions = new UIFormInputWithActions(FIELD_MODERATOROPTION_FORM); moderationOptions.addUIFormInput(moderator); moderationOptions.addUIFormInput(autoAddEmailNotify); moderationOptions.addUIFormInput(notifyWhenAddPost); moderationOptions.addUIFormInput(notifyWhenAddTopic); moderationOptions.addUIFormInput(checkWhenAddTopic); UIFormInputWithActions forumPermission = new UIFormInputWithActions(FIELD_FORUMPERMISSION_FORM); forumPermission.addUIFormInput(topicable); forumPermission.addUIFormInput(postable); forumPermission.addUIFormInput(viewer); String[] fieldPermissions = getChildIds(); String[] strings = new String[] { "SelectUser", "SelectMemberShip", "SelectGroup" }; List<ActionData> actions; ActionData ad; int i; for (String fieldPermission : fieldPermissions) { actions = new ArrayList<ActionData>(); i = 0; for (String string : strings) { ad = new ActionData(); if (i == 0) ad.setActionListener("AddUser"); else ad.setActionListener("AddValuesUser"); ad.setActionParameter(fieldPermission + ForumUtils.SLASH + String.valueOf(i)); ad.setCssIconClass(string + "Icon"); ad.setActionName(string); actions.add(ad); ++i; } if (fieldPermission.equals(FIELD_MODERATOR_MULTIVALUE)) { if (isMode) continue; else moderationOptions.setActionField(fieldPermission, actions); } else forumPermission.setActionField(fieldPermission, actions); } addUIFormInput(newForum); addUIFormInput(moderationOptions); addUIFormInput(forumPermission); this.setActions(new String[] { "Save", "Cancel" }); } public void activate() throws Exception { } public void deActivate() throws Exception { } @SuppressWarnings("unused") private boolean getIsSelected(int id) { if (this.id == id) return true; return false; } @SuppressWarnings("unchecked") public void setForumValue(Forum forum, boolean isUpdate) throws Exception { this.isUpdate = isUpdate; if (isUpdate) { forumId = forum.getId(); forum = getForumService().getForum(categoryId, forumId); UIFormInputWithActions newForum = this.getChildById(FIELD_NEWFORUM_FORM); newForum.getUIStringInput(FIELD_FORUMTITLE_INPUT).setValue(forum.getForumName()); newForum.getUIStringInput(FIELD_FORUMORDER_INPUT).setValue(String.valueOf(forum.getForumOrder())); String stat = "open"; if (forum.getIsClosed()) stat = "closed"; newForum.getUIFormSelectBox(FIELD_FORUMSTATE_SELECTBOX).setValue(stat); if (forum.getIsLock()) stat = "locked"; else stat = "unlock"; newForum.getUIFormSelectBox(FIELD_FORUMSTATUS_SELECTBOX).setValue(stat); newForum.getUIFormTextAreaInput(FIELD_DESCRIPTION_TEXTAREA).setDefaultValue(forum.getDescription()); UIFormInputWithActions moderationOptions = this.getChildById(FIELD_MODERATOROPTION_FORM); boolean isAutoAddEmail = forum.getIsAutoAddEmailNotify(); UIFormCheckBoxInput<Boolean> boxInput = moderationOptions.getUIFormCheckBoxInput(FIELD_AUTOADDEMAILNOTIFY_CHECKBOX); boxInput.setChecked(isAutoAddEmail); boxInput.setEditable(!isMode); UIFormTextAreaInput areaInput = moderationOptions.getUIFormTextAreaInput(FIELD_MODERATOR_MULTIVALUE); areaInput.setValue(ForumUtils.unSplitForForum(forum.getModerators())); areaInput.setEditable(!isMode); areaInput.setEnable(!isMode); UIFormTextAreaInput notifyWhenAddPost = moderationOptions.getUIFormTextAreaInput(FIELD_NOTIFYWHENADDPOST_MULTIVALUE); UIFormTextAreaInput notifyWhenAddTopic = moderationOptions.getUIFormTextAreaInput(FIELD_NOTIFYWHENADDTOPIC_MULTIVALUE); notifyWhenAddPost.setValue(ForumUtils.unSplitForForum(forum.getNotifyWhenAddPost())); notifyWhenAddTopic.setValue(ForumUtils.unSplitForForum(forum.getNotifyWhenAddTopic())); moderationOptions.getUIFormCheckBoxInput(FIELD_MODERATETHREAD_CHECKBOX).setChecked(forum.getIsModerateTopic()); UIFormInputWithActions forumPermission = this.getChildById(FIELD_FORUMPERMISSION_FORM); forumPermission.getUIFormTextAreaInput(FIELD_VIEWER_MULTIVALUE).setValue(ForumUtils.unSplitForForum(forum.getViewer())); forumPermission.getUIFormTextAreaInput(FIELD_TOPICABLE_MULTIVALUE).setValue(ForumUtils.unSplitForForum(forum.getCreateTopicRole())); forumPermission.getUIFormTextAreaInput(FIELD_POSTABLE_MULTIVALUE).setValue(ForumUtils.unSplitForForum(forum.getPoster())); } } public void setCategoryValue(String categoryId, boolean isEditable) throws Exception { if (!ForumUtils.isEmpty(categoryId)) getUIFormSelectBox(FIELD_CATEGORY_SELECTBOX).setValue(categoryId); getUIFormSelectBox(FIELD_CATEGORY_SELECTBOX).setEnable(isEditable); isCategoriesUpdate = isEditable; this.categoryId = categoryId; isUpdate = false; } public void setForumUpdate(boolean isForumUpdate) { this.isForumUpdate = isForumUpdate; } public boolean isActionBar() { return isActionBar; } public void setActionBar(boolean isActionBar) { this.isActionBar = isActionBar; } private String[] getChildIds() { return new String[] { FIELD_MODERATOR_MULTIVALUE, FIELD_TOPICABLE_MULTIVALUE, FIELD_POSTABLE_MULTIVALUE, FIELD_VIEWER_MULTIVALUE }; } public void updateSelect(String selectField, String value) throws Exception { UIFormTextAreaInput fieldInput = getUIFormTextAreaInput(selectField); if (selectField.indexOf("Notify") >= 0) { fieldInput.setValue(value); } else { String values = fieldInput.getValue(); fieldInput.setValue(ForumUtils.updateMultiValues(value, values)); if (selectField.equals(FIELD_MODERATOR_MULTIVALUE)) { UIFormInputWithActions moderationOptions = this.getChildById(FIELD_MODERATOROPTION_FORM); boolean isAutoAddEmail = moderationOptions.getUIFormCheckBoxInput(FIELD_AUTOADDEMAILNOTIFY_CHECKBOX).isChecked(); if (isAutoAddEmail) { this.setDefaultEmail(moderationOptions); } this.isAddValue = false; } else { this.isAddValue = true; } } } static public class SaveActionListener extends EventListener<UIForumForm> { public void execute(Event<UIForumForm> event) throws Exception { UIForumForm uiForm = event.getSource(); if (uiForm.isDoubleClickSubmit) return; uiForm.isDoubleClickSubmit = true; UIForumPortlet forumPortlet = uiForm.getAncestorOfType(UIForumPortlet.class); UIFormSelectBox categorySelectBox = uiForm.getUIFormSelectBox(FIELD_CATEGORY_SELECTBOX); String categoryId = categorySelectBox.getValue(); UIFormInputWithActions newForumForm = uiForm.getChildById(FIELD_NEWFORUM_FORM); String forumTitle = newForumForm.getUIStringInput(FIELD_FORUMTITLE_INPUT).getValue(); forumTitle = forumTitle.trim(); int maxText = 50;// ForumUtils.MAXTITLE ; if (forumTitle.length() > maxText) { uiForm.warning("NameValidator.msg.warning-long-text", new String[] { uiForm.getLabel(FIELD_FORUMTITLE_INPUT), String.valueOf(maxText) }); uiForm.isDoubleClickSubmit = false; return; } forumTitle = Utils.encodeSpecialCharInTitle(forumTitle); String forumOrder = newForumForm.getUIStringInput(FIELD_FORUMORDER_INPUT).getValue(); if (ForumUtils.isEmpty(forumOrder)) forumOrder = "0"; forumOrder = ForumUtils.removeZeroFirstNumber(forumOrder); if (forumOrder.length() > 3) { uiForm.warning("NameValidator.msg.erro-large-number", new String[] { uiForm.getLabel(FIELD_FORUMORDER_INPUT) }); uiForm.isDoubleClickSubmit = false; return; } String forumState = newForumForm.getUIFormSelectBox(FIELD_FORUMSTATE_SELECTBOX).getValue(); String forumStatus = newForumForm.getUIFormSelectBox(FIELD_FORUMSTATUS_SELECTBOX).getValue(); String description = newForumForm.getUIFormTextAreaInput(FIELD_DESCRIPTION_TEXTAREA).getValue(); description = Utils.encodeSpecialCharInTitle(description); UIFormInputWithActions moderationOptions = uiForm.getChildById(FIELD_MODERATOROPTION_FORM); boolean isAutoAddEmail = moderationOptions.getUIFormCheckBoxInput(FIELD_AUTOADDEMAILNOTIFY_CHECKBOX).isChecked(); String moderators = moderationOptions.getUIFormTextAreaInput(FIELD_MODERATOR_MULTIVALUE).getValue(); // set email if (isAutoAddEmail && uiForm.isAddValue) { // uiForm.setDefaultEmail(moderationOptions); } String notifyWhenAddTopics = moderationOptions.getUIFormTextAreaInput(FIELD_NOTIFYWHENADDTOPIC_MULTIVALUE).getValue(); String notifyWhenAddPosts = moderationOptions.getUIFormTextAreaInput(FIELD_NOTIFYWHENADDPOST_MULTIVALUE).getValue(); if (!ForumUtils.isValidEmailAddresses(notifyWhenAddPosts) || !ForumUtils.isValidEmailAddresses(notifyWhenAddTopics)) { uiForm.warning("UIAddMultiValueForm.msg.invalid-field"); uiForm.isDoubleClickSubmit = false; return; } String[] notifyWhenAddTopic = ForumUtils.splitForForum(notifyWhenAddTopics); String[] notifyWhenAddPost = ForumUtils.splitForForum(notifyWhenAddPosts); Boolean ModerateTopic = (Boolean) moderationOptions.getUIFormCheckBoxInput(FIELD_MODERATETHREAD_CHECKBOX).getValue(); UIFormInputWithActions forumPermission = uiForm.getChildById(FIELD_FORUMPERMISSION_FORM); String topicable = forumPermission.getUIFormTextAreaInput(FIELD_TOPICABLE_MULTIVALUE).getValue(); String postable = forumPermission.getUIFormTextAreaInput(FIELD_POSTABLE_MULTIVALUE).getValue(); String viewer = forumPermission.getUIFormTextAreaInput(FIELD_VIEWER_MULTIVALUE).getValue(); moderators = ForumUtils.removeSpaceInString(moderators); topicable = ForumUtils.removeSpaceInString(topicable); postable = ForumUtils.removeSpaceInString(postable); viewer = ForumUtils.removeSpaceInString(viewer); String userName = UserHelper.getCurrentUser(); Forum newForum = new Forum(); newForum.setForumName(forumTitle); newForum.setOwner(userName); newForum.setForumOrder(Integer.valueOf(forumOrder).intValue()); newForum.setCreatedDate(new Date()); newForum.setDescription(description); newForum.setLastTopicPath(ForumUtils.EMPTY_STR); newForum.setPath(ForumUtils.EMPTY_STR); newForum.setModifiedBy(userName); newForum.setModifiedDate(new Date()); newForum.setPostCount(0); newForum.setTopicCount(0); newForum.setIsAutoAddEmailNotify(isAutoAddEmail); newForum.setNotifyWhenAddPost(notifyWhenAddPost); newForum.setNotifyWhenAddTopic(notifyWhenAddTopic); newForum.setIsModeratePost(false); newForum.setIsModerateTopic(ModerateTopic); if (forumState.equals("closed")) { newForum.setIsClosed(true); } if (forumStatus.equals("locked")) { newForum.setIsLock(true); } String erroUser = UserHelper.checkValueUser(moderators); if (!ForumUtils.isEmpty(erroUser)) { String[] args = new String[] { uiForm.getLabel(FIELD_MODERATOR_MULTIVALUE), erroUser }; uiForm.warning("NameValidator.msg.erroUser-input", args); uiForm.isDoubleClickSubmit = false; return; } erroUser = UserHelper.checkValueUser(topicable); if (!ForumUtils.isEmpty(erroUser)) { String[] args = new String[] { uiForm.getLabel(FIELD_TOPICABLE_MULTIVALUE), erroUser }; uiForm.warning("NameValidator.msg.erroUser-input", args); uiForm.isDoubleClickSubmit = false; return; } erroUser = UserHelper.checkValueUser(postable); if (!ForumUtils.isEmpty(erroUser)) { String[] args = new String[] { uiForm.getLabel(FIELD_POSTABLE_MULTIVALUE), erroUser }; uiForm.warning("NameValidator.msg.erroUser-input", args); uiForm.isDoubleClickSubmit = false; return; } erroUser = UserHelper.checkValueUser(viewer); if (!ForumUtils.isEmpty(erroUser)) { String[] args = new String[] { uiForm.getLabel(FIELD_VIEWER_MULTIVALUE), erroUser }; uiForm.warning("NameValidator.msg.erroUser-input", args); uiForm.isDoubleClickSubmit = false; return; } String[] setModerators = ForumUtils.splitForForum(moderators); String[] setTopicable = ForumUtils.splitForForum(topicable); String[] setPostable = ForumUtils.splitForForum(postable); String[] setViewer = ForumUtils.splitForForum(viewer); newForum.setModerators(setModerators); newForum.setCreateTopicRole(setTopicable); newForum.setPoster(setPostable); newForum.setViewer(setViewer); try { if (!ForumUtils.isEmpty(uiForm.forumId)) { newForum.setId(uiForm.forumId); uiForm.getForumService().saveForum(categoryId, newForum, false); } else { uiForm.getForumService().saveForum(categoryId, newForum, true); List<String> invisibleCategories = forumPortlet.getInvisibleCategories(); List<String> invisibleForums = forumPortlet.getInvisibleForums(); String listForumId = ForumUtils.EMPTY_STR, listCategoryId = ForumUtils.EMPTY_STR; if (!invisibleCategories.isEmpty()) { if (invisibleCategories.contains(categoryId)) { invisibleForums.add(newForum.getId()); listForumId = invisibleForums.toString().replace('[' + ForumUtils.EMPTY_STR, ForumUtils.EMPTY_STR).replace(']' + ForumUtils.EMPTY_STR, ForumUtils.EMPTY_STR).replaceAll(" ", ForumUtils.EMPTY_STR); listCategoryId = invisibleCategories.toString().replace('[' + ForumUtils.EMPTY_STR, ForumUtils.EMPTY_STR).replace(']' + ForumUtils.EMPTY_STR, ForumUtils.EMPTY_STR).replaceAll(" ", ForumUtils.EMPTY_STR); ForumUtils.savePortletPreference(listCategoryId, listForumId); } } } } catch (Exception e) { uiForm.log.error("Save portlet preference is fall, exception: ", e); } forumPortlet.getChild(UIForumLinks.class).setUpdateForumLinks(); forumPortlet.cancelAction(); WebuiRequestContext context = event.getRequestContext(); if (uiForm.isUpdate && !uiForm.isForumUpdate) { if (uiForm.isCategoriesUpdate) { UICategories uiCategories = forumPortlet.findFirstComponentOfType(UICategories.class); uiCategories.setIsgetForumList(true); if (!uiForm.isActionBar) context.addUIComponentToUpdateByAjax(uiCategories); } else { UICategory uiCategory = forumPortlet.findFirstComponentOfType(UICategory.class); uiCategory.setIsEditForum(true); if (!uiForm.isActionBar) context.addUIComponentToUpdateByAjax(uiCategory); } if (uiForm.isActionBar) { forumPortlet.findFirstComponentOfType(UICategory.class).setIsEditForum(true); forumPortlet.findFirstComponentOfType(UICategories.class).setIsgetForumList(true); context.addUIComponentToUpdateByAjax(forumPortlet); } } else { UITopicContainer uiTopicContainer = forumPortlet.findFirstComponentOfType(UITopicContainer.class); if (!uiForm.isForumUpdate) { forumPortlet.updateIsRendered(ForumUtils.FORUM); UIForumContainer uiForumContainer = forumPortlet.getChild(UIForumContainer.class); uiForumContainer.setIsRenderChild(true); uiTopicContainer.updateByBreadcumbs(categoryId, newForum.getId(), true, 1); forumPortlet.getChild(UIForumLinks.class).setValueOption(categoryId + ForumUtils.SLASH + newForum.getId()); } UIForumDescription forumDescription = forumPortlet.findFirstComponentOfType(UIForumDescription.class); forumDescription.setForum(newForum); UIBreadcumbs breadcumbs = forumPortlet.getChild(UIBreadcumbs.class); breadcumbs.setUpdataPath(categoryId + ForumUtils.SLASH + newForum.getId()); forumPortlet.findFirstComponentOfType(UITopicContainer.class).setForum(true); context.addUIComponentToUpdateByAjax(forumPortlet); } } } static public class AddValuesUserActionListener extends BaseEventListener<UIForumForm> { public void onEvent(Event<UIForumForm> event, UIForumForm forumForm, String objctId) throws Exception { String[] array = objctId.split(ForumUtils.SLASH); String childId = array[0]; if (!ForumUtils.isEmpty(childId)) { UIPopupContainer popupContainer = forumForm.getAncestorOfType(UIPopupContainer.class); UIUserSelect uiUserSelect = popupContainer.findFirstComponentOfType(UIUserSelect.class); if (uiUserSelect != null) { UIPopupWindow popupWindow = uiUserSelect.getParent(); closePopupWindow(popupWindow); } UIGroupSelector uiGroupSelector = null; if (array[1].equals(UIGroupSelector.TYPE_MEMBERSHIP)) { uiGroupSelector = openPopup(popupContainer, UIGroupSelector.class, "UIMemberShipSelector", 600, 0); } else if (array[1].equals(UIGroupSelector.TYPE_GROUP)) { uiGroupSelector = openPopup(popupContainer, UIGroupSelector.class, "GroupSelector", 600, 0); } uiGroupSelector.setType(array[1]); uiGroupSelector.setSelectedGroups(null); uiGroupSelector.setComponent(forumForm, new String[] { childId }); uiGroupSelector.getChild(UITree.class).setId(UIGroupSelector.TREE_GROUP_ID); uiGroupSelector.getChild(org.exoplatform.webui.core.UIBreadcumbs.class).setId(UIGroupSelector.BREADCUMB_GROUP_ID); } } } static public class CancelActionListener extends EventListener<UIForumForm> { public void execute(Event<UIForumForm> event) throws Exception { UIForumPortlet forumPortlet = event.getSource().getAncestorOfType(UIForumPortlet.class); forumPortlet.cancelAction(); } } static public class OnChangeAutoEmailActionListener extends EventListener<UIForumForm> { public void execute(Event<UIForumForm> event) throws Exception { UIForumForm forumForm = event.getSource(); UIFormInputWithActions moderationOptions = forumForm.getChildById(FIELD_MODERATOROPTION_FORM); boolean isCheck = moderationOptions.getUIFormCheckBoxInput(FIELD_AUTOADDEMAILNOTIFY_CHECKBOX).isChecked(); if (isCheck) { forumForm.setDefaultEmail(moderationOptions); } else event.getRequestContext().addUIComponentToUpdateByAjax(moderationOptions); } } private void setDefaultEmail(UIFormInputWithActions moderationOptions) throws Exception { String moderators = moderationOptions.getUIFormTextAreaInput(FIELD_MODERATOR_MULTIVALUE).getValue(); UIFormTextAreaInput notifyWhenAddTopics = moderationOptions.getUIFormTextAreaInput(FIELD_NOTIFYWHENADDTOPIC_MULTIVALUE); UIFormTextAreaInput notifyWhenAddPosts = moderationOptions.getUIFormTextAreaInput(FIELD_NOTIFYWHENADDPOST_MULTIVALUE); String emailTopic = notifyWhenAddTopics.getValue(); String emailPost = notifyWhenAddPosts.getValue(); if (!ForumUtils.isEmpty(moderators)) { String[] moderators_ = ForumUtils.splitForForum(moderators); List<String> listModerator = new ArrayList<String>(); String email = ForumUtils.EMPTY_STR; this.listEmailAutoUpdate = ForumUtils.EMPTY_STR; User user = null; List<String> list = ForumServiceUtils.getUserPermission(moderators_); boolean isFist = true; for (String string : list) { user = UserHelper.getUserByUserId(string); if (user != null) { email = user.getEmail(); if (isFist) { this.listEmailAutoUpdate = email; listModerator.add(email); isFist = false; } else { if (!listModerator.contains(email)) { this.listEmailAutoUpdate = this.listEmailAutoUpdate + ", " + email; listModerator.add(email); } } } } if (ForumUtils.isEmpty(emailTopic)) { notifyWhenAddTopics.setValue(this.listEmailAutoUpdate); } else { String[] strs = ForumUtils.splitForForum(emailTopic); String emailTopics = ForumUtils.EMPTY_STR; for (int i = 0; i < strs.length; i++) { if (!listModerator.contains(strs[i].trim())) { if (emailTopics.length() == 0) emailTopics = strs[i]; else emailTopics = emailTopics + ", " + strs[i]; } } if (emailTopics.trim().length() == 0) emailTopics = this.listEmailAutoUpdate; else emailTopics = emailTopics + ", " + this.listEmailAutoUpdate; notifyWhenAddTopics.setValue(emailTopics); } if (ForumUtils.isEmpty(emailPost)) { notifyWhenAddPosts.setValue(this.listEmailAutoUpdate); } else { String[] strs = ForumUtils.splitForForum(emailPost); String emailPosts = ForumUtils.EMPTY_STR; for (int i = 0; i < strs.length; i++) { if (!listModerator.contains(strs[i].trim())) { if (emailPosts.length() == 0) emailPosts = strs[i]; else emailPosts = emailPosts + ", " + strs[i]; } } if (emailPosts.trim().length() == 0) emailPosts = this.listEmailAutoUpdate; else emailPosts = emailPosts + ", " + this.listEmailAutoUpdate; notifyWhenAddPosts.setValue(emailPosts); } WebuiRequestContext context = WebuiRequestContext.getCurrentInstance(); context.addUIComponentToUpdateByAjax(moderationOptions); } else { } } static public class SelectTabActionListener extends EventListener<UIForumForm> { public void execute(Event<UIForumForm> event) throws Exception { String id = event.getRequestContext().getRequestParameter(OBJECTID); UIForumForm forumForm = event.getSource(); forumForm.id = Integer.parseInt(id); event.getRequestContext().addUIComponentToUpdateByAjax(forumForm); } } static public class CloseActionListener extends EventListener<UIUserSelector> { public void execute(Event<UIUserSelector> event) throws Exception { UIUserSelector uiUserSelector = event.getSource(); UIPopupWindow popupWindow = uiUserSelector.getParent(); closePopupWindow(popupWindow); } } static public class ClosePopupActionListener extends EventListener<UIPopupWindow> { public void execute(Event<UIPopupWindow> event) throws Exception { UIPopupWindow popupWindow = event.getSource(); closePopupWindow(popupWindow); } } private void setValueField(UIFormInputWithActions withActions, String field, String values) throws Exception { try { UIFormTextAreaInput textArea = withActions.getUIFormTextAreaInput(field); if (textArea != null) { String vls = textArea.getValue(); if (!ForumUtils.isEmpty(vls)) { values = values + ForumUtils.COMMA + vls; values = ForumUtils.removeStringResemble(values.replaceAll(",,", ForumUtils.COMMA)); } textArea.setValue(values); if (field.equals(FIELD_MODERATOR_MULTIVALUE)) { boolean isAutoAddEmail = withActions.getUIFormCheckBoxInput(FIELD_AUTOADDEMAILNOTIFY_CHECKBOX).isChecked(); if (isAutoAddEmail) { this.setDefaultEmail(withActions); } this.isAddValue = false; } else { this.isAddValue = true; } } } catch (Exception e) { log.error("Set value in field is fall, exception: ", e); } } static public class AddActionListener extends EventListener<UIUserSelect> { public void execute(Event<UIUserSelect> event) throws Exception { UIUserSelect uiUserSelector = event.getSource(); String values = uiUserSelector.getSelectedUsers(); UIForumPortlet forumPortlet = uiUserSelector.getAncestorOfType(UIForumPortlet.class); UIForumForm forumForm = forumPortlet.findFirstComponentOfType(UIForumForm.class); UIPopupWindow popupWindow = uiUserSelector.getParent(); String id = uiUserSelector.getPermisionType(); UIFormInputWithActions inputWithActions = forumForm.getChildById((id.equals(FIELD_MODERATOR_MULTIVALUE)) ? FIELD_MODERATOROPTION_FORM : FIELD_FORUMPERMISSION_FORM); forumForm.setValueField(inputWithActions, id, values); closePopupWindow(popupWindow); event.getRequestContext().addUIComponentToUpdateByAjax(forumForm); } } static public class AddUserActionListener extends EventListener<UIForumForm> { public void execute(Event<UIForumForm> event) throws Exception { UIForumForm forumForm = event.getSource(); String id = event.getRequestContext().getRequestParameter(OBJECTID).replace("/0", ForumUtils.EMPTY_STR); UIPopupContainer uiPopupContainer = forumForm.getAncestorOfType(UIPopupContainer.class); forumForm.showUIUserSelect(uiPopupContainer, USER_SELECTOR_POPUPWINDOW, id); event.getRequestContext().addUIComponentToUpdateByAjax(uiPopupContainer); } } }