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.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  /**
39   * <a href="ConfigurationActionImpl.java.html"><b><i>View Source</i></b></a>
40   *
41   * @author Jorge Ferrer
42   * @author Alberto Montero
43   * @author Julio Camarero
44   */
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             // Check if server can create a file as specified
110 
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             // Clear previous preferences that are now blank
196 
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 }