XIP LDAP Import Beispiel

Aus SiteparkWiki
Zur Navigation springen Zur Suche springen

XML Konfiguration

<?xml version="1.0" encoding="UTF-8"?>
<import id="ldapimport" name="Import LDAP User">
    <logging>
        <appender name="FILE" class="org.apache.log4j.RollingFileAppender">
            <layout class="org.apache.log4j.PatternLayout">
                <param name="ConversionPattern" value="%d %-5p %m%n"/>
            </layout>
            <param name="File" value="${sitepark.home}/ldap-import.log"/>
            <param name="MaxFileSize" value="10MB"/>
            <param name="MaxBackupIndex" value="10"/>
        </appender>
        <logger name="com.sitepark.ies" additivity="false">
            <appender-ref ref="FILE"/>
            <priority value="INFO"/>
        </logger>
    </logging>
   <ies-connection login="Wartung" password="secret" client="ies2work" module="LDAP Importer"/>
   <options>
      <createElements>true</createElements>
      <deleteWorkDir>true</deleteWorkDir>
      <createPools>true</createPools>
      <updatePools>true</updatePools>
      <updateElements>true</updateElements>
      <deletePools>true</deletePools>
      <deleteOnlyEmptyPools>true</deleteOnlyEmptyPools>
      <deleteElements>true</deleteElements>
      <xslt>${sitepark.home}/conf/ldap-import.xslt</xslt>
      <syncFile>${sitepark.home}/conf/ldap-import.sync</syncFile>
   </options>
    <source type="ldap" id="1">
        <query>
          <ldap-query>
            <search-filter>(uid=quintama)</search-filter>
            <search-base>dc=sitepark,dc=com</search-base>
            <search-scope>subtree</search-scope>
            <!-- <limit>1000</limit> -->
          </ldap-query>
        </query>
    </source>
</import>

XSLT Artikelimport

<?xml version="1.0" encoding="UTF-8"?>

