1 package com.dotmarketing.cms.webforms.action; 2 3 import java.io.BufferedInputStream ; 4 import java.io.BufferedOutputStream ; 5 import java.io.File ; 6 import java.io.FileInputStream ; 7 import java.io.FileOutputStream ; 8 import java.io.InputStream ; 9 import java.io.OutputStream ; 10 import java.util.Date ; 11 import java.util.Iterator ; 12 import java.util.LinkedHashMap ; 13 import java.util.Map ; 14 import java.util.Set ; 15 import java.util.StringTokenizer ; 16 import java.util.TreeMap ; 17 18 import javax.servlet.http.HttpServletRequest ; 19 import javax.servlet.http.HttpServletResponse ; 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 50 public final class SubmitWebFormAction extends DispatchAction { 51 52 private static Long emailTime = new Long (System.currentTimeMillis()); 53 54 public ActionForward unspecified(ActionMapping rMapping, ActionForm form, HttpServletRequest request, HttpServletResponse response) throws Exception { 55 56 Host currentHost = HostFactory.getCurrentHost(request); 57 java.util.TreeMap map = new java.util.TreeMap (request.getParameterMap()); 58 59 Logger.debug(this, "SubmitWebFormAction !!!! Map:" + map.toString()); 60 61 String ignoreString = ":to:from:subject:cc:bcc:html:dispatch:order:returnUrl:return:autoReplyTo:autoReplyFrom:autoReplyText:autoReplySubject:cardType:ccNumber:expMonth:expYear:cardName:chargeCreditCard:errorURL:"; 62 String predefinedFields = ":formType:prefix:title:firstName:middleInitial:middleName:lastName:fullName:organization:address:address1:address2:city:state:zip:country:phone:email:"; 63 64 Map orderedMap = new LinkedHashMap (); 66 67 String order = getMapString("order", map); 68 69 UploadServletRequest uploadReq = null; 70 71 if (request instanceof UploadServletRequest) 72 uploadReq = (UploadServletRequest) request; 73 74 java.util.ArrayList <String > inputFileNames = new java.util.ArrayList <String >(10); 75 inputFileNames.ensureCapacity(10); 76 77 if (order != null) { 78 StringTokenizer st = new StringTokenizer (order, " ;,"); 79 80 while (st.hasMoreTokens()) { 81 String token = st.nextToken().toString(); 82 83 if (token != null) { 84 String 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 es = (order != null) ? orderedMap.entrySet() : map.entrySet(); 93 94 96 String formType = request.getParameter("formType"); 97 long formInode = 0; 98 99 WebForm formBean = new WebForm (); 100 101 if (UtilMethods.isSet(formType)) { 102 BeanUtils.copyProperties(formBean, form); 104 105 DotHibernate.save(formBean); 106 formInode = formBean.getWebFormId(); 107 108 StringBuffer customFields = new StringBuffer (); 110 Iterator i = es.iterator(); 111 String value; 112 while (i.hasNext()) { 113 Map.Entry e = (Map.Entry ) i.next(); 114 String key = (String ) 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 capKey = UtilMethods.capitalize(key); 125 customFields.append(capKey + "=" + value + "|"); 126 } 127 } 128 formBean.setCustomFields(customFields.toString()); 129 130 formBean.setSubmitDate(new Date ()); 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 f; 139 String fileName; 140 String path; 141 javax.activation.MimetypesFileTypeMap mimeTypeFileTypeMap; 142 String mimeType; 143 java.io.File savedFile; 144 InputStream in; 145 OutputStream 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 (path).mkdirs(); 158 159 mimeTypeFileTypeMap = new javax.activation.MimetypesFileTypeMap (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 (path + "/" + fileName); 173 if (!savedFile.createNewFile()) { 174 Logger.warn("Error saving uploaded file."); 175 } 176 in = new BufferedInputStream (new FileInputStream (f)); 177 out = new BufferedOutputStream (new FileOutputStream (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 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 String shipping = request.getParameter("shipping"); 200 Float shippingFloat = ((shipping != null ) ? new Float (shipping) : new Float (0)); 201 202 String total = request.getParameter("total"); 203 Float totalFloat = new Float (total); 204 205 207 String ccNumber = request.getParameter("ccNumber"); 208 209 String expMonth = request.getParameter("expMonth"); 210 int month = Integer.valueOf(expMonth).intValue(); 211 String expYear = request.getParameter("expYear"); 212 int year = Integer.valueOf(expYear).intValue(); 213 214 String cardName = request.getParameter("cardName"); 215 216 String billingAddress1 = request.getParameter("address"); 218 String billingAddress2 = ""; 219 String billingCity = request.getParameter("city"); 220 String billingState = request.getParameter("state"); 221 String billingZip = request.getParameter("zip"); 222 String billingEmail = request.getParameter("email"); 223 String billingPhone = request.getParameter("phone"); 224 String 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 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 e) { 250 Logger.debug(SubmitWebFormAction.class,"Credit Card exception=" + e.getMessage()); 251 } 252 } 253 254 255 256 map.put("html", "1"); 258 259 String from = UtilMethods.replace(getMapString("from", map), "spamx", ""); 261 String subject = (map.get("subject") == null) ? "Mail from " + currentHost.getHostname() + "" : getMapString("subject", map); 262 String to = UtilMethods.replace(getMapString("to", map), "spamx", ""); 263 String cc = UtilMethods.replace(getMapString("cc", map), "spamx", ""); 264 String bcc = UtilMethods.replace(getMapString("bcc", map), "spamx", ""); 265 String emailFolder = getMapString("emailFolder", map); 266 267 boolean html = (map.get("html") != null); 268 269 270 StringBuffer htmlbody = new StringBuffer (); 272 StringBuffer textbody = new StringBuffer (); 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 Iterator i = es.iterator(); 280 281 while (i.hasNext()) { 282 Map.Entry e = (Map.Entry ) i.next(); 283 String key = (String ) e.getKey(); 284 String value = getMapString(key, map); 285 if (ignoreString.indexOf(":" + key + ":") < 0 && UtilMethods.isSet(value)) { 286 String capKey = UtilMethods.capitalize(key); 287 htmlbody.append("<TR><TD bgcolor=white valign=top nowrap> " + capKey + " </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 e = (Map.Entry ) i.next(); 299 String key = (String ) e.getKey(); 300 String 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 capKey = UtilMethods.capitalize(key); 310 htmlbody.append("<TR><TD bgcolor=white valign=top nowrap> " + capKey + " </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 String filePath = Config.CONTEXT.getRealPath(Config.getStringProperty("EMAIL_BACKUPS")); 323 new File (filePath).mkdir(); 324 325 File file = null; 326 synchronized(emailTime) { 327 emailTime = new Long (emailTime.longValue()+1); 328 if (UtilMethods.isSet(emailFolder)) { 329 new File (filePath + File.separator + emailFolder).mkdir(); 330 filePath = filePath + File.separator + emailFolder; 331 } 332 file = new File (filePath + File.separator + emailTime.toString() + ".html"); 333 } 334 if (file!=null) { 335 java.io.OutputStream os = new java.io.FileOutputStream (file); 336 BufferedOutputStream bos = new BufferedOutputStream (os); 337 bos.write(htmlbody.toString().getBytes()); 338 bos.flush(); 339 bos.close(); 340 os.close(); 341 } 342 343 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 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 getMapString(String key, TreeMap map) { 390 391 try { 392 return ((String []) map.get(key))[0]; 393 } catch (Exception e) { 394 try { 395 return (String ) map.get(key); 396 } catch (Exception ex) { 397 return null; 398 } 399 400 } 401 402 } 403 404 } 405 | Popular Tags |