<?xml version="1.0" encoding="UTF-8"?>
<!--
 "This program may be used, executed, copied, modified and distributed without royalty for the
 purpose of developing, using, marketing, or distributing."

 Product 5630-A37,  (C) COPYRIGHT International Business Machines Corp., 2001, 2002
 All Rights Reserved * Licensed Materials - Property of IBM
-->
<xsl:transform xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
               xmlns:xalan="http://xml.apache.org/xslt"
               xmlns:staff="http://www.ibm.com/schemas/workflow/wswf/plugins/staff"
               xmlns:sldap="http://www.ibm.com/schemas/workflow/wswf/plugins/staff/ldap"
               version="1.0">
    
  <xsl:output standalone="no"
              encoding="UTF-8"
              omit-xml-declaration="no"
              media-type="text/xml"
              method="xml"
              indent="yes"
              version="1.0"/>

  <xsl:strip-space elements="*"/>


  
<!-- Begin global variables -->
  <xsl:variable name="Threshold">20</xsl:variable>
  <xsl:variable name="DefaultPersonClass">inetOrgPerson</xsl:variable>
  <xsl:variable name="DefaultUserIDAttribute">uid</xsl:variable>
  <xsl:variable name="DefaultManagerAttribute">manager</xsl:variable>
  <xsl:variable name="DefaultRecursivity">yes</xsl:variable>
  <xsl:variable name="DepartmentFilter">(OrgType=Department)</xsl:variable>
  <xsl:variable name="RoleFilter">(objectclass=accessRole)</xsl:variable>

  <xsl:variable name="GS_GroupID">unkown</xsl:variable>
  <xsl:variable name="GS_Type">unkown</xsl:variable>
  <xsl:variable name="GS_IndustryType">unknown</xsl:variable>
  <xsl:variable name="GS_BusinessType">unkown</xsl:variable>
  <xsl:variable name="GS_GeographicLocation">unkown</xsl:variable>
  <xsl:variable name="GS_Affiliates">unkown</xsl:variable>
  <xsl:variable name="GS_DisplayName">unkown</xsl:variable>
  <xsl:variable name="GS_Secretary">unkown</xsl:variable>
  <xsl:variable name="GS_Assistant">unkown</xsl:variable>
  <xsl:variable name="GS_Manager">unkown</xsl:variable>
  <xsl:variable name="GS_BusinessCategory">unkown</xsl:variable>
  <xsl:variable name="GS_ParentCompany">unkown</xsl:variable>

  <xsl:variable name="PS_UserID">uid</xsl:variable>
  <xsl:variable name="PS_Profile">unkown</xsl:variable>
  <xsl:variable name="PS_LastName">sn</xsl:variable>
  <xsl:variable name="PS_FirstName">unkown</xsl:variable>
  <xsl:variable name="PS_MiddleName">unkown</xsl:variable>
  <xsl:variable name="PS_Email">unkown</xsl:variable>
  <xsl:variable name="PS_Company">unkown</xsl:variable>
  <xsl:variable name="PS_DisplayName">unkown</xsl:variable>
  <xsl:variable name="PS_Assistant">unkown</xsl:variable>
  <xsl:variable name="PS_Secretary">unkown</xsl:variable>
  <xsl:variable name="PS_Manager">manager</xsl:variable>
  <xsl:variable name="PS_Department">unkown</xsl:variable>
  <xsl:variable name="PS_EmployeeID">unkown</xsl:variable>
  <xsl:variable name="PS_TaxPayerID">unknown</xsl:variable>
  <xsl:variable name="PS_Phone">unkown</xsl:variable>
  <xsl:variable name="PS_Fax">unkown</xsl:variable>
  <xsl:variable name="PS_Gender">unkown</xsl:variable>
  <xsl:variable name="PS_Timezone">unkown</xsl:variable>
  <xsl:variable name="PS_PreferredLanguage">unkown</xsl:variable>
<!-- End global variables -->



