123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760 |
- <?xml version="1.0" encoding="UTF-8"?>
- <!--
- Licensed Materials - Property of IBM
- IBM Cognos Products: ps
- (C) Copyright IBM Corp. 2005, 2014
- US Government Users Restricted Rights - Use, duplication or disclosure restricted by GSA ADP Schedule Contract with IBM Corp.
- -->
- <!--
- Copyright (C) 2008 Cognos ULC, an IBM Company. All rights reserved.
- Cognos (R) is a trademark of Cognos ULC, (formerly Cognos Incorporated).
- -->
- <xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
- xmlns:xts="http://developer.cognos.com/schemas/xts/"
- xmlns:search="http://developer.cognos.com/schemas/xts/logicsheets/xslt/searchlogic/"
- xmlns:nav="http://developer.cognos.com/schemas/cps/navigation/1/"
- xmlns:xtsext="xalan://com.cognos.xts.ext.XTSExt" xmlns:out="dummy-uri" exclude-result-prefixes="search">
- <xsl:output method="xml" encoding="UTF-8" indent="no"/>
- <xsl:namespace-alias stylesheet-prefix="out" result-prefix="xsl"/>
- <!--
- This stylesheet (searchlogic.xslt) consists of the following templates:
- search:gen-search-exp - creates search expression.
- -->
-
- <!--
- Template - search:gen-search-exp:
- This template generates the expression when a search is launched
- Operation:
- Generates /root/search/expression search results or /root/search/emptySearchExpression when there are no search results.
- -->
- <xsl:template match="search:gen-search-exp" priority="1">
- <xts:append>
- <search>
- <out:variable name="search_string" select="string(/root/env/param[@name = 'stext'])"/>
- <out:variable name="search_modified_filter" select="/root/env/param[@name = 'smodified']"/>
- <out:variable name="search_type_filter" select="/root/env/param[@name = 'stype']"/>
- <out:variable name="sfield" select="string(/root/env/param[@name = 'sfield'])"/>
- <out:variable name="isEmptySearchExpression" select="
- (/root/env/param[@name = 'stext'] and $search_string = '') and
- (not(/root/env/param[@name = 'smodified']) or $search_modified_filter = 'any') and
- (not(/root/env/param[@name = 'stype']) or $search_type_filter = 'any')"/>
-
- <!-- COGCQ00870631
- This variable ensures that the content store root can never be searched.
- If it is attempted somehow, the user's search is instead based on their default content location
- -->
- <out:variable name="path_safe">
- <out:choose>
- <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'])">
- <out:text/>storeID("<xsl:value-of select="root/env/param[@name='so.defaultLocationId']"/>")<xsl:text/>
- </out:when>
- <out:otherwise>
- <out:value-of select="$path"/>
- </out:otherwise>
- </out:choose>
- </out:variable>
- <xsl:choose>
- <xsl:when test="@navInterface">
- <xsl:call-template name="generate-NAV-search-spec"/>
- </xsl:when>
- <xsl:otherwise>
- <xsl:call-template name="generate-CM-search-expression"/>
- </xsl:otherwise>
- </xsl:choose>
- </search>
- </xts:append>
- </xsl:template>
- <xsl:template name="generate-CM-search-expression">
- <!-- if there is something to search on then build a search expression and append it to the imput doc. -->
- <out:choose>
- <out:when test="$search_string != '' or $search_modified_filter != 'any' or $search_type_filter != 'any'">
- <out:variable name="sq">'</out:variable>
- <!-- must escape the ' to '' to make the search expression CM safe. -->
- <out:variable name="text" select=" xtsext:replace(string($search_string), string($sq), concat($sq,$sq)) "/>
- <expression>
- <!-- Scope ==== -->
- <out:variable name="scope" select="string(/root/env/param[@name = 'sscope'])"/>
- <out:variable name="isAdminUser" select="boolean(/root/session/param[@name='capabilities']/canUseAdministrationPortal)"/>
- <out:variable name="defaultContentRoot">
- <out:choose>
- <out:when test="/root/session/param[@name='e_root'] and /root/session/param[@name='e_root'] != ''">
- <out:value-of select="/root/session/param[@name='e_root']"/>
- </out:when>
- <out:when test="/root/env/param[@name='m_subfldr']">
- <out:text/>~/subscriptionFolder<out:text/>
- </out:when>
- <out:otherwise>
- <out:value-of select="'/content'"/>
- </out:otherwise>
- </out:choose>
- </out:variable>
- <out:choose>
- <!-- current folder and subfolders -->
- <out:when test="$scope = 'fb'">
- <out:choose>
- <out:when test="string(/root/env/param[@name='so.namespace']) != '' or starts-with($path_safe, "CAMID('") or starts-with($path_safe, 'CAMID("')">
- <out:value-of select="$path_safe"/>/descendant::*<out:text/>
- </out:when>
- <out:otherwise>
- <out:value-of select="$path_safe"/>
- <xsl:if test="@mode and @mode='sos'">
- <out:if test="/root/selectionSpec/item[@name='navigationId' and @atRoot='true']">
- <out:choose>
- <out:when test="/root/selectionSpec/item[@name='modes']/search/types/param[@name='_pages' and @pagesSearchRoot='content']">
- <out:text/>/*[@objectClass != 'portal']<out:text/>
- </out:when>
- <out:when test="/root/selectionSpec/item[@name='modes']/search/types/param[@name='_pages' and @pagesSearchRoot='portal']">
- <out:text/>/*[@objectClass = 'portal']<out:text/>
- </out:when>
- </out:choose>
- </out:if>
- </xsl:if>
- <out:text/>/descendant-or-self::*[@objectClass != 'agentDefinition' and @objectClass != 'agentDefinitionView']/*<out:text/>
- </out:otherwise>
- </out:choose>
- </out:when>
- <!-- current folder only -->
- <out:when test="$scope = 'fo'"><out:value-of select="$path_safe"/>/*</out:when>
- <!-- personal folders -->
- <out:when test="$scope = 'm'">
- <out:text/>~/folder/descendant-or-self::*[@objectClass != 'agentDefinition' and @objectClass != 'agentDefinitionView']/*<out:text/>
- </out:when>
- <!-- public folders -->
- <out:when test="$scope = 'p'">
- <out:value-of select="$defaultContentRoot"/>/descendant-or-self::*[@objectClass != 'agentDefinition' and @objectClass != 'agentDefinitionView']/*<out:text/>
- </out:when>
- <!-- subscription folder only -->
- <out:when test="$scope = 's'">
- <out:value-of select="$defaultContentRoot"/>/*<out:text/>
- </out:when>
- <!-- entire namespace -->
- <xsl:if test="@mode and @mode = 'sos'">
- <out:when test="$scope = 'ns'">
- <out:value-of select="$ns-path"/>/descendant::*<out:text/>
- </out:when>
- <out:when test="$scope = 'adm'">
- <out:value-of select="$admin-path"/>/descendant::*<out:text/>
- </out:when>
- </xsl:if>
- <!-- tool root ( i.e. /configuration for server admin tool, /content for schedule tool, /directory for directory tool -->
- <out:when test="$scope = 'any'">
- <xsl:choose>
- <xsl:when test="@defaultRoot and @defaultRoot != '' and @defaultRoot != 'directory'">
- <xsl:value-of select="concat('/', @defaultRoot, '/descendant::*')"/>
- </xsl:when>
- <!-- For dirctory tool, search all means search under current namespace. -->
- <xsl:when test="@defaultRoot and @defaultRoot = 'directory' ">
- <out:value-of select="concat('/', $ns-path, '/descendant-or-self::*')"/>
- </xsl:when>
- <xsl:otherwise>/descendant::*</xsl:otherwise>
- </xsl:choose>
- </out:when>
- <!-- no scope is defined, default to tool root -->
- <out:otherwise>
- <xsl:choose>
- <xsl:when test="@defaultRoot and @defaultRoot != ''">
- <xsl:value-of select="concat('/', @defaultRoot, '/descendant::*')"/>
- </xsl:when>
- <xsl:otherwise>/descendant::*</xsl:otherwise>
- </xsl:choose>
- </out:otherwise>
- </out:choose>
- <!-- Field / Search Type ==== -->
- <out:if test="$text != ''">
- <out:variable name="method" select="string(/root/env/param[@name = 'smethod'])"/>
- <out:choose>
- <out:when test="/root/env/param[@name = 'sfield'] = 'n' or string(/root/env/param[@name = 'sfield']) = ''">
- <out:choose>
- <out:when test="$method = '3'">[@defaultName = '<out:value-of select="$text"/>']</out:when>
- <out:when test="$method = '2'">[starts-with(@defaultName, '<out:value-of select="$text"/>' )]</out:when>
- <out:otherwise>[contains(@defaultName, '<out:value-of select="$text"/>' )]</out:otherwise>
- </out:choose>
- </out:when>
- <out:when test="/root/env/param[@name = 'sfield'] = 'd'">
- <out:choose>
- <out:when test="$method = '3'">[@defaultDescription = '<out:value-of select="$text"/>']</out:when>
- <out:when test="$method = '2'">[starts-with(@defaultDescription, '<out:value-of select="$text"/>' )]</out:when>
- <out:otherwise>[contains(@defaultDescription, '<out:value-of select="$text"/>' )]</out:otherwise>
- </out:choose>
- </out:when>
- <out:otherwise>
- <out:choose>
- <out:when test="$method = '3'">[@defaultDescription = '<out:value-of select="$text"/>' or @defaultName = '<out:value-of select="$text"/>']</out:when>
- <out:when test="$method = '2'">[starts-with(@defaultDescription, '<out:value-of select="$text"/>' ) or starts-with(@defaultName, '<out:value-of select="$text"/>' )]</out:when>
- <out:otherwise>[contains(@defaultDescription, '<out:value-of select="$text"/>' ) or contains(@defaultName, '<out:value-of select="$text"/>' )]</out:otherwise>
- </out:choose>
- </out:otherwise>
- </out:choose>
- </out:if>
- <!-- Object Filter ==== -->
- <out:choose>
- <out:when test="$search_type_filter != 'any'">
- <out:choose>
- <out:when test="$search_type_filter = 'service' ">
- <out:text>[</out:text>
- <out:for-each select="/root/system/param[@name='ui_objects']/object[@service='T'][position()!=last()]">
- <out:value-of select="concat('@objectClass="', @class, '" or ')"/>
- </out:for-each>
- <out:text>@objectClass="</out:text>
- <out:value-of select="/root/system/param[@name='ui_objects']/object[@service='T'][position()=last()]/@class"/>
- <out:text>"]</out:text>
- </out:when>
- <out:when test="$search_type_filter = 'contentReference' "> <!-- MVC -->
- <out:text/>[@objectClass='launchable' and @launchableType='application/vnd.ibm.cognos.instance']<out:text/>
- </out:when>
- <out:when test="$search_type_filter = 'cd' "> <!-- cd is Cognos Insight -->
- <out:text/>[@objectClass='launchable' and @launchableType='application/vnd.ibm.cognos.cd']<out:text/>
- </out:when>
- <out:when test="$search_type_filter = 'advisorView' "> <!-- EV Studio -->
- <out:text/>[@objectClass='launchable' and @launchableType='application/vnd.ibm.cognos.ev']<out:text/>
- </out:when>
- <out:when test="$search_type_filter = 'advisorCanvas' "> <!-- EV Studio -->
- <out:text/>[@objectClass='launchable' and @launchableType='application/vnd.ibm.cognos.ev.canvas']<out:text/>
- </out:when>
- <out:when test="$search_type_filter = 'metricsPackage' ">
- <out:text/>[@objectClass = 'package'][@userInterfaces='metricStudio' or not(@userInterfaces)]<out:text/>
- </out:when>
- <out:when test="$search_type_filter = 'planningPackage' ">
- <out:text/>[@objectClass = 'package'][@userInterfaces='planningContributor' or not(@userInterfaces)]<out:text/>
- </out:when>
- <out:when test="$search_type_filter = 'analyticsPackage' ">
- <out:text/>[@objectClass = 'package'][@userInterfaces='adaptiveAnalytics' or not(@userInterfaces)]<out:text/>
- </out:when>
- <out:when test="$search_type_filter = 'package' ">
- <out:text/>[@objectClass = 'package'][@userInterfaces!='metricStudio' and @userInterfaces!='planningContributor' and @userInterfaces!='adaptiveAnalytics']<out:text/>
- </out:when>
- <out:when test="$search_type_filter='_agents'">
- <out:text/>[@objectClass = 'agentDefinition' or @objectClass = 'agentDefinitionView']<out:text/>
- </out:when>
- <out:when test="$search_type_filter='_pages'">
- <out:text/>[@objectClass = 'pagelet']<out:text/>
- </out:when>
- <out:when test="$search_type_filter='_reports'">
- <out:text/>[@objectClass='analysis' or @objectClass='query' or @objectClass='report' or @objectClass='reportView' or @objectClass='powerPlayReport' or @objectClass='powerPlay8Report' or @objectClass='powerPlay8ReportView']<out:text/>
- </out:when>
- <out:when test="$search_type_filter='_reports_plus'">
- <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/>
- </out:when>
- <out:when test="$search_type_filter='_distributionListsAndContacts'">
- <out:text/>[@objectClass = 'distributionList' or @objectClass = 'contact']<out:text/>
- </out:when>
- <out:when test="$search_type_filter='_groupsAndRoles'">
- <out:text/>[@objectClass = 'group' or @objectClass = 'role']<out:text/>
- </out:when>
- <out:when test="$search_type_filter='_users'">
- <out:text/>[@objectClass = 'account']<out:text/>
- </out:when>
- <out:when test="$search_type_filter='_usersGroupsAndRoles'">
- <out:text/>[@objectClass = 'account' or @objectClass = 'group' or @objectClass = 'role']<out:text/>
- </out:when>
- <out:when test="$search_type_filter = 'subscriptionFolder' ">
- <out:text/>[@objectClass = 'subscriptionFolder']<out:text/>
- </out:when>
- <out:when test="$search_type_filter = 'advisorView' "> <!-- advisor -->
- <out:text/>[@objectClass='launchable' and @launchableType='application/vnd.ibm.cognos.ev']<out:text/>
- </out:when>
- <out:when test="$search_type_filter = 'advisorCanvas' "> <!-- advisor -->
- <out:text/>[@objectClass='launchable' and @launchableType='application/vnd.ibm.cognos.ev.canvas']<out:text/>
- </out:when>
- <out:when test="$search_type_filter = 'reportDataServiceAgentDefinition' ">
- <out:text/>[@objectClass = 'reportDataServiceAgentDefinition']<out:text/>
- </out:when>
- <out:when test="$search_type_filter = '_folderAndSubscriptionFolder' ">
- <out:text/>[@objectClass = 'subscriptionFolder' or @objectClass = 'folder']<out:text/>
- </out:when>
- <out:when test="$search_type_filter = 'dataSource'">
- <out:text/>[@objectClass='dataSource' or @objectClass='rolapDataSource' or @objectClass='rolapVirtualDataSource']<out:text/>
- </out:when>
- <out:when test="$search_type_filter = 'selfServicePackageDatasource'">
- <out:text/>[@objectClass='dataSource' and @capabilities='http://developer.cognos.com/ceba/constants/dataSourceCapabilityEnum#personalPackages']<out:text/>
- </out:when>
- <out:when test="$search_type_filter = 'repositoryDatasource'">
- <out:text/>[@objectClass='dataSource' and @capabilities='http://developer.cognos.com/ceba/constants/dataSourceCapabilityEnum#repository']<out:text/>
- </out:when>
- <out:otherwise>
- <out:text/>[@objectClass = '<out:value-of select="$search_type_filter"/>']<out:text/>
- </out:otherwise>
- </out:choose>
- </out:when>
- <out:otherwise>
- <!-- handle 'any' type -->
- <xsl:choose>
- <xsl:when test="@mode and @mode = 'sos'">
- <out:variable name="hasUsersGroupsAndRoles" select="key('spec-item','modes')/search/types/*[local-name()='param' and @name='_usersGroupsAndRoles']"/>
- <out:variable name="newSearchTypes">
- <out:for-each select="key('spec-item','modes')/search/types/param">
- <!-- consolidate name types that may give rise to duplicate generation of object classes in the search expression (COGCQ00203225) -->
- <out:if test="not((@name='_groupsAndRoles' or @name='_users') and $hasUsersGroupsAndRoles)">
- <param>
- <out:attribute name="name"><out:value-of select="@name"/></out:attribute>
- </param>
- </out:if>
- </out:for-each>
- </out:variable>
- <out:text/>[<out:text/>
- <out:for-each select="$newSearchTypes/param">
- <out:variable name="stname" select="@name"/>
- <out:choose>
- <out:when test="$stname='_agents'">
- <out:text/>@objectClass = 'agentDefinition' or @objectClass = 'agentDefinitionView'<out:text/>
- </out:when>
- <out:when test="$stname='_pages'">
- <out:text/>@objectClass = 'pagelet'<out:text/>
- </out:when>
- <out:when test="$stname='_reports'">
- <out:text/>@objectClass='analysis' or @objectClass='powerPlayReport' or @objectClass='powerPlay8Report' or @objectClass='powerPlay8ReportView' or @objectClass='query' or @objectClass='report' or @objectClass='reportView'<out:text/>
- </out:when>
- <out:when test="$stname='_reports_plus'">
- <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/>
- </out:when>
- <out:when test="$stname='_distributionListsAndContacts'">
- <out:text/>@objectClass = 'distributionList' or @objectClass = 'contact'<out:text/>
- </out:when>
- <out:when test="$stname='_groupsAndRoles'">
- <out:text/>@objectClass = 'group' or @objectClass = 'role'<out:text/>
- </out:when>
- <out:when test="$stname='_users'">
- <out:text/>@objectClass = 'account'<out:text/>
- </out:when>
- <out:when test="$stname='_usersGroupsAndRoles'">
- <out:text/>@objectClass = 'account' or @objectClass = 'group' or @objectClass = 'role'<out:text/>
- </out:when>
- <out:otherwise>
- <out:text/>@objectClass='<out:value-of select="@name"/>'<out:text/>
- </out:otherwise>
- </out:choose>
- <out:if test="position() != last()">
- <out:text/> or <out:text/>
- </out:if>
- </out:for-each>
- <out:text/>]<out:text/>
- </xsl:when>
- <xsl:otherwise>
- <xsl:choose>
- <xsl:when test="./search:defaultTypes[not(@indexSearch)]/search:defaultType and ./search:defaultTypes[not(@indexSearch)]/search:defaultType != '' ">
- <out:text/>[<out:text/>
- <xsl:for-each select="./search:defaultTypes[not(@indexSearch)]/search:defaultType">
- <xsl:choose>
- <xsl:when test="string() = 'service' ">
- <out:for-each select="/root/system/param[@name='ui_objects']/object[@service='T'][position()!=last()]">
- <out:text>@objectClass='</out:text>
- <out:value-of select="@class"/>
- <out:text>' or </out:text>
- </out:for-each>
- <out:text>@objectClass='</out:text>
- <out:value-of select="/root/system/param[@name='ui_objects']/object[@service='T'][position()=last()]/@class"/>
- <out:text>'</out:text>
- </xsl:when>
- <xsl:when test="string() = 'contentReference'">
- <out:text/>(@objectClass='launchable' and @launchableType='application/vnd.ibm.cognos.instance')<out:text/>
- </xsl:when>
- <xsl:when test="string() = 'cd' "> <!-- cd is Cognos Insight -->
- <out:text/>(@objectClass='launchable' and @launchableType='application/vnd.ibm.cognos.cd')<out:text/>
- </xsl:when>
- <xsl:when test="string() = 'advisorView' "> <!-- EV Studio -->
- <out:text/>(@objectClass='launchable' and @launchableType='application/vnd.ibm.cognos.ev')<out:text/>
- </xsl:when>
- <xsl:when test="string() = 'advisorCanvas' "> <!-- EV Studio -->
- <out:text/>(@objectClass='launchable' and @launchableType='application/vnd.ibm.cognos.ev.canvas')<out:text/>
- </xsl:when>
- <xsl:when test="string() = 'dataSource'">
- <out:text/>@objectClass='dataSource' or @objectClass='rolapDataSource' or @objectClass='rolapVirtualDataSource'<out:text/>
- </xsl:when>
- <xsl:otherwise>
- <out:text/>@objectClass='<xsl:value-of select="."/>'<out:text/>
- </xsl:otherwise>
- </xsl:choose>
- <xsl:if test="position() != last()">
- <out:text/> or <out:text/>
- </xsl:if>
- </xsl:for-each>
- <out:text/>]<out:text/>
- </xsl:when>
- <xsl:otherwise>
- <out:text/>[@usage != 'subObject']<out:text/>
- </xsl:otherwise>
- </xsl:choose>
- </xsl:otherwise>
- </xsl:choose>
- </out:otherwise>
- </out:choose>
- <!-- Modified date ==== -->
- <out:if test="$search_modified_filter != 'any'">
- <out:variable name="offsetamt">
- <out:choose>
- <out:when test="$search_modified_filter = 't'">0</out:when>
- <out:when test="$search_modified_filter = 'l3d'">-259200</out:when>
- <out:when test="$search_modified_filter = 'lw'">-604800</out:when>
- <out:when test="$search_modified_filter = 'lm'">-2629743</out:when>
- <out:when test="$search_modified_filter = 'l3m'">-7889231</out:when>
- <out:when test="$search_modified_filter = 'l6m'">-15778463</out:when>
- <out:when test="$search_modified_filter = 'ly'">-31556926</out:when>
- <out:when test="$search_modified_filter = 'l3y'">-94670777</out:when>
- </out:choose>
- </out:variable>
- <out:variable name="offsetunit">second</out:variable>
- <out:text/>[@modificationTime > '<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/>
- </out:if>
- <!-- Default security filters ==== -->
- <xsl:choose>
- <xsl:when test="@mode and @mode = 'sos'">
- <out:value-of select="$selectionPermissions"/><xsl:if test="not(string(@nohiddenpredicate)='true')"><out:value-of select="$hidden-objects-predicate"/></xsl:if>
- </xsl:when>
- <xsl:otherwise>
- <xsl:choose>
- <!-- if we're not dealing with /directory then always add the security filter -->
- <xsl:when test="not(@defaultRoot) or @defaultRoot != 'directory'">
- <out:value-of select="$visibility-predicate"/>
- </xsl:when>
- <xsl:otherwise>
- <!-- only add the security filter if we're in the Cognos namespace -->
- <out:if test="starts-with($ns-path, "CAMID(':") or starts-with($ns-path, 'CAMID(":')">
- <out:choose>
- <!-- modelViews do not support hidden object filter so we use a modified form of the visibility predicate -->
- <out:when test="$search_type_filter = 'modelView'">
- <out:value-of select="/root/system/param[@name='visible']"/>
- </out:when>
- <out:otherwise>
- <out:value-of select="$visibility-predicate"/>
- </out:otherwise>
- </out:choose>
- </out:if>
- </xsl:otherwise>
- </xsl:choose>
- </xsl:otherwise>
- </xsl:choose>
- </expression>
- </out:when>
- <!-- when we only search on one object then there won't be an stype -->
- <out:when test="$isEmptySearchExpression">
- <emptySearchExpression/>
- </out:when>
- </out:choose>
- </xsl:template>
- <xsl:template name="generate-NAV-search-spec">
- <out:variable name="sourceContext" select="/root/env/param[@name='sourceContext']"/>
- <out:variable name="context">
- <out:choose>
- <out:when test="/root/env/param[@name='m_searchcontext']">
- <out:value-of select="/root/env/param[@name='m_searchcontext']"/>
- </out:when>
- <out:when test="/root/env/param[@name='m_context']">
- <out:value-of select="/root/env/param[@name='m_context']"/>
- </out:when>
- </out:choose>
- </out:variable>
- <out:choose>
- <out:when test="$sfield = 'k' and not($userCanUseIndexSearch)">
- <indexSearchNotAllowed/>
- </out:when>
- <out:when test="$sfield = 'k' and $search_string = '' and string($sourceContext) = ''">
- <emptySearchExpression/>
- </out:when>
- <out:when test="not($sfield = 'k') and $isEmptySearchExpression">
- <emptySearchExpression/>
- </out:when>
- <out:when test="string($sourceContext) != '' or ($search_string != '' or $search_modified_filter != 'any' or $search_type_filter != 'any')">
- <navSearchSpec>
- <out:choose>
- <!-- current search spec/pagination context -->
- <out:when test="string($context) != ''">
- <nav:context><out:value-of select="$context"/></nav:context>
- </out:when>
- <!-- search string: search string and source context are mutually exclusive -->
- <out:when test="string(/root/env/param[@name='stext']) != ''">
- <nav:string><out:value-of select="/root/env/param[@name='stext']"/></nav:string>
- </out:when>
- <!-- source context: drill thru context passed in from RV/studios, etc... -->
- <out:when test="string($sourceContext) != ''">
- <nav:sourceContext><out:value-of select="/root/env/param[@name='sourceContext']"/></nav:sourceContext>
- </out:when>
- </out:choose>
- <!-- search type: basic or index search -->
- <nav:searchType>
- <out:choose>
- <out:when test="string(/root/env/param[@name = 'sfield']) = 'k' or (string(/root/env/param[@name = 'sfield']) = '' and $userCanUseIndexSearch)">
- <out:value-of select="'content'"/> <!-- index search -->
- </out:when>
- <out:otherwise>
- <out:value-of select="''"/>
- </out:otherwise>
- </out:choose>
- </nav:searchType>
- <!-- Google search object open id (e.g.: used in open.xts) -->
- <out:if test="string(/root/env/param[@name='open']) = 'true'">
- <nav:param name="open"><out:value-of select="'true'"/></nav:param>
- <out:if test="string(/root/env/param[@name='id']) != ''">
- <nav:param name="openId"><out:value-of select = "/root/env/param[@name='id']"/></nav:param>
- </out:if>
- </out:if>
- <!-- All filters settings -->
- <out:if test="string(/root/env/param[@name='all_filters']) != ''">
- <nav:param name="useAllFilters"><out:value-of select="string(/root/env/param[@name='all_filters'])"/></nav:param>
- </out:if>
- <!-- Google search urlParameters -->
- <nav:param name="urlParameters">
- <out:for-each select="/root/env/param[starts-with(@name,'cs_')]">
- <out:value-of select="'&'"/>
- <out:value-of select="@name"/>
- <out:value-of select="'='"/>
- <out:value-of select="xtsext:urlencode(string(.))"/>
- </out:for-each>
- </nav:param>
- <!-- scope -->
- <nav:scope>
- <out:choose>
- <out:when test="string(/root/env/param[@name='sscope']) = 'p'">
- <out:value-of select="'systemDefault'"/>
- </out:when>
- <out:when test="string(/root/env/param[@name='sscope']) = 'm'">
- <out:value-of select="'userDefault'"/>
- </out:when>
- <out:when test="string(/root/env/param[@name='sscope']) = 'fo'">
- <out:value-of select="$path_safe"/>
- </out:when>
- <out:when test="string(/root/env/param[@name='sscope']) = 'fb'">
- <out:value-of select="$path_safe"/>
- </out:when>
- <out:otherwise>
- <out:value-of select="''"/>
- </out:otherwise>
- </out:choose>
- </nav:scope>
- <!-- field -->
- <nav:fields>
- <out:choose>
- <out:when test="/root/env/param[@name = 'sfield'] = 'n'">
- <out:value-of select="'nf'"/>
- </out:when>
- <out:when test="/root/env/param[@name = 'sfield'] = 'd'">
- <out:value-of select="'df'"/>
- </out:when>
- <out:when test="/root/env/param[@name = 'sfield'] = 'nd'">
- <out:value-of select="'ndf'"/>
- </out:when>
- </out:choose>
- </nav:fields>
- <!-- recursive scope: whether to search subfolders -->
- <nav:recursive>
- <out:choose>
- <out:when test="string(/root/env/param[@name='sscope']) = 'fo'">
- <out:value-of select="'false'"/>
- </out:when>
- <out:otherwise>
- <out:value-of select="'true'"/>
- </out:otherwise>
- </out:choose>
- </nav:recursive>
- <!-- match criteria -->
- <nav:match>
- <out:choose>
- <out:when test="string(/root/env/param[@name='smethod']) = '1'">
- <out:value-of select="'contains'"/>
- </out:when>
- <out:when test="string(/root/env/param[@name='smethod']) = '2'">
- <out:value-of select="'starts'"/>
- </out:when>
- <out:when test="string(/root/env/param[@name='smethod']) = '3'">
- <out:value-of select="'exact'"/>
- </out:when>
- <out:otherwise>
- <out:value-of select="'contains'"/>
- </out:otherwise>
- </out:choose>
- </nav:match>
- <!-- modified since -->
- <out:if test="$search_modified_filter != 'any'">
- <nav:itemModified>
- <out:choose>
- <out:when test="$search_modified_filter = 't'">0</out:when>
- <out:when test="$search_modified_filter = 'l3d'">259200</out:when>
- <out:when test="$search_modified_filter = 'lw'">604800</out:when>
- <out:when test="$search_modified_filter = 'lm'">2629743</out:when>
- <out:when test="$search_modified_filter = 'l3m'">7889231</out:when>
- <out:when test="$search_modified_filter = 'l6m'">15778463</out:when>
- <out:when test="$search_modified_filter = 'ly'">31556926</out:when>
- <out:when test="$search_modified_filter = 'l3y'">94670777</out:when>
- </out:choose>
- </nav:itemModified>
- </out:if>
- <!-- item type(s) to restrict search to -->
- <out:choose>
- <out:when test="string(/root/env/param[@name = 'sfield']) = 'k' or (string(/root/env/param[@name = 'sfield']) = '' and $userCanUseIndexSearch)">
- <!-- index search spec -->
- <out:choose>
- <out:when test="string(/root/env/param[@name='stype_is']) = 'any' or string(/root/env/param[@name='stype_is']) = ''">
- <!-- handle ANY spec -->
- <xsl:choose>
- <xsl:when test="@mode and @mode = 'sos'">
- <nav:itemTypes>
- <out:for-each select="key('spec-item','modes')/search/types_index/param">
- <out:choose>
- <out:when test="@name='_agents'">
- <nav:itemType>agentDefinition</nav:itemType>
- <nav:itemType>agentDefinitionView</nav:itemType>
- </out:when>
- <out:when test="@name='_pages'">
- <nav:itemType>pagelet</nav:itemType>
- </out:when>
- <out:when test="@name='_reports'">
- <nav:itemType>analysis</nav:itemType>
- <nav:itemType>powerPlayReport</nav:itemType>
- <nav:itemType>powerPlay8Report</nav:itemType>
- <nav:itemType>powerPlay8ReportView</nav:itemType>
- <nav:itemType>query</nav:itemType>
- <nav:itemType>report</nav:itemType>
- <nav:itemType>reportView</nav:itemType>
- </out:when>
- <out:when test="@name='_reports_plus'">
- <nav:itemType>analysis</nav:itemType>
- <nav:itemType>powerPlayReport</nav:itemType>
- <nav:itemType>powerPlay8Report</nav:itemType>
- <nav:itemType>powerPlay8ReportView</nav:itemType>
- <nav:itemType>query</nav:itemType>
- <nav:itemType>report</nav:itemType>
- <nav:itemType>reportView</nav:itemType>
- <nav:itemType>interactiveReport</nav:itemType>
- </out:when>
- <out:otherwise>
- <nav:itemType><out:value-of select="@name"/></nav:itemType>
- </out:otherwise>
- </out:choose>
- </out:for-each>
- </nav:itemTypes>
- </xsl:when>
- <xsl:otherwise>
- <nav:itemTypes>
- <xsl:for-each select="./search:defaultTypes[@indexSearch]/search:defaultType">
- <nav:itemType><xsl:value-of select="."/></nav:itemType>
- </xsl:for-each>
- </nav:itemTypes>
- </xsl:otherwise>
- </xsl:choose>
- </out:when>
- <out:otherwise>
- <nav:itemTypes>
- <out:choose>
- <out:when test="/root/env/param[@name='stype_is'] = '_agents'">
- <nav:itemType>agentDefinition</nav:itemType>
- <nav:itemType>agentDefinitionView</nav:itemType>
- </out:when>
- <out:when test="/root/env/param[@name='stype_is'] = '_pages'">
- <nav:itemType>pagelet</nav:itemType>
- </out:when>
- <out:when test="/root/env/param[@name='stype_is'] = '_reports'">
- <nav:itemType>analysis</nav:itemType>
- <nav:itemType>powerPlayReport</nav:itemType>
- <nav:itemType>powerPlay8Report</nav:itemType>
- <nav:itemType>powerPlay8ReportView</nav:itemType>
- <nav:itemType>query</nav:itemType>
- <nav:itemType>report</nav:itemType>
- <nav:itemType>reportView</nav:itemType>
- </out:when>
- <out:when test="/root/env/param[@name='stype_is'] = '_reports_plus'"> <!-- includes interactive -->
- <nav:itemType>analysis</nav:itemType>
- <nav:itemType>powerPlayReport</nav:itemType>
- <nav:itemType>powerPlay8Report</nav:itemType>
- <nav:itemType>powerPlay8ReportView</nav:itemType>
- <nav:itemType>query</nav:itemType>
- <nav:itemType>report</nav:itemType>
- <nav:itemType>reportView</nav:itemType>
- <nav:itemType>interactiveReport</nav:itemType>
- </out:when>
- <out:otherwise>
- <nav:itemType><out:value-of select="/root/env/param[@name='stype_is']"/></nav:itemType>
- </out:otherwise>
- </out:choose>
- </nav:itemTypes>
- </out:otherwise>
- </out:choose>
- </out:when>
- <out:otherwise>
- <!-- basic search spec -->
- <out:choose>
- <out:when test="string(/root/env/param[@name='stype']) = 'any' or string(/root/env/param[@name='stype']) = ''">
- <nav:itemTypes>
- <xsl:for-each select="./search:defaultTypes[not(@indexSearch)]/search:defaultType">
- <nav:itemType><xsl:value-of select="."/></nav:itemType>
- </xsl:for-each>
- </nav:itemTypes>
- </out:when>
- <out:otherwise>
- <nav:itemType><out:value-of select="/root/env/param[@name='stype']"/></nav:itemType>
- </out:otherwise>
- </out:choose>
- </out:otherwise>
- </out:choose>
- <!-- sort -->
- <out:variable name="m_sort" select="/root/session/param[@name='s_cc']"/>
- <nav:sort>
- <out:attribute name="order">
- <out:choose>
- <out:when test="$m_sort = 'da' or $m_sort = 'na'">ascending</out:when>
- <out:when test="$m_sort = 'dd' or $m_sort = 'nd'">descending</out:when>
- <out:otherwise>ascending</out:otherwise>
- </out:choose>
- </out:attribute>
- <out:if test="/root/system/param[@name='entry-order-mode'] != '2'">
- <out:attribute name="usage">
- <out:choose>
- <out:when test="/root/system/param[@name='entry-order-mode'] = '0'">ascending</out:when>
- <out:otherwise>descending</out:otherwise>
- </out:choose>
- </out:attribute>
- </out:if>
- <out:choose>
- <out:when test="$m_sort = 'da' or $m_sort = 'dd'">lastModifiedDate</out:when>
- <out:when test="$m_sort = 'nd' or $m_sort = 'na'">name</out:when>
- <out:otherwise>name</out:otherwise>
- </out:choose>
- </nav:sort>
- </navSearchSpec>
- </out:when>
- </out:choose>
- </xsl:template>
- <!--
- ===============================================================================================
- The main engine
- ===============================================================================================
- -->
- <xsl:template match="*">
- <xsl:copy>
- <xsl:copy-of select="@*"/>
- <xsl:apply-templates/>
- </xsl:copy>
- </xsl:template>
- </xsl:stylesheet>
|