1   /**
2    * Copyright (c) 2000-2010 Liferay, Inc. All rights reserved.
3    *
4    * The contents of this file are subject to the terms of the Liferay Enterprise
5    * Subscription License ("License"). You may not use this file except in
6    * compliance with the License. You can obtain a copy of the License by
7    * contacting Liferay, Inc. See the License for the specific language governing
8    * permissions and limitations under the License, including but not limited to
9    * distribution rights of the Software.
10   *
11   *
12   *
13   */
14  
15  package com.liferay.portlet.messageboards.action;
16  
17  import com.liferay.portal.kernel.language.LanguageUtil;
18  import com.liferay.portal.kernel.portlet.BaseConfigurationAction;
19  import com.liferay.portal.kernel.servlet.SessionErrors;
20  import com.liferay.portal.kernel.servlet.SessionMessages;
21  import com.liferay.portal.kernel.util.Constants;
22  import com.liferay.portal.kernel.util.LocaleUtil;
23  import com.liferay.portal.kernel.util.LocalizationUtil;
24  import com.liferay.portal.kernel.util.ParamUtil;
25  import com.liferay.portal.kernel.util.StringPool;
26  import com.liferay.portal.kernel.util.StringUtil;
27  import com.liferay.portal.kernel.util.Validator;
28  import com.liferay.portlet.PortletPreferencesFactoryUtil;
29  
30  import java.util.ArrayList;
31  import java.util.Iterator;
32  import java.util.List;
33  import java.util.Locale;
34  import java.util.Map;
35  import java.util.TreeMap;
36  
37  import javax.portlet.ActionRequest;
38  import javax.portlet.ActionResponse;
39  import javax.portlet.PortletConfig;
40  import javax.portlet.PortletPreferences;
41  import javax.portlet.RenderRequest;
42  import javax.portlet.RenderResponse;
43  
44  /**
45   * <a href="ConfigurationActionImpl.java.html"><b><i>View Source</i></b></a>
46   *
47   * @author Brian Wing Shun Chan
48   */
49  public class ConfigurationActionImpl extends BaseConfigurationAction {
50  
51      public void processAction(
52              PortletConfig portletConfig, ActionRequest actionRequest,
53              ActionResponse actionResponse)
54          throws Exception {
55  
56          String cmd = ParamUtil.getString(actionRequest, Constants.CMD);
57  
58          if (!cmd.equals(Constants.UPDATE)) {
59              return;
60          }
61  
62          String portletResource = ParamUtil.getString(
63              actionRequest, "portletResource");
64  
65          PortletPreferences preferences =
66              PortletPreferencesFactoryUtil.getPortletSetup(
67                  actionRequest, portletResource);
68  
69          String tabs2 = ParamUtil.getString(actionRequest, "tabs2");
70  
71          if (tabs2.equals("email-from")) {
72              updateEmailFrom(actionRequest, preferences);
73          }
74          else if (tabs2.equals("general")) {
75              updateGeneral(actionRequest, preferences);
76          }
77          else if (tabs2.equals("message-added-email")) {
78              updateEmailMessageAdded(actionRequest, preferences);
79          }
80          else if (tabs2.equals("message-updated-email")) {
81              updateEmailMessageUpdated(actionRequest, preferences);
82          }
83          else if (tabs2.equals("rss")) {
84              updateRSS(actionRequest, preferences);
85          }
86          else if (tabs2.equals("thread-priorities")) {
87              updateThreadPriorities(actionRequest, preferences);
88          }
89          else if (tabs2.equals("user-ranks")) {
90              updateUserRanks(actionRequest, preferences);
91          }
92  
93          if (SessionErrors.isEmpty(actionRequest)) {
94              preferences.store();
95  
96              SessionMessages.add(
97                  actionRequest, portletConfig.getPortletName() + ".doConfigure");
98          }
99      }
100 
101     public String render(
102             PortletConfig portletConfig, RenderRequest renderRequest,
103             RenderResponse renderResponse)
104         throws Exception {
105 
106         return "/html/portlet/message_boards/configuration.jsp";
107     }
108 
109     protected void updateEmailFrom(
110             ActionRequest actionRequest, PortletPreferences preferences)
111         throws Exception {
112 
113         String emailFromName = ParamUtil.getString(
114             actionRequest, "emailFromName");
115         String emailFromAddress = ParamUtil.getString(
116             actionRequest, "emailFromAddress");
117         boolean emailHtmlFormat = ParamUtil.getBoolean(
118             actionRequest, "emailHtmlFormat");
119 
120         if (Validator.isNull(emailFromName)) {
121             SessionErrors.add(actionRequest, "emailFromName");
122         }
123         else if (!Validator.isEmailAddress(emailFromAddress) &&
124                  !Validator.isVariableTerm(emailFromAddress)) {
125 
126             SessionErrors.add(actionRequest, "emailFromAddress");
127         }
128         else {
129             preferences.setValue("email-from-name", emailFromName);
130             preferences.setValue("email-from-address", emailFromAddress);
131             preferences.setValue(
132                 "email-html-format", String.valueOf(emailHtmlFormat));
133         }
134     }
135 
136     protected void updateEmailMessageAdded(
137             ActionRequest actionRequest, PortletPreferences preferences)
138         throws Exception {
139 
140         boolean emailMessageAddedEnabled = ParamUtil.getBoolean(
141             actionRequest, "emailMessageAddedEnabled");
142         String emailMessageAddedSubjectPrefix = ParamUtil.getString(
143             actionRequest, "emailMessageAddedSubjectPrefix");
144         String emailMessageAddedBody = ParamUtil.getString(
145             actionRequest, "emailMessageAddedBody");
146         String emailMessageAddedSignature = ParamUtil.getString(
147             actionRequest, "emailMessageAddedSignature");
148 
149         if (Validator.isNull(emailMessageAddedSubjectPrefix)) {
150             SessionErrors.add(actionRequest, "emailMessageAddedSubjectPrefix");
151         }
152         else if (Validator.isNull(emailMessageAddedBody)) {
153             SessionErrors.add(actionRequest, "emailMessageAddedBody");
154         }
155         else {
156             preferences.setValue(
157                 "email-message-added-enabled",
158                 String.valueOf(emailMessageAddedEnabled));
159             preferences.setValue(
160                 "email-message-added-subject-prefix",
161                 emailMessageAddedSubjectPrefix);
162             preferences.setValue(
163                 "email-message-added-body", emailMessageAddedBody);
164             preferences.setValue(
165                 "email-message-added-signature", emailMessageAddedSignature);
166         }
167     }
168 
169     protected void updateEmailMessageUpdated(
170             ActionRequest actionRequest, PortletPreferences preferences)
171         throws Exception {
172 
173         boolean emailMessageUpdatedEnabled = ParamUtil.getBoolean(
174             actionRequest, "emailMessageUpdatedEnabled");
175         String emailMessageUpdatedSubjectPrefix = ParamUtil.getString(
176             actionRequest, "emailMessageUpdatedSubjectPrefix");
177         String emailMessageUpdatedBody = ParamUtil.getString(
178             actionRequest, "emailMessageUpdatedBody");
179         String emailMessageUpdatedSignature = ParamUtil.getString(
180             actionRequest, "emailMessageUpdatedSignature");
181 
182         if (Validator.isNull(emailMessageUpdatedSubjectPrefix)) {
183             SessionErrors.add(
184                 actionRequest, "emailMessageUpdatedSubjectPrefix");
185         }
186         else if (Validator.isNull(emailMessageUpdatedBody)) {
187             SessionErrors.add(actionRequest, "emailMessageUpdatedBody");
188         }
189         else {
190             preferences.setValue(
191                 "email-message-updated-enabled",
192                 String.valueOf(emailMessageUpdatedEnabled));
193             preferences.setValue(
194                 "email-message-updated-subject-prefix",
195                 emailMessageUpdatedSubjectPrefix);
196             preferences.setValue(
197                 "email-message-updated-body", emailMessageUpdatedBody);
198             preferences.setValue(
199                 "email-message-updated-signature",
200                 emailMessageUpdatedSignature);
201         }
202     }
203 
204     protected void updateGeneral(
205             ActionRequest actionRequest, PortletPreferences preferences)
206         throws Exception {
207 
208         String allowAnonymousPosting = ParamUtil.getString(
209             actionRequest, "allowAnonymousPosting");
210         String enableFlags = ParamUtil.getString(actionRequest, "enableFlags");
211         boolean enableRatings = ParamUtil.getBoolean(
212             actionRequest, "enableRatings");
213 
214         preferences.setValue("allow-anonymous-posting", allowAnonymousPosting);
215         preferences.setValue("enable-flags", enableFlags);
216         preferences.setValue(
217             "enable-message-ratings", String.valueOf(enableRatings));
218     }
219 
220     protected void updateRSS(
221             ActionRequest actionRequest, PortletPreferences preferences)
222         throws Exception {
223 
224         int rssDelta = ParamUtil.getInteger(actionRequest, "rssDelta");
225         String rssDisplayStyle = ParamUtil.getString(
226             actionRequest, "rssDisplayStyle");
227         String rssFormat = ParamUtil.getString(actionRequest, "rssFormat");
228 
229         preferences.setValue("rss-delta", String.valueOf(rssDelta));
230         preferences.setValue("rss-display-style", rssDisplayStyle);
231         preferences.setValue("rss-format", rssFormat);
232     }
233 
234     protected void updateThreadPriorities(
235             ActionRequest actionRequest, PortletPreferences preferences)
236         throws Exception {
237 
238         Locale[] locales = LanguageUtil.getAvailableLocales();
239 
240         for (int i = 0; i < locales.length; i++) {
241             String languageId = LocaleUtil.toLanguageId(locales[i]);
242 
243             List<String> priorities = new ArrayList<String>();
244 
245             for (int j = 0; j < 10; j++) {
246                 String name = ParamUtil.getString(
247                     actionRequest, "priorityName" + j + "_" + languageId);
248                 String image = ParamUtil.getString(
249                     actionRequest, "priorityImage" + j + "_" + languageId);
250                 double value = ParamUtil.getDouble(
251                     actionRequest, "priorityValue" + j + "_" + languageId);
252 
253                 if (Validator.isNotNull(name) || Validator.isNotNull(image) ||
254                     (value != 0.0)) {
255 
256                     priorities.add(
257                         name + StringPool.COMMA + image + StringPool.COMMA +
258                             value);
259                 }
260             }
261 
262             LocalizationUtil.setPreferencesValues(
263                 preferences, "priorities", languageId,
264                 priorities.toArray(new String[priorities.size()]));
265         }
266     }
267 
268     protected void updateUserRanks(
269             ActionRequest actionRequest, PortletPreferences preferences)
270         throws Exception {
271 
272         Locale[] locales = LanguageUtil.getAvailableLocales();
273 
274         for (int i = 0; i < locales.length; i++) {
275             String languageId = LocaleUtil.toLanguageId(locales[i]);
276 
277             String[] ranks = StringUtil.split(
278                 ParamUtil.getString(actionRequest, "ranks_" + languageId),
279                 StringPool.NEW_LINE);
280 
281             Map<String, String> map = new TreeMap<String, String>();
282 
283             for (int j = 0; j < ranks.length; j++) {
284                 String[] kvp = StringUtil.split(ranks[j], StringPool.EQUAL);
285 
286                 String kvpName = kvp[0];
287                 String kvpValue = kvp[1];
288 
289                 map.put(kvpValue, kvpName);
290             }
291 
292             ranks = new String[map.size()];
293 
294             int count = 0;
295 
296             Iterator<Map.Entry<String, String>> itr =
297                 map.entrySet().iterator();
298 
299             while (itr.hasNext()) {
300                 Map.Entry<String, String> entry = itr.next();
301 
302                 String kvpValue = entry.getKey();
303                 String kvpName = entry.getValue();
304 
305                 ranks[count++] = kvpName + StringPool.EQUAL + kvpValue;
306             }
307 
308             LocalizationUtil.setPreferencesValues(
309                 preferences, "ranks", languageId, ranks);
310         }
311     }
312 
313 }