<!-- Begin global dispatching -->
  <xsl:template match="/staff:verb">
    <xsl:variable name="verb">
      <xsl:value-of select="staff:id/text()"/>
    </xsl:variable>

    <xsl:choose>
      <xsl:when test="$verb='Users'">
        <xsl:call-template name="Users"/>
      </xsl:when>
      <xsl:when test="$verb='Users by user ID'">
        <xsl:call-template name="Users by user ID"/>
      </xsl:when>
      <xsl:when test="$verb='Group Members'">
        <xsl:call-template name="Group Members"/>
      </xsl:when>
      <xsl:when test="$verb='Role Members'">
        <xsl:call-template name="Role Members"/>
      </xsl:when>
      <xsl:when test="$verb='Department Members'">
        <xsl:call-template name="Department Members"/>
      </xsl:when>
      <xsl:when test="$verb='Manager of Employee'">
        <xsl:call-template name="Manager of Employee"/>
      </xsl:when>
      <xsl:when test="$verb='Manager of Employee by user ID'">
        <xsl:call-template name="Manager of Employee by user ID"/>
      </xsl:when>
      <xsl:when test="$verb='Person Search'">
        <xsl:call-template name="Person Search"/>
      </xsl:when>
      <xsl:when test="$verb='Group Search'">
        <xsl:call-template name="Group Search"/>
      </xsl:when>
      <xsl:when test="$verb='Native Query'">
        <xsl:call-template name="Native Query"/>
      </xsl:when>
      <xsl:when test="$verb='Everybody'">
        <xsl:call-template name="Everybody"/>
      </xsl:when>
      <xsl:when test="$verb='Nobody'">
        <xsl:call-template name="Nobody"/>
      </xsl:when>
      <xsl:otherwise>
        <xsl:message terminate="no">ERROR: Unsupported verb: '<xsl:value-of select="$verb"/>'.</xsl:message>
      </xsl:otherwise>
    </xsl:choose>
  </xsl:template>
<!-- End global dispatching -->



<!-- Begin template Users and children -->
  <xsl:template name="Users">
    <xsl:variable name="Name0">
      <xsl:value-of select="staff:parameter[@id='Name']"/>
    </xsl:variable>
    <xsl:variable name="Name1">
      <xsl:value-of select="staff:parameter[@id='AlternativeName1']"/>
    </xsl:variable>
    <xsl:variable name="Name2">
      <xsl:value-of select="staff:parameter[@id='AlternativeName2']"/>
    </xsl:variable>

    <sldap:staffQueries>
      <xsl:attribute name="threshold">
        <xsl:value-of select="$Threshold"/>
      </xsl:attribute>
      <xsl:call-template name="GetUser">
        <xsl:with-param name="username">
          <xsl:value-of select="$Name0"/>
        </xsl:with-param>
      </xsl:call-template>
      <xsl:if test="$Name1!=''">
        <xsl:call-template name="GetUser">
          <xsl:with-param name="username">
            <xsl:value-of select="$Name1"/>
          </xsl:with-param>
        </xsl:call-template>
      </xsl:if>
      <xsl:if test="$Name2!=''">
        <xsl:call-template name="GetUser">
          <xsl:with-param name="username">
            <xsl:value-of select="$Name2"/>
          </xsl:with-param>
        </xsl:call-template>
      </xsl:if>
    </sldap:staffQueries>
  </xsl:template>

  <xsl:template name="GetUser">
    <xsl:param name="username">default</xsl:param>
    <sldap:user>
      <xsl:attribute name="dn">
        <xsl:value-of select="$username"/>
      </xsl:attribute>
      <xsl:attribute name="attribute">
        <xsl:value-of select="$DefaultUserIDAttribute"/>
      </xsl:attribute>
      <xsl:attribute name="objectclass">
        <xsl:value-of select="$DefaultPersonClass"/>
      </xsl:attribute>
    </sldap:user>
  </xsl:template>
<!-- End template Users and children -->



