/*************************************************************************** * Copyright (C) 2003-2010 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.List; import org.exoplatform.forum.ForumUtils; import org.exoplatform.forum.service.ForumAdministration; import org.exoplatform.forum.webui.BaseForumForm; import org.exoplatform.forum.webui.UIForumPortlet; import org.exoplatform.ks.common.webui.BaseEventListener; import org.exoplatform.ks.common.webui.WebUIUtils; 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.Event.Phase; import org.exoplatform.webui.form.UIFormCheckBoxInput; import org.exoplatform.webui.form.UIFormInputWithActions; import org.exoplatform.webui.form.UIFormInputWithActions.ActionData; import org.exoplatform.webui.form.UIFormStringInput; import org.exoplatform.webui.form.wysiwyg.UIFormWYSIWYGInput; /** * Created by The eXo Platform SAS * Author : Vu Duy Tu * tu.duy@exoplatform.com * Jan 29, 2010 - 4:51:01 AM */ @ComponentConfig( lifecycle = UIFormLifecycle.class, template = "app:/templates/forum/webui/popup/UINotificationForm.gtmpl", events = { @EventConfig(listeners = UINotificationForm.GetDefaultMailActionListener.class), @EventConfig(listeners = UINotificationForm.SelectTabActionListener.class), @EventConfig(listeners = UINotificationForm.SaveActionListener.class), @EventConfig(listeners = UINotificationForm.CloseActionListener.class, phase = Phase.DECODE) } ) public class UINotificationForm extends BaseForumForm implements UIPopupComponent { public static final String FIELD_ENABLEHEADERSUBJECT_CHECKBOX = "enableHeaderSubject"; public static final String FIELD_NOTIFYEMAIL_MOVE_TAB = "notifyEmailMoveTab"; public static final String FIELD_NOTIFYEMAIL_ADDNEW_TAB = "notifyEmailAddNewTab"; public static final String FIELD_HEADERSUBJECT_INPUT = "headerSubject"; public static final String FIELD_NOTIFYEMAIL_TEXTAREA = "notifyEmail"; public static final String FIELD_NOTIFYEMAILMOVED_TEXTAREA = "notifyEmailMoved"; private ForumAdministration administration; private int tabId = 0; public UINotificationForm() { setActions(new String[] { "Save", "Close" }); } public void setInitForm() throws Exception { administration = getForumService().getForumAdministration(); UIFormInputWithActions notifyEmailAddNewTab = new UIFormInputWithActions(FIELD_NOTIFYEMAIL_ADDNEW_TAB); UIFormInputWithActions notifyEmailMoveTab = new UIFormInputWithActions(FIELD_NOTIFYEMAIL_MOVE_TAB); UIFormCheckBoxInput<Boolean> enableHeaderSubject = initEnableHeaderField(); UIFormStringInput headerSubject = initEnableHeaderSubjectField(); UIFormWYSIWYGInput notifyEmail = initNotifyEmailField(); UIFormWYSIWYGInput notifyEmailMoved = initNotifyMoveField(); notifyEmailAddNewTab.addUIFormInput(enableHeaderSubject); notifyEmailAddNewTab.addUIFormInput(headerSubject); notifyEmailAddNewTab.addUIFormInput(notifyEmail); notifyEmailMoveTab.addUIFormInput(notifyEmailMoved); initEmailField(notifyEmailAddNewTab, FIELD_NOTIFYEMAIL_TEXTAREA); initEmailField(notifyEmailMoveTab, FIELD_NOTIFYEMAILMOVED_TEXTAREA); addUIFormInput(notifyEmailAddNewTab); addUIFormInput(notifyEmailMoveTab); } private void initEmailField(UIFormInputWithActions notifyEmailTab, String param) throws Exception { List<ActionData> actions = new ArrayList<ActionData>(); ActionData ad = new ActionData(); ad.setActionListener("GetDefaultMail"); ad.setActionParameter(param); ad.setCssIconClass("Refresh"); ad.setActionName("TitleResetMail"); actions.add(ad); notifyEmailTab.setActionField(param, actions); } private UIFormWYSIWYGInput initNotifyMoveField() { String value = administration.getNotifyEmailMoved(); if (ForumUtils.isEmpty(value)) value = this.getLabel("EmailToAuthorMoved"); UIFormWYSIWYGInput notifyEmailMoved = new UIFormWYSIWYGInput(FIELD_NOTIFYEMAILMOVED_TEXTAREA, FIELD_NOTIFYEMAILMOVED_TEXTAREA, ForumUtils.EMPTY_STR); notifyEmailMoved.setToolBarName("Basic"); notifyEmailMoved.setFCKConfig(WebUIUtils.getFCKConfig()); notifyEmailMoved.setValue(value); return notifyEmailMoved; } private UIFormWYSIWYGInput initNotifyEmailField() { String value = administration.getNotifyEmailContent(); if (ForumUtils.isEmpty(value)) value = this.getLabel("notifyEmailContentDefault"); UIFormWYSIWYGInput notifyEmail = new UIFormWYSIWYGInput(FIELD_NOTIFYEMAIL_TEXTAREA, FIELD_NOTIFYEMAIL_TEXTAREA, ForumUtils.EMPTY_STR); notifyEmail.setToolBarName("Basic"); notifyEmail.setFCKConfig(WebUIUtils.getFCKConfig()); notifyEmail.setValue(value); return notifyEmail; } private UIFormStringInput initEnableHeaderSubjectField() { UIFormStringInput headerSubject = new UIFormStringInput(FIELD_HEADERSUBJECT_INPUT, FIELD_HEADERSUBJECT_INPUT, null); String headerSubject_ = administration.getHeaderSubject(); if (ForumUtils.isEmpty(headerSubject_)) headerSubject_ = this.getLabel("notifyEmailHeaderSubjectDefault"); headerSubject.setValue(headerSubject_); return headerSubject; } private UIFormCheckBoxInput<Boolean> initEnableHeaderField() { UIFormCheckBoxInput<Boolean> enableHeaderSubject = new UIFormCheckBoxInput<Boolean>(FIELD_ENABLEHEADERSUBJECT_CHECKBOX, FIELD_ENABLEHEADERSUBJECT_CHECKBOX, false); enableHeaderSubject.setChecked(administration.getEnableHeaderSubject()); return enableHeaderSubject; } @SuppressWarnings("unused") private boolean tabIsSelected(int tabId) { if (this.tabId == tabId) return true; else return false; } public void activate() throws Exception { } public void deActivate() throws Exception { } static public class SaveActionListener extends BaseEventListener<UINotificationForm> { public void onEvent(Event<UINotificationForm> event, UINotificationForm uiForm, String objId) throws Exception { UIForumPortlet forumPortlet = uiForm.getAncestorOfType(UIForumPortlet.class); UIFormInputWithActions notifyEmailAddNewTab = getChildById(FIELD_NOTIFYEMAIL_ADDNEW_TAB); UIFormInputWithActions notifyEmailMoveTab = getChildById(FIELD_NOTIFYEMAIL_MOVE_TAB); boolean enableHeaderSubject = (Boolean) notifyEmailAddNewTab.getUIFormCheckBoxInput(FIELD_ENABLEHEADERSUBJECT_CHECKBOX).getValue(); String headerSubject = notifyEmailAddNewTab.getUIStringInput(FIELD_HEADERSUBJECT_INPUT).getValue(); String notifyEmail = notifyEmailAddNewTab.getChild(UIFormWYSIWYGInput.class).getValue(); String notifyEmailMoved = notifyEmailMoveTab.getChild(UIFormWYSIWYGInput.class).getValue(); if (notifyEmail == null || notifyEmail.replaceAll("<p>", ForumUtils.EMPTY_STR).replaceAll("</p>", ForumUtils.EMPTY_STR).replaceAll(" ", ForumUtils.EMPTY_STR).trim().length() < 1) { warning("UINotificationForm.msg.mailContentInvalid", getLabel(FIELD_NOTIFYEMAIL_TEXTAREA)); return; } if (notifyEmailMoved == null || notifyEmailMoved.replaceAll("<p>", ForumUtils.EMPTY_STR).replaceAll("</p>", ForumUtils.EMPTY_STR).replaceAll(" ", ForumUtils.EMPTY_STR).trim().length() < 1) { warning("UINotificationForm.msg.mailContentInvalid", getLabel(FIELD_NOTIFYEMAILMOVED_TEXTAREA)); return; } uiForm.administration.setEnableHeaderSubject(enableHeaderSubject); uiForm.administration.setHeaderSubject(headerSubject); uiForm.administration.setNotifyEmailContent(notifyEmail); uiForm.administration.setNotifyEmailMoved(notifyEmailMoved); try { uiForm.getForumService().saveForumAdministration(uiForm.administration); } catch (Exception e) { uiForm.log.error("failed to save forum administration", e); } forumPortlet.cancelAction(); } } static public class SelectTabActionListener extends BaseEventListener<UINotificationForm> { public void onEvent(Event<UINotificationForm> event, UINotificationForm uiForm, String id) throws Exception { uiForm.tabId = Integer.parseInt(id); refresh(); } } static public class GetDefaultMailActionListener extends BaseEventListener<UINotificationForm> { public void onEvent(Event<UINotificationForm> event, UINotificationForm uiForm, String objectId) throws Exception { if (objectId.equals(FIELD_NOTIFYEMAIL_TEXTAREA)) { ((UIFormInputWithActions) getChildById(FIELD_NOTIFYEMAIL_ADDNEW_TAB)).getChild(UIFormWYSIWYGInput.class).setValue(getLabel("notifyEmailContentDefault")); } else { ((UIFormInputWithActions) getChildById(FIELD_NOTIFYEMAIL_MOVE_TAB)).getChild(UIFormWYSIWYGInput.class).setValue(getLabel("EmailToAuthorMoved")); } refresh(); } } static public class CloseActionListener extends BaseEventListener<UINotificationForm> { public void onEvent(Event<UINotificationForm> event, UINotificationForm uiForm, String objId) throws Exception { UIForumPortlet forumPortlet = uiForm.getAncestorOfType(UIForumPortlet.class); forumPortlet.cancelAction(); } } }