1 package com.dotmarketing.portlets.webforms.action; 2 3 import java.io.IOException ; 4 import java.util.ArrayList ; 5 import java.util.Date ; 6 import java.util.HashMap ; 7 import java.util.Iterator ; 8 import java.util.List ; 9 import java.util.Map ; 10 11 import javax.portlet.ActionRequest; 12 import javax.portlet.ActionResponse; 13 import javax.portlet.PortletConfig; 14 import javax.servlet.ServletOutputStream ; 15 import javax.servlet.http.HttpServletResponse ; 16 17 import org.apache.struts.action.ActionForm; 18 import org.apache.struts.action.ActionMapping; 19 20 import com.dotmarketing.portlets.webforms.factories.WebFormFactory; 21 import com.dotmarketing.portlets.webforms.model.WebForm; 22 import com.dotmarketing.util.Logger; 23 import com.dotmarketing.util.UtilMethods; 24 import com.liferay.portal.struts.PortletAction; 25 import com.liferay.portlet.ActionResponseImpl; 26 import com.liferay.util.servlet.SessionMessages; 27 28 public class GenerateWebFormsReportAction extends PortletAction { 29 30 public void processAction( 31 ActionMapping mapping, ActionForm form, PortletConfig config, 32 ActionRequest req, ActionResponse res) 33 throws Exception { 34 Logger.debug(this, "Running GenerateWebFormsReportAction!!"); 35 36 String cmd = req.getParameter("cmd"); 37 String reportType = req.getParameter("report_type"); 38 List <WebForm> list = new ArrayList (); 39 list = WebFormFactory.getWebFormsByType(reportType); 40 41 if (UtilMethods.isSet(cmd) && cmd.equals("delete") && UtilMethods.isSet(reportType)) { 42 WebFormFactory.removeWebFormsByType(reportType); 43 SessionMessages.add(req, "message.webforms.content.deleted"); 44 setForward(req, "portlet.ext.webforms.view"); 45 return; 46 } 47 48 String reportName = reportType + " Web Forms Report"; 49 Date reportDate = new Date (); 50 51 String reportComments = "Web Forms Submitted for " + reportType; 52 53 String dateString = (new java.text.SimpleDateFormat ("M-d-yyyy")).format(reportDate); 54 String reportFileName = reportType.replaceAll(" ", "") + "Report-" + dateString + ".xls"; 55 56 List <String > reportHeaders = new ArrayList (); 57 List <String > customHeaders = new ArrayList (); 58 59 reportHeaders.add("Submit Date/Time"); 60 61 for (WebForm webForm : list) { 62 63 if (!reportHeaders.contains("Title") && UtilMethods.isSet(webForm.getTitle())) 64 reportHeaders.add("Title"); 65 66 if (!reportHeaders.contains("Prefix") && UtilMethods.isSet(webForm.getPrefix())) 67 reportHeaders.add("Prefix"); 68 69 if (!reportHeaders.contains("First Name") && UtilMethods.isSet(webForm.getFirstName())) 70 reportHeaders.add("First Name"); 71 72 if (!reportHeaders.contains("Middle Initial") && UtilMethods.isSet(webForm.getMiddleInitial())) 73 reportHeaders.add("Middle Initial"); 74 75 if (!reportHeaders.contains("Middle Name") && UtilMethods.isSet(webForm.getMiddleName())) 76 reportHeaders.add("Middle Name"); 77 78 if (!reportHeaders.contains("Last Name") && UtilMethods.isSet(webForm.getLastName())) 79 reportHeaders.add("Last Name"); 80 81 if (!reportHeaders.contains("Full Name") && UtilMethods.isSet(webForm.getFullName())) 82 reportHeaders.add("Full Name"); 83 84 if (!reportHeaders.contains("Organization") && UtilMethods.isSet(webForm.getOrganization())) 85 reportHeaders.add("Organization"); 86 87 if (!reportHeaders.contains("Address") && UtilMethods.isSet(webForm.getAddress())) 88 reportHeaders.add("Address"); 89 90 if (!reportHeaders.contains("Address 1") && UtilMethods.isSet(webForm.getAddress1())) 91 reportHeaders.add("Address 1"); 92 93 if (!reportHeaders.contains("Address 2") && UtilMethods.isSet(webForm.getAddress2())) 94 reportHeaders.add("Address 2"); 95 96 if (!reportHeaders.contains("City") && UtilMethods.isSet(webForm.getCity())) 97 reportHeaders.add("City"); 98 99 if (!reportHeaders.contains("State") && UtilMethods.isSet(webForm.getState())) 100 reportHeaders.add("State"); 101 102 if (!reportHeaders.contains("Zip") && UtilMethods.isSet(webForm.getZip())) 103 reportHeaders.add("Zip"); 104 105 if (!reportHeaders.contains("Country") && UtilMethods.isSet(webForm.getCountry())) 106 reportHeaders.add("Country"); 107 108 if (!reportHeaders.contains("Phone") && UtilMethods.isSet(webForm.getPhone())) 109 reportHeaders.add("Phone"); 110 111 if (!reportHeaders.contains("Email") && UtilMethods.isSet(webForm.getEmail())) 112 reportHeaders.add("Email"); 113 114 if (UtilMethods.isSet(webForm.getCustomFields())) { 115 String customFields = webForm.getCustomFields(); 116 String [] fields = customFields.split("\\|"); 117 for (String field : fields) { 118 String [] splitted = field.split("="); 119 if (splitted.length == 2) { 120 String name = splitted[0]; 121 if (!reportHeaders.contains(name)) 122 reportHeaders.add(name); 123 if (!customHeaders.contains(name)) 124 customHeaders.add(name); 125 } 126 } 127 } 128 129 req.setAttribute("reportHeaders", reportHeaders); 130 131 } 132 133 List reportData = new ArrayList (); 134 135 for (WebForm webForm : list) { 136 137 try { 138 139 List row = new ArrayList (); 140 141 Map customFieldsMap = new HashMap (); 142 143 if (UtilMethods.isSet(webForm.getCustomFields())) { 144 String customFields = webForm.getCustomFields(); 145 String [] fields = customFields.split("\\|"); 146 for (String field : fields) { 147 String [] splitted = field.split("="); 148 if (splitted.length == 2) { 149 String name = splitted[0]; 150 String value = splitted[1]; 151 customFieldsMap.put(name, value); 152 } 153 } 154 } 155 156 row.add(UtilMethods.dateToHTMLDate(webForm.getSubmitDate()) + " " + UtilMethods.dateToHTMLTime(webForm.getSubmitDate())); 157 158 List <String > subList = reportHeaders.subList(1, reportHeaders.size()); 159 for (String header : subList) { 160 161 if (header.equals("Title")) 162 row.add(UtilMethods.isSet(webForm.getTitle())?webForm.getTitle():""); 163 else if (header.equals("Prefix")) 164 row.add(UtilMethods.isSet(webForm.getPrefix())?webForm.getPrefix():""); 165 else if (header.equals("First Name")) 166 row.add(UtilMethods.isSet(webForm.getFirstName())?webForm.getFirstName():""); 167 else if (header.equals("Middle Initial")) 168 row.add(UtilMethods.isSet(webForm.getMiddleInitial())?webForm.getMiddleInitial():""); 169 else if (header.equals("Middle Name")) 170 row.add(UtilMethods.isSet(webForm.getMiddleName())?webForm.getMiddleName():""); 171 else if (header.equals("Last Name")) 172 row.add(UtilMethods.isSet(webForm.getLastName())?webForm.getLastName():""); 173 else if (header.equals("Full Name")) 174 row.add(UtilMethods.isSet(webForm.getFullName())?webForm.getFullName():""); 175 else if (header.equals("Organization")) 176 row.add(UtilMethods.isSet(webForm.getOrganization())?webForm.getOrganization():""); 177 else if (header.equals("Address")) 178 row.add(UtilMethods.isSet(webForm.getAddress())?webForm.getAddress():""); 179 else if (header.equals("Address 1")) 180 row.add(UtilMethods.isSet(webForm.getAddress1())?webForm.getAddress1():""); 181 else if (header.equals("Address 2")) 182 row.add(UtilMethods.isSet(webForm.getAddress2())?webForm.getAddress2():""); 183 else if (header.equals("City")) 184 row.add(UtilMethods.isSet(webForm.getCity())?webForm.getCity():""); 185 else if (header.equals("State")) 186 row.add(UtilMethods.isSet(webForm.getState())?webForm.getState():""); 187 else if (header.equals("Zip")) 188 row.add(UtilMethods.isSet(webForm.getZip())?webForm.getZip():""); 189 else if (header.equals("Country")) 190 row.add(UtilMethods.isSet(webForm.getCountry())?webForm.getCountry():""); 191 else if (header.equals("Phone")) 192 row.add(UtilMethods.isSet(webForm.getPhone())?webForm.getPhone():""); 193 else if (header.equals("Email")) 194 row.add(UtilMethods.isSet(webForm.getEmail())?webForm.getEmail():""); 195 else { 196 if (customFieldsMap.containsKey(header)) { 197 row.add(customFieldsMap.get(header)); 198 } else { 199 row.add(""); 200 } 201 } 202 } 203 reportData.add(row); 204 } catch (Exception e) { 205 e.printStackTrace(); 206 } 207 } 208 209 _writeReport(reportName, reportHeaders, reportData, reportDate, reportFileName, reportComments, res); 210 211 212 } 213 214 private void _writeReport (String reportName, List reportHeaders, List reportData, Date reportDate, 215 String reportFileName, String reportComments, ActionResponse res) throws IOException { 216 217 HttpServletResponse response = ((ActionResponseImpl)res).getHttpServletResponse(); 218 response.setContentType("application/octet-stream"); 219 response.setHeader("Content-Disposition", "attachment; filename=\"" + reportFileName + "\""); 220 221 ServletOutputStream out = response.getOutputStream(); 222 223 int columns = 1; 224 225 int dataSize = reportData.size(); 226 int dataColums = 0; 227 if (dataSize > 0) 228 dataColums = ((List )reportData.get(0)).size(); 229 230 if (dataSize > 0 && dataColums > 0) { 231 columns = ((List )reportData.get(0)).size(); 232 } else if (reportHeaders.size()>0) { 233 columns = reportHeaders.size(); 234 } 235 out.println("<table border=\"1\">"); 236 out.println("<tr>"); 237 out.println("<td colspan=\""+columns+"\"><font color=\"navy\"><b>"+reportName+" - Generated on: "+UtilMethods.dateToPrettyHTMLDate(reportDate)+"</b></font></td>"); 238 out.println("</tr>"); 239 240 if (UtilMethods.isSet(reportComments)) { 241 out.println("<tr>"); 242 out.println("<td colspan=\""+columns+"\"><font color=\"navy\"><b>"+reportComments+"</b></font></td>"); 243 out.println("</tr>"); 244 } 245 246 out.println("<tr>"); 247 out.println("<td colspan=\""+columns+"\"></td>"); 248 out.println("</tr>"); 249 250 if (reportHeaders != null) { 251 Iterator it = reportHeaders.iterator(); 252 out.println("<tr>"); 253 while (it.hasNext()) { 254 String header = (String )it.next(); 255 out.println("<td bgcolor=\"blue\"><b><font color=\"white\">"+header+"</font></b></td>"); 256 } 257 out.println("</tr>"); 258 } 259 260 if (reportData.size() == 0) { 261 out.println("<tr>"); 262 out.println("<td colspan=\"" + columns + "\" align=\"center\">No Records Found</td>"); 263 out.println("</tr>"); 264 265 } 266 267 Iterator it = reportData.iterator(); 268 while (it.hasNext()) { 269 Object row = (Object ) it.next(); 270 271 Iterator it2 = null; 272 273 it2 = ((List )row).iterator(); 274 275 out.println("<tr>"); 276 while (it2.hasNext()) { 277 String value = (String )it2.next(); 278 out.println("<td>"+value+"</td>"); 279 } 280 out.println("</tr>"); 281 } 282 out.println("</table>"); 283 284 out.flush(); 285 out.close(); 286 } 287 288 } 289 | Popular Tags |