KickJava   Java API By Example, From Geeks To Geeks.

Java > Open Source Codes > com > dotmarketing > cms > webforms > action > SubmitWebFormAction


1 package com.dotmarketing.cms.webforms.action;
2
3 import java.io.BufferedInputStream JavaDoc;
4 import java.io.BufferedOutputStream JavaDoc;
5 import java.io.File JavaDoc;
6 import java.io.FileInputStream JavaDoc;
7 import java.io.FileOutputStream JavaDoc;
8 import java.io.InputStream JavaDoc;
9 import java.io.OutputStream JavaDoc;
10 import java.util.Date JavaDoc;
11 import java.util.Iterator JavaDoc;
12 import java.util.LinkedHashMap JavaDoc;
13 import java.util.Map JavaDoc;
14 import java.util.Set JavaDoc;
15 import java.util.StringTokenizer JavaDoc;
16 import java.util.TreeMap JavaDoc;
17
18 import javax.servlet.http.HttpServletRequest JavaDoc;
19 import javax.servlet.http.HttpServletResponse JavaDoc;
20
21 import org.apache.commons.beanutils.BeanUtils;
22 import org.apache.struts.Globals;
23 import org.apache.struts.action.ActionForm;
24 import org.apache.struts.action.ActionForward;
25 import org.apache.struts.action.ActionMapping;
26 import org.apache.struts.action.ActionMessage;
27 import org.apache.struts.action.ActionMessages;
28 import org.apache.struts.actions.DispatchAction;
29
30 import com.dotmarketing.beans.Host;
31 import com.dotmarketing.db.DotHibernate;
32 import com.dotmarketing.factories.HostFactory;
33 import com.dotmarketing.factories.WebAssetFactory;
34 import com.dotmarketing.portlets.folders.factories.FolderFactory;
35 import com.dotmarketing.portlets.folders.model.Folder;
36 import com.dotmarketing.portlets.webforms.model.WebForm;
37 import com.dotmarketing.util.Config;
38 import com.dotmarketing.util.Logger;
39 import com.dotmarketing.util.Mailer;
40 import com.dotmarketing.util.UtilMethods;
41 import com.dotmarketing.util.CreditCardProcessor;
42 import com.dotmarketing.util.CreditCardProcessorResponse;
43 import com.liferay.util.servlet.UploadServletRequest;
44
45 /**
46  *
47  * @author David
48  * @version $Revision: 1.2 $ $Date: 2005/02/12 16:48:42 $
49  */

