banner.xts 45 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773774775776777778779780781782783784785786787788789790791792793794795796797798799800801802803804805806807808809810811812813814815816817818819820821822823824825826827828829830831832833834835836837838839840841842843844845846847848849850851852853854855856857858859860861
  1. <?xml version="1.0" encoding="UTF-8"?>
  2. <!--
  3. Licensed Materials - Property of IBM
  4. IBM Cognos Products: cpscrn
  5. (C) Copyright IBM Corp. 2005, 2021
  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. <xts:morphlet version="1.0" xmlns:xts="http://developer.cognos.com/schemas/xts/" messageBase="messages/portal.xml, messages/portalRL.xml">
  13. <xts:block id="createSystemElement" type="exec" processor="XSLT">
  14. <xsl:stylesheet version="1.0"
  15. xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
  16. xmlns:bus="http://developer.cognos.com/schemas/bibus/3/"
  17. xmlns:xtsext="xalan://com.cognos.xts.ext.XTSExt"
  18. exclude-result-prefixes="bus xtsext">
  19. <xsl:output method="xml" version="1.0" encoding="UTF-8" indent="no"/>
  20. <xsl:template match="/">
  21. <xts:sequence>
  22. <xts:append select="/root">
  23. <xts:request protocol="FILEREAD" cache="true" faultBlock="requestFault" target="/system.xml"/>
  24. <xts:request protocol="FILEREAD" cache="true" faultBlock="requestFault" target="/portal/system.xml"/>
  25. </xts:append>
  26. <xts:append>
  27. <generalConfigSettings>
  28. <xts:function name="getConfiguration">
  29. <xts:param name="portal.launchBusinessInsightChromeless"/>
  30. </xts:function>
  31. </generalConfigSettings>
  32. </xts:append>
  33. </xts:sequence>
  34. </xsl:template>
  35. </xsl:stylesheet>
  36. </xts:block>
  37. <!-- Handle errors which occur when reading the system XML file. Provide default values. -->
  38. <xts:block id="requestFault" type="fault" processor="XML" nodelist="">
  39. <system>
  40. <param name="delimiters" d1="|" d2=":"/>
  41. <param name="COGNOSHome">b_action=xts.run&amp;m=portal/main.xts</param>
  42. </system>
  43. </xts:block>
  44. <!-- Build the missing session element from the cc_session and CRN cookies, and the missing http element from the bus header. This is done so that common variables will work. -->
  45. <xts:block id="createMissingElements" dependency="createSystemElement" type="exec" processor="XSLT">
  46. <xts:logicsheet path="logicsheets/portal.xsl"/>
  47. <xsl:stylesheet version="1.0"
  48. xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
  49. xmlns:bus="http://developer.cognos.com/schemas/bibus/3/"
  50. xmlns:pf="http://developer.cognos.com/schemas/xts/pf"
  51. xmlns:xtsext="xalan://com.cognos.xts.ext.XTSExt"
  52. exclude-result-prefixes="bus xtsext pf">
  53. <xsl:output method="xml" version="1.0" encoding="UTF-8" indent="no"/>
  54. <pf:sessionpassport/>
  55. <xsl:template match="/">
  56. <xts:sequence>
  57. <xts:append select="/root">
  58. <header>
  59. <xsl:copy-of select="/root/bus:biBusHeader"/>
  60. </header>
  61. <xsl:variable name="CRNValue">
  62. <xsl:choose>
  63. <xsl:when test="string(/root/cookies/cookie[@name='CRN']) != ''">
  64. <xsl:value-of select="string(/root/cookies/cookie[@name='CRN'])"/>
  65. </xsl:when>
  66. <xsl:otherwise> <!-- No CRN cookie found. Use the setCookieVars value if it exists. -->
  67. <xsl:value-of select="string(/root/*[local-name()='biBusHeader']/*[local-name()='hdrSession']/*[local-name()='setCookieVars']/item[name = 'CRN']/value)"/>
  68. </xsl:otherwise>
  69. </xsl:choose>
  70. </xsl:variable>
  71. <session>
  72. <xsl:if test="(string(/root/cookies/cookie[@name='cc_session']) != '') or ($CRNValue != '')">
  73. <xsl:variable name="isCCSessionValid" select="xtsext:isCCSessionValid(string(/root/cookies/cookie[@name='cc_session']),$passport,/root/system/param[@name='delimiters']/@d1,/root/system/param[@name='delimiters']/@d2)"/>
  74. <xts:transform name="XMLDecode">
  75. <xsl:if test="$isCCSessionValid='true'">
  76. <xsl:value-of select="xtsext:decodeCCSession(string(/root/cookies/cookie[@name='cc_session']),/root/system/param[@name='delimiters']/@d1,/root/system/param[@name='delimiters']/@d2)"/>
  77. </xsl:if>
  78. <xsl:value-of select="xtsext:decodeCRNCookie($CRNValue)"/>
  79. </xts:transform>
  80. </xsl:if>
  81. <!-- construct the session user capability cache -->
  82. <xsl:if test="/root/*[local-name()='biBusHeader']/*[local-name()='userCapabilityCache']">
  83. <param name="capabilities" type="CRN">
  84. <xsl:for-each select="/root/*[local-name()='biBusHeader']/*[local-name()='userCapabilityCache']/*[local-name()='userCapabilities']/*[local-name()='item']">
  85. <xsl:variable name="capability" select="."/>
  86. <xsl:if test="string($capability) != ''">
  87. <xsl:element name="{$capability}"/>
  88. </xsl:if>
  89. </xsl:for-each>
  90. </param>
  91. </xsl:if>
  92. </session>
  93. <http>
  94. <xsl:for-each select="/root/*[local-name()='biBusHeader']/*[local-name()='hdrSession']/*[local-name()='environmentVars']/item">
  95. <param>
  96. <xsl:attribute name="name">
  97. <xsl:value-of select="name/."/>
  98. </xsl:attribute>
  99. <xsl:value-of select="value/."/>
  100. </param>
  101. </xsl:for-each>
  102. </http>
  103. <user>
  104. <xsl:copy-of select="/root/preferences/*"/>
  105. </user>
  106. </xts:append>
  107. </xts:sequence>
  108. </xsl:template>
  109. </xsl:stylesheet>
  110. </xts:block>
  111. <!-- ======================================================== -->
  112. <!-- Session Management -->
  113. <!-- ======================================================== -->
  114. <!-- Reads session-sensitive info from CM -->
  115. <xts:block processor="XSLT" type="exec" mandatory="false"
  116. id="refreshSession"
  117. path="portal/cc/read_session.xml"
  118. dependency="createMissingElements"
  119. condition=".[
  120. string(/root/cookies/cookie[@name = 'cc_session']) = ''
  121. or /root/env/param[@name='m_reload']
  122. or /root/env/param[@name='m_root'] ]">
  123. <xts:logicsheet path="logicsheets/cm-logic.xsl"/>
  124. <xts:logicsheet path="logicsheets/buslogic.xslt"/>
  125. </xts:block>
  126. <!-- Update the <session> element for this request. -->
  127. <xts:block id="buildSession" path="portal/session.xml" dependency="refreshSession" processor="XSLT" type="exec"
  128. condition=".[
  129. /root/newSession
  130. or /root/env/param[@name='ui']
  131. or /root/env/param[@name='d']
  132. or /root/env/param[starts-with(@name,'m_s_')]
  133. or /root/env/param[@name = 'resetSort'] ]"
  134. mandatory="false"/>
  135. <!-- Save changes to the state info in a cookie -->
  136. <xts:block mode="interpret" processor="XSLT" type="exec"
  137. id="setSession"
  138. path="portal/set_session.xml"
  139. dependency="buildSession"
  140. condition=".[/root/updateSession]"
  141. mandatory="false"/>
  142. <!-- Generate the header in XML form -->
  143. <xts:block id="response" type="exec" mode="interpret" dependency="buildSession" processor="XSLT">
  144. <xts:logicsheet path="logicsheets/portal.xsl"/>
  145. <xsl:stylesheet version="1.0"
  146. xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
  147. xmlns:xos="http://developer.cognos.com/schemas/xts/output/"
  148. xmlns:pf="http://developer.cognos.com/schemas/xts/pf"
  149. xmlns:xtsext="xalan://com.cognos.xts.ext.XTSExt"
  150. xmlns:encodingUtils="com.cognos.portal.utils.EncodingUtils"
  151. exclude-result-prefixes="xos pf xtsext encodingUtils">
  152. <xsl:output method="xml" version="1.0" encoding="UTF-8" indent="no"/>
  153. <pf:variables/>
  154. <xsl:template match="/">
  155. <xsl:variable name="uiHideList">
  156. <xsl:for-each select="key('system-param', 'ui_hide')/*">
  157. <xsl:variable name="s" select="concat(' ', @show, ' ')"/>
  158. <xsl:if test="
  159. not (
  160. (contains($s , 'Administrators') and $isAdminUser) or
  161. (contains($s , 'QSUsers') and $userCanUseFullQS) or
  162. (contains($s , 'RSUsers') and $userCanUseFullRS) or
  163. (contains($s , 'Consumers') and $is-named='1') or
  164. (contains($s , 'Anonymous') and $is-named='0') or
  165. (key('system-param', 'ui_groups')/group[contains($s, concat(' ', @id, ' ')) and contains( key('session-param', 'uig'), concat(' ', @id, ' '))])
  166. )">
  167. <xsl:value-of select="' '"/><xsl:value-of select="local-name()"/><xsl:value-of select="' '"/>
  168. </xsl:if>
  169. </xsl:for-each>
  170. </xsl:variable>
  171. <xsl:variable name="sessionSkin" select="key('session-param','skin')"/>
  172. <xsl:variable name="sessionRSUIProfile" select="key('session-param','rsuiprofile')"/>
  173. <xsl:variable name="sessionShowLogon" select="key('session-param','show_logon')"/>
  174. <xts:sequence>
  175. <xts:append select="/root/output">
  176. <xos:part xmlns:xos="http://developer.cognos.com/schemas/xts/output/">
  177. <xos:entityHeader>
  178. <xos:param name="Content-Type">text/xml; charset=UTF-8</xos:param>
  179. </xos:entityHeader>
  180. <xos:entityBody>
  181. <response>
  182. <logic>
  183. <xsl:if test="key('session-param', 'e_isImpersonating')='true'">
  184. <xsl:variable name="impersonateTenantTitle"><xts:string id="IDS_TENANT_IMPERSONATION"/></xsl:variable>
  185. <xsl:variable name="impersonating"><xts:string id="IDS_IMPERSONATING_TENANT"/></xsl:variable>
  186. <xsl:variable name="showTenantContentOnly"><xts:string id="IDS_IMPERSONATE_TENANT_SHOW_TENANTS_CONTENT_ONLY"/></xsl:variable>
  187. <xsl:variable name="close"><xts:string id="CLOSE"/></xsl:variable>
  188. <impersonateTenantHeader title="{$impersonateTenantTitle}" impersonatingLabel="{$impersonating}" showTenantContentOnlyLabel="{$showTenantContentOnly}" closeLabel="{$close}">
  189. <writeAs><xsl:value-of select="key('session-param', 'e_writeTenantID')"/></writeAs>
  190. <readAs><xsl:value-of select="key('session-param', 'e_readTenantID')"/></readAs>
  191. </impersonateTenantHeader>
  192. </xsl:if>
  193. <header>
  194. <xsl:if test="not(contains($uiHideList,' CRN_HEADER '))">
  195. <xsl:variable name="curLocale" select="/root/session/param[@name='contentLocale']"/>
  196. <xsl:variable name="displayTextCustom" select="/root/customs/param[@name='displayText']"/>
  197. <xsl:variable name="aboutTitleCustom" select="/root/customs/param[@name='aboutTitle']"/>
  198. <xsl:variable name="aboutProductCustom" select="/root/customs/param[@name='aboutProduct']"/>
  199. <xsl:variable name="aboutImageCustom" select="/root/customs/param[@name='aboutImage']"/>
  200. <xsl:variable name="bannerOptions">
  201. <xsl:choose>
  202. <xsl:when test="/root/customs/param[@name='bannerOptions']">
  203. <xsl:copy-of select="/root/customs/param[@name='bannerOptions']/value"/>
  204. </xsl:when>
  205. <xsl:otherwise>
  206. <xsl:copy-of select="/root/fragment/meta/customProperties[@name='bannerOptions']/default/value"/>
  207. </xsl:otherwise>
  208. </xsl:choose>
  209. </xsl:variable>
  210. <xsl:variable name="mode" select="/root/customs/param[@name='mode']"/>
  211. <xsl:variable name="title">
  212. <xsl:choose>
  213. <xsl:when test="$mode='page'">
  214. <xsl:text/><xts:string id="IDS_BAN_PAGE_MODE_TITLE"><xts:param name="name"><xsl:value-of select="xtsext:enforceBTD($displayTextCustom, $baseTextDirection, $productLocale, boolean($isBidiEnabled='true'))"/></xts:param></xts:string><xsl:text/>
  215. </xsl:when>
  216. <xsl:when test="$displayTextCustom/value[@xml:lang=$curLocale] != ''">
  217. <xsl:value-of select="xtsext:enforceBTD($displayTextCustom/value[@xml:lang=$curLocale], $baseTextDirection, $productLocale, boolean($isBidiEnabled='true'))"/>
  218. </xsl:when>
  219. <xsl:when test="$displayTextCustom/value[not(@xml:lang) and .!=''][1] != ''">
  220. <xsl:value-of select="xtsext:enforceBTD($displayTextCustom/value[not(@xml:lang) and .!=''][1], $baseTextDirection, $productLocale, boolean($isBidiEnabled='true'))"/>
  221. </xsl:when>
  222. <xsl:when test="not($displayTextCustom/value)">
  223. <xsl:value-of select="xtsext:enforceBTD($displayTextCustom, $baseTextDirection, $productLocale, boolean($isBidiEnabled='true'))"/>
  224. </xsl:when>
  225. </xsl:choose>
  226. </xsl:variable>
  227. <xsl:variable name="aboutTitle">
  228. <xsl:choose>
  229. <xsl:when test="$mode='page'">
  230. <xsl:text/><xts:string id="IDS_BAN_PAGE_MODE_ABOUT_TITLE"/><xsl:text/>
  231. </xsl:when>
  232. <xsl:when test="$aboutTitleCustom/value[@xml:lang=$curLocale] != ''">
  233. <xsl:value-of select="$aboutTitleCustom/value[@xml:lang=$curLocale]"/>
  234. </xsl:when>
  235. <xsl:when test="$aboutTitleCustom/value[not(@xml:lang) and .!=''][1] != ''">
  236. <xsl:value-of select="$aboutTitleCustom/value[not(@xml:lang) and .!=''][1]"/>
  237. </xsl:when>
  238. <xsl:when test="not($aboutTitleCustom/value) and string($aboutTitleCustom) != ''">
  239. <xsl:value-of select="$aboutTitleCustom"/>
  240. </xsl:when>
  241. <xsl:otherwise>
  242. <xsl:value-of select="$title"/>
  243. </xsl:otherwise>
  244. </xsl:choose>
  245. </xsl:variable>
  246. <xsl:variable name="aboutProduct">
  247. <xsl:choose>
  248. <xsl:when test="$mode='page'">
  249. <xsl:text/><xts:string id="IDS_BAN_PAGE_MODE_ABOUT_PRODUCT"/><xsl:text/>
  250. </xsl:when>
  251. <xsl:when test="$aboutProductCustom/value[@xml:lang=$curLocale] != ''">
  252. <xsl:value-of select="$aboutProductCustom/value[@xml:lang=$curLocale]"/>
  253. </xsl:when>
  254. <xsl:when test="$aboutProductCustom/value[not(@xml:lang) and .!=''][1] != ''">
  255. <xsl:value-of select="$aboutProductCustom/value[not(@xml:lang) and .!=''][1]"/>
  256. </xsl:when>
  257. <xsl:when test="not($aboutProductCustom/value) and string($aboutProductCustom) != ''">
  258. <xsl:value-of select="$aboutProductCustom"/>
  259. </xsl:when>
  260. <xsl:otherwise>
  261. <xsl:value-of select="$aboutTitle"/>
  262. </xsl:otherwise>
  263. </xsl:choose>
  264. </xsl:variable>
  265. <xsl:variable name="aboutBoxImage">
  266. <xsl:choose>
  267. <xsl:when test="$aboutImageCustom != ''"><xsl:value-of select="$aboutImageCustom"/></xsl:when>
  268. <xsl:when test="$aboutProduct = 'IBM Cognos Administration'"><xsl:value-of select="$image_root"/>about/cognosadmin_about_$PRODUCT_LOCALE$.jpg</xsl:when>
  269. <xsl:otherwise><xsl:value-of select="$image_root"/>about/cc_about_$PRODUCT_LOCALE$.jpg</xsl:otherwise>
  270. </xsl:choose>
  271. </xsl:variable>
  272. <xsl:variable name="backURL">
  273. <xsl:choose>
  274. <xsl:when test="string(/root/interactions/param[@name='backURL']) != ''">
  275. <xsl:value-of select="/root/interactions/param[@name='backURL']"/>
  276. </xsl:when>
  277. <xsl:otherwise>
  278. <xsl:value-of select="/root/state/param[@name='backURL']"/>
  279. </xsl:otherwise>
  280. </xsl:choose>
  281. </xsl:variable>
  282. <xsl:variable name="urlBackURL">
  283. <xsl:if test="string($backURL) != ''">
  284. <xsl:text>&amp;backURL=</xsl:text>
  285. <xsl:value-of select="xtsext:javascriptencode(xtsext:protect(xtsext:urlencode( string( $backURL ) ),'url','url','getdata'))"/>
  286. </xsl:if>
  287. </xsl:variable>
  288. <xsl:variable name="useCCHome">
  289. <xsl:choose>
  290. <xsl:when test="string(/root/system/param[@name='CCHome'])!=''">
  291. <xsl:value-of select="/root/system/param[@name='CCHome']"/>
  292. </xsl:when>
  293. <xsl:otherwise>
  294. <xsl:text>b_action=xts.run&amp;m=portal/cc.xts</xsl:text>
  295. </xsl:otherwise>
  296. </xsl:choose>
  297. </xsl:variable>
  298. <xsl:variable name="javaScriptBackURL">
  299. <xsl:text>window.location.pathname + window.location.search</xsl:text>
  300. </xsl:variable>
  301. <xsl:attribute name="title"><xsl:value-of select="$title"/></xsl:attribute>
  302. <xsl:attribute name="background"><xsl:value-of select="/root/customs/param[@name='backgroundImage']"/></xsl:attribute>
  303. <xsl:if test="not($bannerOptions/value[. = 'HLA']) and not(contains($uiHideList, ' CRN_HEADER_AUTHENTICATION '))">
  304. <section id="logon">
  305. <xsl:if test="$is-named = '1'">
  306. <username>
  307. <xsl:choose>
  308. <xsl:when test="key('session-param', 'e_showTenantInfo') = 'true' and key('session-param', 'e_tenantDisplayName') != ''">
  309. <xts:string id="IDS_USERINFO_WITHTENANT">
  310. <xts:param name="userName"><xsl:value-of select="key('session-param', 'e_user')"/></xts:param>
  311. <xts:param name="tenantName"><xsl:value-of select="key('session-param', 'e_tenantDisplayName')"/></xts:param>
  312. </xts:string>
  313. </xsl:when>
  314. <xsl:otherwise>
  315. <xts:string id="IDS_USERINFO">
  316. <xts:param name="userName"><xsl:value-of select="key('session-param', 'e_user')"/></xts:param>
  317. </xts:string>
  318. </xsl:otherwise>
  319. </xsl:choose>
  320. </username>
  321. </xsl:if>
  322. <xsl:if test="$is-secure = '1'">
  323. <xsl:variable name="canLogon" select="not(contains($uiHideList, ' CC_HEADER_MENU_logon '))"/>
  324. <xsl:variable name="canLogoff" select="not(contains($uiHideList, ' CC_HEADER_MENU_logoff '))"/>
  325. <xsl:choose>
  326. <xsl:when test="($is-named = '1') and ($sessionShowLogon = 'true') and $canLogon">
  327. <menu id="logonMenu">
  328. <label>
  329. <xsl:choose>
  330. <xsl:when test="$sessionShowLogon = 'true' and $canLogon">
  331. <xsl:text><xts:string id="IDS_TOOLS_LOGON"/></xsl:text>
  332. </xsl:when>
  333. <xsl:when test="$canLogoff">
  334. <xsl:text><xts:string id="IDS_TOOLS_LOGOFF"/></xsl:text>
  335. </xsl:when>
  336. </xsl:choose>
  337. </label>
  338. <action>
  339. <xsl:choose>
  340. <xsl:when test="$sessionShowLogon = 'true' and $canLogon">
  341. <xsl:text>_THIS_logon();</xsl:text>
  342. </xsl:when>
  343. <xsl:when test="$canLogoff">
  344. <xsl:text>_THIS_logoff();</xsl:text>
  345. </xsl:when>
  346. </xsl:choose>
  347. </action>
  348. <tooltip><xts:string id="IDS_LOGON_MENU_TOOLTIP"/></tooltip>
  349. <xsl:if test="$sessionShowLogon = 'true' and $canLogon">
  350. <item id="logonItem">
  351. <label><xts:string id="IDS_TOOLS_LOGON"/></label>
  352. <image>/skins/<xsl:value-of select="$sessionSkin"/>/branding/tools_logon.gif</image>
  353. <action>_THIS_logon();</action>
  354. </item>
  355. </xsl:if>
  356. <xsl:if test="$is-named = '1' and $canLogoff">
  357. <item id="logoffItem">
  358. <label><xts:string id="IDS_TOOLS_LOGOFF"/></label>
  359. <image>/skins/<xsl:value-of select="$sessionSkin"/>/branding/tools_logoff.gif</image>
  360. <action>_THIS_logoff();</action>
  361. </item>
  362. </xsl:if>
  363. </menu>
  364. </xsl:when>
  365. <xsl:otherwise>
  366. <xsl:if test="$canLogon or $canLogoff">
  367. <link id="logonLink">
  368. <label>
  369. <xsl:choose>
  370. <xsl:when test="$sessionShowLogon = 'true' and $canLogon">
  371. <xsl:text><xts:string id="IDS_TOOLS_LOGON"/></xsl:text>
  372. </xsl:when>
  373. <xsl:when test="$canLogoff">
  374. <xsl:text><xts:string id="IDS_TOOLS_LOGOFF"/></xsl:text>
  375. </xsl:when>
  376. </xsl:choose>
  377. </label>
  378. <action>
  379. <xsl:choose>
  380. <xsl:when test="$sessionShowLogon = 'true' and $canLogon">
  381. <xsl:text>_THIS_logon();</xsl:text>
  382. </xsl:when>
  383. <xsl:when test="$canLogoff">
  384. <xsl:text>_THIS_logoff();</xsl:text>
  385. </xsl:when>
  386. </xsl:choose>
  387. </action>
  388. </link>
  389. </xsl:if>
  390. </xsl:otherwise>
  391. </xsl:choose>
  392. </xsl:if>
  393. <xsl:variable name="isAdmin" select="key('session-param', 'e_isSysAdmin')='true' or key('session-param', 'e_isTenantAdmin')='true'"/>
  394. <xsl:if test="$isAdmin and key('session-param', 'e_showTenantInfo') = 'true' and key('session-param', 'e_isImpersonating')!='true'">
  395. <xsl:variable name="tooltip"><xts:string id="IDS_IMPERSONATE_TENANT_TOOLTIP"/></xsl:variable>
  396. <icon id="impersonateLink">
  397. <image>/ps/portal/images/impersonate.gif</image>
  398. <tooltip>
  399. <xsl:value-of select="$tooltip"/>
  400. </tooltip>
  401. <action>
  402. <xsl:text>doImpersonateTenant('read','</xsl:text><xsl:value-of select="xtsext:javascriptencode(key('session-param', 'e_tenantID'))"/><xsl:text>');</xsl:text>
  403. </action>
  404. </icon>
  405. </xsl:if>
  406. </section>
  407. </xsl:if>
  408. <!-- Handle custom links -->
  409. <xsl:if test="key('system-param', 'ui_add')/CC_HEADER_MENU/item">
  410. <section id="customLinks">
  411. <xsl:for-each select="key('system-param', 'ui_add')/CC_HEADER_MENU/item">
  412. <xsl:variable name="s" select="concat(' ', @show, ' ')"/>
  413. <xsl:if test="
  414. not(@show) or
  415. (contains($s , 'Administrators') and $isAdminUser) or
  416. (contains($s , 'QSUsers') and $userCanUseFullQS) or
  417. (contains($s , 'RSUsers') and $userCanUseFullRS) or
  418. (contains($s , 'Consumers') and $is-named='1') or
  419. (contains($s , 'Anonymous') and $is-named='0') or
  420. (key('system-param', 'ui_groups')/group[contains($s, concat(' ', @id, ' ')) and contains( key('session-param', 'uig'), concat(' ', @id, ' '))])
  421. ">
  422. <link id="ccItemLink_{position()}">
  423. <label><xsl:value-of select="label[lang($productLocale)]"/></label>
  424. <action>_THIS_openURL("<xsl:value-of select="url"/>", "<xsl:value-of select="target"/>");<xsl:value-of select="onclick"/></action>
  425. </link>
  426. </xsl:if>
  427. </xsl:for-each>
  428. </section>
  429. </xsl:if>
  430. <xsl:if test="not($bannerOptions/value[. = 'HRB']) and not(contains($uiHideList,' CRN_HEADER_REFRESH '))">
  431. <section id="refresh">
  432. <icon id="refreshButton">
  433. <image>/ps/portal/images/action_refresh.gif</image>
  434. <action>_THIS_refreshAll();</action>
  435. <tooltip><xts:string id="IDS_REFRESH"/></tooltip>
  436. </icon>
  437. </section>
  438. </xsl:if>
  439. <section id="tools">
  440. <xsl:if test="string($backURL) != '' and not(contains($uiHideList, ' CC_HEADER_MENU_return '))">
  441. <icon id="returnButton">
  442. <image>/skins/<xsl:value-of select="$sessionSkin"/>/shared/images/action_return.gif</image>
  443. <action>window.location.href = "<xsl:value-of select="xtsext:javascriptencode(string($backURL))"/>";</action>
  444. <tooltip><xts:string id="IDS_RETURN"/></tooltip>
  445. </icon>
  446. </xsl:if>
  447. <xsl:if test="not($bannerOptions/value[. = 'HMM']) and not(contains($uiHideList,' CRN_HEADER_PERSONAL '))">
  448. <xsl:variable name="psPersonal">
  449. <xsl:if test="not(contains($uiHideList,' CRN_HEADER_PERSONAL_myinbox ')) and $mode != 'myinbox' and $userCanUseMyInbox">
  450. <item id="myInbox">
  451. <label><xts:string id="IDS_MY_INBOX"/></label>
  452. <action>cognosLaunch('ui.gateway', '<xsl:value-of select="$gateway"/>', 'ui.tool', 'MyInbox', 'ui.action', 'view', 'ui.backURL',<xsl:value-of select="$javaScriptBackURL"/>);</action>
  453. </item>
  454. </xsl:if>
  455. <xsl:if test="not(contains($uiHideList,' CRN_HEADER_PERSONAL_subscriptions ')) and string(/root/configProps/param[@name='cc']/property[@name='edition']) != 'mid-market'">
  456. <item id="watchItem">
  457. <label><xts:string id="IDS_MYSUB_MYSUBSCRIPTIONS"/></label>
  458. <action>window.location.href = "<xsl:value-of select="$gateway"/>?b_action=xts.run&amp;m=portal/subscriptions/subscriptions.xts&amp;m_class=account&amp;m_obj=~<xsl:value-of select="$urlBackURL"/>";</action>
  459. </item>
  460. </xsl:if>
  461. <xsl:if test="($mode = 'admin2') and not(contains($uiHideList, ' CC_HEADER_MENU_preferences ') or contains($uiHideList,' CRN_HEADER_PERSONAL_preferences '))">
  462. <item id="preferencesItem">
  463. <label><xts:string id="IDS_TOOLS_PREFERENCES"/></label>
  464. <action>_THIS_preferences();</action>
  465. </item>
  466. </xsl:if>
  467. <xsl:if test="($userCanUseMyDataSets) and not(contains($uiHideList, ' CC_HEADER_MENU_mydatasets ') or contains($uiHideList,' CRN_HEADER_PERSONAL_mydatasets '))">
  468. <item id="mydatasetsItem">
  469. <label><xts:string id="IDS_TOOLS_MY_DATASETS"/></label>
  470. <action>window.location.href = "<xsl:value-of select="$gateway"/>?b_action=xts.run&amp;m=portal/myDatasets/myDatasets.xts<xsl:value-of select="$urlBackURL"/>";</action>
  471. </item>
  472. </xsl:if>
  473. <xsl:if test="($userCanUseMyActivitiesAndSchedule) and $mode!='myactivities' and not(contains($uiHideList,' CRN_HEADER_PERSONAL_activities '))">
  474. <item id="runActivitiesItem">
  475. <label><xts:string id="IDS_TOOLS_MY_RUN_ACTIVITIES"/></label>
  476. <action>window.location.href = "<xsl:value-of select="$gateway"/>?b_action=cogadmin&amp;pathinfo=myactivities<xsl:value-of select="$urlBackURL"/>";</action>
  477. </item>
  478. </xsl:if>
  479. </xsl:variable>
  480. <xsl:if test="$mode='admin'">
  481. <menu id="myAreaMenu">
  482. <icon>
  483. <image>/skins/<xsl:value-of select="$sessionSkin"/>/shared/images/icon_my_area.gif</image>
  484. <tooltip><xts:string id="IDS_MY_AREA_OPTIONS"/></tooltip>
  485. </icon>
  486. <tooltip><xts:string id="IDS_MY_AREA_OPTIONS"/></tooltip>
  487. <item id="preferencesItem">
  488. <label><xts:string id="IDS_TOOLS_PREFERENCES"/></label>
  489. <action>_THIS_preferences();</action>
  490. </item>
  491. </menu>
  492. </xsl:if>
  493. </xsl:if>
  494. <xsl:if test="not($bannerOptions/value[. = 'HHM']) and not(contains($uiHideList,' CC_HEADER_MENU_help ') or contains($uiHideList,' CRN_HEADER_HELP '))">
  495. <menu id="helpMenu">
  496. <icon>
  497. <image>/skins/<xsl:value-of select="$sessionSkin"/>/shared/images/action_help.gif</image>
  498. <tooltip><xts:string id="IDS_HELP"/></tooltip>
  499. </icon>
  500. <action>_THIS_help('help');</action>
  501. <tooltip><xts:string id="IDS_HELP_OPTIONS"/></tooltip>
  502. <item id="helpItem">
  503. <label><xts:string id="IDS_HELP"/></label>
  504. <action>_THIS_help('help');</action>
  505. </item>
  506. <xsl:if test="$hasAdminCapability and not(contains($uiHideList,' CRN_HEADER_HELP_moreDocs '))">
  507. <item id="moreDocsItem">
  508. <label><xts:string id="IDS_MORE_DOCUMENTATION"/></label>
  509. <action>_THIS_help('moredocs');</action>
  510. </item>
  511. </xsl:if>
  512. <xsl:if test="not(contains($uiHideList,' CRN_HEADER_HELP_companyWebsite '))">
  513. <item id="cognosWebItem">
  514. <label><xts:string id="IDS_COG_ON_WEB"/></label>
  515. <action>_THIS_help('cognosweb');</action>
  516. </item>
  517. </xsl:if>
  518. <xsl:if test="not(contains($uiHideList, ' CC_HEADER_MENU_about ') or contains($uiHideList,' CRN_HEADER_HELP_about '))">
  519. <separator/>
  520. <item id="aboutItem">
  521. <label><xts:string id="IDS_ABOUT_PRODUCT"><xts:param name="prodName"><xsl:value-of select="$aboutTitle"/></xts:param></xts:string></label>
  522. <action>_THIS_help('about');</action>
  523. </item>
  524. </xsl:if>
  525. </menu>
  526. </xsl:if>
  527. <xsl:if test="not(contains($uiHideList, ' CC_HEADER_MENU_about ') or contains($uiHideList,' CRN_HEADER_HELP_about ')) and $mode='page'">
  528. <xsl:if test="string(/root/customs/param[@name='pageId']) != ''">
  529. <icon id="editPageButton">
  530. <image>/ps/portal/images/action_edit_page.gif</image>
  531. <action>_THIS_editPage();</action>
  532. <tooltip><xts:string id="IDS_PAGE_MENU_EDIT_PAGE"/></tooltip>
  533. </icon>
  534. </xsl:if>
  535. <link id="aboutLink">
  536. <label><xts:string id="IDS_ABOUT"/></label>
  537. <action>_THIS_help('about');</action>
  538. </link>
  539. </xsl:if>
  540. </section>
  541. <xsl:variable name="pageSearchPath" select="/root/customs/param[@name='pageSearchPath']"/>
  542. <xsl:variable name="homePageURL">
  543. <xsl:choose>
  544. <xsl:when test="$mode='myactivities'">b_action=cogadmin&amp;pathinfo=myactivities&amp;home=true</xsl:when>
  545. <xsl:when test="$mode != 'admin'">b_action=dashboard&amp;pathinfo=/cm&amp;frag-header=true&amp;path=<xsl:value-of select="encodingUtils:urlencode($pageSearchPath, 'UTF-8', false)"/>&amp;home=true</xsl:when>
  546. <xsl:otherwise>b_action=cogadmin&amp;home=true</xsl:otherwise>
  547. </xsl:choose>
  548. </xsl:variable>
  549. <form action="_THIS?frag-urlType=gateway/THIS_" name="_THIS_buttonForm" method="post">
  550. <input type="hidden" name="encoding" value="UTF-8"/>
  551. <input type="hidden" name="m" value="portal/submit.xts"/>
  552. <input type="hidden" name="m_class" value="account"/>
  553. <input type="hidden" name="b_action" value="xts.run"/>
  554. <input type="hidden" name="m_obj" value="~"/>
  555. <input type="hidden" name="ifrmcmd" value="save"/>
  556. <input type="hidden" name="m_po_homePage" value="{$homePageURL}"/>
  557. <input type="hidden" name="backURL" value=""/>
  558. <!-- Insert a cafcontextid if it is needed -->
  559. <xsl:if test="xtsext:cafaction('get_extendedcontextid', '') = 'true'">
  560. <input type="hidden" name="ui.cafcontextid">
  561. <xsl:attribute name="value">
  562. <xsl:value-of select="xtsext:cafaction(concat('get_contextid_settemplatename_mainframeworkxsl_setcomponent_ps_setpassportid_', $passport), '')"/>
  563. </xsl:attribute>
  564. </input>
  565. </xsl:if>
  566. </form>
  567. <script>
  568. <xsl:if test="$mode='page' or string($title)!=''">
  569. document.title = "<xsl:value-of select="xtsext:javascriptencode($title)"/>";
  570. </xsl:if>
  571. function _THIS_onload(evt)
  572. {
  573. if (evt.eventPhase == evt.AT_TARGET)
  574. {
  575. var bannerTable = document.getElementById("_THIS_bannerTable");
  576. if (bannerTable)
  577. {
  578. //Re-flow the main banner table, as it initially renders incorrectly in Netscape 7
  579. bannerTable.style.display = "block";
  580. bannerTable.style.display = "";
  581. }
  582. }
  583. }
  584. _THIS_.addEventListener("fragment.load", "_THIS_onload", false);
  585. function ccModalCallBack()
  586. { //Define the modal callback function. this will be assigned on use.
  587. }
  588. function _THIS_refreshAll()
  589. {
  590. if (_THIS_.parent) {
  591. _THIS_.parent.raiseEvent("fragment.refresh",null,null,false,true);
  592. }
  593. }
  594. function _THIS_openURL(sURL, sTarget)
  595. {
  596. switch (sTarget)
  597. {
  598. case "_parent":
  599. parent.location.href = sURL;
  600. break;
  601. case "_blank":
  602. window.open(sURL);
  603. break;
  604. case "_top":
  605. top.location.href = sURL;
  606. break;
  607. default:
  608. location.href = sURL;
  609. }
  610. }
  611. function _THIS_resetFocusAfterLogon(){
  612. var logonEl = document.getElementById("_THIS_logonMenu");
  613. if (logonEl == null){
  614. logonEl = document.getElementById("_THIS_logonLink");
  615. }
  616. logonEl.focus();
  617. }
  618. function _THIS_logon()
  619. {
  620. ccModalCallBack = function(cmd,sResponse)
  621. {
  622. //We will hit this on a cancel from logon. Close the dialog.
  623. ui_modal_dialog.close(); //Close the dialog
  624. _THIS_resetFocusAfterLogon();
  625. if (cmd != 'ok')
  626. {
  627. // The logon process deleted our cc_session cookie, but we haven't logged on. Restore the session cookie.
  628. ccModalCallBack = function()
  629. {
  630. //Reset our callback to merely close the dialog. As we are just restoring the cookie, we don't need to refresh.
  631. ui_modal_dialog.close(); //Close the dialog
  632. _THIS_resetFocusAfterLogon()
  633. }
  634. ui_modal_dialog.open("<xsl:value-of select="$gateway"/>?b_action=xts.run&amp;m=fragments/utilities/banner/banner-modal.xts&amp;m_reload=&amp;md.displayOptions=h1&amp;md.callBack=xml", true, false, null, null, _THIS_.div);
  635. }
  636. else
  637. {
  638. ui_locker.get().show();
  639. _THIS_.reloadAll();
  640. }
  641. }
  642. ui_modal_dialog.open("<xsl:value-of select="$gateway"/>?b_action=xts.run&amp;m=fragments/utilities/banner/banner-modal.xts&amp;h_CAM_action=logon&amp;md.callBack=xml&amp;m_reload=",false, null, null, null, _THIS_.div);
  643. }
  644. function _THIS_logoff()
  645. {
  646. // Work around an IE issue where the browser does not actually display the page in the below window.location.href if this function is invoked from an onclick event. (When the problem does occur the browser does send the request to the server to have the page rendered, it just fails to display it.)
  647. window.setTimeout( "window.location.href = \"<xsl:value-of select="$gateway"/>?b_action=xts.run&amp;m=portal/logoff.xts&amp;h_CAM_action=logoff\";", 1 );
  648. }
  649. function _THIS_preferences()
  650. {
  651. ccModalCallBack = function(cmd,sResponse)
  652. {
  653. ui_modal_dialog.close();
  654. if (cmd == 'ok')
  655. {
  656. ui_locker.get().show();
  657. _THIS_.reloadAll();
  658. }
  659. }
  660. var sBackURL = encodeURIComponent("<xsl:value-of select="$gateway"/>?b_action=xts.run&amp;m=fragments/utilities/banner/banner-modal.xts&amp;m_reload=");
  661. ui_modal_dialog.open("<xsl:value-of select="$gateway"/>?b_action=xts.run&amp;m=portal/preferences/general.xts&amp;m_class=account&amp;m_obj=~&amp;md.callBack=xml&amp;backURL=" + sBackURL,false,null,null,null,_THIS_.div);
  662. }
  663. function _THIS_goHome()
  664. {
  665. window.location.href = "<xsl:value-of select="$gateway"/>?<xsl:value-of select="/root/system/param[@name='COGNOSHome']"/>";
  666. }
  667. function _THIS_setHome()
  668. {
  669. var homeForm = _F_Form.find("_THIS_buttonForm");
  670. <!--
  671. Assign the backURL using javascript so that xslt properly outputs the url when the output type is set to html (i.e. decode &amp; )
  672. If it the value is assigned directly in the form, &amp; will not be decoded when the output is html and the rewriter will not rewrite the url properly.
  673. -->
  674. <xsl:variable name="homePageBackURL">
  675. <xsl:choose>
  676. <xsl:when test="$mode='myactivities'">_THIS?frag-urlType=gateway&amp;b_action=cogadmin&amp;pathinfo=myactivities&amp;home=true&amp;backURL=<xsl:value-of select="xtsext:protect(encodingUtils:urlencode($backURL,'UTF-8', false),'url','url','getdata')"/>/THIS_</xsl:when>
  677. <xsl:when test="$mode != 'admin'">_THIS?frag-urlType=gateway&amp;b_action=dashboard&amp;pathinfo=/cm&amp;frag-header=true&amp;path=<xsl:value-of select="xtsext:protect(encodingUtils:urlencode($pageSearchPath, 'UTF-8', false),'url','searchPath','getdata')"/>&amp;home=true&amp;backURL=<xsl:value-of select="xtsext:protect(encodingUtils:urlencode($backURL,'UTF-8', false),'url','url','getdata')"/>/THIS_</xsl:when>
  678. <xsl:otherwise>_THIS?frag-urlType=gateway&amp;b_action=cogadmin&amp;home=true&amp;backURL=<xsl:value-of select="xtsext:protect(encodingUtils:urlencode($backURL,'UTF-8', false),'url','url','getdata')"/>/THIS_</xsl:otherwise>
  679. </xsl:choose>
  680. </xsl:variable>
  681. homeForm.backURL.value="<xsl:value-of select="xtsext:javascriptencode($homePageBackURL)"/>";
  682. homeForm.submit();
  683. }
  684. function _THIS_gotoWelcome()
  685. {
  686. window.location.href = "<xsl:value-of select="$gateway"/>?b_action=xts.run&amp;m=portal/welcome/welcome.xts";
  687. }
  688. <xsl:variable name="help_id">
  689. <xsl:choose>
  690. <xsl:when test="string(/root/customs/param[@name='helpId']) != ''">
  691. <xsl:value-of select="string(/root/customs/param[@name='helpId'])"/>
  692. </xsl:when>
  693. <xsl:otherwise>
  694. <xsl:value-of select="/root/fragment/meta/customProperties[@name='helpId']/default/value"/>
  695. </xsl:otherwise>
  696. </xsl:choose>
  697. </xsl:variable>
  698. <xsl:variable name="help_contextId">
  699. <xsl:choose>
  700. <xsl:when test="string(/root/customs/param[@name='help_contextid']) != ''">
  701. <xsl:value-of select="string(/root/customs/param[@name='help_contextid'])"/>
  702. </xsl:when>
  703. <xsl:otherwise>
  704. <xsl:value-of select="''"/>
  705. </xsl:otherwise>
  706. </xsl:choose>
  707. </xsl:variable>
  708. <xsl:variable name="JSMessageFile">
  709. <xsl:choose>
  710. <xsl:when test="string(/root/customs/param[@name='JSMessageFile']) != ''">
  711. <xsl:value-of select="string(/root/customs/param[@name='JSMessageFile'])"/>
  712. </xsl:when>
  713. <xsl:when test="$mode = 'admin'">
  714. <xsl:value-of select="'$WEB$/ps/portal/js/about/ps/nls/psuiadmin_aboutmsg_$PRODUCT_LOCALE$.js'"/>
  715. </xsl:when>
  716. <xsl:otherwise>
  717. <xsl:value-of select="'$WEB$/ps/portal/js/about/ps/nls/psuiaboutmsg_$PRODUCT_LOCALE$.js'"/>
  718. </xsl:otherwise>
  719. </xsl:choose>
  720. </xsl:variable>
  721. <xsl:variable name="webRoot">
  722. <xsl:choose>
  723. <!-- The myInbox_webRoot is from the MyInbox only -->
  724. <xsl:when test="string(/root/customs/param[@name='myInbox_webRoot']) != ''">
  725. <xsl:value-of select="string(/root/customs/param[@name='myInbox_webRoot'])"/>
  726. </xsl:when>
  727. <xsl:when test="/root/http/param[@name='WEB_CONTENT_ROOT']">
  728. <xsl:value-of select="string(/root/http/param[@name='WEB_CONTENT_ROOT'])"/>
  729. </xsl:when>
  730. <!-- No official config param is present. Make this relative. -->
  731. <xsl:otherwise>..</xsl:otherwise>
  732. </xsl:choose>
  733. </xsl:variable>
  734. <xsl:variable name="jsencodedProductLocale" select="xtsext:javascriptencode(/root/session/param[@name='productLocale'])"/>
  735. function _THIS_help(cmd)
  736. {
  737. switch (cmd)
  738. {
  739. case 'help':
  740. gotoHelp("<xsl:value-of select="$jsencodedProductLocale"/>", '<xsl:value-of select="$help_id"/>', '<xsl:value-of select="$help_contextId"/>', '<xsl:value-of select="$webRoot"/>');
  741. break;
  742. case 'getstarted':
  743. gotoHelp("<xsl:value-of select="$jsencodedProductLocale"/>", 'wig_cr_a', '', '<xsl:value-of select="$webRoot"/>');
  744. break;
  745. case 'moredocs':
  746. gotoHelp("<xsl:value-of select="$jsencodedProductLocale"/>", 'doc_lst', '', '<xsl:value-of select="$webRoot"/>');
  747. break;
  748. case 'cognosweb':
  749. var w = window.open("http://www-01.ibm.com/software/analytics/cognos/","_blank");w.focus();
  750. break;
  751. case 'about':
  752. var origUrl = "<xsl:value-of select="xtsext:javascriptencode($aboutBoxImage)"/>";
  753. var imageURL = _F_Config.expandMacros(origUrl, {"productLocale": "<xsl:value-of select="$jsencodedProductLocale"/>"});
  754. var imageDefaultURL = _F_Config.expandMacros(origUrl, {"productLocale": "en"});
  755. //Build the about box messages
  756. var JSMessageFileBase = "<xsl:value-of select="xtsext:javascriptencode($JSMessageFile)"/>";
  757. var JSMessageFile = _F_Config.expandMacros(JSMessageFileBase);
  758. var JSMessageFileDefault = _F_Config.expandMacros(JSMessageFileBase, {"productLocale": "en"});
  759. var helpAB = new about_dialog(imageURL, imageDefaultURL, JSMessageFile, JSMessageFileDefault);
  760. helpAB.idToFocusOnClose = "_THIS_helpMenu";
  761. helpAB.show()
  762. break;
  763. }
  764. }
  765. function _THIS_editPage()
  766. {
  767. ccModalCallBack = function()
  768. {
  769. ui_modal_dialog.close();
  770. //Perform a browser reload as the page layout could have changed.
  771. window.location.reload();
  772. }
  773. var sBackURL = encodeURIComponent("<xsl:value-of select="$gateway"/>?b_action=xts.run&amp;m=/portal/modal.xts&amp;m_reload=");
  774. var url = "<xsl:value-of select="$gateway"/>?b_action=xts.run" +
  775. "&amp;m=portal/properties_pagelet_layout.xts" +
  776. "&amp;m_class=pagelet" +
  777. "&amp;m_obj=" + "storeID('<xsl:value-of select="/root/customs/param[@name='pageId']"/>')" +
  778. "&amp;md.callBack=xml" +
  779. "&amp;backURL=" + sBackURL;
  780. ui_modal_dialog.open(url,null,null,null,true,_THIS_.div);
  781. }
  782. </script>
  783. </xsl:if>
  784. </header>
  785. <session>
  786. <xsl:copy-of select="/root/session/*"/>
  787. </session>
  788. </logic>
  789. <xsl:if test="string(/root/interactions/param[@name='backURL']) != ''">
  790. <state>
  791. <xsl:copy-of select="/root/interactions/param[@name='backURL']"/>
  792. </state>
  793. </xsl:if>
  794. </response>
  795. </xos:entityBody>
  796. </xos:part>
  797. </xts:append>
  798. </xts:sequence>
  799. </xsl:template>
  800. </xsl:stylesheet>
  801. </xts:block>
  802. </xts:morphlet>