searchlogic.xslt 36 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760
  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, 2014
  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" xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
  13. xmlns:xts="http://developer.cognos.com/schemas/xts/"
  14. xmlns:search="http://developer.cognos.com/schemas/xts/logicsheets/xslt/searchlogic/"
  15. xmlns:nav="http://developer.cognos.com/schemas/cps/navigation/1/"
  16. xmlns:xtsext="xalan://com.cognos.xts.ext.XTSExt" xmlns:out="dummy-uri" exclude-result-prefixes="search">
  17. <xsl:output method="xml" encoding="UTF-8" indent="no"/>
  18. <xsl:namespace-alias stylesheet-prefix="out" result-prefix="xsl"/>
  19. <!--
  20. This stylesheet (searchlogic.xslt) consists of the following templates:
  21. search:gen-search-exp - creates search expression.
  22. -->
  23. <!--
  24. Template - search:gen-search-exp:
  25. This template generates the expression when a search is launched
  26. Operation:
  27. Generates /root/search/expression search results or /root/search/emptySearchExpression when there are no search results.
  28. -->
  29. <xsl:template match="search:gen-search-exp" priority="1">
  30. <xts:append>
  31. <search>
  32. <out:variable name="search_string" select="string(/root/env/param[@name = 'stext'])"/>
  33. <out:variable name="search_modified_filter" select="/root/env/param[@name = 'smodified']"/>
  34. <out:variable name="search_type_filter" select="/root/env/param[@name = 'stype']"/>
  35. <out:variable name="sfield" select="string(/root/env/param[@name = 'sfield'])"/>
  36. <out:variable name="isEmptySearchExpression" select="
  37. (/root/env/param[@name = 'stext'] and $search_string = '') and
  38. (not(/root/env/param[@name = 'smodified']) or $search_modified_filter = 'any') and
  39. (not(/root/env/param[@name = 'stype']) or $search_type_filter = 'any')"/>
  40. <!-- COGCQ00870631
  41. This variable ensures that the content store root can never be searched.
  42. If it is attempted somehow, the user's search is instead based on their default content location
  43. -->
  44. <out:variable name="path_safe">
  45. <out:choose>
  46. <out:when test="/root/env/param[@name='so.navigationID'] and /root/env/param[@name='so.cmRootId'] and string(/root/env/param[@name='so.navigationID']) = string(/root/env/param[@name='so.cmRootId'])">
  47. <out:text/>storeID("<xsl:value-of select="root/env/param[@name='so.defaultLocationId']"/>")<xsl:text/>
  48. </out:when>
  49. <out:otherwise>
  50. <out:value-of select="$path"/>
  51. </out:otherwise>
  52. </out:choose>
  53. </out:variable>
  54. <xsl:choose>
  55. <xsl:when test="@navInterface">
  56. <xsl:call-template name="generate-NAV-search-spec"/>
  57. </xsl:when>
  58. <xsl:otherwise>
  59. <xsl:call-template name="generate-CM-search-expression"/>
  60. </xsl:otherwise>
  61. </xsl:choose>
  62. </search>
  63. </xts:append>
  64. </xsl:template>
  65. <xsl:template name="generate-CM-search-expression">
  66. <!-- if there is something to search on then build a search expression and append it to the imput doc. -->
  67. <out:choose>
  68. <out:when test="$search_string != '' or $search_modified_filter != 'any' or $search_type_filter != 'any'">
  69. <out:variable name="sq">'</out:variable>
  70. <!-- must escape the ' to '' to make the search expression CM safe. -->
  71. <out:variable name="text" select=" xtsext:replace(string($search_string), string($sq), concat($sq,$sq)) "/>
  72. <expression>
  73. <!-- Scope ==== -->
  74. <out:variable name="scope" select="string(/root/env/param[@name = 'sscope'])"/>
  75. <out:variable name="isAdminUser" select="boolean(/root/session/param[@name='capabilities']/canUseAdministrationPortal)"/>
  76. <out:variable name="defaultContentRoot">
  77. <out:choose>
  78. <out:when test="/root/session/param[@name='e_root'] and /root/session/param[@name='e_root'] != ''">
  79. <out:value-of select="/root/session/param[@name='e_root']"/>
  80. </out:when>
  81. <out:when test="/root/env/param[@name='m_subfldr']">
  82. <out:text/>~/subscriptionFolder<out:text/>
  83. </out:when>
  84. <out:otherwise>
  85. <out:value-of select="'/content'"/>
  86. </out:otherwise>
  87. </out:choose>
  88. </out:variable>
  89. <out:choose>
  90. <!-- current folder and subfolders -->
  91. <out:when test="$scope = 'fb'">
  92. <out:choose>
  93. <out:when test="string(/root/env/param[@name='so.namespace']) != '' or starts-with($path_safe, &quot;CAMID(&apos;&quot;) or starts-with($path_safe, 'CAMID(&quot;')">
  94. <out:value-of select="$path_safe"/>/descendant::*<out:text/>
  95. </out:when>
  96. <out:otherwise>
  97. <out:value-of select="$path_safe"/>
  98. <xsl:if test="@mode and @mode='sos'">
  99. <out:if test="/root/selectionSpec/item[@name='navigationId' and @atRoot='true']">
  100. <out:choose>
  101. <out:when test="/root/selectionSpec/item[@name='modes']/search/types/param[@name='_pages' and @pagesSearchRoot='content']">
  102. <out:text/>/*[@objectClass != 'portal']<out:text/>
  103. </out:when>
  104. <out:when test="/root/selectionSpec/item[@name='modes']/search/types/param[@name='_pages' and @pagesSearchRoot='portal']">
  105. <out:text/>/*[@objectClass = 'portal']<out:text/>
  106. </out:when>
  107. </out:choose>
  108. </out:if>
  109. </xsl:if>
  110. <out:text/>/descendant-or-self::*[@objectClass != 'agentDefinition' and @objectClass != 'agentDefinitionView']/*<out:text/>
  111. </out:otherwise>
  112. </out:choose>
  113. </out:when>
  114. <!-- current folder only -->
  115. <out:when test="$scope = 'fo'"><out:value-of select="$path_safe"/>/*</out:when>
  116. <!-- personal folders -->
  117. <out:when test="$scope = 'm'">
  118. <out:text/>~/folder/descendant-or-self::*[@objectClass != 'agentDefinition' and @objectClass != 'agentDefinitionView']/*<out:text/>
  119. </out:when>
  120. <!-- public folders -->
  121. <out:when test="$scope = 'p'">
  122. <out:value-of select="$defaultContentRoot"/>/descendant-or-self::*[@objectClass != 'agentDefinition' and @objectClass != 'agentDefinitionView']/*<out:text/>
  123. </out:when>
  124. <!-- subscription folder only -->
  125. <out:when test="$scope = 's'">
  126. <out:value-of select="$defaultContentRoot"/>/*<out:text/>
  127. </out:when>
  128. <!-- entire namespace -->
  129. <xsl:if test="@mode and @mode = 'sos'">
  130. <out:when test="$scope = 'ns'">
  131. <out:value-of select="$ns-path"/>/descendant::*<out:text/>
  132. </out:when>
  133. <out:when test="$scope = 'adm'">
  134. <out:value-of select="$admin-path"/>/descendant::*<out:text/>
  135. </out:when>
  136. </xsl:if>
  137. <!-- tool root ( i.e. /configuration for server admin tool, /content for schedule tool, /directory for directory tool -->
  138. <out:when test="$scope = 'any'">
  139. <xsl:choose>
  140. <xsl:when test="@defaultRoot and @defaultRoot != '' and @defaultRoot != 'directory'">
  141. <xsl:value-of select="concat('/', @defaultRoot, '/descendant::*')"/>
  142. </xsl:when>
  143. <!-- For dirctory tool, search all means search under current namespace. -->
  144. <xsl:when test="@defaultRoot and @defaultRoot = 'directory' ">
  145. <out:value-of select="concat('/', $ns-path, '/descendant-or-self::*')"/>
  146. </xsl:when>
  147. <xsl:otherwise>/descendant::*</xsl:otherwise>
  148. </xsl:choose>
  149. </out:when>
  150. <!-- no scope is defined, default to tool root -->
  151. <out:otherwise>
  152. <xsl:choose>
  153. <xsl:when test="@defaultRoot and @defaultRoot != ''">
  154. <xsl:value-of select="concat('/', @defaultRoot, '/descendant::*')"/>
  155. </xsl:when>
  156. <xsl:otherwise>/descendant::*</xsl:otherwise>
  157. </xsl:choose>
  158. </out:otherwise>
  159. </out:choose>
  160. <!-- Field / Search Type ==== -->
  161. <out:if test="$text != ''">
  162. <out:variable name="method" select="string(/root/env/param[@name = 'smethod'])"/>
  163. <out:choose>
  164. <out:when test="/root/env/param[@name = 'sfield'] = 'n' or string(/root/env/param[@name = 'sfield']) = ''">
  165. <out:choose>
  166. <out:when test="$method = '3'">[@defaultName = '<out:value-of select="$text"/>']</out:when>
  167. <out:when test="$method = '2'">[starts-with(@defaultName, '<out:value-of select="$text"/>' )]</out:when>
  168. <out:otherwise>[contains(@defaultName, '<out:value-of select="$text"/>' )]</out:otherwise>
  169. </out:choose>
  170. </out:when>
  171. <out:when test="/root/env/param[@name = 'sfield'] = 'd'">
  172. <out:choose>
  173. <out:when test="$method = '3'">[@defaultDescription = '<out:value-of select="$text"/>']</out:when>
  174. <out:when test="$method = '2'">[starts-with(@defaultDescription, '<out:value-of select="$text"/>' )]</out:when>
  175. <out:otherwise>[contains(@defaultDescription, '<out:value-of select="$text"/>' )]</out:otherwise>
  176. </out:choose>
  177. </out:when>
  178. <out:otherwise>
  179. <out:choose>
  180. <out:when test="$method = '3'">[@defaultDescription = '<out:value-of select="$text"/>' or @defaultName = '<out:value-of select="$text"/>']</out:when>
  181. <out:when test="$method = '2'">[starts-with(@defaultDescription, '<out:value-of select="$text"/>' ) or starts-with(@defaultName, '<out:value-of select="$text"/>' )]</out:when>
  182. <out:otherwise>[contains(@defaultDescription, '<out:value-of select="$text"/>' ) or contains(@defaultName, '<out:value-of select="$text"/>' )]</out:otherwise>
  183. </out:choose>
  184. </out:otherwise>
  185. </out:choose>
  186. </out:if>
  187. <!-- Object Filter ==== -->
  188. <out:choose>
  189. <out:when test="$search_type_filter != 'any'">
  190. <out:choose>
  191. <out:when test="$search_type_filter = 'service' ">
  192. <out:text>[</out:text>
  193. <out:for-each select="/root/system/param[@name='ui_objects']/object[@service='T'][position()!=last()]">
  194. <out:value-of select="concat('@objectClass=&quot;', @class, '&quot; or ')"/>
  195. </out:for-each>
  196. <out:text>@objectClass="</out:text>
  197. <out:value-of select="/root/system/param[@name='ui_objects']/object[@service='T'][position()=last()]/@class"/>
  198. <out:text>"]</out:text>
  199. </out:when>
  200. <out:when test="$search_type_filter = 'contentReference' "> <!-- MVC -->
  201. <out:text/>[@objectClass='launchable' and @launchableType='application/vnd.ibm.cognos.instance']<out:text/>
  202. </out:when>
  203. <out:when test="$search_type_filter = 'cd' "> <!-- cd is Cognos Insight -->
  204. <out:text/>[@objectClass='launchable' and @launchableType='application/vnd.ibm.cognos.cd']<out:text/>
  205. </out:when>
  206. <out:when test="$search_type_filter = 'advisorView' "> <!-- EV Studio -->
  207. <out:text/>[@objectClass='launchable' and @launchableType='application/vnd.ibm.cognos.ev']<out:text/>
  208. </out:when>
  209. <out:when test="$search_type_filter = 'advisorCanvas' "> <!-- EV Studio -->
  210. <out:text/>[@objectClass='launchable' and @launchableType='application/vnd.ibm.cognos.ev.canvas']<out:text/>
  211. </out:when>
  212. <out:when test="$search_type_filter = 'metricsPackage' ">
  213. <out:text/>[@objectClass = 'package'][@userInterfaces='metricStudio' or not(@userInterfaces)]<out:text/>
  214. </out:when>
  215. <out:when test="$search_type_filter = 'planningPackage' ">
  216. <out:text/>[@objectClass = 'package'][@userInterfaces='planningContributor' or not(@userInterfaces)]<out:text/>
  217. </out:when>
  218. <out:when test="$search_type_filter = 'analyticsPackage' ">
  219. <out:text/>[@objectClass = 'package'][@userInterfaces='adaptiveAnalytics' or not(@userInterfaces)]<out:text/>
  220. </out:when>
  221. <out:when test="$search_type_filter = 'package' ">
  222. <out:text/>[@objectClass = 'package'][@userInterfaces!='metricStudio' and @userInterfaces!='planningContributor' and @userInterfaces!='adaptiveAnalytics']<out:text/>
  223. </out:when>
  224. <out:when test="$search_type_filter='_agents'">
  225. <out:text/>[@objectClass = 'agentDefinition' or @objectClass = 'agentDefinitionView']<out:text/>
  226. </out:when>
  227. <out:when test="$search_type_filter='_pages'">
  228. <out:text/>[@objectClass = 'pagelet']<out:text/>
  229. </out:when>
  230. <out:when test="$search_type_filter='_reports'">
  231. <out:text/>[@objectClass='analysis' or @objectClass='query' or @objectClass='report' or @objectClass='reportView' or @objectClass='powerPlayReport' or @objectClass='powerPlay8Report' or @objectClass='powerPlay8ReportView']<out:text/>
  232. </out:when>
  233. <out:when test="$search_type_filter='_reports_plus'">
  234. <out:text/>[@objectClass='analysis' or @objectClass='query' or @objectClass='report' or @objectClass='reportView' or @objectClass='powerPlayReport' or @objectClass='powerPlay8Report' or @objectClass='powerPlay8ReportView' or @objectClass='interactiveReport']<out:text/>
  235. </out:when>
  236. <out:when test="$search_type_filter='_distributionListsAndContacts'">
  237. <out:text/>[@objectClass = 'distributionList' or @objectClass = 'contact']<out:text/>
  238. </out:when>
  239. <out:when test="$search_type_filter='_groupsAndRoles'">
  240. <out:text/>[@objectClass = 'group' or @objectClass = 'role']<out:text/>
  241. </out:when>
  242. <out:when test="$search_type_filter='_users'">
  243. <out:text/>[@objectClass = 'account']<out:text/>
  244. </out:when>
  245. <out:when test="$search_type_filter='_usersGroupsAndRoles'">
  246. <out:text/>[@objectClass = 'account' or @objectClass = 'group' or @objectClass = 'role']<out:text/>
  247. </out:when>
  248. <out:when test="$search_type_filter = 'subscriptionFolder' ">
  249. <out:text/>[@objectClass = 'subscriptionFolder']<out:text/>
  250. </out:when>
  251. <out:when test="$search_type_filter = 'advisorView' "> <!-- advisor -->
  252. <out:text/>[@objectClass='launchable' and @launchableType='application/vnd.ibm.cognos.ev']<out:text/>
  253. </out:when>
  254. <out:when test="$search_type_filter = 'advisorCanvas' "> <!-- advisor -->
  255. <out:text/>[@objectClass='launchable' and @launchableType='application/vnd.ibm.cognos.ev.canvas']<out:text/>
  256. </out:when>
  257. <out:when test="$search_type_filter = 'reportDataServiceAgentDefinition' ">
  258. <out:text/>[@objectClass = 'reportDataServiceAgentDefinition']<out:text/>
  259. </out:when>
  260. <out:when test="$search_type_filter = '_folderAndSubscriptionFolder' ">
  261. <out:text/>[@objectClass = 'subscriptionFolder' or @objectClass = 'folder']<out:text/>
  262. </out:when>
  263. <out:when test="$search_type_filter = 'dataSource'">
  264. <out:text/>[@objectClass='dataSource' or @objectClass='rolapDataSource' or @objectClass='rolapVirtualDataSource']<out:text/>
  265. </out:when>
  266. <out:when test="$search_type_filter = 'selfServicePackageDatasource'">
  267. <out:text/>[@objectClass='dataSource' and @capabilities='http://developer.cognos.com/ceba/constants/dataSourceCapabilityEnum#personalPackages']<out:text/>
  268. </out:when>
  269. <out:when test="$search_type_filter = 'repositoryDatasource'">
  270. <out:text/>[@objectClass='dataSource' and @capabilities='http://developer.cognos.com/ceba/constants/dataSourceCapabilityEnum#repository']<out:text/>
  271. </out:when>
  272. <out:otherwise>
  273. <out:text/>[@objectClass = '<out:value-of select="$search_type_filter"/>']<out:text/>
  274. </out:otherwise>
  275. </out:choose>
  276. </out:when>
  277. <out:otherwise>
  278. <!-- handle 'any' type -->
  279. <xsl:choose>
  280. <xsl:when test="@mode and @mode = 'sos'">
  281. <out:variable name="hasUsersGroupsAndRoles" select="key('spec-item','modes')/search/types/*[local-name()='param' and @name='_usersGroupsAndRoles']"/>
  282. <out:variable name="newSearchTypes">
  283. <out:for-each select="key('spec-item','modes')/search/types/param">
  284. <!-- consolidate name types that may give rise to duplicate generation of object classes in the search expression (COGCQ00203225) -->
  285. <out:if test="not((@name='_groupsAndRoles' or @name='_users') and $hasUsersGroupsAndRoles)">
  286. <param>
  287. <out:attribute name="name"><out:value-of select="@name"/></out:attribute>
  288. </param>
  289. </out:if>
  290. </out:for-each>
  291. </out:variable>
  292. <out:text/>[<out:text/>
  293. <out:for-each select="$newSearchTypes/param">
  294. <out:variable name="stname" select="@name"/>
  295. <out:choose>
  296. <out:when test="$stname='_agents'">
  297. <out:text/>@objectClass = 'agentDefinition' or @objectClass = 'agentDefinitionView'<out:text/>
  298. </out:when>
  299. <out:when test="$stname='_pages'">
  300. <out:text/>@objectClass = 'pagelet'<out:text/>
  301. </out:when>
  302. <out:when test="$stname='_reports'">
  303. <out:text/>@objectClass='analysis' or @objectClass='powerPlayReport' or @objectClass='powerPlay8Report' or @objectClass='powerPlay8ReportView' or @objectClass='query' or @objectClass='report' or @objectClass='reportView'<out:text/>
  304. </out:when>
  305. <out:when test="$stname='_reports_plus'">
  306. <out:text/>@objectClass='analysis' or @objectClass='powerPlayReport' or @objectClass='powerPlay8Report' or @objectClass='powerPlay8ReportView' or @objectClass='query' or @objectClass='report' or @objectClass='reportView' or @objectClass='interactiveReport'<out:text/>
  307. </out:when>
  308. <out:when test="$stname='_distributionListsAndContacts'">
  309. <out:text/>@objectClass = 'distributionList' or @objectClass = 'contact'<out:text/>
  310. </out:when>
  311. <out:when test="$stname='_groupsAndRoles'">
  312. <out:text/>@objectClass = 'group' or @objectClass = 'role'<out:text/>
  313. </out:when>
  314. <out:when test="$stname='_users'">
  315. <out:text/>@objectClass = 'account'<out:text/>
  316. </out:when>
  317. <out:when test="$stname='_usersGroupsAndRoles'">
  318. <out:text/>@objectClass = 'account' or @objectClass = 'group' or @objectClass = 'role'<out:text/>
  319. </out:when>
  320. <out:otherwise>
  321. <out:text/>@objectClass='<out:value-of select="@name"/>'<out:text/>
  322. </out:otherwise>
  323. </out:choose>
  324. <out:if test="position() != last()">
  325. <out:text/> or <out:text/>
  326. </out:if>
  327. </out:for-each>
  328. <out:text/>]<out:text/>
  329. </xsl:when>
  330. <xsl:otherwise>
  331. <xsl:choose>
  332. <xsl:when test="./search:defaultTypes[not(@indexSearch)]/search:defaultType and ./search:defaultTypes[not(@indexSearch)]/search:defaultType != '' ">
  333. <out:text/>[<out:text/>
  334. <xsl:for-each select="./search:defaultTypes[not(@indexSearch)]/search:defaultType">
  335. <xsl:choose>
  336. <xsl:when test="string() = 'service' ">
  337. <out:for-each select="/root/system/param[@name='ui_objects']/object[@service='T'][position()!=last()]">
  338. <out:text>@objectClass='</out:text>
  339. <out:value-of select="@class"/>
  340. <out:text>' or </out:text>
  341. </out:for-each>
  342. <out:text>@objectClass='</out:text>
  343. <out:value-of select="/root/system/param[@name='ui_objects']/object[@service='T'][position()=last()]/@class"/>
  344. <out:text>'</out:text>
  345. </xsl:when>
  346. <xsl:when test="string() = 'contentReference'">
  347. <out:text/>(@objectClass='launchable' and @launchableType='application/vnd.ibm.cognos.instance')<out:text/>
  348. </xsl:when>
  349. <xsl:when test="string() = 'cd' "> <!-- cd is Cognos Insight -->
  350. <out:text/>(@objectClass='launchable' and @launchableType='application/vnd.ibm.cognos.cd')<out:text/>
  351. </xsl:when>
  352. <xsl:when test="string() = 'advisorView' "> <!-- EV Studio -->
  353. <out:text/>(@objectClass='launchable' and @launchableType='application/vnd.ibm.cognos.ev')<out:text/>
  354. </xsl:when>
  355. <xsl:when test="string() = 'advisorCanvas' "> <!-- EV Studio -->
  356. <out:text/>(@objectClass='launchable' and @launchableType='application/vnd.ibm.cognos.ev.canvas')<out:text/>
  357. </xsl:when>
  358. <xsl:when test="string() = 'dataSource'">
  359. <out:text/>@objectClass='dataSource' or @objectClass='rolapDataSource' or @objectClass='rolapVirtualDataSource'<out:text/>
  360. </xsl:when>
  361. <xsl:otherwise>
  362. <out:text/>@objectClass='<xsl:value-of select="."/>'<out:text/>
  363. </xsl:otherwise>
  364. </xsl:choose>
  365. <xsl:if test="position() != last()">
  366. <out:text/> or <out:text/>
  367. </xsl:if>
  368. </xsl:for-each>
  369. <out:text/>]<out:text/>
  370. </xsl:when>
  371. <xsl:otherwise>
  372. <out:text/>[@usage != 'subObject']<out:text/>
  373. </xsl:otherwise>
  374. </xsl:choose>
  375. </xsl:otherwise>
  376. </xsl:choose>
  377. </out:otherwise>
  378. </out:choose>
  379. <!-- Modified date ==== -->
  380. <out:if test="$search_modified_filter != 'any'">
  381. <out:variable name="offsetamt">
  382. <out:choose>
  383. <out:when test="$search_modified_filter = 't'">0</out:when>
  384. <out:when test="$search_modified_filter = 'l3d'">-259200</out:when>
  385. <out:when test="$search_modified_filter = 'lw'">-604800</out:when>
  386. <out:when test="$search_modified_filter = 'lm'">-2629743</out:when>
  387. <out:when test="$search_modified_filter = 'l3m'">-7889231</out:when>
  388. <out:when test="$search_modified_filter = 'l6m'">-15778463</out:when>
  389. <out:when test="$search_modified_filter = 'ly'">-31556926</out:when>
  390. <out:when test="$search_modified_filter = 'l3y'">-94670777</out:when>
  391. </out:choose>
  392. </out:variable>
  393. <out:variable name="offsetunit">second</out:variable>
  394. <out:text/>[@modificationTime &gt; '<out:value-of select="xtsext:formatDateToUTC(xtsext:getDateTimeOffset(concat(xtsext:substringBeforeLast(xtsext:getCurrentDateTime(/root/user/param[@name='timeZoneID']), 'T'), 'T00:00:00Z'), $offsetamt, $offsetunit), /root/user/param[@name='timeZoneID'])"/>']<out:text/>
  395. </out:if>
  396. <!-- Default security filters ==== -->
  397. <xsl:choose>
  398. <xsl:when test="@mode and @mode = 'sos'">
  399. <out:value-of select="$selectionPermissions"/><xsl:if test="not(string(@nohiddenpredicate)='true')"><out:value-of select="$hidden-objects-predicate"/></xsl:if>
  400. </xsl:when>
  401. <xsl:otherwise>
  402. <xsl:choose>
  403. <!-- if we're not dealing with /directory then always add the security filter -->
  404. <xsl:when test="not(@defaultRoot) or @defaultRoot != 'directory'">
  405. <out:value-of select="$visibility-predicate"/>
  406. </xsl:when>
  407. <xsl:otherwise>
  408. <!-- only add the security filter if we're in the Cognos namespace -->
  409. <out:if test="starts-with($ns-path, &quot;CAMID(&apos;:&quot;) or starts-with($ns-path, 'CAMID(&quot;:')">
  410. <out:choose>
  411. <!-- modelViews do not support hidden object filter so we use a modified form of the visibility predicate -->
  412. <out:when test="$search_type_filter = 'modelView'">
  413. <out:value-of select="/root/system/param[@name='visible']"/>
  414. </out:when>
  415. <out:otherwise>
  416. <out:value-of select="$visibility-predicate"/>
  417. </out:otherwise>
  418. </out:choose>
  419. </out:if>
  420. </xsl:otherwise>
  421. </xsl:choose>
  422. </xsl:otherwise>
  423. </xsl:choose>
  424. </expression>
  425. </out:when>
  426. <!-- when we only search on one object then there won't be an stype -->
  427. <out:when test="$isEmptySearchExpression">
  428. <emptySearchExpression/>
  429. </out:when>
  430. </out:choose>
  431. </xsl:template>
  432. <xsl:template name="generate-NAV-search-spec">
  433. <out:variable name="sourceContext" select="/root/env/param[@name='sourceContext']"/>
  434. <out:variable name="context">
  435. <out:choose>
  436. <out:when test="/root/env/param[@name='m_searchcontext']">
  437. <out:value-of select="/root/env/param[@name='m_searchcontext']"/>
  438. </out:when>
  439. <out:when test="/root/env/param[@name='m_context']">
  440. <out:value-of select="/root/env/param[@name='m_context']"/>
  441. </out:when>
  442. </out:choose>
  443. </out:variable>
  444. <out:choose>
  445. <out:when test="$sfield = 'k' and not($userCanUseIndexSearch)">
  446. <indexSearchNotAllowed/>
  447. </out:when>
  448. <out:when test="$sfield = 'k' and $search_string = '' and string($sourceContext) = ''">
  449. <emptySearchExpression/>
  450. </out:when>
  451. <out:when test="not($sfield = 'k') and $isEmptySearchExpression">
  452. <emptySearchExpression/>
  453. </out:when>
  454. <out:when test="string($sourceContext) != '' or ($search_string != '' or $search_modified_filter != 'any' or $search_type_filter != 'any')">
  455. <navSearchSpec>
  456. <out:choose>
  457. <!-- current search spec/pagination context -->
  458. <out:when test="string($context) != ''">
  459. <nav:context><out:value-of select="$context"/></nav:context>
  460. </out:when>
  461. <!-- search string: search string and source context are mutually exclusive -->
  462. <out:when test="string(/root/env/param[@name='stext']) != ''">
  463. <nav:string><out:value-of select="/root/env/param[@name='stext']"/></nav:string>
  464. </out:when>
  465. <!-- source context: drill thru context passed in from RV/studios, etc... -->
  466. <out:when test="string($sourceContext) != ''">
  467. <nav:sourceContext><out:value-of select="/root/env/param[@name='sourceContext']"/></nav:sourceContext>
  468. </out:when>
  469. </out:choose>
  470. <!-- search type: basic or index search -->
  471. <nav:searchType>
  472. <out:choose>
  473. <out:when test="string(/root/env/param[@name = 'sfield']) = 'k' or (string(/root/env/param[@name = 'sfield']) = '' and $userCanUseIndexSearch)">
  474. <out:value-of select="'content'"/> <!-- index search -->
  475. </out:when>
  476. <out:otherwise>
  477. <out:value-of select="''"/>
  478. </out:otherwise>
  479. </out:choose>
  480. </nav:searchType>
  481. <!-- Google search object open id (e.g.: used in open.xts) -->
  482. <out:if test="string(/root/env/param[@name='open']) = 'true'">
  483. <nav:param name="open"><out:value-of select="'true'"/></nav:param>
  484. <out:if test="string(/root/env/param[@name='id']) != ''">
  485. <nav:param name="openId"><out:value-of select = "/root/env/param[@name='id']"/></nav:param>
  486. </out:if>
  487. </out:if>
  488. <!-- All filters settings -->
  489. <out:if test="string(/root/env/param[@name='all_filters']) != ''">
  490. <nav:param name="useAllFilters"><out:value-of select="string(/root/env/param[@name='all_filters'])"/></nav:param>
  491. </out:if>
  492. <!-- Google search urlParameters -->
  493. <nav:param name="urlParameters">
  494. <out:for-each select="/root/env/param[starts-with(@name,'cs_')]">
  495. <out:value-of select="'&amp;'"/>
  496. <out:value-of select="@name"/>
  497. <out:value-of select="'='"/>
  498. <out:value-of select="xtsext:urlencode(string(.))"/>
  499. </out:for-each>
  500. </nav:param>
  501. <!-- scope -->
  502. <nav:scope>
  503. <out:choose>
  504. <out:when test="string(/root/env/param[@name='sscope']) = 'p'">
  505. <out:value-of select="'systemDefault'"/>
  506. </out:when>
  507. <out:when test="string(/root/env/param[@name='sscope']) = 'm'">
  508. <out:value-of select="'userDefault'"/>
  509. </out:when>
  510. <out:when test="string(/root/env/param[@name='sscope']) = 'fo'">
  511. <out:value-of select="$path_safe"/>
  512. </out:when>
  513. <out:when test="string(/root/env/param[@name='sscope']) = 'fb'">
  514. <out:value-of select="$path_safe"/>
  515. </out:when>
  516. <out:otherwise>
  517. <out:value-of select="''"/>
  518. </out:otherwise>
  519. </out:choose>
  520. </nav:scope>
  521. <!-- field -->
  522. <nav:fields>
  523. <out:choose>
  524. <out:when test="/root/env/param[@name = 'sfield'] = 'n'">
  525. <out:value-of select="'nf'"/>
  526. </out:when>
  527. <out:when test="/root/env/param[@name = 'sfield'] = 'd'">
  528. <out:value-of select="'df'"/>
  529. </out:when>
  530. <out:when test="/root/env/param[@name = 'sfield'] = 'nd'">
  531. <out:value-of select="'ndf'"/>
  532. </out:when>
  533. </out:choose>
  534. </nav:fields>
  535. <!-- recursive scope: whether to search subfolders -->
  536. <nav:recursive>
  537. <out:choose>
  538. <out:when test="string(/root/env/param[@name='sscope']) = 'fo'">
  539. <out:value-of select="'false'"/>
  540. </out:when>
  541. <out:otherwise>
  542. <out:value-of select="'true'"/>
  543. </out:otherwise>
  544. </out:choose>
  545. </nav:recursive>
  546. <!-- match criteria -->
  547. <nav:match>
  548. <out:choose>
  549. <out:when test="string(/root/env/param[@name='smethod']) = '1'">
  550. <out:value-of select="'contains'"/>
  551. </out:when>
  552. <out:when test="string(/root/env/param[@name='smethod']) = '2'">
  553. <out:value-of select="'starts'"/>
  554. </out:when>
  555. <out:when test="string(/root/env/param[@name='smethod']) = '3'">
  556. <out:value-of select="'exact'"/>
  557. </out:when>
  558. <out:otherwise>
  559. <out:value-of select="'contains'"/>
  560. </out:otherwise>
  561. </out:choose>
  562. </nav:match>
  563. <!-- modified since -->
  564. <out:if test="$search_modified_filter != 'any'">
  565. <nav:itemModified>
  566. <out:choose>
  567. <out:when test="$search_modified_filter = 't'">0</out:when>
  568. <out:when test="$search_modified_filter = 'l3d'">259200</out:when>
  569. <out:when test="$search_modified_filter = 'lw'">604800</out:when>
  570. <out:when test="$search_modified_filter = 'lm'">2629743</out:when>
  571. <out:when test="$search_modified_filter = 'l3m'">7889231</out:when>
  572. <out:when test="$search_modified_filter = 'l6m'">15778463</out:when>
  573. <out:when test="$search_modified_filter = 'ly'">31556926</out:when>
  574. <out:when test="$search_modified_filter = 'l3y'">94670777</out:when>
  575. </out:choose>
  576. </nav:itemModified>
  577. </out:if>
  578. <!-- item type(s) to restrict search to -->
  579. <out:choose>
  580. <out:when test="string(/root/env/param[@name = 'sfield']) = 'k' or (string(/root/env/param[@name = 'sfield']) = '' and $userCanUseIndexSearch)">
  581. <!-- index search spec -->
  582. <out:choose>
  583. <out:when test="string(/root/env/param[@name='stype_is']) = 'any' or string(/root/env/param[@name='stype_is']) = ''">
  584. <!-- handle ANY spec -->
  585. <xsl:choose>
  586. <xsl:when test="@mode and @mode = 'sos'">
  587. <nav:itemTypes>
  588. <out:for-each select="key('spec-item','modes')/search/types_index/param">
  589. <out:choose>
  590. <out:when test="@name='_agents'">
  591. <nav:itemType>agentDefinition</nav:itemType>
  592. <nav:itemType>agentDefinitionView</nav:itemType>
  593. </out:when>
  594. <out:when test="@name='_pages'">
  595. <nav:itemType>pagelet</nav:itemType>
  596. </out:when>
  597. <out:when test="@name='_reports'">
  598. <nav:itemType>analysis</nav:itemType>
  599. <nav:itemType>powerPlayReport</nav:itemType>
  600. <nav:itemType>powerPlay8Report</nav:itemType>
  601. <nav:itemType>powerPlay8ReportView</nav:itemType>
  602. <nav:itemType>query</nav:itemType>
  603. <nav:itemType>report</nav:itemType>
  604. <nav:itemType>reportView</nav:itemType>
  605. </out:when>
  606. <out:when test="@name='_reports_plus'">
  607. <nav:itemType>analysis</nav:itemType>
  608. <nav:itemType>powerPlayReport</nav:itemType>
  609. <nav:itemType>powerPlay8Report</nav:itemType>
  610. <nav:itemType>powerPlay8ReportView</nav:itemType>
  611. <nav:itemType>query</nav:itemType>
  612. <nav:itemType>report</nav:itemType>
  613. <nav:itemType>reportView</nav:itemType>
  614. <nav:itemType>interactiveReport</nav:itemType>
  615. </out:when>
  616. <out:otherwise>
  617. <nav:itemType><out:value-of select="@name"/></nav:itemType>
  618. </out:otherwise>
  619. </out:choose>
  620. </out:for-each>
  621. </nav:itemTypes>
  622. </xsl:when>
  623. <xsl:otherwise>
  624. <nav:itemTypes>
  625. <xsl:for-each select="./search:defaultTypes[@indexSearch]/search:defaultType">
  626. <nav:itemType><xsl:value-of select="."/></nav:itemType>
  627. </xsl:for-each>
  628. </nav:itemTypes>
  629. </xsl:otherwise>
  630. </xsl:choose>
  631. </out:when>
  632. <out:otherwise>
  633. <nav:itemTypes>
  634. <out:choose>
  635. <out:when test="/root/env/param[@name='stype_is'] = '_agents'">
  636. <nav:itemType>agentDefinition</nav:itemType>
  637. <nav:itemType>agentDefinitionView</nav:itemType>
  638. </out:when>
  639. <out:when test="/root/env/param[@name='stype_is'] = '_pages'">
  640. <nav:itemType>pagelet</nav:itemType>
  641. </out:when>
  642. <out:when test="/root/env/param[@name='stype_is'] = '_reports'">
  643. <nav:itemType>analysis</nav:itemType>
  644. <nav:itemType>powerPlayReport</nav:itemType>
  645. <nav:itemType>powerPlay8Report</nav:itemType>
  646. <nav:itemType>powerPlay8ReportView</nav:itemType>
  647. <nav:itemType>query</nav:itemType>
  648. <nav:itemType>report</nav:itemType>
  649. <nav:itemType>reportView</nav:itemType>
  650. </out:when>
  651. <out:when test="/root/env/param[@name='stype_is'] = '_reports_plus'"> <!-- includes interactive -->
  652. <nav:itemType>analysis</nav:itemType>
  653. <nav:itemType>powerPlayReport</nav:itemType>
  654. <nav:itemType>powerPlay8Report</nav:itemType>
  655. <nav:itemType>powerPlay8ReportView</nav:itemType>
  656. <nav:itemType>query</nav:itemType>
  657. <nav:itemType>report</nav:itemType>
  658. <nav:itemType>reportView</nav:itemType>
  659. <nav:itemType>interactiveReport</nav:itemType>
  660. </out:when>
  661. <out:otherwise>
  662. <nav:itemType><out:value-of select="/root/env/param[@name='stype_is']"/></nav:itemType>
  663. </out:otherwise>
  664. </out:choose>
  665. </nav:itemTypes>
  666. </out:otherwise>
  667. </out:choose>
  668. </out:when>
  669. <out:otherwise>
  670. <!-- basic search spec -->
  671. <out:choose>
  672. <out:when test="string(/root/env/param[@name='stype']) = 'any' or string(/root/env/param[@name='stype']) = ''">
  673. <nav:itemTypes>
  674. <xsl:for-each select="./search:defaultTypes[not(@indexSearch)]/search:defaultType">
  675. <nav:itemType><xsl:value-of select="."/></nav:itemType>
  676. </xsl:for-each>
  677. </nav:itemTypes>
  678. </out:when>
  679. <out:otherwise>
  680. <nav:itemType><out:value-of select="/root/env/param[@name='stype']"/></nav:itemType>
  681. </out:otherwise>
  682. </out:choose>
  683. </out:otherwise>
  684. </out:choose>
  685. <!-- sort -->
  686. <out:variable name="m_sort" select="/root/session/param[@name='s_cc']"/>
  687. <nav:sort>
  688. <out:attribute name="order">
  689. <out:choose>
  690. <out:when test="$m_sort = 'da' or $m_sort = 'na'">ascending</out:when>
  691. <out:when test="$m_sort = 'dd' or $m_sort = 'nd'">descending</out:when>
  692. <out:otherwise>ascending</out:otherwise>
  693. </out:choose>
  694. </out:attribute>
  695. <out:if test="/root/system/param[@name='entry-order-mode'] != '2'">
  696. <out:attribute name="usage">
  697. <out:choose>
  698. <out:when test="/root/system/param[@name='entry-order-mode'] = '0'">ascending</out:when>
  699. <out:otherwise>descending</out:otherwise>
  700. </out:choose>
  701. </out:attribute>
  702. </out:if>
  703. <out:choose>
  704. <out:when test="$m_sort = 'da' or $m_sort = 'dd'">lastModifiedDate</out:when>
  705. <out:when test="$m_sort = 'nd' or $m_sort = 'na'">name</out:when>
  706. <out:otherwise>name</out:otherwise>
  707. </out:choose>
  708. </nav:sort>
  709. </navSearchSpec>
  710. </out:when>
  711. </out:choose>
  712. </xsl:template>
  713. <!--
  714. ===============================================================================================
  715. The main engine
  716. ===============================================================================================
  717. -->
  718. <xsl:template match="*">
  719. <xsl:copy>
  720. <xsl:copy-of select="@*"/>
  721. <xsl:apply-templates/>
  722. </xsl:copy>
  723. </xsl:template>
  724. </xsl:stylesheet>