Hi Jacques,
sorry for the delay, we were in the middle of our movement to a new ecomify headquarter. This is now fixed in r1810260, thanks for spotting! Regards, Michael Am 27.09.17 um 14:12 schrieb Jacques Le Roux: > Hi Michael, > > You introduced attachmentType in this commit but the service > sendMailFromScreen does not declare this parameter, nor any other > service, same for attachmentTypeList. > > Please check > > Thanks > > Jacques > > > Le 18/08/2017 à 21:10, [hidden email] a écrit : >> Author: mbrohl >> Date: Fri Aug 18 19:10:41 2017 >> New Revision: 1805459 >> >> URL: http://svn.apache.org/viewvc?rev=1805459&view=rev >> Log: >> Improved: EmailServices.sendMailFromScreen improved to take multiple >> attachments with appropriate type along with several email fixes. >> (OFBIZ-9395) >> >> This patch fixes a number of issues combined in a patch because of the >> code dependencies. >> >> 1. it enables to add BCC adress(es) to service >> OrderServices.sendOrderNotificationScreens to oversteer >> ProductStoreEmailSetting of BCC the same was as for CC. >> >> 2. a method UtilValidate.isEmailList(String) is added to check a >> comma separated list of email addresses, used for example to check the >> String passed to the new BCC field for an Order-Notification. >> >> 3. there are improvements in EmailServices.sendMailFromScreen. The >> attachment type of MailAttachments is now not only .pdf but depends on >> the specific file. This has not been the case before - the mime type was >> always hard coded as .pdf. The same goes for the bodyPart content-type >> which is now set to the passed content type or the default text/html >> type. Before this was also always set to text/html. >> Additionally, an attachment that has the mime-type text/plain is not >> rendered with the fop-renderer anymore but with a simple text-renderer. >> Therefore it is possible to send an CSV file as attachment now. >> >> The patch also refactors some catch-Blocks in the >> EmailServices.sendMailFromScreen by using multi-catch since the e >> xception handling is always the same. >> >> Thanks Martin Becker for reporting and providing the patch. >> >> Modified: >> ofbiz/ofbiz-framework/trunk/applications/order/servicedef/services.xml >> ofbiz/ofbiz-framework/trunk/applications/order/src/main/java/org/apache/ofbiz/order/order/OrderServices.java >> ofbiz/ofbiz-framework/trunk/framework/base/src/main/java/org/apache/ofbiz/base/util/UtilValidate.java >> ofbiz/ofbiz-framework/trunk/framework/common/src/main/java/org/apache/ofbiz/common/email/EmailServices.java >> >> Modified: >> ofbiz/ofbiz-framework/trunk/applications/order/servicedef/services.xml >> URL: >> http://svn.apache.org/viewvc/ofbiz/ofbiz-framework/trunk/applications/order/servicedef/services.xml?rev=1805459&r1=1805458&r2=1805459&view=diff >> ============================================================================== >> >> --- >> ofbiz/ofbiz-framework/trunk/applications/order/servicedef/services.xml >> (original) >> +++ >> ofbiz/ofbiz-framework/trunk/applications/order/servicedef/services.xml >> Fri Aug 18 19:10:41 2017 >> @@ -34,6 +34,7 @@ under the License. >> <attribute name="body" type="String" mode="OUT" >> optional="true"/> >> <attribute name="sendTo" type="String" mode="IN" >> optional="true"/> >> <attribute name="sendCc" type="String" mode="IN" >> optional="true"/> >> + <attribute name="sendBcc" type="String" mode="IN" >> optional="true"/> >> <attribute name="note" type="String" mode="IN" >> optional="true"/> >> <attribute name="temporaryAnonymousUserLogin" >> type="org.apache.ofbiz.entity.GenericValue" mode="IN" optional="true"/> >> <attribute name="messageWrapper" >> type="org.apache.ofbiz.service.mail.MimeMessageWrapper" mode="OUT" >> optional="true"/> >> >> Modified: >> ofbiz/ofbiz-framework/trunk/applications/order/src/main/java/org/apache/ofbiz/order/order/OrderServices.java >> URL: >> http://svn.apache.org/viewvc/ofbiz/ofbiz-framework/trunk/applications/order/src/main/java/org/apache/ofbiz/order/order/OrderServices.java?rev=1805459&r1=1805458&r2=1805459&view=diff >> ============================================================================== >> >> --- >> ofbiz/ofbiz-framework/trunk/applications/order/src/main/java/org/apache/ofbiz/order/order/OrderServices.java >> (original) >> +++ >> ofbiz/ofbiz-framework/trunk/applications/order/src/main/java/org/apache/ofbiz/order/order/OrderServices.java >> Fri Aug 18 19:10:41 2017 >> @@ -83,6 +83,9 @@ import org.apache.ofbiz.service.ServiceU >> import com.ibm.icu.util.Calendar; >> +import org.apache.commons.lang.StringUtils; >> +import org.apache.fop.apps.MimeConstants; >> + >> /** >> * Order Processing Services >> */ >> @@ -2533,8 +2536,10 @@ public class OrderServices { >> GenericValue userLogin = (GenericValue) >> context.get("userLogin"); >> String orderId = (String) context.get("orderId"); >> String orderItemSeqId = (String) >> context.get("orderItemSeqId"); >> + String shipGroupSeqId = (String) context.get("shipGroupSeqId"); >> String sendTo = (String) context.get("sendTo"); >> String sendCc = (String) context.get("sendCc"); >> + String sendBcc = (String) context.get("sendBcc"); >> String note = (String) context.get("note"); >> String screenUri = (String) context.get("screenUri"); >> GenericValue temporaryAnonymousUserLogin = (GenericValue) >> context.get("temporaryAnonymousUserLogin"); >> @@ -2589,10 +2594,17 @@ public class OrderServices { >> String xslfoAttachScreenLocation = >> productStoreEmail.getString("xslfoAttachScreenLocation"); >> sendMap.put("xslfoAttachScreenLocation", >> xslfoAttachScreenLocation); >> // add attachmentName param to get an attachment namend >> "[oderId].pdf" instead of default "Details.pdf" >> - sendMap.put("attachmentName", orderId + ".pdf"); >> + sendMap.put("attachmentName", >> (UtilValidate.isNotEmpty(shipGroupSeqId) ? orderId + "-" + >> StringUtils.stripStart(shipGroupSeqId, "0") : orderId) + ".pdf"); >> + sendMap.put("attachmentType", MimeConstants.MIME_PDF); >> } else { >> sendMap.put("bodyScreenUri", screenUri); >> } >> + >> + if (context.containsKey("xslfoAttachScreenLocationList")) { >> + sendMap.put("xslfoAttachScreenLocationList", >> context.get("xslfoAttachScreenLocationList")); >> + sendMap.put("attachmentNameList", >> context.get("attachmentNameList")); >> + sendMap.put("attachmentTypeList", >> context.get("attachmentTypeList")); >> + } >> // website >> sendMap.put("webSiteId", orderHeader.get("webSiteId")); >> @@ -2636,6 +2648,7 @@ public class OrderServices { >> bodyParameters.put("partyId", >> placingParty.get("partyId")); >> } >> bodyParameters.put("note", note); >> + bodyParameters.put("shipGroupSeqId", shipGroupSeqId); >> sendMap.put("bodyParameters", bodyParameters); >> sendMap.put("userLogin",userLogin); >> @@ -2657,6 +2670,10 @@ public class OrderServices { >> sendMap.put("sendCc", productStoreEmail.get("ccAddress")); >> } >> + if ((sendBcc != null) && UtilValidate.isEmailList(sendBcc)) { >> + sendMap.put("sendBcc", sendBcc); >> + } >> + >> // send the notification >> Map<String, Object> sendResp = null; >> try { >> >> Modified: >> ofbiz/ofbiz-framework/trunk/framework/base/src/main/java/org/apache/ofbiz/base/util/UtilValidate.java >> URL: >> http://svn.apache.org/viewvc/ofbiz/ofbiz-framework/trunk/framework/base/src/main/java/org/apache/ofbiz/base/util/UtilValidate.java?rev=1805459&r1=1805458&r2=1805459&view=diff >> ============================================================================== >> >> --- >> ofbiz/ofbiz-framework/trunk/framework/base/src/main/java/org/apache/ofbiz/base/util/UtilValidate.java >> (original) >> +++ >> ofbiz/ofbiz-framework/trunk/framework/base/src/main/java/org/apache/ofbiz/base/util/UtilValidate.java >> Fri Aug 18 19:10:41 2017 >> @@ -691,6 +691,20 @@ public final class UtilValidate { >> if (isEmpty(s)) return defaultEmptyOK; >> return EmailValidator.getInstance().isValid(s); >> } >> + >> + /** >> + * Checks a String for a valid Email-List seperated by ",". >> + */ >> + public static boolean isEmailList(String s) { >> + if (isEmpty(s)) return defaultEmptyOK; >> + String[] emails = s.split(","); >> + for (String email : emails) { >> + if (!EmailValidator.getInstance().isValid(email)) { >> + return false; >> + } >> + } >> + return true; >> + } >> /** isUrl returns true if the string contains :// >> * @param s String to validate >> >> Modified: >> ofbiz/ofbiz-framework/trunk/framework/common/src/main/java/org/apache/ofbiz/common/email/EmailServices.java >> URL: >> http://svn.apache.org/viewvc/ofbiz/ofbiz-framework/trunk/framework/common/src/main/java/org/apache/ofbiz/common/email/EmailServices.java?rev=1805459&r1=1805458&r2=1805459&view=diff >> ============================================================================== >> >> --- >> ofbiz/ofbiz-framework/trunk/framework/common/src/main/java/org/apache/ofbiz/common/email/EmailServices.java >> (original) >> +++ >> ofbiz/ofbiz-framework/trunk/framework/common/src/main/java/org/apache/ofbiz/common/email/EmailServices.java >> Fri Aug 18 19:10:41 2017 >> @@ -51,6 +51,7 @@ import javax.mail.internet.MimeMultipart >> import javax.xml.parsers.ParserConfigurationException; >> import javax.xml.transform.stream.StreamSource; >> +import org.apache.fop.apps.FOPException; >> import org.apache.fop.apps.Fop; >> import org.apache.fop.apps.MimeConstants; >> import org.apache.ofbiz.base.util.Debug; >> @@ -438,6 +439,12 @@ public class EmailServices { >> if >> (UtilValidate.isNotEmpty(xslfoAttachScreenLocationListParam)) >> xslfoAttachScreenLocationList.addAll(xslfoAttachScreenLocationListParam); >> if (UtilValidate.isNotEmpty(attachmentNameListParam)) >> attachmentNameList.addAll(attachmentNameListParam); >> + List<String> attachmentTypeList = new >> LinkedList<String>(); >> + String attachmentTypeParam = (String) >> serviceContext.remove("attachmentType"); >> + List<String> attachmentTypeListParam = >> UtilGenerics.checkList(serviceContext.remove("attachmentTypeList")); >> + if (UtilValidate.isNotEmpty(attachmentTypeParam)) >> attachmentTypeList.add(attachmentTypeParam); >> + if (UtilValidate.isNotEmpty(attachmentTypeListParam)) >> attachmentTypeList.addAll(attachmentTypeListParam); >> + >> Locale locale = (Locale) serviceContext.get("locale"); >> Map<String, Object> bodyParameters = >> UtilGenerics.checkMap(serviceContext.remove("bodyParameters")); >> if (bodyParameters == null) { >> @@ -504,9 +511,9 @@ public class EmailServices { >> List<Map<String, ? extends Object>> bodyParts = new >> LinkedList<Map<String, ? extends Object>>(); >> if (bodyText != null) { >> bodyText = >> FlexibleStringExpander.expandString(bodyText, screenContext, locale); >> - bodyParts.add(UtilMisc.<String, >> Object>toMap("content", bodyText, "type", "text/html")); >> + bodyParts.add(UtilMisc.<String, >> Object>toMap("content", bodyText, "type", >> UtilValidate.isNotEmpty(contentType) ? contentType : "text/html")); >> } else { >> - bodyParts.add(UtilMisc.<String, >> Object>toMap("content", bodyWriter.toString(), "type", "text/html")); >> + bodyParts.add(UtilMisc.<String, >> Object>toMap("content", bodyWriter.toString(), "type", >> UtilValidate.isNotEmpty(contentType) ? contentType : "text/html")); >> } >> for (int i = 0; i < >> xslfoAttachScreenLocationList.size(); i++) { >> @@ -515,39 +522,51 @@ public class EmailServices { >> if (UtilValidate.isNotEmpty(attachmentNameList) && >> attachmentNameList.size() >= i) { >> attachmentName = attachmentNameList.get(i); >> } >> + >> + String attachmentType = MimeConstants.MIME_PDF; >> + if (UtilValidate.isNotEmpty(attachmentTypeList) && >> attachmentTypeList.size() >= i) { >> + attachmentType = attachmentTypeList.get(i); >> + } >> + >> isMultiPart = true; >> // start processing fo pdf attachment >> try { >> Writer writer = new StringWriter(); >> - MapStack<String> screenContextAtt = >> MapStack.create(); >> // substitute the freemarker variables... >> - ScreenStringRenderer foScreenStringRenderer = >> new >> MacroScreenRenderer(EntityUtilProperties.getPropertyValue("widget", >> "screenfop.name", dctx.getDelegator()), >> - EntityUtilProperties.getPropertyValue("widget", >> "screenfop.screenrenderer", dctx.getDelegator())); >> + ScreenStringRenderer foScreenStringRenderer = null; >> + if(MimeConstants.MIME_PLAIN_TEXT.equals(attachmentType)){ >> + foScreenStringRenderer = new >> MacroScreenRenderer(EntityUtilProperties.getPropertyValue("widget", >> "screentext.name", dctx.getDelegator()), >> + EntityUtilProperties.getPropertyValue("widget", >> "screentext.screenrenderer", dctx.getDelegator())); >> + }else{ >> + foScreenStringRenderer = new >> MacroScreenRenderer(EntityUtilProperties.getPropertyValue("widget", >> "screenfop.name", dctx.getDelegator()), >> + EntityUtilProperties.getPropertyValue("widget", >> "screenfop.screenrenderer", dctx.getDelegator())); >> + } >> ScreenRenderer screensAtt = new >> ScreenRenderer(writer, screenContext, foScreenStringRenderer); >> screensAtt.populateContextForService(dctx, >> bodyParameters); >> - screenContextAtt.putAll(bodyParameters); >> screensAtt.render(xslfoAttachScreenLocation); >> - // create the input stream for the generation >> - StreamSource src = new StreamSource(new >> StringReader(writer.toString())); >> - >> // create the output stream for the generation >> ByteArrayOutputStream baos = new >> ByteArrayOutputStream(); >> - Fop fop = >> ApacheFopWorker.createFopInstance(baos, MimeConstants.MIME_PDF); >> - ApacheFopWorker.transform(src, null, fop); >> + if >> (MimeConstants.MIME_PLAIN_TEXT.equals(attachmentType)) { >> + baos.write(writer.toString().getBytes()); >> + } else { >> + // create the input stream for the generation >> + StreamSource src = new StreamSource(new >> StringReader(writer.toString())); >> + Fop fop = >> ApacheFopWorker.createFopInstance(baos, attachmentType); >> + ApacheFopWorker.transform(src, null, fop); >> + } >> - // and generate the PDF >> + // and generate the attachment >> baos.flush(); >> baos.close(); >> // store in the list of maps for sendmail.... >> - bodyParts.add(UtilMisc.<String, Object> >> toMap("content", baos.toByteArray(), "type", "application/pdf", >> "filename", >> - attachmentName)); >> - } catch (Exception e) { >> - Debug.logError(e, "Error rendering PDF >> attachment for email: " + e.toString(), module); >> - return >> ServiceUtil.returnError(UtilProperties.getMessage(resource, >> "CommonEmailSendRenderingScreenPdfError", >> - UtilMisc.toMap("errorString", >> e.toString()), locale)); >> + bodyParts.add(UtilMisc.<String, >> Object>toMap("content", baos.toByteArray(), "type", attachmentType, >> "filename", attachmentName)); >> + >> + } catch >> (GeneralException|IOException|SAXException|ParserConfigurationException >> |TemplateException ge) { >> + Debug.logError(ge, "Error rendering PDF >> attachment for email: " + ge.toString(), module); >> + return >> ServiceUtil.returnError(UtilProperties.getMessage(resource, >> "CommonEmailSendRenderingScreenPdfError", >> UtilMisc.toMap("errorString", ge.toString()), locale)); >> } >> serviceContext.put("bodyParts", bodyParts); >> >> >> > smime.p7s (5K) Download Attachment |
Administrator
|
Thanks Michael,
I hope you the best for your new location Cheers Jacques Le 01/10/2017 à 12:45, Michael Brohl a écrit : > Hi Jacques, > > sorry for the delay, we were in the middle of our movement to a new ecomify headquarter. > > This is now fixed in r1810260, thanks for spotting! > > Regards, > > Michael > > > Am 27.09.17 um 14:12 schrieb Jacques Le Roux: >> Hi Michael, >> >> You introduced attachmentType in this commit but the service sendMailFromScreen does not declare this parameter, nor any other service, same for >> attachmentTypeList. >> >> Please check >> >> Thanks >> >> Jacques >> >> >> Le 18/08/2017 à 21:10, [hidden email] a écrit : >>> Author: mbrohl >>> Date: Fri Aug 18 19:10:41 2017 >>> New Revision: 1805459 >>> >>> URL: http://svn.apache.org/viewvc?rev=1805459&view=rev >>> Log: >>> Improved: EmailServices.sendMailFromScreen improved to take multiple >>> attachments with appropriate type along with several email fixes. >>> (OFBIZ-9395) >>> >>> This patch fixes a number of issues combined in a patch because of the >>> code dependencies. >>> >>> 1. it enables to add BCC adress(es) to service >>> OrderServices.sendOrderNotificationScreens to oversteer >>> ProductStoreEmailSetting of BCC the same was as for CC. >>> >>> 2. a method UtilValidate.isEmailList(String) is added to check a >>> comma separated list of email addresses, used for example to check the >>> String passed to the new BCC field for an Order-Notification. >>> >>> 3. there are improvements in EmailServices.sendMailFromScreen. The >>> attachment type of MailAttachments is now not only .pdf but depends on >>> the specific file. This has not been the case before - the mime type was >>> always hard coded as .pdf. The same goes for the bodyPart content-type >>> which is now set to the passed content type or the default text/html >>> type. Before this was also always set to text/html. >>> Additionally, an attachment that has the mime-type text/plain is not >>> rendered with the fop-renderer anymore but with a simple text-renderer. >>> Therefore it is possible to send an CSV file as attachment now. >>> >>> The patch also refactors some catch-Blocks in the >>> EmailServices.sendMailFromScreen by using multi-catch since the e >>> xception handling is always the same. >>> >>> Thanks Martin Becker for reporting and providing the patch. >>> >>> Modified: >>> ofbiz/ofbiz-framework/trunk/applications/order/servicedef/services.xml >>> ofbiz/ofbiz-framework/trunk/applications/order/src/main/java/org/apache/ofbiz/order/order/OrderServices.java >>> ofbiz/ofbiz-framework/trunk/framework/base/src/main/java/org/apache/ofbiz/base/util/UtilValidate.java >>> ofbiz/ofbiz-framework/trunk/framework/common/src/main/java/org/apache/ofbiz/common/email/EmailServices.java >>> >>> Modified: ofbiz/ofbiz-framework/trunk/applications/order/servicedef/services.xml >>> URL: http://svn.apache.org/viewvc/ofbiz/ofbiz-framework/trunk/applications/order/servicedef/services.xml?rev=1805459&r1=1805458&r2=1805459&view=diff >>> ============================================================================== >>> --- ofbiz/ofbiz-framework/trunk/applications/order/servicedef/services.xml (original) >>> +++ ofbiz/ofbiz-framework/trunk/applications/order/servicedef/services.xml Fri Aug 18 19:10:41 2017 >>> @@ -34,6 +34,7 @@ under the License. >>> <attribute name="body" type="String" mode="OUT" optional="true"/> >>> <attribute name="sendTo" type="String" mode="IN" optional="true"/> >>> <attribute name="sendCc" type="String" mode="IN" optional="true"/> >>> + <attribute name="sendBcc" type="String" mode="IN" optional="true"/> >>> <attribute name="note" type="String" mode="IN" optional="true"/> >>> <attribute name="temporaryAnonymousUserLogin" type="org.apache.ofbiz.entity.GenericValue" mode="IN" optional="true"/> >>> <attribute name="messageWrapper" type="org.apache.ofbiz.service.mail.MimeMessageWrapper" mode="OUT" optional="true"/> >>> >>> Modified: ofbiz/ofbiz-framework/trunk/applications/order/src/main/java/org/apache/ofbiz/order/order/OrderServices.java >>> URL: >>> http://svn.apache.org/viewvc/ofbiz/ofbiz-framework/trunk/applications/order/src/main/java/org/apache/ofbiz/order/order/OrderServices.java?rev=1805459&r1=1805458&r2=1805459&view=diff >>> ============================================================================== >>> --- ofbiz/ofbiz-framework/trunk/applications/order/src/main/java/org/apache/ofbiz/order/order/OrderServices.java (original) >>> +++ ofbiz/ofbiz-framework/trunk/applications/order/src/main/java/org/apache/ofbiz/order/order/OrderServices.java Fri Aug 18 19:10:41 2017 >>> @@ -83,6 +83,9 @@ import org.apache.ofbiz.service.ServiceU >>> import com.ibm.icu.util.Calendar; >>> +import org.apache.commons.lang.StringUtils; >>> +import org.apache.fop.apps.MimeConstants; >>> + >>> /** >>> * Order Processing Services >>> */ >>> @@ -2533,8 +2536,10 @@ public class OrderServices { >>> GenericValue userLogin = (GenericValue) context.get("userLogin"); >>> String orderId = (String) context.get("orderId"); >>> String orderItemSeqId = (String) context.get("orderItemSeqId"); >>> + String shipGroupSeqId = (String) context.get("shipGroupSeqId"); >>> String sendTo = (String) context.get("sendTo"); >>> String sendCc = (String) context.get("sendCc"); >>> + String sendBcc = (String) context.get("sendBcc"); >>> String note = (String) context.get("note"); >>> String screenUri = (String) context.get("screenUri"); >>> GenericValue temporaryAnonymousUserLogin = (GenericValue) context.get("temporaryAnonymousUserLogin"); >>> @@ -2589,10 +2594,17 @@ public class OrderServices { >>> String xslfoAttachScreenLocation = productStoreEmail.getString("xslfoAttachScreenLocation"); >>> sendMap.put("xslfoAttachScreenLocation", xslfoAttachScreenLocation); >>> // add attachmentName param to get an attachment namend "[oderId].pdf" instead of default "Details.pdf" >>> - sendMap.put("attachmentName", orderId + ".pdf"); >>> + sendMap.put("attachmentName", (UtilValidate.isNotEmpty(shipGroupSeqId) ? orderId + "-" + StringUtils.stripStart(shipGroupSeqId, "0") >>> : orderId) + ".pdf"); >>> + sendMap.put("attachmentType", MimeConstants.MIME_PDF); >>> } else { >>> sendMap.put("bodyScreenUri", screenUri); >>> } >>> + >>> + if (context.containsKey("xslfoAttachScreenLocationList")) { >>> + sendMap.put("xslfoAttachScreenLocationList", context.get("xslfoAttachScreenLocationList")); >>> + sendMap.put("attachmentNameList", context.get("attachmentNameList")); >>> + sendMap.put("attachmentTypeList", context.get("attachmentTypeList")); >>> + } >>> // website >>> sendMap.put("webSiteId", orderHeader.get("webSiteId")); >>> @@ -2636,6 +2648,7 @@ public class OrderServices { >>> bodyParameters.put("partyId", placingParty.get("partyId")); >>> } >>> bodyParameters.put("note", note); >>> + bodyParameters.put("shipGroupSeqId", shipGroupSeqId); >>> sendMap.put("bodyParameters", bodyParameters); >>> sendMap.put("userLogin",userLogin); >>> @@ -2657,6 +2670,10 @@ public class OrderServices { >>> sendMap.put("sendCc", productStoreEmail.get("ccAddress")); >>> } >>> + if ((sendBcc != null) && UtilValidate.isEmailList(sendBcc)) { >>> + sendMap.put("sendBcc", sendBcc); >>> + } >>> + >>> // send the notification >>> Map<String, Object> sendResp = null; >>> try { >>> >>> Modified: ofbiz/ofbiz-framework/trunk/framework/base/src/main/java/org/apache/ofbiz/base/util/UtilValidate.java >>> URL: >>> http://svn.apache.org/viewvc/ofbiz/ofbiz-framework/trunk/framework/base/src/main/java/org/apache/ofbiz/base/util/UtilValidate.java?rev=1805459&r1=1805458&r2=1805459&view=diff >>> ============================================================================== >>> --- ofbiz/ofbiz-framework/trunk/framework/base/src/main/java/org/apache/ofbiz/base/util/UtilValidate.java (original) >>> +++ ofbiz/ofbiz-framework/trunk/framework/base/src/main/java/org/apache/ofbiz/base/util/UtilValidate.java Fri Aug 18 19:10:41 2017 >>> @@ -691,6 +691,20 @@ public final class UtilValidate { >>> if (isEmpty(s)) return defaultEmptyOK; >>> return EmailValidator.getInstance().isValid(s); >>> } >>> + >>> + /** >>> + * Checks a String for a valid Email-List seperated by ",". >>> + */ >>> + public static boolean isEmailList(String s) { >>> + if (isEmpty(s)) return defaultEmptyOK; >>> + String[] emails = s.split(","); >>> + for (String email : emails) { >>> + if (!EmailValidator.getInstance().isValid(email)) { >>> + return false; >>> + } >>> + } >>> + return true; >>> + } >>> /** isUrl returns true if the string contains :// >>> * @param s String to validate >>> >>> Modified: ofbiz/ofbiz-framework/trunk/framework/common/src/main/java/org/apache/ofbiz/common/email/EmailServices.java >>> URL: >>> http://svn.apache.org/viewvc/ofbiz/ofbiz-framework/trunk/framework/common/src/main/java/org/apache/ofbiz/common/email/EmailServices.java?rev=1805459&r1=1805458&r2=1805459&view=diff >>> ============================================================================== >>> --- ofbiz/ofbiz-framework/trunk/framework/common/src/main/java/org/apache/ofbiz/common/email/EmailServices.java (original) >>> +++ ofbiz/ofbiz-framework/trunk/framework/common/src/main/java/org/apache/ofbiz/common/email/EmailServices.java Fri Aug 18 19:10:41 2017 >>> @@ -51,6 +51,7 @@ import javax.mail.internet.MimeMultipart >>> import javax.xml.parsers.ParserConfigurationException; >>> import javax.xml.transform.stream.StreamSource; >>> +import org.apache.fop.apps.FOPException; >>> import org.apache.fop.apps.Fop; >>> import org.apache.fop.apps.MimeConstants; >>> import org.apache.ofbiz.base.util.Debug; >>> @@ -438,6 +439,12 @@ public class EmailServices { >>> if (UtilValidate.isNotEmpty(xslfoAttachScreenLocationListParam)) xslfoAttachScreenLocationList.addAll(xslfoAttachScreenLocationListParam); >>> if (UtilValidate.isNotEmpty(attachmentNameListParam)) attachmentNameList.addAll(attachmentNameListParam); >>> + List<String> attachmentTypeList = new LinkedList<String>(); >>> + String attachmentTypeParam = (String) serviceContext.remove("attachmentType"); >>> + List<String> attachmentTypeListParam = UtilGenerics.checkList(serviceContext.remove("attachmentTypeList")); >>> + if (UtilValidate.isNotEmpty(attachmentTypeParam)) attachmentTypeList.add(attachmentTypeParam); >>> + if (UtilValidate.isNotEmpty(attachmentTypeListParam)) attachmentTypeList.addAll(attachmentTypeListParam); >>> + >>> Locale locale = (Locale) serviceContext.get("locale"); >>> Map<String, Object> bodyParameters = UtilGenerics.checkMap(serviceContext.remove("bodyParameters")); >>> if (bodyParameters == null) { >>> @@ -504,9 +511,9 @@ public class EmailServices { >>> List<Map<String, ? extends Object>> bodyParts = new LinkedList<Map<String, ? extends Object>>(); >>> if (bodyText != null) { >>> bodyText = FlexibleStringExpander.expandString(bodyText, screenContext, locale); >>> - bodyParts.add(UtilMisc.<String, Object>toMap("content", bodyText, "type", "text/html")); >>> + bodyParts.add(UtilMisc.<String, Object>toMap("content", bodyText, "type", UtilValidate.isNotEmpty(contentType) ? contentType : >>> "text/html")); >>> } else { >>> - bodyParts.add(UtilMisc.<String, Object>toMap("content", bodyWriter.toString(), "type", "text/html")); >>> + bodyParts.add(UtilMisc.<String, Object>toMap("content", bodyWriter.toString(), "type", UtilValidate.isNotEmpty(contentType) ? >>> contentType : "text/html")); >>> } >>> for (int i = 0; i < xslfoAttachScreenLocationList.size(); i++) { >>> @@ -515,39 +522,51 @@ public class EmailServices { >>> if (UtilValidate.isNotEmpty(attachmentNameList) && attachmentNameList.size() >= i) { >>> attachmentName = attachmentNameList.get(i); >>> } >>> + >>> + String attachmentType = MimeConstants.MIME_PDF; >>> + if (UtilValidate.isNotEmpty(attachmentTypeList) && attachmentTypeList.size() >= i) { >>> + attachmentType = attachmentTypeList.get(i); >>> + } >>> + >>> isMultiPart = true; >>> // start processing fo pdf attachment >>> try { >>> Writer writer = new StringWriter(); >>> - MapStack<String> screenContextAtt = MapStack.create(); >>> // substitute the freemarker variables... >>> - ScreenStringRenderer foScreenStringRenderer = new MacroScreenRenderer(EntityUtilProperties.getPropertyValue("widget", >>> "screenfop.name", dctx.getDelegator()), >>> - EntityUtilProperties.getPropertyValue("widget", "screenfop.screenrenderer", dctx.getDelegator())); >>> + ScreenStringRenderer foScreenStringRenderer = null; >>> + if(MimeConstants.MIME_PLAIN_TEXT.equals(attachmentType)){ >>> + foScreenStringRenderer = new MacroScreenRenderer(EntityUtilProperties.getPropertyValue("widget", "screentext.name", >>> dctx.getDelegator()), >>> + EntityUtilProperties.getPropertyValue("widget", "screentext.screenrenderer", dctx.getDelegator())); >>> + }else{ >>> + foScreenStringRenderer = new MacroScreenRenderer(EntityUtilProperties.getPropertyValue("widget", "screenfop.name", >>> dctx.getDelegator()), >>> + EntityUtilProperties.getPropertyValue("widget", "screenfop.screenrenderer", dctx.getDelegator())); >>> + } >>> ScreenRenderer screensAtt = new ScreenRenderer(writer, screenContext, foScreenStringRenderer); >>> screensAtt.populateContextForService(dctx, bodyParameters); >>> - screenContextAtt.putAll(bodyParameters); >>> screensAtt.render(xslfoAttachScreenLocation); >>> - // create the input stream for the generation >>> - StreamSource src = new StreamSource(new StringReader(writer.toString())); >>> - >>> // create the output stream for the generation >>> ByteArrayOutputStream baos = new ByteArrayOutputStream(); >>> - Fop fop = ApacheFopWorker.createFopInstance(baos, MimeConstants.MIME_PDF); >>> - ApacheFopWorker.transform(src, null, fop); >>> + if (MimeConstants.MIME_PLAIN_TEXT.equals(attachmentType)) { >>> + baos.write(writer.toString().getBytes()); >>> + } else { >>> + // create the input stream for the generation >>> + StreamSource src = new StreamSource(new StringReader(writer.toString())); >>> + Fop fop = ApacheFopWorker.createFopInstance(baos, attachmentType); >>> + ApacheFopWorker.transform(src, null, fop); >>> + } >>> - // and generate the PDF >>> + // and generate the attachment >>> baos.flush(); >>> baos.close(); >>> // store in the list of maps for sendmail.... >>> - bodyParts.add(UtilMisc.<String, Object> toMap("content", baos.toByteArray(), "type", "application/pdf", "filename", >>> - attachmentName)); >>> - } catch (Exception e) { >>> - Debug.logError(e, "Error rendering PDF attachment for email: " + e.toString(), module); >>> - return ServiceUtil.returnError(UtilProperties.getMessage(resource, "CommonEmailSendRenderingScreenPdfError", >>> - UtilMisc.toMap("errorString", e.toString()), locale)); >>> + bodyParts.add(UtilMisc.<String, Object>toMap("content", baos.toByteArray(), "type", attachmentType, "filename", >>> attachmentName)); >>> + >>> + } catch (GeneralException|IOException|SAXException|ParserConfigurationException |TemplateException ge) { >>> + Debug.logError(ge, "Error rendering PDF attachment for email: " + ge.toString(), module); >>> + return ServiceUtil.returnError(UtilProperties.getMessage(resource, "CommonEmailSendRenderingScreenPdfError", >>> UtilMisc.toMap("errorString", ge.toString()), locale)); >>> } >>> serviceContext.put("bodyParts", bodyParts); >>> >>> >>> >> > |
Free forum by Nabble | Edit this page |