<!-- Begin template Users by user ID and children -->
  <xsl:template name="Users by user ID">
    <xsl:variable name="Name0">
      <xsl:value-of select="staff:parameter[@id='UserID']"/>
    </xsl:variable>
    <xsl:variable name="Name1">
      <xsl:value-of select="staff:parameter[@id='AlternativeID1']"/>
    </xsl:variable>
    <xsl:variable name="Name2">
      <xsl:value-of select="staff:parameter[@id='AlternativeID2']"/>
    </xsl:variable>

    <sldap:staffQueries>
      <xsl:attribute name="threshold">
        <xsl:value-of select="$Threshold"/>
      </xsl:attribute>
      <xsl:call-template name="GetUserByID">
        <xsl:with-param name="username">
          <xsl:value-of select="$Name0"/>
        </xsl:with-param>
      </xsl:call-template>
      <xsl:if test="$Name1!=''">
        <xsl:call-template name="GetUserByID">
          <xsl:with-param name="username">
            <xsl:value-of select="$Name1"/>
          </xsl:with-param>
        </xsl:call-template>
      </xsl:if>
      <xsl:if test="$Name2!=''">
        <xsl:call-template name="GetUserByID">
          <xsl:with-param name="username">
            <xsl:value-of select="$Name2"/>
          </xsl:with-param>
        </xsl:call-template>
      </xsl:if>
    </sldap:staffQueries>
  </xsl:template>

  <xsl:template name="GetUserByID">
    <xsl:param name="username">default</xsl:param>
    <sldap:userID>
      <xsl:attribute name="name">
        <xsl:value-of select="$username"/>
      </xsl:attribute>
    </sldap:userID>
  </xsl:template>
<!-- End template Users by user ID and children -->



<!-- Begin template Group Members and children -->
  <xsl:template name="Group Members">
    <xsl:variable name="Group0">
      <xsl:value-of select="staff:parameter[@id='GroupName']"/>
    </xsl:variable>
    <xsl:variable name="Group1">
      <xsl:value-of select="staff:parameter[@id='AlternativeGroupName1']"/>
    </xsl:variable>
    <xsl:variable name="Group2">
      <xsl:value-of select="staff:parameter[@id='AlternativeGroupName2']"/>
    </xsl:variable>
      
    <sldap:staffQueries>
      <xsl:attribute name="threshold">
        <xsl:value-of select="$Threshold"/>
      </xsl:attribute>
      <xsl:call-template name="GetGroupMembers">
        <xsl:with-param name="groupname">
          <xsl:value-of select="$Group0"/>
        </xsl:with-param>
      </xsl:call-template>
      <xsl:if test="$Group1!=''">
        <xsl:call-template name="GetGroupMembers">
          <xsl:with-param name="groupname">
            <xsl:value-of select="$Group1"/>
          </xsl:with-param>
        </xsl:call-template>
      </xsl:if>
      <xsl:if test="$Group2!=''">
        <xsl:call-template name="GetGroupMembers">
          <xsl:with-param name="groupname">
            <xsl:value-of select="$Group2"/>
          </xsl:with-param>
        </xsl:call-template>
      </xsl:if>
    </sldap:staffQueries>
  </xsl:template>

  <xsl:template name="GetGroupMembers">
    <xsl:param name="groupname">default</xsl:param>
    <sldap:usersOfGroup>
      <xsl:attribute name="groupDN">
        <xsl:value-of select="$groupname"/>
      </xsl:attribute>
      <xsl:choose>
        <xsl:when test="staff:parameter[@id='IncludeSubgroups']='false'">
          <xsl:attribute name="recursive">no</xsl:attribute>
        </xsl:when>
        <xsl:when test="staff:parameter[@id='IncludeSubgroups']='true'">
          <xsl:attribute name="recursive">yes</xsl:attribute>
        </xsl:when>
        <xsl:otherwise>
          <xsl:message terminate="no">WARNING: Unexpected value: '<xsl:value-of select="staff:parameter[@id='IncludeSubgroups']"/>' for IncludeSubgroups. Continue using the default value 'true'.</xsl:message>
        </xsl:otherwise>
      </xsl:choose>

      <sldap:attribute name="member" objectclass="groupOfNames" usage="recursive"/>
      <sldap:attribute>
        <xsl:attribute name="name">
          <xsl:value-of select="$DefaultUserIDAttribute"/>
        </xsl:attribute>
        <xsl:attribute name="objectclass">
          <xsl:value-of select="$DefaultPersonClass"/>
        </xsl:attribute>
        <xsl:attribute name="usage">simple</xsl:attribute>
      </sldap:attribute>
    </sldap:usersOfGroup>
  </xsl:template>
<!-- End template Group Members and children -->



