1
14
15 package com.liferay.portlet.webform.action;
16
17 import com.liferay.portal.kernel.portlet.BaseConfigurationAction;
18 import com.liferay.portal.kernel.servlet.SessionErrors;
19 import com.liferay.portal.kernel.servlet.SessionMessages;
20 import com.liferay.portal.kernel.util.Constants;
21 import com.liferay.portal.kernel.util.ParamUtil;
22 import com.liferay.portal.kernel.util.StringPool;
23 import com.liferay.portal.kernel.util.StringUtil;
24 import com.liferay.portal.kernel.util.Validator;
25 import com.liferay.portlet.PortletPreferencesFactoryUtil;
26 import com.liferay.portlet.webform.util.WebFormUtil;
27
28 import java.io.FileNotFoundException;
29 import java.io.FileOutputStream;
30
31 import javax.portlet.ActionRequest;
32 import javax.portlet.ActionResponse;
33 import javax.portlet.PortletConfig;
34 import javax.portlet.PortletPreferences;
35 import javax.portlet.RenderRequest;
36 import javax.portlet.RenderResponse;
37
38
45 public class ConfigurationActionImpl extends BaseConfigurationAction {
46
47 public void processAction(
48 PortletConfig portletConfig, ActionRequest actionRequest,
49 ActionResponse actionResponse)
50 throws Exception {
51
52 String cmd = ParamUtil.getString(actionRequest, Constants.CMD);
53
54 if (!cmd.equals(Constants.UPDATE)) {
55 return;
56 }
57
58 String title = ParamUtil.getString(actionRequest, "title");
59 String description = ParamUtil.getString(actionRequest, "description");
60 boolean requireCaptcha = ParamUtil.getBoolean(
61 actionRequest, "requireCaptcha");
62 String successURL = ParamUtil.getString(actionRequest, "successURL");
63
64 boolean sendAsEmail = ParamUtil.getBoolean(
65 actionRequest, "sendAsEmail");
66 String subject = ParamUtil.getString(actionRequest, "subject");
67 String emailAddress = ParamUtil.getString(
68 actionRequest, "emailAddress");
69
70 boolean saveToDatabase = ParamUtil.getBoolean(
71 actionRequest, "saveToDatabase");
72
73 boolean saveToFile = ParamUtil.getBoolean(actionRequest, "saveToFile");
74 String fileName = ParamUtil.getString(actionRequest, "fileName");
75
76 boolean updateFields = ParamUtil.getBoolean(
77 actionRequest, "updateFields");
78
79 String portletResource = ParamUtil.getString(
80 actionRequest, "portletResource");
81
82 PortletPreferences preferences =
83 PortletPreferencesFactoryUtil.getPortletSetup(
84 actionRequest, portletResource);
85
86 if (Validator.isNull(title)) {
87 SessionErrors.add(actionRequest, "titleRequired");
88 }
89
90 if (Validator.isNull(subject)) {
91 SessionErrors.add(actionRequest, "subjectRequired");
92 }
93
94 if (!sendAsEmail && !saveToDatabase && !saveToFile) {
95 SessionErrors.add(actionRequest, "handlingRequired");
96 }
97
98 if (sendAsEmail) {
99 if (Validator.isNull(emailAddress)) {
100 SessionErrors.add(actionRequest, "emailAddressRequired");
101 }
102 else if (!Validator.isEmailAddress(emailAddress)) {
103 SessionErrors.add(actionRequest, "emailAddressInvalid");
104 }
105 }
106
107 if (saveToFile) {
108
109
111 try {
112 FileOutputStream fos = new FileOutputStream(fileName, true);
113
114 fos.close();
115 }
116 catch (SecurityException es) {
117 SessionErrors.add(actionRequest, "fileNameInvalid");
118 }
119 catch (FileNotFoundException fnfe) {
120 SessionErrors.add(actionRequest, "fileNameInvalid");
121 }
122 }
123
124 if (!SessionErrors.isEmpty(actionRequest)) {
125 return;
126 }
127
128 preferences.setValue("title", title);
129 preferences.setValue("description", description);
130 preferences.setValue("requireCaptcha", String.valueOf(requireCaptcha));
131 preferences.setValue("successURL", successURL);
132 preferences.setValue("sendAsEmail", String.valueOf(sendAsEmail));
133 preferences.setValue("subject", subject);
134 preferences.setValue("emailAddress", emailAddress);
135 preferences.setValue("saveToDatabase", String.valueOf(saveToDatabase));
136 preferences.setValue("saveToFile", String.valueOf(saveToFile));
137 preferences.setValue("fileName", fileName);
138
139 if (updateFields) {
140 int i = 1;
141
142 String databaseTableName = WebFormUtil.getNewDatabaseTableName(
143 portletResource);
144
145 preferences.setValue("databaseTableName", databaseTableName);
146
147 int[] formFieldsIndexes = StringUtil.split(
148 ParamUtil.getString(actionRequest, "formFieldsIndexes"), 0);
149
150 for (int formFieldsIndex : formFieldsIndexes) {
151 String fieldLabel = ParamUtil.getString(
152 actionRequest, "fieldLabel" + formFieldsIndex);
153
154 if (Validator.isNull(fieldLabel)) {
155 continue;
156 }
157
158 String fieldType = ParamUtil.getString(
159 actionRequest, "fieldType" + formFieldsIndex);
160 boolean fieldOptional = ParamUtil.getBoolean(
161 actionRequest, "fieldOptional" + formFieldsIndex);
162 String fieldOptions = ParamUtil.getString(
163 actionRequest, "fieldOptions" + formFieldsIndex);
164 String fieldValidationScript = ParamUtil.getString(
165 actionRequest, "fieldValidationScript" + formFieldsIndex);
166 String fieldValidationErrorMessage = ParamUtil.getString(
167 actionRequest,
168 "fieldValidationErrorMessage" + formFieldsIndex);
169
170 if ((Validator.isNotNull(fieldValidationScript) ^
171 (Validator.isNotNull(fieldValidationErrorMessage)))) {
172
173 SessionErrors.add(
174 actionRequest, "invalidValidationDefinition" + i);
175 }
176
177 preferences.setValue("fieldLabel" + i, fieldLabel);
178 preferences.setValue("fieldType" + i, fieldType);
179 preferences.setValue(
180 "fieldOptional" + i, String.valueOf(fieldOptional));
181 preferences.setValue("fieldOptions" + i, fieldOptions);
182 preferences.setValue(
183 "fieldValidationScript" + i, fieldValidationScript);
184 preferences.setValue(
185 "fieldValidationErrorMessage" + i,
186 fieldValidationErrorMessage);
187
188 i++;
189 }
190
191 if (!SessionErrors.isEmpty(actionRequest)) {
192 return;
193 }
194
195
197 String fieldLabel = preferences.getValue(
198 "fieldLabel" + i, StringPool.BLANK);
199
200 while (Validator.isNotNull(fieldLabel)) {
201 preferences.setValue("fieldLabel" + i, StringPool.BLANK);
202 preferences.setValue("fieldType" + i, StringPool.BLANK);
203 preferences.setValue("fieldOptional" + i, StringPool.BLANK);
204 preferences.setValue("fieldOptions" + i, StringPool.BLANK);
205 preferences.setValue(
206 "fieldValidationScript" + i, StringPool.BLANK);
207 preferences.setValue(
208 "fieldValidationErrorMessage" + i, StringPool.BLANK);
209
210 i++;
211
212 fieldLabel = preferences.getValue(
213 "fieldLabel" + i, StringPool.BLANK);
214 }
215 }
216
217 if (SessionErrors.isEmpty(actionRequest)) {
218 preferences.store();
219
220 SessionMessages.add(
221 actionRequest, portletConfig.getPortletName() + ".doConfigure");
222 }
223 }
224
225 public String render(
226 PortletConfig portletConfig, RenderRequest renderRequest,
227 RenderResponse renderResponse)
228 throws Exception {
229
230 return "/html/portlet/web_form/configuration.jsp";
231 }
232
233 }