/** * * Copyright (c) 2000-2012 Liferay, Inc. All rights reserved. * This library is free software; you can redistribute it and/or modify it under * the terms of the GNU Lesser General Public License as published by the Free * Software Foundation; either version 2.1 of the License, or (at your option) * any later version. * * This library 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 Lesser General Public License for more * details. * * Copyright (c) 2009-2014 Câmara dos Deputados. Todos os direitos reservados. * * e-Democracia é um software livre; você pode redistribuí-lo e/ou modificá-lo dentro * dos termos da Licença Pública Geral Menor GNU como publicada pela Fundação do * Software Livre (FSF); na versão 2.1 da Licença, ou (na sua opinião) qualquer versão. * * Este programa é distribuído na esperança de que possa ser útil, mas SEM NENHUMA GARANTIA; * sem uma garantia implícita de ADEQUAÇÃO a qualquer MERCADO ou APLICAÇÃO EM PARTICULAR. * Veja a Licença Pública Geral Menor GNU para maiores detalhes. * */ package com.liferay.portlet.messageboards.action; import java.util.ArrayList; import java.util.Iterator; import java.util.List; import java.util.Locale; import java.util.Map; import java.util.TreeMap; import javax.portlet.ActionRequest; import javax.portlet.ActionResponse; import javax.portlet.PortletConfig; import javax.portlet.PortletRequest; import org.apache.commons.lang.StringUtils; import com.liferay.portal.kernel.language.LanguageUtil; import com.liferay.portal.kernel.portlet.DefaultConfigurationAction; import com.liferay.portal.kernel.servlet.SessionErrors; import com.liferay.portal.kernel.util.CharPool; import com.liferay.portal.kernel.util.LocaleUtil; import com.liferay.portal.kernel.util.LocalizationUtil; import com.liferay.portal.kernel.util.NumericalStringComparator; import com.liferay.portal.kernel.util.ParamUtil; import com.liferay.portal.kernel.util.StringPool; import com.liferay.portal.kernel.util.StringUtil; import com.liferay.portal.kernel.util.Validator; import com.liferay.portlet.messageboards.util.MBLabelKeys; /** * @author Brian Wing Shun Chan */ public class ConfigurationActionImpl extends DefaultConfigurationAction { @Override public void processAction( PortletConfig portletConfig, ActionRequest actionRequest, ActionResponse actionResponse) throws Exception { String tabs2 = ParamUtil.getString(actionRequest, "tabs2"); if (tabs2.equals("email-from")) { validateEmailFrom(actionRequest); } else if (tabs2.equals("message-added-email")) { validateEmailMessageAdded(actionRequest); } else if (tabs2.equals("message-updated-email")) { validateEmailMessageUpdated(actionRequest); } else if (tabs2.equals("thread-priorities")) { updateThreadPriorities(actionRequest); } else if (tabs2.equals("user-ranks")) { updateUserRanks(actionRequest); } else if(tabs2.equals("terms-used")){ updateLabels(actionRequest); } super.processAction(portletConfig, actionRequest, actionResponse); } protected boolean isValidUserRank(String rank) { if ((StringUtil.count(rank, StringPool.EQUAL) != 1) || rank.startsWith(StringPool.EQUAL) || rank.endsWith(StringPool.EQUAL)) { return false; } return true; } protected void updateThreadPriorities(ActionRequest actionRequest) throws Exception { Locale[] locales = LanguageUtil.getAvailableLocales(); for (int i = 0; i < locales.length; i++) { String languageId = LocaleUtil.toLanguageId(locales[i]); List<String> priorities = new ArrayList<String>(); for (int j = 0; j < 10; j++) { String name = ParamUtil.getString( actionRequest, "priorityName" + j + "_" + languageId); String image = ParamUtil.getString( actionRequest, "priorityImage" + j + "_" + languageId); double value = ParamUtil.getDouble( actionRequest, "priorityValue" + j + "_" + languageId); if (Validator.isNotNull(name) || Validator.isNotNull(image) || (value != 0.0)) { priorities.add( name + StringPool.COMMA + image + StringPool.COMMA + value); } } String preferenceName = LocalizationUtil.getPreferencesKey( "priorities", languageId); setPreference( actionRequest, preferenceName, priorities.toArray(new String[priorities.size()])); } } protected void updateUserRanks(ActionRequest actionRequest) throws Exception { Locale[] locales = LanguageUtil.getAvailableLocales(); for (Locale locale : locales) { String languageId = LocaleUtil.toLanguageId(locale); String[] ranks = StringUtil.splitLines( ParamUtil.getString(actionRequest, "ranks_" + languageId)); Map<String, String> map = new TreeMap<String, String>( new NumericalStringComparator()); for (String rank : ranks) { if (!isValidUserRank(rank)) { SessionErrors.add(actionRequest, "userRank"); return; } String[] kvp = StringUtil.split(rank, CharPool.EQUAL); String kvpName = kvp[0]; String kvpValue = kvp[1]; map.put(kvpValue, kvpName); } ranks = new String[map.size()]; int count = 0; Iterator<Map.Entry<String, String>> itr = map.entrySet().iterator(); while (itr.hasNext()) { Map.Entry<String, String> entry = itr.next(); String kvpValue = entry.getKey(); String kvpName = entry.getValue(); ranks[count++] = kvpName + StringPool.EQUAL + kvpValue; } String preferenceName = LocalizationUtil.getPreferencesKey( "ranks", languageId); setPreference(actionRequest, preferenceName, ranks); } } protected void validateEmailFrom(ActionRequest actionRequest) throws Exception { String emailFromName = getParameter(actionRequest, "emailFromName"); String emailFromAddress = getParameter( actionRequest, "emailFromAddress"); if (Validator.isNull(emailFromName)) { SessionErrors.add(actionRequest, "emailFromName"); } else if (!Validator.isEmailAddress(emailFromAddress) && !Validator.isVariableTerm(emailFromAddress)) { SessionErrors.add(actionRequest, "emailFromAddress"); } } protected void validateEmailMessageAdded(ActionRequest actionRequest) throws Exception { String emailMessageAddedSubjectPrefix = getParameter( actionRequest, "emailMessageAddedSubjectPrefix"); String emailMessageAddedBody = getParameter( actionRequest, "emailMessageAddedBody"); if (Validator.isNull(emailMessageAddedSubjectPrefix)) { SessionErrors.add(actionRequest, "emailMessageAddedSubjectPrefix"); } else if (Validator.isNull(emailMessageAddedBody)) { SessionErrors.add(actionRequest, "emailMessageAddedBody"); } } protected void validateEmailMessageUpdated(ActionRequest actionRequest) throws Exception { String emailMessageUpdatedSubjectPrefix = getParameter( actionRequest, "emailMessageUpdatedSubjectPrefix"); String emailMessageUpdatedBody = getParameter( actionRequest, "emailMessageUpdatedBody"); if (Validator.isNull(emailMessageUpdatedSubjectPrefix)) { SessionErrors.add( actionRequest, "emailMessageUpdatedSubjectPrefix"); } else if (Validator.isNull(emailMessageUpdatedBody)) { SessionErrors.add(actionRequest, "emailMessageUpdatedBody"); } } private void updateLabels(ActionRequest actionRequest) throws Exception { //Menus setPreference(actionRequest, MBLabelKeys.RECENT_POSTS, getLabelFromRequest(actionRequest, "label-recent-posts" , MBLabelKeys.RECENT_POSTS)); //Botões setPreference(actionRequest, MBLabelKeys.FORUM_ADD_CATEGORY, getLabelFromRequest(actionRequest, "label-add-category", MBLabelKeys.FORUM_ADD_CATEGORY)); setPreference(actionRequest, MBLabelKeys.FORUM_ADD_SUBCATEGORY, getLabelFromRequest(actionRequest, "label-add-subcategory", MBLabelKeys.FORUM_ADD_SUBCATEGORY)); setPreference(actionRequest, MBLabelKeys.POST_NEW_THREAD, getLabelFromRequest(actionRequest, "label-post-new-thread", MBLabelKeys.POST_NEW_THREAD)); //Termos setPreference(actionRequest, MBLabelKeys.FORUM_CATEGORY, getLabelFromRequest(actionRequest, "label-category", MBLabelKeys.FORUM_CATEGORY)); setPreference(actionRequest, MBLabelKeys.FORUM_CATEGORIES, getLabelFromRequest(actionRequest, "label-categories", MBLabelKeys.FORUM_CATEGORIES)); setPreference(actionRequest, MBLabelKeys.FORUM_SUBCATEGORIES, getLabelFromRequest(actionRequest, "label-subcategories", MBLabelKeys.FORUM_SUBCATEGORIES)); setPreference(actionRequest, MBLabelKeys.THREAD, getLabelFromRequest(actionRequest, "label-thread", MBLabelKeys.THREAD)); setPreference(actionRequest, MBLabelKeys.THREADS, getLabelFromRequest(actionRequest, "label-threads", MBLabelKeys.THREADS)); setPreference(actionRequest, MBLabelKeys.POSTS, getLabelFromRequest(actionRequest, "label-posts", MBLabelKeys.POSTS)); setPreference(actionRequest, MBLabelKeys.FORUM_NEW_CATEGORY, getLabelFromRequest(actionRequest, "label-new-category", MBLabelKeys.FORUM_NEW_CATEGORY)); setPreference(actionRequest, MBLabelKeys.NUM_OF_CATEGORIES,getLabelFromRequest(actionRequest, "label-num-of-categories", MBLabelKeys.NUM_OF_CATEGORIES)); setPreference(actionRequest, MBLabelKeys.FORUM_PARENT_CATEGORY, getLabelFromRequest(actionRequest, "label-parent-category", MBLabelKeys.FORUM_PARENT_CATEGORY)); setPreference(actionRequest, MBLabelKeys.MERGE_WITH_PARENT_CATEGORY, getLabelFromRequest(actionRequest, "label-merge-category", MBLabelKeys.MERGE_WITH_PARENT_CATEGORY)); setPreference(actionRequest, MBLabelKeys.NEW_MESSAGE, getLabelFromRequest(actionRequest, "label-new-message", MBLabelKeys.NEW_MESSAGE)); //Ações setPreference(actionRequest, MBLabelKeys.LOCK_THREAD, getLabelFromRequest(actionRequest, "label-lock-thread", MBLabelKeys.LOCK_THREAD)); setPreference(actionRequest, MBLabelKeys.UNLOCK_THREAD, getLabelFromRequest(actionRequest, "label-unlock-thread", MBLabelKeys.UNLOCK_THREAD)); setPreference(actionRequest, MBLabelKeys.MOVE_THREAD, getLabelFromRequest(actionRequest, "label-move-thread", MBLabelKeys.MOVE_THREAD)); //Mensagens setPreference(actionRequest, MBLabelKeys.NO_THREADS_IN_THIS_CATEGORY, getLabelFromRequest(actionRequest, "msg-no-threads", MBLabelKeys.NO_THREADS_IN_THIS_CATEGORY)); setPreference(actionRequest, MBLabelKeys.NO_SUBSCRIBED_TO_ANY_CATEGORIES, getLabelFromRequest(actionRequest, "msg-no-subscribed-to-categories", MBLabelKeys.NO_SUBSCRIBED_TO_ANY_CATEGORIES)); setPreference(actionRequest, MBLabelKeys.NO_SUBSCRIBED_TO_ANY_THREADS, getLabelFromRequest(actionRequest, "msg-no-subscribed-to-threads", MBLabelKeys.NO_SUBSCRIBED_TO_ANY_THREADS)); } private String getLabelFromRequest(PortletRequest actionRequest, String paramName, String defaultValue) { String value = ParamUtil.getString(actionRequest,paramName); String label = StringUtils.isNotBlank(value) ? value: defaultValue; return label; } }