1
22
23 package com.liferay.portlet.messageboards.action;
24
25 import com.liferay.portal.kernel.language.LanguageUtil;
26 import com.liferay.portal.kernel.portlet.ConfigurationAction;
27 import com.liferay.portal.kernel.util.Constants;
28 import com.liferay.portal.kernel.util.LocaleUtil;
29 import com.liferay.portal.kernel.util.ParamUtil;
30 import com.liferay.portal.kernel.util.StringPool;
31 import com.liferay.portal.kernel.util.StringUtil;
32 import com.liferay.portal.kernel.util.Validator;
33 import com.liferay.portlet.PortletPreferencesFactoryUtil;
34 import com.liferay.util.LocalizationUtil;
35 import com.liferay.util.servlet.SessionErrors;
36 import com.liferay.util.servlet.SessionMessages;
37
38 import java.util.ArrayList;
39 import java.util.Iterator;
40 import java.util.List;
41 import java.util.Locale;
42 import java.util.Map;
43 import java.util.TreeMap;
44
45 import javax.portlet.ActionRequest;
46 import javax.portlet.ActionResponse;
47 import javax.portlet.PortletConfig;
48 import javax.portlet.PortletPreferences;
49 import javax.portlet.RenderRequest;
50 import javax.portlet.RenderResponse;
51
52
58 public class ConfigurationActionImpl implements ConfigurationAction {
59
60 public void processAction(
61 PortletConfig config, ActionRequest req, ActionResponse res)
62 throws Exception {
63
64 String cmd = ParamUtil.getString(req, Constants.CMD);
65
66 if (!cmd.equals(Constants.UPDATE)) {
67 return;
68 }
69
70 String portletResource = ParamUtil.getString(req, "portletResource");
71
72 PortletPreferences prefs =
73 PortletPreferencesFactoryUtil.getPortletSetup(req, portletResource);
74
75 String tabs2 = ParamUtil.getString(req, "tabs2");
76
77 if (tabs2.equals("anonymous-posting")) {
78 updateAnonymousPosting(req, prefs);
79 }
80 else if (tabs2.equals("email-from")) {
81 updateEmailFrom(req, prefs);
82 }
83 else if (tabs2.equals("message-added-email")) {
84 updateEmailMessageAdded(req, prefs);
85 }
86 else if (tabs2.equals("message-updated-email")) {
87 updateEmailMessageUpdated(req, prefs);
88 }
89 else if (tabs2.equals("rss")) {
90 updateRSS(req, prefs);
91 }
92 else if (tabs2.equals("thread-priorities")) {
93 updateThreadPriorities(req, prefs);
94 }
95 else if (tabs2.equals("user-ranks")) {
96 updateUserRanks(req, prefs);
97 }
98
99 if (SessionErrors.isEmpty(req)) {
100 prefs.store();
101
102 SessionMessages.add(req, config.getPortletName() + ".doConfigure");
103 }
104 }
105
106 public String render(
107 PortletConfig config, RenderRequest req, RenderResponse res)
108 throws Exception {
109
110 return "/html/portlet/message_boards/configuration.jsp";
111 }
112
113 protected void updateAnonymousPosting(
114 ActionRequest req, PortletPreferences prefs)
115 throws Exception {
116
117 String allowAnonymousPosting = ParamUtil.getString(
118 req, "allowAnonymousPosting");
119
120 prefs.setValue("allow-anonymous-posting", allowAnonymousPosting);
121 }
122
123 protected void updateEmailFrom(ActionRequest req, PortletPreferences prefs)
124 throws Exception {
125
126 String emailFromName = ParamUtil.getString(req, "emailFromName");
127 String emailFromAddress = ParamUtil.getString(req, "emailFromAddress");
128 boolean emailHtmlFormat = ParamUtil.getBoolean(req, "emailHtmlFormat");
129
130 if (Validator.isNull(emailFromName)) {
131 SessionErrors.add(req, "emailFromName");
132 }
133 else if (!Validator.isEmailAddress(emailFromAddress) &&
134 !Validator.isVariableTerm(emailFromAddress)) {
135
136 SessionErrors.add(req, "emailFromAddress");
137 }
138 else {
139 prefs.setValue("email-from-name", emailFromName);
140 prefs.setValue("email-from-address", emailFromAddress);
141 prefs.setValue(
142 "email-html-format", String.valueOf(emailHtmlFormat));
143 }
144 }
145
146 protected void updateEmailMessageAdded(
147 ActionRequest req, PortletPreferences prefs)
148 throws Exception {
149
150 boolean emailMessageAddedEnabled = ParamUtil.getBoolean(
151 req, "emailMessageAddedEnabled");
152 String emailMessageAddedSubjectPrefix = ParamUtil.getString(
153 req, "emailMessageAddedSubjectPrefix");
154 String emailMessageAddedBody = ParamUtil.getString(
155 req, "emailMessageAddedBody");
156 String emailMessageAddedSignature = ParamUtil.getString(
157 req, "emailMessageAddedSignature");
158
159 if (Validator.isNull(emailMessageAddedSubjectPrefix)) {
160 SessionErrors.add(req, "emailMessageAddedSubjectPrefix");
161 }
162 else if (Validator.isNull(emailMessageAddedBody)) {
163 SessionErrors.add(req, "emailMessageAddedBody");
164 }
165 else {
166 prefs.setValue(
167 "email-message-added-enabled",
168 String.valueOf(emailMessageAddedEnabled));
169 prefs.setValue(
170 "email-message-added-subject-prefix",
171 emailMessageAddedSubjectPrefix);
172 prefs.setValue("email-message-added-body", emailMessageAddedBody);
173 prefs.setValue(
174 "email-message-added-signature", emailMessageAddedSignature);
175 }
176 }
177
178 protected void updateEmailMessageUpdated(
179 ActionRequest req, PortletPreferences prefs)
180 throws Exception {
181
182 boolean emailMessageUpdatedEnabled = ParamUtil.getBoolean(
183 req, "emailMessageUpdatedEnabled");
184 String emailMessageUpdatedSubjectPrefix = ParamUtil.getString(
185 req, "emailMessageUpdatedSubjectPrefix");
186 String emailMessageUpdatedBody = ParamUtil.getString(
187 req, "emailMessageUpdatedBody");
188 String emailMessageUpdatedSignature = ParamUtil.getString(
189 req, "emailMessageUpdatedSignature");
190
191 if (Validator.isNull(emailMessageUpdatedSubjectPrefix)) {
192 SessionErrors.add(req, "emailMessageUpdatedSubjectPrefix");
193 }
194 else if (Validator.isNull(emailMessageUpdatedBody)) {
195 SessionErrors.add(req, "emailMessageUpdatedBody");
196 }
197 else {
198 prefs.setValue(
199 "email-message-updated-enabled",
200 String.valueOf(emailMessageUpdatedEnabled));
201 prefs.setValue(
202 "email-message-updated-subject-prefix",
203 emailMessageUpdatedSubjectPrefix);
204 prefs.setValue(
205 "email-message-updated-body", emailMessageUpdatedBody);
206 prefs.setValue(
207 "email-message-updated-signature",
208 emailMessageUpdatedSignature);
209 }
210 }
211
212 protected void updateRSS(ActionRequest req, PortletPreferences prefs)
213 throws Exception {
214
215 int rssDelta = ParamUtil.getInteger(req, "rssDelta");
216 String rssDisplayStyle = ParamUtil.getString(req, "rssDisplayStyle");
217 String rssFormat = ParamUtil.getString(req, "rssFormat");
218
219 prefs.setValue("rss-delta", String.valueOf(rssDelta));
220 prefs.setValue("rss-display-style", rssDisplayStyle);
221 prefs.setValue("rss-format", rssFormat);
222 }
223
224 protected void updateThreadPriorities(
225 ActionRequest req, PortletPreferences prefs)
226 throws Exception {
227
228 Locale[] locales = LanguageUtil.getAvailableLocales();
229
230 for (int i = 0; i < locales.length; i++) {
231 String languageId = LocaleUtil.toLanguageId(locales[i]);
232
233 List<String> priorities = new ArrayList<String>();
234
235 for (int j = 0; j < 10; j++) {
236 String name = ParamUtil.getString(
237 req, "priorityName" + j + "_" + languageId);
238 String image = ParamUtil.getString(
239 req, "priorityImage" + j + "_" + languageId);
240 double value = ParamUtil.getDouble(
241 req, "priorityValue" + j + "_" + languageId);
242
243 if (Validator.isNotNull(name) || Validator.isNotNull(image) ||
244 (value != 0.0)) {
245
246 priorities.add(
247 name + StringPool.COMMA + image + StringPool.COMMA +
248 value);
249 }
250 }
251
252 LocalizationUtil.setPrefsValues(
253 prefs, "priorities", languageId,
254 priorities.toArray(new String[priorities.size()]));
255 }
256 }
257
258 protected void updateUserRanks(ActionRequest req, PortletPreferences prefs)
259 throws Exception {
260
261 Locale[] locales = LanguageUtil.getAvailableLocales();
262
263 for (int i = 0; i < locales.length; i++) {
264 String languageId = LocaleUtil.toLanguageId(locales[i]);
265
266 String[] ranks = StringUtil.split(
267 ParamUtil.getString(req, "ranks_" + languageId),
268 StringPool.NEW_LINE);
269
270 Map<String, String> map = new TreeMap<String, String>();
271
272 for (int j = 0; j < ranks.length; j++) {
273 String[] kvp = StringUtil.split(ranks[j], StringPool.EQUAL);
274
275 String kvpName = kvp[0];
276 String kvpValue = kvp[1];
277
278 map.put(kvpValue, kvpName);
279 }
280
281 ranks = new String[map.size()];
282
283 int count = 0;
284
285 Iterator<Map.Entry<String, String>> itr =
286 map.entrySet().iterator();
287
288 while (itr.hasNext()) {
289 Map.Entry<String, String> entry = itr.next();
290
291 String kvpValue = entry.getKey();
292 String kvpName = entry.getValue();
293
294 ranks[count++] = kvpName + StringPool.EQUAL + kvpValue;
295 }
296
297 LocalizationUtil.setPrefsValues(prefs, "ranks", languageId, ranks);
298 }
299 }
300
301 }