001
014
015 package com.liferay.portlet.messageboards.action;
016
017 import com.liferay.portal.kernel.language.LanguageUtil;
018 import com.liferay.portal.kernel.portlet.DefaultConfigurationAction;
019 import com.liferay.portal.kernel.servlet.SessionErrors;
020 import com.liferay.portal.kernel.util.CharPool;
021 import com.liferay.portal.kernel.util.LocaleUtil;
022 import com.liferay.portal.kernel.util.LocalizationUtil;
023 import com.liferay.portal.kernel.util.NumericalStringComparator;
024 import com.liferay.portal.kernel.util.ParamUtil;
025 import com.liferay.portal.kernel.util.StringPool;
026 import com.liferay.portal.kernel.util.StringUtil;
027 import com.liferay.portal.kernel.util.Validator;
028
029 import java.util.ArrayList;
030 import java.util.List;
031 import java.util.Locale;
032 import java.util.Map;
033 import java.util.TreeMap;
034
035 import javax.portlet.ActionRequest;
036 import javax.portlet.ActionResponse;
037 import javax.portlet.PortletConfig;
038
039
042 public class ConfigurationActionImpl extends DefaultConfigurationAction {
043
044 @Override
045 public void processAction(
046 PortletConfig portletConfig, ActionRequest actionRequest,
047 ActionResponse actionResponse)
048 throws Exception {
049
050 String tabs2 = ParamUtil.getString(actionRequest, "tabs2");
051
052 if (tabs2.equals("email-from")) {
053 validateEmailFrom(actionRequest);
054 }
055 else if (tabs2.equals("message-added-email")) {
056 validateEmailMessageAdded(actionRequest);
057 }
058 else if (tabs2.equals("message-updated-email")) {
059 validateEmailMessageUpdated(actionRequest);
060 }
061 else if (tabs2.equals("thread-priorities")) {
062 updateThreadPriorities(actionRequest);
063 }
064 else if (tabs2.equals("user-ranks")) {
065 updateUserRanks(actionRequest);
066 }
067
068 super.processAction(portletConfig, actionRequest, actionResponse);
069 }
070
071 protected boolean isValidUserRank(String rank) {
072 if ((StringUtil.count(rank, StringPool.EQUAL) != 1) ||
073 rank.startsWith(StringPool.EQUAL) ||
074 rank.endsWith(StringPool.EQUAL)) {
075
076 return false;
077 }
078
079 return true;
080 }
081
082 protected void updateThreadPriorities(ActionRequest actionRequest)
083 throws Exception {
084
085 Locale[] locales = LanguageUtil.getAvailableLocales();
086
087 for (int i = 0; i < locales.length; i++) {
088 String languageId = LocaleUtil.toLanguageId(locales[i]);
089
090 List<String> priorities = new ArrayList<String>();
091
092 for (int j = 0; j < 10; j++) {
093 String name = ParamUtil.getString(
094 actionRequest, "priorityName" + j + "_" + languageId);
095 String image = ParamUtil.getString(
096 actionRequest, "priorityImage" + j + "_" + languageId);
097 double value = ParamUtil.getDouble(
098 actionRequest, "priorityValue" + j + "_" + languageId);
099
100 if (Validator.isNotNull(name) || Validator.isNotNull(image) ||
101 (value != 0.0)) {
102
103 priorities.add(
104 name + StringPool.COMMA + image + StringPool.COMMA +
105 value);
106 }
107 }
108
109 String preferenceName = LocalizationUtil.getPreferencesKey(
110 "priorities", languageId);
111
112 setPreference(
113 actionRequest, preferenceName,
114 priorities.toArray(new String[priorities.size()]));
115 }
116 }
117
118 protected void updateUserRanks(ActionRequest actionRequest)
119 throws Exception {
120
121 Locale[] locales = LanguageUtil.getAvailableLocales();
122
123 for (Locale locale : locales) {
124 String languageId = LocaleUtil.toLanguageId(locale);
125
126 String[] ranks = StringUtil.splitLines(
127 ParamUtil.getString(actionRequest, "ranks_" + languageId));
128
129 Map<String, String> map = new TreeMap<String, String>(
130 new NumericalStringComparator());
131
132 for (String rank : ranks) {
133 if (!isValidUserRank(rank)) {
134 SessionErrors.add(actionRequest, "userRank");
135
136 return;
137 }
138
139 String[] kvp = StringUtil.split(rank, CharPool.EQUAL);
140
141 String kvpName = kvp[0];
142 String kvpValue = kvp[1];
143
144 map.put(kvpValue, kvpName);
145 }
146
147 ranks = new String[map.size()];
148
149 int count = 0;
150
151 for (Map.Entry<String, String> entry : map.entrySet()) {
152 String kvpValue = entry.getKey();
153 String kvpName = entry.getValue();
154
155 ranks[count++] = kvpName + StringPool.EQUAL + kvpValue;
156 }
157
158 String preferenceName = LocalizationUtil.getPreferencesKey(
159 "ranks", languageId);
160
161 setPreference(actionRequest, preferenceName, ranks);
162 }
163 }
164
165 protected void validateEmailFrom(ActionRequest actionRequest)
166 throws Exception {
167
168 String emailFromName = getParameter(actionRequest, "emailFromName");
169 String emailFromAddress = getParameter(
170 actionRequest, "emailFromAddress");
171
172 if (Validator.isNull(emailFromName)) {
173 SessionErrors.add(actionRequest, "emailFromName");
174 }
175 else if (!Validator.isEmailAddress(emailFromAddress) &&
176 !Validator.isVariableTerm(emailFromAddress)) {
177
178 SessionErrors.add(actionRequest, "emailFromAddress");
179 }
180 }
181
182 protected void validateEmailMessageAdded(ActionRequest actionRequest)
183 throws Exception {
184
185 String emailMessageAddedSubjectPrefix = getParameter(
186 actionRequest, "emailMessageAddedSubjectPrefix");
187 String emailMessageAddedBody = getParameter(
188 actionRequest, "emailMessageAddedBody");
189
190 if (Validator.isNull(emailMessageAddedSubjectPrefix)) {
191 SessionErrors.add(actionRequest, "emailMessageAddedSubjectPrefix");
192 }
193 else if (Validator.isNull(emailMessageAddedBody)) {
194 SessionErrors.add(actionRequest, "emailMessageAddedBody");
195 }
196 }
197
198 protected void validateEmailMessageUpdated(ActionRequest actionRequest)
199 throws Exception {
200
201 String emailMessageUpdatedSubjectPrefix = getParameter(
202 actionRequest, "emailMessageUpdatedSubjectPrefix");
203 String emailMessageUpdatedBody = getParameter(
204 actionRequest, "emailMessageUpdatedBody");
205
206 if (Validator.isNull(emailMessageUpdatedSubjectPrefix)) {
207 SessionErrors.add(
208 actionRequest, "emailMessageUpdatedSubjectPrefix");
209 }
210 else if (Validator.isNull(emailMessageUpdatedBody)) {
211 SessionErrors.add(actionRequest, "emailMessageUpdatedBody");
212 }
213 }
214
215 }