<!-- Begin template Department Members -->
  <xsl:template name="Department Members">
    <xsl:call-template name="GetDepartmentAndRoleMembers">
      <xsl:with-param name="Group0">
        <xsl:value-of select="staff:parameter[@id='DepartmentName']"/>
      </xsl:with-param>
      <xsl:with-param name="Group1">
        <xsl:value-of select="staff:parameter[@id='AlternativeDepartment1']"/>
      </xsl:with-param>
      <xsl:with-param name="Group2">
        <xsl:value-of select="staff:parameter[@id='AlternativeDepartment2']"/>
      </xsl:with-param>
      <xsl:with-param name="Recursive">
        <xsl:value-of select="staff:parameter[@id='IncludeNestedDepartments']"/>
      </xsl:with-param>
      <xsl:with-param name="Filter">
        <xsl:value-of select="$DepartmentFilter"/>
      </xsl:with-param>
    </xsl:call-template>
  </xsl:template>
<!-- End template Department Members -->



<!-- Begin template Role Members -->
  <xsl:template name="Role Members">
    <xsl:call-template name="GetDepartmentAndRoleMembers">
      <xsl:with-param name="Group0">
        <xsl:value-of select="staff:parameter[@id='RoleName']"/>
      </xsl:with-param>
      <xsl:with-param name="Group1">
        <xsl:value-of select="staff:parameter[@id='AlternativeRole1']"/>
      </xsl:with-param>
      <xsl:with-param name="Group2">
        <xsl:value-of select="staff:parameter[@id='AlternativeRole2']"/>
      </xsl:with-param>
      <xsl:with-param name="Recursive">
        <xsl:value-of select="staff:parameter[@id='IncludeNestedRoles']"/>
      </xsl:with-param>
      <xsl:with-param name="Filter">
        <xsl:value-of select="$RoleFilter"/>
      </xsl:with-param>
      <xsl:with-param name="Domain">
        <xsl:value-of select="staff:parameter[@id='Domain']"/>
      </xsl:with-param>
    </xsl:call-template>
  </xsl:template>
<!-- End template Role Members -->



<!-- Begin template GetDepartmentAndRoleMembers -->
  <xsl:template name="GetDepartmentAndRoleMembers">
    <xsl:param name="Group0">default</xsl:param>
    <xsl:param name="Group1">default</xsl:param>
    <xsl:param name="Group2">default</xsl:param>
    <xsl:param name="Recursive">true</xsl:param>
    <xsl:param name="Filter">default</xsl:param>
    <xsl:param name="Domain">default</xsl:param>

    <sldap:staffQueries>
      <xsl:attribute name="threshold">
        <xsl:value-of select="$Threshold"/>
      </xsl:attribute>

      <sldap:search>
 <!--       <xsl:attribute name="filter">
                    (&amp;
       <xsl:value-of select="$Filter"/>
                    (|(cn=
          <xsl:value-of select="$Group0"/>)
          <xsl:if test="$Group1!=''">
                        (cn=<xsl:value-of select="$Group1"/>)
          </xsl:if>
          <xsl:if test="$Group2!=''">
                        (cn=<xsl:value-of select="$Group2"/>)
          </xsl:if>
                    ))
        </xsl:attribute>

-->
   	<xsl:attribute name="filter">(&amp;<xsl:value-of select="$Filter"/>(cn=<xsl:value-of select="$Group0"/>))</xsl:attribute>
        <xsl:choose>
          <xsl:when test="$Recursive='false'">
            <xsl:attribute name="recursive">no</xsl:attribute>
          </xsl:when>
          <xsl:when test="$Recursive='true'">
            <xsl:attribute name="recursive">yes</xsl:attribute>
          </xsl:when>
          <xsl:otherwise>
            <xsl:message terminate="no">WARNING: Unexpected value: '<xsl:value-of select="$Recursive"/>' for 'include nested departments/roles'. Continue using the default value 'true'.</xsl:message>
          </xsl:otherwise>
        </xsl:choose>
 	<xsl:if test="$Domain!=''">
              <xsl:attribute name="baseDN">
                <xsl:value-of select="$Domain"/>
              </xsl:attribute>
        </xsl:if>
	<xsl:attribute name="searchScope">subtreeScope</xsl:attribute>
        <sldap:attribute name="member" objectclass="accessRole" usage="recursive"/>
        <sldap:attribute>
          <xsl:attribute name="name">
            <xsl:value-of select="$DefaultUserIDAttribute"/>
          </xsl:attribute>
          <xsl:attribute name="objectclass">
            <xsl:value-of select="$DefaultPersonClass"/>
          </xsl:attribute>
          <xsl:attribute name="usage">simple</xsl:attribute>
        </sldap:attribute>
      </sldap:search>
    </sldap:staffQueries>
  </xsl:template>