<xsl:stylesheet version="1.0"
    xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
    xmlns:xip="http://ies.sitepark.com/xip"
    extension-element-prefixes="xip">

    <xsl:output method="xml" encoding="UTF-8" indent="yes"/>

    <!--
        xip:getFirstLetter(String s)

        Liefert das erste Zeichen der übergebenen Zeichenkette.
        Ist dieses Zeichen ein Großbuchstabe wird er in einen
        Kleinbuchstaben umgewandelt

        Bei den Umlauten ä, ö und ü wird a, o oder ü zurückgeliefert
    -->
    <xsl:function name="xip:getFirstLetter"> <xsl:param name="s"/>

        <!-- Erstes Zeichen ermitteln -->
        <xsl:variable name="fistLetter" select="substring($s,1,1)"/>
        <!-- in Kleinbuchstaben umwandeln -->
        <xsl:variable name="toLowerCase" select="lower-case($fistLetter)"/>
        <!-- Umlaute umwandeln und Zeichen zurückgeben -->
        <xsl:variable name="substituteFrom" select="'äöü'"/>
        <xsl:variable name="substituteTo"   select="'aou'"/>
        <xsl:value-of select="translate($toLowerCase, $substituteFrom, $substituteTo)"/>
    </xsl:function>

    <!--
        Erzeugt eine Map mit den Anfangsbuchstaben als Keys und jeweils einer Liste von Elementen mit
        den entsprechenden Anfangsbuchstaben im Element <bsLastname>
        a=[<row>,<row>,...]
        b=[<row>,<row>,...]
        c=...
        ...
        z=...
    -->
    <xsl:key name="keyLetter" match="row" use="xip:getFirstLetter(bsLastName)"/>

    <xsl:template match="/">
        <xip>
        <!-- Gruppiert die Elemente nach ihrem Anfangsbuchstaben (siehe xip:getFirstLetter()) -->
        <!-- Diese Methode mit XSLT zu gruppieren nennt sich 'Muenchian Method' (siehe: http://www.jenitennison.com/xslt/grouping/muenchian.html) -->

        <!-- Schleife über a,b,c,d -->
        <xsl:for-each select="//row[generate-id() = generate-id(key('keyLetter', xip:getFirstLetter(bsLastName))[1]) ]">

            <xsl:variable name="letter" select="xip:getFirstLetter(bsLastName)"/>

            <!-- Schleife über alle mit dem gleichen Anfangsbuchstaben -->
            <xsl:for-each select="key('keyLetter',$letter)">

                <!-- Eine row der LDAP-Daten in XIP-Artikel umwandeln   altes Template:  template.main.mitarbeiter  -->
                <article parent="vv.informationpool.mitarbeiter.{$letter}" anchor="ldap.import.{bsPersonnalNumber}" name="{cn}" filename="{cn}" template="gui.vv.tpl.output.client.person">

                    <!-- Statische Werte -->
                    <link name="sp_vv_config_template" anchor="gui.vv.tpl.output.client.person" />
                    <text name="sp_vv_objectType">person</text>

                    <!--importierte Werte -->
                    <xsl:if test='contains(lower-case(bsTitle), "prof")'>
                        <text name="sp_vv_title">sp_title_1137574665206</text><!--sp_ldap_title-->
                    </xsl:if>
                    <xsl:if test='contains(lower-case(bsTitle), "dr")'>
                        <text name="sp_vv_title">sp_title_1137574647737</text><!--sp_ldap_title-->
                    </xsl:if>
                    <xsl:if test="contains(lower-case(bsSalutation), 'herr')">
                        <text name="sp_vv_salutation">sp_salut_1137574647733</text><!--sp_ldap_salutation-->
                    </xsl:if>
                    <xsl:if test="contains(lower-case(bsSalutation),'frau')">
                        <text name="sp_vv_salutation">sp_salut_1137574654460</text><!--sp_ldap_salutation-->
                    </xsl:if>

                    <text name="sp_vv_personnel"><xsl:if test="contains(bsPersonnalNumber,'kein Eintrag')!=true()"><xsl:value-of select="bsPersonnalNumber"/></xsl:if></text><!--sp_ldap_personnalNumber-->
                    <text name="sp_vv_firstname"><xsl:if test="contains(bsFirstName,'kein Eintrag')!=true()"><xsl:value-of select="bsFirstName"/></xsl:if></text><!--sp_ldap_firstName-->
                    <text name="sp_vv_lastname"><xsl:if test="contains(bsLastName,'kein Eintrag')!=true()"><xsl:value-of select="bsLastName"/></xsl:if></text><!--sp_ldap_lastName-->
                    <text name="sp_vv_mail"><xsl:if test="contains(bsMail,'kein Eintrag')!=true()"><xsl:value-of select="bsMail"/></xsl:if></text><!--sp_ldap_mail-->
                    <text name="sp_vv_publish_mail">true</text><!--sp_ldap_mail-->
                    <text name="sp_vv_street"><xsl:if test="contains(bsStreet,'kein Eintrag')!=true()"><xsl:value-of select="bsStreet"/></xsl:if></text><!--sp_ldap_street-->
                    <text name="sp_vv_postal_code"><xsl:if test="contains(bsZip,'kein Eintrag')!=true()"><xsl:value-of select="bsZip"/></xsl:if></text><!--sp_ldap_zip-->
                    <text name="sp_vv_city"><xsl:if test="contains(bsTown,'kein Eintrag')!=true()"><xsl:value-of select="bsTown"/></xsl:if></text><!--sp_ldap_town-->
                    <text name="sp_vv_roomNumber"><xsl:if test="contains(bsRoomFloor,'kein Eintrag')!=true()"><xsl:value-of select="bsRoomFloor"/></xsl:if></text><!--sp_ldap_roomFloor-->
                    <text name="sp_vv_phone"><xsl:if test="contains(bsPhoneComp,'kein Eintrag')!=true()"><xsl:value-of select="bsPhoneComp"/></xsl:if></text><!--sp_ldap_phoneComp-->
                    <text name="sp_vv_fax"><xsl:if test="contains(bsFaxComp,'kein Eintrag')!=true()"><xsl:value-of select="bsFaxComp"/></xsl:if></text><!--sp_ldap_faxComp-->
                    <text name="sp_vv_mobile"><xsl:if test="contains(bsMobile,'kein Eintrag')!=true()"><xsl:value-of select="bsMobile"/></xsl:if></text><!--sp_ldap_mobile-->
                    <text name="sp_vv_publish_mobile">true</text><!--sp_ldap_mobile-->
                    <text name="sp_vv_function"><xsl:if test="contains(bsFunction,'kein Eintrag')!=true()"><xsl:value-of select="bsFunction"/></xsl:if></text><!--sp_ldap_function-->

                </article>
            </xsl:for-each>
        </xsl:for-each>
        </xip>
    </xsl:template>
</xsl:stylesheet>

XSLT Nutzerimport

<?xml version="1.0" encoding="UTF-8"?>

<xsl:stylesheet version="1.0"
	xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
	xmlns:utils="http://ies.sitepark.com/xip/utils"
	xmlns:saxon="http://saxon.sf.net/"
	extension-element-prefixes="utils saxon">

	<xsl:output method="xml" encoding="UTF-8" indent="yes"/>

	<xsl:template match="/">
		<xip>
			<userpool parent="system.root.pool.user" anchor="system.import.pool" name="Import">
				<xsl:variable name="firstname" select="substring-before(sn, ' ')" />
      				<xsl:for-each select="rowset/row">
					<user parent="system.import.pool"
                                              anchor="system.import.{uid}"
					      login="{uid}"
                                              email="{mail}"
                                              type="3003"
                                              firstname="{firstname}"
                                              lastname="{lastname}" 
					      ldap-server="2"
                                              ldap-dn="{dn}"
					
					/>
      				</xsl:for-each>
			</userpool>
		</xip>
	</xsl:template>
</xsl:stylesheet>