50 public final class SubmitWebFormAction extends DispatchAction {
51
52     private static Long JavaDoc emailTime = new Long JavaDoc(System.currentTimeMillis());
53
54     public ActionForward unspecified(ActionMapping rMapping, ActionForm form, HttpServletRequest JavaDoc request, HttpServletResponse JavaDoc response) throws Exception JavaDoc {
55
56         Host currentHost = HostFactory.getCurrentHost(request);
57         java.util.TreeMap JavaDoc map = new java.util.TreeMap JavaDoc(request.getParameterMap());
58
59         Logger.debug(this, "SubmitWebFormAction !!!! Map:" + map.toString());
60
61         String JavaDoc ignoreString = ":to:from:subject:cc:bcc:html:dispatch:order:returnUrl:return:autoReplyTo:autoReplyFrom:autoReplyText:autoReplySubject:cardType:ccNumber:expMonth:expYear:cardName:chargeCreditCard:errorURL:";
62         String JavaDoc predefinedFields = ":formType:prefix:title:firstName:middleInitial:middleName:lastName:fullName:organization:address:address1:address2:city:state:zip:country:phone:email:";
63
64         //Sort the forms' fields by the given order
65
Map JavaDoc orderedMap = new LinkedHashMap JavaDoc();
66
67         String JavaDoc order = getMapString("order", map);
68         
69         UploadServletRequest uploadReq = null;
70         
71         if (request instanceof UploadServletRequest)
72             uploadReq = (UploadServletRequest) request;
73         
74         java.util.ArrayList JavaDoc<String JavaDoc> inputFileNames = new java.util.ArrayList JavaDoc<String JavaDoc>(10);
75         inputFileNames.ensureCapacity(10);
76
77         if (order != null) {
78             StringTokenizer JavaDoc st = new StringTokenizer JavaDoc(order, " ;,");
79
80             while (st.hasMoreTokens()) {
81                 String JavaDoc token = st.nextToken().toString();
82
83                 if (token != null) {
84                     String JavaDoc y = (map.get(token) == null) ? "" : map.get(token).toString();
85                     orderedMap.put(token, y);
86                 }
87                 
88                 if (token.indexOf("file") == 0)
89                     inputFileNames.add(token);
90             }
91         }
92         Set JavaDoc es = (order != null) ? orderedMap.entrySet() : map.entrySet();
93
94         //Saving the form in the database
95

96         String JavaDoc formType = request.getParameter("formType");
97         long formInode = 0;
98
99         WebForm formBean = new WebForm ();
100
101         if (UtilMethods.isSet(formType)) {
102             //Copy the common fields setted in the form
103
BeanUtils.copyProperties(formBean, form);
104             
105             DotHibernate.save(formBean);
106             formInode = formBean.getWebFormId();
107
108             //Loop over the request Map or the ordered Map to set the custom fields
109
StringBuffer JavaDoc customFields = new StringBuffer JavaDoc();
110             Iterator JavaDoc i = es.iterator();
111             String JavaDoc value;
112             while (i.hasNext()) {
113                 Map.Entry JavaDoc e = (Map.Entry JavaDoc) i.next();
114                 String JavaDoc key = (String JavaDoc) e.getKey();
115                 
116                 if (key.indexOf("file") == 0)
117                     value = Config.getStringProperty("SAVED_UPLOAD_FILES_PATH") + "/" + formInode + "/" + uploadReq.getFileName(key);
118                 else
119                     value = getMapString(key, map);
120                 
121                 if (predefinedFields.indexOf(":" + key + ":") < 0 && ignoreString.indexOf(":" + key + ":") < 0 &&
122                         UtilMethods.isSet(value)) {
123                     value = value.replaceAll("\\|"," ").replaceAll("="," ");
124                     String JavaDoc capKey = UtilMethods.capitalize(key);
125                     customFields.append(capKey + "=" + value + "|");
126                 }
127             }
128             formBean.setCustomFields(customFields.toString());
129
130             formBean.setSubmitDate(new Date JavaDoc());
131
132             DotHibernate.update(formBean);
133         } else {
134             Logger.warn("The web form: " + request.getHeader("REFERER") + " doesn't have the required formType field, the form data will not be saved in the database.");
135         }
136         
137         if ((0 < formInode) && (0 < inputFileNames.size()) && uploadReq != null) {
138             java.io.File JavaDoc f;
139             String JavaDoc fileName;
140             String JavaDoc path;
141             javax.activation.MimetypesFileTypeMap JavaDoc mimeTypeFileTypeMap;
142             String JavaDoc mimeType;
143             java.io.File JavaDoc savedFile;
144             InputStream JavaDoc in;
145             OutputStream JavaDoc out;
146             byte[] buf;
147             int size;
148             
149             for (int i = 0; i < inputFileNames.size(); ++i) {
150                 f = uploadReq.getFile(inputFileNames.get(i));
151                 fileName = uploadReq.getFileName(inputFileNames.get(i));
152                 
153                 path = Config.getStringProperty("SAVED_UPLOAD_FILES_PATH") + "/" + formInode;
154                 Folder folder = FolderFactory.createFolders(path, HostFactory.getDefaultHost(), null);
155                 
156                 path = Config.CONTEXT.getRealPath(path);
157                 new java.io.File JavaDoc(path).mkdirs();
158                 
159                 mimeTypeFileTypeMap = new javax.activation.MimetypesFileTypeMap JavaDoc(Config.CONTEXT.getRealPath("/META-INF/mime.types"));
160                 mimeType = mimeTypeFileTypeMap.getContentType(fileName);
161                 
162                 com.dotmarketing.portlets.files.model.File file = new com.dotmarketing.portlets.files.model.File();
163                 file.setFileName(fileName);
164                 file.setTitle(fileName);
165                 file.setFriendlyName(fileName);
166                 file.setMimeType(mimeType);
167                 file.setSize(Integer.parseInt(f.length() + ""));
168                 
169                 WebAssetFactory.createAsset(file, "", folder);
170                 WebAssetFactory.publishAsset(file);
171
172                 savedFile = new java.io.File JavaDoc(path + "/" + fileName);
173                 if (!savedFile.createNewFile()) {
174                     Logger.warn("Error saving uploaded file.");
175                 }
176                 in = new BufferedInputStream JavaDoc(new FileInputStream JavaDoc(f));
177                 out = new BufferedOutputStream JavaDoc(new FileOutputStream JavaDoc(savedFile));
178                 buf = new byte[4096];
179                 
180                 for (; (size = in.read(buf)) != -1;) {
181                     out.write(buf, 0, size);
182                 }
183                 in.close();
184                 out.close();
185                 f.delete();
186             }
187         }
188         
189 // credit card fields
190
//cardType:ccNumber:expMonth:expYear:cardName:
191
// if (formInode>0 && request.getParameter("chargeCreditCard")!=null && request.getParameter("chargeCreditCard").equals("true")) {
192
if (formInode>0 && ((request.getParameter("chargeCreditCard")!=null && request.getParameter("chargeCreditCard").equals("true")) ||
193                             (request.getParameter("cardType")!=null && !request.getParameter("cardType").trim().equals("none")))) {
194             try {
195
196                 Logger.debug(SubmitWebFormAction.class,"Running Credit Card Processor");
197
198                 //we need to call linkpoint
199
String JavaDoc shipping = request.getParameter("shipping");
200                 Float JavaDoc shippingFloat = ((shipping != null ) ? new Float JavaDoc(shipping) : new Float JavaDoc(0));
201
202                 String JavaDoc total = request.getParameter("total");
203                 Float JavaDoc totalFloat = new Float JavaDoc(total);
204
205                 //String cardType = request.getParameter("cardType");
206

207                 String JavaDoc ccNumber = request.getParameter("ccNumber");
208
209                 String JavaDoc expMonth = request.getParameter("expMonth");
210                 int month = Integer.valueOf(expMonth).intValue();
211                 String JavaDoc expYear = request.getParameter("expYear");
212                 int year = Integer.valueOf(expYear).intValue();
213
214                 String JavaDoc cardName = request.getParameter("cardName");
215
216                 //these fields should all be there in credit card forms, or else the credit card wont approve
217
String JavaDoc billingAddress1 = request.getParameter("address");
218                 String JavaDoc billingAddress2 = "";
219                 String JavaDoc billingCity = request.getParameter("city");
220                 String JavaDoc billingState = request.getParameter("state");
221                 String JavaDoc billingZip = request.getParameter("zip");
222                 String JavaDoc billingEmail = request.getParameter("email");
223                 String JavaDoc billingPhone = request.getParameter("phone");
224                 String JavaDoc orderType = request.getParameter("orderType");
225
226                 CreditCardProcessorResponse ccResponse = CreditCardProcessor.processCreditCardOrderWebForms(
227                     formInode, request.getRemoteUser(), shippingFloat, totalFloat.floatValue(), ccNumber,
228                     month, year,"", cardName,billingAddress1, billingAddress2,billingCity, billingState,
229                     billingZip, Config.getStringProperty("US_COUNTRY_CODE"),
230                     billingPhone, "", billingEmail, orderType);
231
232                 Logger.debug(SubmitWebFormAction.class,"Credit Card Response" + ccResponse.orderApproved());
233                 Logger.debug(SubmitWebFormAction.class,"Credit Card Response" + ccResponse.getApproved());
234                 Logger.debug(SubmitWebFormAction.class,"Credit Card Response" + ccResponse.getOrdernum());
235
236                 if (!ccResponse.orderApproved()) {
237                     DotHibernate.delete(formBean);
238 // DotHibernate.rollbackTransaction();
239
ActionMessages ae = new ActionMessages();
240                     ae.add(Globals.ERROR_KEY, new ActionMessage(
241                             "error.cc_processing.card.denied", ccResponse.getError()));
242                     saveErrors(request, ae);
243                     generateToken(request);
244                     saveToken(request);
245                     return new ActionForward(request.getParameter("errorURL"));
246                 }
247
248             }
249             catch (Exception JavaDoc e) {
250                 Logger.debug(SubmitWebFormAction.class,"Credit Card exception=" + e.getMessage());
251             }
252         }
253
254
255
256         //strip off spamx from email form
257
map.put("html", "1");
258
259         //Email variables
260
String JavaDoc from = UtilMethods.replace(getMapString("from", map), "spamx", "");
261         String JavaDoc subject = (map.get("subject") == null) ? "Mail from " + currentHost.getHostname() + "" : getMapString("subject", map);
262         String JavaDoc to = UtilMethods.replace(getMapString("to", map), "spamx", "");
263         String JavaDoc cc = UtilMethods.replace(getMapString("cc", map), "spamx", "");
264         String JavaDoc bcc = UtilMethods.replace(getMapString("bcc", map), "spamx", "");
265         String JavaDoc emailFolder = getMapString("emailFolder", map);
266
267         boolean html = (map.get("html") != null);
268
269
270         //Build email message.
271
StringBuffer JavaDoc htmlbody = new StringBuffer JavaDoc();
272         StringBuffer JavaDoc textbody = new StringBuffer JavaDoc();
273         htmlbody.append("<html><style>td{font-family:arial;font-size:10pt;}</style><BODY>");
274         htmlbody.append("<TABLE bgcolor=eeeeee width=95%>");
275         htmlbody.append("<TR><TD colspan=2><strong>Information from " + currentHost.getHostname() + ": " + subject + "</strong></TD></TR>");
276         textbody.append("Information from " + currentHost.getHostname() + ": \t" + subject + "\n\n");
277
278         //Loop over the request Map or the ordered Map
279
Iterator JavaDoc i = es.iterator();
280
281         while (i.hasNext()) {
282             Map.Entry JavaDoc e = (Map.Entry JavaDoc) i.next();
283             String JavaDoc key = (String JavaDoc) e.getKey();
284             String JavaDoc value = getMapString(key, map);
285             if (ignoreString.indexOf(":" + key + ":") < 0 && UtilMethods.isSet(value)) {
286                 String JavaDoc capKey = UtilMethods.capitalize(key);
287                 htmlbody.append("<TR><TD bgcolor=white valign=top nowrap>&nbsp;" + capKey + "&nbsp;</TD>");
288                 htmlbody.append("<TD bgcolor=white valign=top width=100%>" + value + "</TD></TR>");
289                 textbody.append(key + ":\t");
290                 textbody.append(value + "\n");
291             }
292         }
293
294         if (order != null) {
295             i = map.entrySet().iterator();
296             boolean printTitle = false;
297             while (i.hasNext()) {
298                 Map.Entry JavaDoc e = (Map.Entry JavaDoc) i.next();
299                 String JavaDoc key = (String JavaDoc) e.getKey();
300                 String JavaDoc value = getMapString(key, map);
301                 if (ignoreString.indexOf(":" + key + ":") < 0
302                     && UtilMethods.isSet(value)
303                     && !orderedMap.containsKey(key)) {
304
305                     if(! printTitle){
306                         htmlbody.append("<TR><TD bgcolor=eeeeee valign=top nowrap colspan=2><B>Other Information:</b></TD></TR>");
307                         printTitle = true;
308                     }
309                     String JavaDoc capKey = UtilMethods.capitalize(key);
310                     htmlbody.append("<TR><TD bgcolor=white valign=top nowrap>&nbsp;" + capKey + "&nbsp;</TD>");
311                     htmlbody.append("<TD bgcolor=white valign=top width=100%>" + value + "</TD></TR>");
312                     textbody.append(key + ":\t");
313                     textbody.append(value + "\n");
314                 }
315             }
316
317         }
318
319         htmlbody.append("</TABLE></body></HTML>");
320
321         //Saving email backup in a file
322
String JavaDoc filePath = Config.CONTEXT.getRealPath(Config.getStringProperty("EMAIL_BACKUPS"));
323         new File JavaDoc(filePath).mkdir();
324
325         File JavaDoc file = null;
326         synchronized(emailTime) {
327             emailTime = new Long JavaDoc(emailTime.longValue()+1);
328             if (UtilMethods.isSet(emailFolder)) {
329                 new File JavaDoc(filePath + File.separator + emailFolder).mkdir();
330                 filePath = filePath + File.separator + emailFolder;
331             }
332             file = new File JavaDoc(filePath + File.separator + emailTime.toString() + ".html");
333         }
334         if (file!=null) {
335             java.io.OutputStream JavaDoc os = new java.io.FileOutputStream JavaDoc(file);
336             BufferedOutputStream JavaDoc bos = new BufferedOutputStream JavaDoc(os);
337             bos.write(htmlbody.toString().getBytes());
338             bos.flush();
339             bos.close();
340             os.close();
341         }
342
343         //send the mail out;
344
Mailer m = new Mailer();
345         m.setToEmail(to);
346         m.setFromEmail(from);
347         m.setCc(cc);
348         m.setBcc(bcc);
349         m.setSubject(subject);
350
351         if (html) {
352             m.setHTMLBody(htmlbody.toString());
353             m.setTextBody(textbody.toString());
354         } else {
355             m.setTextBody(textbody.toString());
356         }
357
358         if (m.sendMessage()) {
359
360             //there is an auto reply, send it on
361
if (UtilMethods.isSet(getMapString("autoReplyText", map))
362                 && UtilMethods.isSet(getMapString("autoReplySubject", map))
363                 && UtilMethods.isSet(getMapString("autoReplyFrom", map))
364                 && UtilMethods.isSet(getMapString("autoReplyTo", map))) {
365
366                 m = new Mailer();
367                 m.setToEmail(UtilMethods.replace(getMapString("autoReplyTo", map), "spamx", ""));
368                 m.setFromEmail(UtilMethods.replace(getMapString("autoReplyFrom", map), "spamx", ""));
369                 m.setSubject(getMapString("autoReplySubject", map));
370                 m.setTextBody(getMapString("autoReplyText", map));
371                 m.sendMessage();
372             }
373         }
374         
375         if (request.getParameter("return") != null) {
376             
377             ActionForward af = new ActionForward(request.getParameter("return"));
378             af.setRedirect(true);
379             return af;
380         } else if (request.getParameter("returnUrl") != null) {
381             ActionForward af = new ActionForward(request.getParameter("returnUrl"));
382             af.setRedirect(true);
383             return af;
384         } else {
385             return rMapping.findForward("thankYouPage");
386         }
387
388     }
389     private static String JavaDoc getMapString(String JavaDoc key, TreeMap JavaDoc map) {
390
391         try {
392             return ((String JavaDoc[]) map.get(key))[0];
393         } catch (Exception JavaDoc e) {
394             try {
395                 return (String JavaDoc) map.get(key);
396             } catch (Exception JavaDoc ex) {
397                 return null;
398             }
399
400         }
401
402     }
403
404 }
405
Popular Tags