<!-- End template GetDepartmentAndRoleMembers -->



<!-- Begin template Manager of Employee -->
  <xsl:template name="Manager of Employee">
    <sldap:staffQueries>
      <xsl:attribute name="threshold">
        <xsl:value-of select="$Threshold"/>
      </xsl:attribute>

      <sldap:intermediateResult>
        <xsl:attribute name="name">manager</xsl:attribute>
        <sldap:user>
          <xsl:attribute name="dn">
            <xsl:value-of select="staff:parameter[@id='EmployeeName']"/>
          </xsl:attribute>
          <xsl:attribute name="attribute">
            <xsl:value-of select="$DefaultManagerAttribute"/>
          </xsl:attribute>
          <xsl:attribute name="objectclass">
            <xsl:value-of select="$DefaultPersonClass"/>
          </xsl:attribute>
        </sldap:user>
      </sldap:intermediateResult>

      <sldap:user>
        <xsl:attribute name="dn">%manager%</xsl:attribute>
        <xsl:attribute name="attribute">
          <xsl:value-of select="$DefaultUserIDAttribute"/>
        </xsl:attribute>
        <xsl:attribute name="objectclass">
          <xsl:value-of select="$DefaultPersonClass"/>
        </xsl:attribute>
      </sldap:user>
    </sldap:staffQueries>
  </xsl:template>
<!-- End template Manager of Employee -->



<!-- Begin template Manager of Employee by user ID-->
  <xsl:template name="Manager of Employee by user ID">
    <sldap:staffQueries>
      <xsl:attribute name="threshold">
        <xsl:value-of select="$Threshold"/>
      </xsl:attribute>

      <sldap:intermediateResult>
        <xsl:attribute name="name">manager</xsl:attribute>
        <sldap:search>
          <xsl:attribute name="filter">
            <xsl:value-of select="$DefaultUserIDAttribute"/>=<xsl:value-of select="staff:parameter[@id='EmployeeUserID']"/>
          </xsl:attribute>
          <xsl:attribute name="searchScope">subtreeScope</xsl:attribute>
          <xsl:attribute name="recursive">no</xsl:attribute>
          <sldap:attribute>
            <xsl:attribute name="name">
              <xsl:value-of select="$DefaultManagerAttribute"/>
            </xsl:attribute>
            <xsl:attribute name="objectclass">
              <xsl:value-of select="$DefaultPersonClass"/>
            </xsl:attribute>
            <xsl:attribute name="usage">simple</xsl:attribute>
          </sldap:attribute>
        </sldap:search>
      </sldap:intermediateResult>

      <sldap:user>
        <xsl:attribute name="dn">%manager%</xsl:attribute>
        <xsl:attribute name="attribute">
          <xsl:value-of select="$DefaultUserIDAttribute"/>
        </xsl:attribute>
        <xsl:attribute name="objectclass">
          <xsl:value-of select="$DefaultPersonClass"/>
        </xsl:attribute>
      </sldap:user>
    </sldap:staffQueries>
  </xsl:template>
<!-- End template Manager of Employee by user ID-->



