parse_options.xslt 11 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244
  1. <?xml version="1.0" encoding="UTF-8"?>
  2. <!--
  3. Licensed Materials - Property of IBM
  4. IBM Cognos Products: ps
  5. (C) Copyright IBM Corp. 2005, 2011
  6. US Government Users Restricted Rights - Use, duplication or disclosure restricted by GSA ADP Schedule Contract with IBM Corp.
  7. -->
  8. <!--
  9. Copyright (C) 2008 Cognos ULC, an IBM Company. All rights reserved.
  10. Cognos (R) is a trademark of Cognos ULC, (formerly Cognos Incorporated).
  11. -->
  12. <xsl:stylesheet version="1.0"
  13. xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
  14. xmlns:xtsext="xalan://com.cognos.xts.ext.XTSExt"
  15. exclude-result-prefixes="xsl xtsext">
  16. <xsl:output method="xml" version="1.0" encoding="UTF-8" indent="no"/>
  17. <xsl:template match="*[local-name()='options']">
  18. <xsl:apply-templates/>
  19. </xsl:template>
  20. <!-- email cc field -->
  21. <xsl:template match="*[local-name()='item' and ./*[local-name()='name']='ccAddress']/*[local-name()='value']">
  22. <param name="email_cc">
  23. <xsl:apply-templates select="*[local-name()='item']" mode="items"/>
  24. </param>
  25. </xsl:template>
  26. <!-- email to field -->
  27. <xsl:template match="*[local-name()='item' and ./*[local-name()='name']='toAddress']/*[local-name()='value']">
  28. <param name="email_to">
  29. <xsl:apply-templates select="*[local-name()='item']" mode="items"/>
  30. </param>
  31. </xsl:template>
  32. <!-- email bcc field -->
  33. <xsl:template match="*[local-name()='item' and ./*[local-name()='name']='bccAddress']/*[local-name()='value']">
  34. <param name="email_bcc">
  35. <xsl:apply-templates select="*[local-name()='item']" mode="items"/>
  36. </param>
  37. </xsl:template>
  38. <!-- if the options contain a emailToAddress without a ccAddress, toAddress, bccAddress, cc, to or bcc item then use the emailToAddress -->
  39. <!-- upgrade from Baltic to Bering style -->
  40. <xsl:template match="*[local-name()='item' and ./*[local-name()='name']='emailToAddress' and not(./*[local-name()='name']='bcc') and not(./*[local-name()='name']='cc') and not(./*[local-name()='name']='to') and not(./*[local-name()='name']='ccAddress') and not(./*[local-name()='name']='toAddress') and not(./*[local-name()='name']='bccAddress')]/*[local-name()='value']">
  41. <param name="email_to">
  42. <xsl:apply-templates select="*[local-name()='item']" mode="items"/>
  43. </param>
  44. </xsl:template>
  45. <!-- build up the string that will go into the field -->
  46. <xsl:template match="*[local-name()='item']" mode="items">
  47. <xsl:value-of select="."/>
  48. <xsl:if test="position() != last()">
  49. <xsl:value-of select="';'"/>
  50. </xsl:if>
  51. </xsl:template>
  52. <!-- email subject field -->
  53. <xsl:template match="*[local-name()='item' and ./*[local-name()='name']='subject']">
  54. <param name="email_subject">
  55. <xsl:value-of select="*[local-name()='value']"/>
  56. </param>
  57. </xsl:template>
  58. <!-- baltic style subject -->
  59. <!-- if the options contain an emailSubject and no subject item, then use the emailSubject -->
  60. <!-- upgrade from Baltic to Bering style -->
  61. <xsl:template match="*[local-name()='item' and ./*[local-name()='name']='emailSubject' and not(./*[local-name()='name']='subject')]">
  62. <param name="email_subject">
  63. <xsl:value-of select="*[local-name()='value']/*[local-name()='item']/*[local-name()='value']"/>
  64. </param>
  65. </xsl:template>
  66. <!-- body field, links and attachments -->
  67. <xsl:template match="*[local-name()='item' and ./*[local-name()='name']='memoPart']">
  68. <!-- simple text body -->
  69. <xsl:choose>
  70. <xsl:when test="*[local-name()='value']/*[local-name()='text'] != ''">
  71. <param name="email_body">
  72. <xsl:value-of select="*[local-name()='value']/*[local-name()='text']"/>
  73. </param>
  74. </xsl:when>
  75. <xsl:when test="*[local-name()='value']/*[local-name()='parts']/*[local-name()='item']/*[local-name()='text'] != ''">
  76. <param name="email_body">
  77. <xsl:value-of select="*[local-name()='value']/*[local-name()='parts']/*[local-name()='item']/*[local-name()='text']"/>
  78. </param>
  79. </xsl:when>
  80. <!-- If there are attachments, then the email body is contained in a memopartComposite item -->
  81. <xsl:when test="*[local-name()='value']/*[local-name()='parts']/*[local-name()='item' and contains(@*[local-name()='type'],'memoPartComposite')]/*[local-name()='parts']/*[local-name()='item']/*[local-name()='text'] !='' ">
  82. <param name="email_body">
  83. <xsl:value-of select="*[local-name()='value']/*[local-name()='parts']/*[local-name()='item' and contains(@*[local-name()='type'],'memoPartComposite')]/*[local-name()='parts']/*[local-name()='item']/*[local-name()='text']"/>
  84. </param>
  85. </xsl:when>
  86. </xsl:choose>
  87. <!-- html body -->
  88. <xsl:choose>
  89. <!-- non empty html body -->
  90. <xsl:when test="*[local-name()='value']/*[local-name()='parts']/*[local-name()='item' and ./*[local-name()='dataType']='text/html' and ./*[local-name()='data']!='']">
  91. <xsl:variable name="richEditBody" select="xtsext:base64decode(string(*[local-name()='value']/*[local-name()='parts']/*[local-name()='item' and ./*[local-name()='dataType']='text/html']/*[local-name()='data']), false())"/>
  92. <xsl:choose>
  93. <xsl:when test="contains($richEditBody, '&lt;HEAD&gt;&lt;META name=&quot;user-entered-html-email-body&quot;&gt;&lt;/META&gt;&lt;/HEAD&gt;')">
  94. <param name="hidden_richEditBody">
  95. <xsl:value-of select="$richEditBody"/>
  96. </param>
  97. <param name="richEditMode">true</param>
  98. </xsl:when>
  99. <xsl:otherwise>
  100. <param name="richEditMode">false</param>
  101. </xsl:otherwise>
  102. </xsl:choose>
  103. </xsl:when>
  104. <!-- html body with attachments, so the body text is contained in a memoPartComposite item -->
  105. <xsl:when test="*[local-name()='value']/*[local-name()='parts']/*[local-name()='item' and contains(@*[local-name()='type'],'memoPartComposite')]/*[local-name()='parts']/*[local-name()='item' and ./*[local-name()='dataType']='text/html' and ./*[local-name()='data']!='']">
  106. <xsl:variable name="richEditBody" select="xtsext:base64decode(string(*[local-name()='value']/*[local-name()='parts']/*[local-name()='item' and contains(@*[local-name()='type'],'memoPartComposite')]/*[local-name()='parts']/*[local-name()='item' and ./*[local-name()='dataType']='text/html']/*[local-name()='data']), false())"/>
  107. <xsl:choose>
  108. <xsl:when test="contains($richEditBody, '&lt;HEAD&gt;&lt;META name=&quot;user-entered-html-email-body&quot;&gt;&lt;/META&gt;&lt;/HEAD&gt;')">
  109. <param name="hidden_richEditBody">
  110. <xsl:value-of select="$richEditBody"/>
  111. </param>
  112. <param name="richEditMode">true</param>
  113. </xsl:when>
  114. <xsl:otherwise>
  115. <param name="richEditMode">false</param>
  116. </xsl:otherwise>
  117. </xsl:choose>
  118. </xsl:when>
  119. </xsl:choose>
  120. <!-- attachments -->
  121. <xsl:if test="*[local-name()='value']/*[local-name()='parts']/*[local-name()='item' and substring-after(@*,':')='memoPartAgentObject']">
  122. <attachments>
  123. <!-- loop through all the attachments except the eventList (format and locale are null) -->
  124. <xsl:for-each select="*[local-name()='value']/*[local-name()='parts']/*[local-name()='item' and substring-after(@*,':')='memoPartAgentObject' and *[local-name()='searchPath'] !='eventOutput' ]">
  125. <item>
  126. <searchPath>
  127. <xsl:value-of select="*[local-name()='searchPath']"/>
  128. </searchPath>
  129. <xsl:if test="*[local-name()='format']!='' ">
  130. <format>
  131. <xsl:value-of select="*[local-name()='format']"/>
  132. </format>
  133. </xsl:if>
  134. <xsl:if test="*[local-name()='locale']!=''">
  135. <locale>
  136. <xsl:value-of select="*[local-name()='locale']"/>
  137. </locale>
  138. </xsl:if>
  139. </item>
  140. </xsl:for-each>
  141. </attachments>
  142. <xsl:variable name="eventOutput" select="*[local-name()='value']/*[local-name()='parts']/*[local-name()='item' and substring-after(@*,':')='memoPartAgentObject' and *[local-name()='format']='' and *[local-name()='locale']='' and *[local-name()='searchPath'] ='eventOutput']"/>
  143. <xsl:if test="$eventOutput">
  144. <eventOutput>
  145. <searchPath>
  146. <xsl:value-of select="$eventOutput/*[local-name()='searchPath']"/>
  147. </searchPath>
  148. <position>
  149. <xsl:value-of select="count($eventOutput/preceding-sibling::*) + 2"/>
  150. </position>
  151. </eventOutput>
  152. </xsl:if>
  153. </xsl:if>
  154. <!-- links -->
  155. <xsl:if test="*[local-name()='value']/*[local-name()='parts']/*[local-name()='item' and substring-after(@*,':')='memoPartObjectLinks']">
  156. <link>
  157. <xsl:for-each select="*[local-name()='value']/*[local-name()='parts']/*[local-name()='item' and substring-after(@*,':')='memoPartObjectLinks']/*[local-name()='links']/*[local-name()='item']/*[local-name()='searchPath']">
  158. <item>
  159. <searchPath>
  160. <xsl:value-of select="."/>
  161. </searchPath>
  162. </item>
  163. </xsl:for-each>
  164. </link>
  165. </xsl:if>
  166. </xsl:template>
  167. <!-- if the options contain an emailBody and no memoPart item, then use the email Body -->
  168. <!-- upgrade from Baltic to Bering style -->
  169. <xsl:template match="*[local-name()='item' and ./*[local-name()='name']='emailBody' and not(./*[local-name()='name']='memoPart')]">
  170. <param name="email_body">
  171. <xsl:value-of select="*[local-name()='value']/*[local-name()='item']/*[local-name()='value']"/>
  172. </param>
  173. </xsl:template>
  174. <!-- email to searchPaths -->
  175. <xsl:template match="*[local-name()='item' and contains(@*[local-name()='type'],'bus:deliveryOptionSearchPathMultipleObjectArray') and ./*[local-name()='name']='to']/*[local-name()='value']">
  176. <to>
  177. <xsl:for-each select="*[local-name()='item']">
  178. <searchPath><xsl:value-of select="."/></searchPath>
  179. </xsl:for-each>
  180. </to>
  181. </xsl:template>
  182. <!-- email cc searchPaths -->
  183. <xsl:template match="*[local-name()='item' and ./*[local-name()='name']='cc']/*[local-name()='value']">
  184. <cc>
  185. <xsl:for-each select="*[local-name()='item']">
  186. <searchPath><xsl:value-of select="."/></searchPath>
  187. </xsl:for-each>
  188. </cc>
  189. </xsl:template>
  190. <!-- email bcc searchPaths -->
  191. <xsl:template match="*[local-name()='item' and ./*[local-name()='name']='bcc']/*[local-name()='value']">
  192. <bcc>
  193. <xsl:for-each select="*[local-name()='item']">
  194. <searchPath><xsl:value-of select="."/></searchPath>
  195. </xsl:for-each>
  196. </bcc>
  197. </xsl:template>
  198. <!-- if the options contain an emailTo item without a bcc, cc, to, bccAddress, ccAddress or toAddress item, then use the emailTo item -->
  199. <!-- upgrade from Baltic to Bering style -->
  200. <xsl:template match="*[local-name()='item' and ./*[local-name()='name']='emailTo' and not(./*[local-name()='name']='bcc') and not(./*[local-name()='name']='cc') and not(./*[local-name()='name']='to') and not(./*[local-name()='name']='ccAddress') and not(./*[local-name()='name']='toAddress') and not(./*[local-name()='name']='bccAddress')]/*[local-name()='value']">
  201. <to>
  202. <xsl:for-each select="*[local-name()='item']">
  203. <searchPath><xsl:value-of select="."/></searchPath>
  204. </xsl:for-each>
  205. </to>
  206. </xsl:template>
  207. <!-- email as attachment -->
  208. <xsl:template match="*[local-name()='item' and ./*[local-name()='name']='emailAsAttachment']">
  209. <param name="m_ro_emailAsAttachment">
  210. <xsl:value-of select="*[local-name()='value']"/>
  211. </param>
  212. </xsl:template>
  213. <!-- email as URL -->
  214. <xsl:template match="*[local-name()='item' and ./*[local-name()='name']='emailAsURL']">
  215. <param name="m_ro_emailAsURL">
  216. <xsl:value-of select="*[local-name()='value']"/>
  217. </param>
  218. </xsl:template>
  219. <xsl:template match="text()" priority="0"/>
  220. </xsl:stylesheet>