<!-- Begin template Person Search -->
  <xsl:template name="Person Search">

    <sldap:staffQueries>
      <xsl:attribute name="threshold">
        <xsl:value-of select="$Threshold"/>
      </xsl:attribute>

      <sldap:search>
        <xsl:attribute name="filter">
                    (&amp;
          <xsl:if test="staff:parameter[@id='UserID']!=''">(<xsl:value-of select="$PS_UserID"/>=<xsl:value-of select="staff:parameter[@id='UserID']"/>)</xsl:if>

          <xsl:if test="staff:parameter[@id='Profile']!=''">(<xsl:value-of select="$PS_Profile"/>=<xsl:value-of select="staff:parameter[@id='Profile']"/>)</xsl:if>

          <xsl:if test="staff:parameter[@id='LastName']!=''">(<xsl:value-of select="$PS_LastName"/>=<xsl:value-of select="staff:parameter[@id='LastName']"/>)</xsl:if>
          
          <xsl:if test="staff:parameter[@id='FirstName']!=''">(<xsl:value-of select="$PS_FirstName"/>=<xsl:value-of select="staff:parameter[@id='FirstName']"/>)</xsl:if>
          
          <xsl:if test="staff:parameter[@id='MiddleName']!=''">(<xsl:value-of select="$PS_MiddleName"/>=<xsl:value-of select="staff:parameter[@id='MiddleName']"/>)</xsl:if>

          <xsl:if test="staff:parameter[@id='Email']!=''">(<xsl:value-of select="$PS_Email"/>=<xsl:value-of select="staff:parameter[@id='Email']"/>)</xsl:if>
          
          <xsl:if test="staff:parameter[@id='Company']!=''">(<xsl:value-of select="$PS_Company"/>=<xsl:value-of select="staff:parameter[@id='Company']"/>)</xsl:if>

          <xsl:if test="staff:parameter[@id='DisplayName']!=''">(<xsl:value-of select="$PS_DisplayName"/>=<xsl:value-of select="staff:parameter[@id='DisplayName']"/>)</xsl:if>
          
          <xsl:if test="staff:parameter[@id='Assistant']!=''">(<xsl:value-of select="$PS_Assistant"/>=<xsl:value-of select="staff:parameter[@id='Assistant']"/>)</xsl:if>

          <xsl:if test="staff:parameter[@id='Secretary']!=''">(<xsl:value-of select="$PS_Secretary"/>=<xsl:value-of select="staff:parameter[@id='Secretary']"/>)</xsl:if>

          <xsl:if test="staff:parameter[@id='Manager']!=''">(<xsl:value-of select="$PS_Manager"/>=<xsl:value-of select="staff:parameter[@id='Manager']"/>)</xsl:if>

          <xsl:if test="staff:parameter[@id='Department']!=''">(<xsl:value-of select="$PS_Department"/>=<xsl:value-of select="staff:parameter[@id='Department']"/>)</xsl:if>

          <xsl:if test="staff:parameter[@id='EmployeeID']!=''">(<xsl:value-of select="$PS_EmployeeID"/>=<xsl:value-of select="staff:parameter[@id='EmployeeID']"/>)</xsl:if>

          <xsl:if test="staff:parameter[@id='TaxPayerID']!=''">(<xsl:value-of select="$PS_TaxPayerID"/>=<xsl:value-of select="staff:parameter[@id='TaxPayerID']"/>)</xsl:if>
          
          <xsl:if test="staff:parameter[@id='Phone']!=''">(<xsl:value-of select="$PS_Phone"/>=<xsl:value-of select="staff:parameter[@id='Phone']"/>)</xsl:if>

          <xsl:if test="staff:parameter[@id='Fax']!=''">(<xsl:value-of select="$PS_Fax"/>=<xsl:value-of select="staff:parameter[@id='Fax']"/>)</xsl:if>

          <xsl:if test="staff:parameter[@id='Gender']!=''">(<xsl:value-of select="$PS_Gender"/>=<xsl:value-of select="staff:parameter[@id='Gender']"/>)</xsl:if>

          <xsl:if test="staff:parameter[@id='Timezone']!=''">(<xsl:value-of select="$PS_Timezone"/>=<xsl:value-of select="staff:parameter[@id='Timezone']"/>)</xsl:if>

          <xsl:if test="staff:parameter[@id='PreferredLanguage']!=''">(<xsl:value-of select="$PS_PreferredLanguage"/>=<xsl:value-of select="staff:parameter[@id='PreferredLanguage']"/>)</xsl:if>
                    )
        </xsl:attribute>
        <xsl:attribute name="searchScope">objectScope</xsl:attribute>
        <xsl:attribute name="recursive">
          <xsl:value-of select="$DefaultRecursivity"/>
        </xsl:attribute>
        <sldap:attribute>
          <xsl:attribute name="name">
            <xsl:value-of select="$DefaultUserIDAttribute"/>
          </xsl:attribute>
          <xsl:attribute name="objectclass">
            <xsl:value-of select="$DefaultPersonClass"/>
          </xsl:attribute>
          <xsl:attribute name="usage">simple</xsl:attribute>
        </sldap:attribute>
      </sldap:search>
    </sldap:staffQueries>
  </xsl:template>
<!-- End template Person Search -->



<!-- Begin template Group Search -->
  <xsl:template name="Group Search">

    <sldap:staffQueries>
      <xsl:attribute name="threshold">
        <xsl:value-of select="$Threshold"/>
      </xsl:attribute>

      <sldap:search>
        <xsl:attribute name="filter">
                    (&amp;
          <xsl:if test="staff:parameter[@id='GroupID']!=''">(<xsl:value-of select="$GS_GroupID"/>=<xsl:value-of select="staff:parameter[@id='GroupID']"/>)</xsl:if>
          
          <xsl:if test="staff:parameter[@id='Type']!=''">(<xsl:value-of select="$GS_Type"/>=<xsl:value-of select="staff:parameter[@id='Type']"/>)</xsl:if>
          
          <xsl:if test="staff:parameter[@id='IndustryType']!=''">(<xsl:value-of select="$GS_IndustryType"/>=<xsl:value-of select="staff:parameter[@id='IndustryType']"/>)</xsl:if>
          
          <xsl:if test="staff:parameter[@id='BusinessType']!=''">(<xsl:value-of select="$GS_BusinessType"/>=<xsl:value-of select="staff:parameter[@id='BusinessType']"/>)</xsl:if>
          
          <xsl:if test="staff:parameter[@id='GeographicLocation']!=''">(<xsl:value-of select="$GS_GeographicLocation"/>=<xsl:value-of select="staff:parameter[@id='GeographicLocation']"/>)</xsl:if>
          
          <xsl:if test="staff:parameter[@id='Affiliates']!=''">(<xsl:value-of select="$GS_Affiliates"/>=<xsl:value-of select="staff:parameter[@id='Affiliates']"/>)</xsl:if>
          
          <xsl:if test="staff:parameter[@id='DisplayName']!=''">(<xsl:value-of select="$GS_DisplayName"/>=<xsl:value-of select="staff:parameter[@id='DisplayName']"/>)</xsl:if>
          
          <xsl:if test="staff:parameter[@id='Secretary']!=''">(<xsl:value-of select="$GS_Secretary"/>=<xsl:value-of select="staff:parameter[@id='Secretary']"/>)</xsl:if>
          
          <xsl:if test="staff:parameter[@id='Assistant']!=''">(<xsl:value-of select="$GS_Assistant"/>=<xsl:value-of select="staff:parameter[@id='Assistant']"/>)</xsl:if>
          
          <xsl:if test="staff:parameter[@id='Manager']!=''">(<xsl:value-of select="$GS_Manager"/>=<xsl:value-of select="staff:parameter[@id='Manager']"/>)</xsl:if>
          
          <xsl:if test="staff:parameter[@id='BusinessCategory']!=''">(<xsl:value-of select="$GS_BusinessCategory"/>=<xsl:value-of select="staff:parameter[@id='BusinessCategory']"/>)</xsl:if>
          
          <xsl:if test="staff:parameter[@id='ParentCompany']!=''">(<xsl:value-of select="$GS_ParentCompany"/>=<xsl:value-of select="staff:parameter[@id='ParentCompany']"/>)</xsl:if>
                    )
        </xsl:attribute>
        <xsl:attribute name="searchScope">objectScope</xsl:attribute>
        <xsl:attribute name="recursive">
          <xsl:value-of select="$DefaultRecursivity"/>
        </xsl:attribute>
        <sldap:attribute name="member" objectclass="groupOfNames" usage="recursive"/>
        <sldap:attribute>
          <xsl:attribute name="name">
            <xsl:value-of select="$DefaultUserIDAttribute"/>
          </xsl:attribute>
          <xsl:attribute name="objectclass">
            <xsl:value-of select="$DefaultPersonClass"/>
          </xsl:attribute>
          <xsl:attribute name="usage">simple</xsl:attribute>
        </sldap:attribute>
      </sldap:search>
    </sldap:staffQueries>
  </xsl:template>
<!-- End template Group Search -->



<!-- Begin template Native Query -->
  <xsl:template name="Native Query">
    <sldap:staffQueries>
      <xsl:attribute name="threshold">
        <xsl:value-of select="$Threshold"/>
      </xsl:attribute>

      <!-- Allow multiple Native Query templates-->
      <xsl:choose>
        <!-- Template 'search' -->
        <xsl:when test="staff:parameter[@id='QueryTemplate']='search'">
          <sldap:search>
            <xsl:attribute name="filter">
              <xsl:value-of select="staff:parameter[@id='Query']"/>
            </xsl:attribute>
            <xsl:attribute name="recursive">
              <xsl:value-of select="staff:parameter[@id='AdditionalParameter1']"/>
            </xsl:attribute>
            <xsl:if test="staff:parameter[@id='AdditionalParameter2']!=''">
              <xsl:attribute name="baseDN">
                <xsl:value-of select="staff:parameter[@id='AdditionalParameter2']"/>
              </xsl:attribute>
            </xsl:if>
            <sldap:attribute name="member" objectclass="groupOfNames" usage="recursive"/>
            <sldap:attribute>
              <xsl:attribute name="name">
                <xsl:value-of select="$DefaultUserIDAttribute"/>
              </xsl:attribute>
              <xsl:attribute name="objectclass">
                <xsl:value-of select="$DefaultPersonClass"/>
              </xsl:attribute>
              <xsl:attribute name="usage">simple</xsl:attribute>
            </sldap:attribute>
          </sldap:search>
        </xsl:when>
        
        <!-- Template 'user' -->
        <xsl:when test="staff:parameter[@id='QueryTemplate']='user'">
          <sldap:user>
            <xsl:attribute name="dn">
              <xsl:value-of select="staff:parameter[@id='Query']"/>
            </xsl:attribute>
            <xsl:attribute name="attribute">
              <xsl:value-of select="$DefaultUserIDAttribute"/>
            </xsl:attribute>
            <xsl:attribute name="objectclass">
              <xsl:value-of select="$DefaultPersonClass"/>
            </xsl:attribute>
          </sldap:user>
        </xsl:when>
        
        <!-- Template 'usersOfGroup' -->
        <xsl:when test="staff:parameter[@id='QueryTemplate']='usersOfGroup'">
          <sldap:usersOfGroup>
            <xsl:attribute name="groupDN">
              <xsl:value-of select="staff:parameter[@id='Query']"/>
            </xsl:attribute>
            <xsl:attribute name="recursive">
              <xsl:value-of select="staff:parameter[@id='AdditionalParameter1']"/>
            </xsl:attribute>
            <sldap:attribute>
              <xsl:attribute name="name">
                <xsl:value-of select="$DefaultUserIDAttribute"/>
              </xsl:attribute>
              <xsl:attribute name="objectclass">
                <xsl:value-of select="$DefaultPersonClass"/>
              </xsl:attribute>
              <xsl:attribute name="usage">simple</xsl:attribute>
            </sldap:attribute>
            <sldap:attribute name="member" objectclass="groupOfNames" usage="recursive"/>
          </sldap:usersOfGroup>
        </xsl:when>
        <xsl:otherwise>
          <xsl:message terminate="no">ERROR: Native query template '<xsl:value-of select="staff:parameter[@id='QueryTemplate']"/>' is not supported by the LDAP XSL transformation. Supported values are: 'search', 'user' and 'usersOfGroup'.</xsl:message>
        </xsl:otherwise>
      </xsl:choose>
    </sldap:staffQueries>
  </xsl:template>
<!-- End template Native Query -->



<!-- Begin template Everybody -->
  <xsl:template name="Everybody">
    <sldap:staffQueries>
      <sldap:everybody/>
    </sldap:staffQueries>
  </xsl:template>
<!-- End template Everybody -->



<!-- Begin template Nobody -->
  <xsl:template name="Nobody">
    <sldap:staffQueries>
      <sldap:nobody/>
    </sldap:staffQueries>
  </xsl:template>
<!-- End template Nobody -->
</xsl:transform>