From 8207c546b4c5a15fbcaf2adc12ae3856c796e3f8 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Andreas=20=C3=96sterreicher?= Date: Mon, 30 Apr 2012 09:12:03 +0000 Subject: [PATCH] =?UTF-8?q?Vorlage=20f=C3=BCr=20Zutrittskarten=20/=20Studi?= =?UTF-8?q?erendenausweis?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- content/zutrittskarte.php | 243 +++++++++++++++++++++++++++ system/vorlage_zip/Zutrittskarte.odt | Bin 0 -> 14427 bytes system/xsl/Zutrittskarte.xsl | 224 ++++++++++++++++++++++++ 3 files changed, 467 insertions(+) create mode 100755 content/zutrittskarte.php create mode 100755 system/vorlage_zip/Zutrittskarte.odt create mode 100755 system/xsl/Zutrittskarte.xsl diff --git a/content/zutrittskarte.php b/content/zutrittskarte.php new file mode 100755 index 000000000..d12d4e55b --- /dev/null +++ b/content/zutrittskarte.php @@ -0,0 +1,243 @@ + and + */ +/* Erstellt ein Dokument zum Drucken der Zutrittskarten + * + * Parameter: + * data ... Liste der UIDs mit Strichpunkt getrennt + * type ... normal | datum - wenn datum übergeben wird, wird nur das Gueltigkeitsdatum erstellt, + * sonst alle Kartendaten + * + */ +require_once('../config/vilesci.config.inc.php'); +require_once('../include/functions.inc.php'); +require_once('../include/benutzerberechtigung.class.php'); +require_once('../include/akte.class.php'); +require_once('../include/benutzer.class.php'); +require_once('../include/vorlage.class.php'); +require_once('../include/datum.class.php'); +require_once('../include/mitarbeiter.class.php'); +require_once('../include/konto.class.php'); +require_once('../include/studiensemester.class.php'); +require_once('../include/student.class.php'); + +$user = get_uid(); +$datum_obj = new datum(); +$rechte = new benutzerberechtigung(); +$rechte->getBerechtigungen($user); +if(!$rechte->isBerechtigt('mitarbeiter/stammdaten') && !$rechte->isBerechtigt('student/stammdaten')) +{ + die('Sie haben keine Berechtigung fuer diese Seite'); +} + +$uid = isset($_REQUEST['data'])?$_REQUEST['data']:''; +$type = isset($_REQUEST['type'])?$_REQUEST['type']:'normal'; +if($uid=='') + die('Parameter data is missing'); +$uid_arr = explode(';',$uid); + +// Tempordner fuer das erstellen des ODT anlegen +$tempfolder = '/tmp/'.uniqid(); +mkdir($tempfolder); +chdir($tempfolder); + +// Unterordner fuer die Bilder erstellen +mkdir('Pictures'); + +// Vorlage der Zutrittskarte laden +$vorlage = new vorlage(); +$vorlage->getAktuelleVorlage('0', 'Zutrittskarte'); +$xsl_content = $vorlage->text; + +// Vorlage ODT in den Temp Ordner kopieren +$zipfile = DOC_ROOT.'system/vorlage_zip/'.$vorlage->vorlage_kurzbz.'.odt'; +$tempname_zip = 'out.zip'; +if(copy($zipfile, $tempname_zip)) +{ + // XML mit den Personendaten erstellen + $xml =" + "; + foreach($uid_arr as $uid) + { + $bn = new benutzer(); + if($bn->load($uid)) + { + $gueltigbis = ''; + $db = new basis_db(); + + // Bild der Person holen + $bild = $qry = "SELECT inhalt as foto FROM public.tbl_akte WHERE dokument_kurzbz='Lichtbil' AND person_id=".$db->db_add_param($bn->person_id, FHC_INTEGER); + + $cTmpHEX='/9j/4AAQSkZJRgABAQEASABIAAD/4QAWRXhpZgAATU0AKgAAAAgAAAAAAAD//gAXQ3JlYXRlZCB3aXRoIFRoZSBHSU1Q/9sAQwAFAwQEBAMFBAQEBQUFBgcMCAcHBwcPCwsJDBEPEhIRDxERExYcFxMUGhURERghGBodHR8fHxMXIiQiHiQcHh8e/9sAQwEFBQUHBgcOCAgOHhQRFB4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4e/8AAEQgAAQABAwEiAAIRAQMRAf/EABUAAQEAAAAAAAAAAAAAAAAAAAAI/8QAFBABAAAAAAAAAAAAAAAAAAAAAP/EABQBAQAAAAAAAAAAAAAAAAAAAAD/xAAUEQEAAAAAAAAAAAAAAAAAAAAA/9oADAMBAAIRAxEAPwCywAf/2Q=='; + if($result = $db->db_query($qry)) + { + if($row = $db->db_fetch_object($result)) + $cTmpHEX=$row->foto; + } + + // Bild in den Temp Ordner zwischenspeichern + file_put_contents($tempfolder.'/Pictures/'.$bn->uid.'.jpg',base64_decode($cTmpHEX)); + + // Bild zum Manifest-File des ODTs hinzufuegen + addImageToManifest($tempname_zip, 'Pictures/'.$bn->uid.'.jpg', $contenttype='image/jpeg'); + + if(check_lektor($uid)) + { + $ma = new mitarbeiter(); + $ma->load($uid); + $xml.=" + + ".$bn->uid." + ".$bn->vorname." + ".$bn->nachname." + ".$bn->titelpre." + ".$bn->titelpost." + ".$ma->personalnummer." + ".date('d/m/Y')." + "; + } + else + { + $student = new student(); + $student->load($bn->uid); + $konto = new konto(); + + $stsem_obj = new studiensemester(); + $stsem = $stsem_obj->getaktorNext(); + $stsem_obj->load($stsem); + + if($konto->checkStudienbeitrag($bn->uid, $stsem_obj->studiensemester_kurzbz)) + { + $gueltigbis=$stsem_obj->ende; + } + else + { + // Studiengebuehr noch nicht bezahlt + $gueltigbis=$stsem_obj->ende; + } + + if($type='datum') + { + //Nur der Datumsstempel wird erstellt + $xml.=" + + ".$datum_obj->formatDatum($gueltigbis,'d/m/Y')." + "; + } + else + { + //Student + $xml.=" + + ".$bn->uid." + ".$bn->vorname." + ".$bn->nachname." + ".$bn->titelpre." + ".$bn->titelpost." + ".$datum_obj->formatDatum($bn->gebdatum,'d/m/Y')." + ".$student->matrikelnr." + ".$datum_obj->formatDatum($gueltigbis,'d/m/Y')." + "; + } + } + } + } + $xml.=""; + + // XSL-Vorlage von content.xml laden + $xsl_doc = new DOMDocument; + if(!$xsl_doc->loadXML($xsl_content)) + die('Fehler beim Laden der XSL Vorlage von content.xml.'); + + // XML Dokument in ein DOM Objekt laden + $xml_doc = new DOMDocument; + if(!$xml_doc->loadXML($xml)) + die('Fehler beim Laden des XML'); + + // XSL File in den Processor laden + $proc = new XSLTProcessor; + $proc->importStyleSheet($xsl_doc); + + // XSL-Transformation starten + $buffer = $proc->transformToXml($xml_doc); + + // Konvertierte content.xml ins Filesystem schreiben + file_put_contents('content.xml', $buffer); + + //Debugging XML + //file_put_contents('Pictures/out.xml', $xml); + + // Bilder zum ZIP-File hinzufuegen + exec("zip $tempname_zip Pictures/*"); + + // content.xml ins ZIP-File hinzufuegen + exec("zip $tempname_zip content.xml"); + + //Ausgeben des Dokuments + clearstatcache(); + $fsize = filesize($tempname_zip); + $handle = fopen($tempname_zip,'r'); + header('Content-type: '.$vorlage->mimetype); + header('Content-Disposition: attachment; filename="'.$vorlage->vorlage_kurzbz.'.odt"'); + header('Content-Length: '.$fsize); + while (!feof($handle)) + { + echo fread($handle, 8192); + } + fclose($handle); + + //Loeschen der Temporaeren Dateien + //unlink('content.xml'); + //Unlinking Pictures ? + //unlink($tempname_zip); + //rmdir($tempfolder); + exec('rm -r '.$tempfolder); +} + +/** + * Fuegt ein Bild zur Manifest-Datei eines ODT Files hinzu + * + * @param $zip Zip Pfad + * @param $image Bild Pfad + * @param $contenttype Content-Type des Bildes + */ +function addImageToManifest($zip, $image, $contenttype='image/png') +{ + // Manifest Datei holen + exec('unzip '.$zip.' META-INF/manifest.xml'); + // Bild zur Manifest Datei hinzufuegen + $manifest = file_get_contents('META-INF/manifest.xml'); + $xml_doc = new DOMDocument; + if(!$xml_doc->loadXML($manifest)) + die('Manifest File ungueltig'); + //root-node holen + $root = $xml_doc->getElementsByTagName('manifest')->item(0); + + //Neues Element unterhalb des Root Nodes anlegen + $node = $xml_doc->createElement("manifest:file-entry"); + $node->setAttribute("manifest:media-type",$contenttype); + $node->setAttribute("manifest:full-path",$image); + $root->appendChild($node); + $out = $xml_doc->saveXML(); + + //geaenderte Manifest Datei speichern und wieder ins Zip packen + file_put_contents('META-INF/manifest.xml', $out); + exec('zip '.$zip.' META-INF/*'); +} +?> diff --git a/system/vorlage_zip/Zutrittskarte.odt b/system/vorlage_zip/Zutrittskarte.odt new file mode 100755 index 0000000000000000000000000000000000000000..6f2fff292a9cd20e3f0be1d1833f3a1e98103433 GIT binary patch literal 14427 zcmd6ObyQqSv+v-p!2$$#8{FL?xCghvVPJ44Sb!jb;O;KLEkFXnf(8o&3lJbU!6m>O zl9MmzoO{lF_pbH+c+J|I-Q88cuCA`#)4RJ$?J*oY9sq!h3}|_rCJulm*!vqa(L*mO zu#=UowL8Sj%@*wB$_X^HumCxLpjj{kXyFclfSlaeyc`|i0BV200R98>0|R;^`Ue;* z2e6qN2m<_fF7kiivUN1G2Dt(yZQUHroL&DL=6`C^5#;1yJ@yOkQ^Croihv@Q(_gmr<){`J|UJ+_GcTf+X&v|AYaX zpXGQ@ZgFb=&aRLT0dnDQvXa^T{j5lRj*A}{!#0o_E03t3sm{<|#Pz)6idWgPy%qgHN z4nAwCSHpIyN(i<%8O(N9IM;7rmcTK7k!j`GX*cn(I#@$$$i)C#Ru70(x5D#^9_{q} zH4-B`|Dl8Mw&>8-Ef3jprOwOiow<={(YdygGx8`A+dYli7TRUaun)6rHYDS5^NX~) zI=W(tq|dd*Nd^Va^2A1dUhsZ6X~G;C{)JCCUc3lhPJVr9)^tsbz3^=T$9o6{ z6GkUbw!@;q!QkiXqqAKV^B%{1PT!C6-Dd+FnJRsmG0N87L z>t67~b16eZtN3b6pTYEtE#?XaHc6y#gB(eQ%THUFhh~43K7KtL1!U32kM?F zIoBL%h^Fv>2;?xycyI^+z$(XaMk$K?nHeTjj|CA1pdafuT7VhX5BKBoEG}f{>08rW z3@j`xY(VaMt~ciP&INA(EnbI?uI~K&{Ku&&XfIghMA!O>_W=|NQ!_L9jusXc_r#w| z0{tEa#R0CauJ-1eHzBQbbaWH|@uB!Qz)?(aFf0v#22L;w6Bf`w>Nf#2xy`@C${CaE z$QiNfA%==w%(=b2?dIloFFbV@RuCeL+Z7)lpWGVYSq}#n*S&z40T1y^01?vp+uL?@ zFC%H5CI%Tx0D_XGlAkUk6sR#=fW})|_z9keaYKI&kYPIUlCN^grjW46T3TD5=<5p# z3EgV|>HKDG2q2iXRIE$_O}e@t4VsFN1NL7knQ?d|Q2jXcPJafn(MVWhOpb{wzTM?%!FucyajVsfsOhp;fA;`@j) zxvpJ$EV4B=45sWv_j-7%jD3L!>wcqKW1LrQVqoxG7Vd}Ibj9$2A^E!0)YMbg7#JAP z4xLeBA%$Aq*@zqt(&v2r`qi1Al;AnSz2aK2V7tf-jf`S=XB~LAZ%o4g4dma`Oby{| zZZ);F!`g$KHMyZS0Dn{hJI?ZTeJI7|EY3>e6*6K2`6VkmygnfJftY5vI7Lv4I6(cy z(C6EmYm2^UiH;nVk`NL+3MzR-8+dV8aZc!)1GNkUmXekhqAu)E%X@vwDJn*Fb#-ND zlj&ps(4)yM6DDj@Qj%oetK3{bHVR?{EEzV!ARusLco;g6iEYvb?dE_(vv`v`i5hKf z?Xhf;in1~Z*oeqTiFyibfH>aK@i8+Klb0~r?b%eBrvKFm%>5`QDavSOm8j+vZ|l65x*A+bNgm2M@)`BVCwo?DuX<32ojd;JTEWry?Sww;c01UCG)VmunTKy z4mLNf9UKhx^pM38kZi7a}b)x?q5puuVkT?K3 zBHYUxwWjK7wgh}1(1b?^Y{Gtd|q_o7+);bQ=p{h6lAW;@5SlL(s1GvMDa+&xxDJG1Ah)rmS zMU3#Kz3I);H85pmaZVM>QAm+Q#5#0qXs5q^H?Z|mYV)`=b_X#_ewpM4JYmSmo zl?C{DEMJZ1UQBFRJH5kL%`Hj{P4N`v@PlaCimw)bHq-I>vN7>|2)rMMZtUScHHb!; z+<;{`N6?sMC$k)=8BjUU4-@lDl4Tz|zzLQ4F@dQm-s0Ry)!3#IaR=4W;>HwN@#1w|B7bi?y z9Of(O^AE79iVTNu=~J2=L-Nj}BV!YNycO&q0kN@n71c+d(g@*r?^;S-NB0jTXGFin zK}2gI*UAqLB4Sp~=4$iQb&WRLv!4rp+AA5#12%E*lP?Xa<-Jt<@}>Dq&#lYF z%JOXi^=8%0_u14^25R1YAl>QGx9Foz=H}5UkyZ$0_DY>UjhIQ+loW5Tdl;ez5u-4 zb?WlKTd&F0qHWsi4p9L5#**M~vt*(0=xA%C6=_AKd=pF27~9k#Fcu34TWzNNR1$Im zPs7$#OU=N4`?;suUbSDy(1b5=P^PzhbXQvUz4i9SlY~MU)@nPn`D*&LJPo?V?F@~R zqiweJrg>74kz}Jvuft~6Z42r6#G6{j9de?}0L2A?l!kf>FoOqr&y1i^S%DX!5*cG{ z(K!qQX-Ry?ySH7B(I5GDw6P8D@(I1W<4Tl5xCP(t&AxE$c-ib*+iRS4kp zfI0VgKLVsfmqo*No!Eyd*#OPFz57c0^=Y@a`Z?Rhn9Sl>#c^xBm~na%XQ}H6 zP_=)wOy>qwQ9Hl!crMMOXL`{$YG*{s_$bbMPO->ulA}McK>0n8OX*pf7*XqvWS%vW z6#9eYFXq&^lQ*5Dj*a}SUuARa`2$PLwdv*D@R>I1zxCCv9jHz7*$V}nDXuG3w|zWt z+AW;$SZj?PY%uK&IRLxxIcAO?aG;C@vpJv~xkRa$mAXaW0az<(BR|N-Exp5L^viZR zapAchSR%wTtJ;akZm@$%s~9qEI@oiNwJ`0GqHEam-%yEpne8M*xY?AcvQSsRMXtNU zv>#`ts6612dfw>%z4)SwE?QWP-R&ttQlRJEnSI;NCxvHTBG)J(wo(DFb?S2|rO;H? z#o7cHM9J84#={;tDBGhkf9+^m6isy%w7tHmRCIClu96od`S6ir-@G66qBKVU@&s$o z5uNc%`dAy$5h}A?PLA#kDw8(V)_IiT^L8__Nv`6__u;On24#t>?ayLg@9u)c`v&@Y zJPjYREf(NDvVBR0x#5-&aosARY!(*Ltx;C4#*=fTAAQZH?H|%KIc|A$7oW!Dm=fUS z`+;ZiR1v8QvM|1%ouf=_>25s}m5L9;tF*;;Goa=v&M;w~mN1~Kj6*B=RJ?R^Rb&h8 z5qbu2b^>-BHjh-BH&XE z2L-FoH*n>qj1NQ&W%PZDXQWXI{^r`Glz!~_=Ju8=Q=k4}ELa9tcS*$M zLS@cE{}WG5e8KghV#1zlj$3$lED@G0*5EFkEbfV z%XU6aK`J0*LJqNenr;wV9d#As3EKnO9zj9b^8Fgb!8al&_6KC5XAW})$x`pWW!2Ed zkvQ8=r5H}UDm)!U*m}IpWw^^Gui9#SB<=j=s5CzKM|s@IN+Bz?6f{p$j98Z|;Kw=d7G>xJLPKdvFLuS|G#5%=Zd%Y!GN zXA9l0cMCl!XGJ;%G80K?+sjq!i8$t-N;cHuB^)dArROQ^UKwA;C?&xvL{mKR{d(w7^*kyR$Az^qt2I!+9P|q zPM0{pHR7eOa|{PHD8)BNc-MW+m1FcYhH1HnfxYPc2R@+oN-z>gP$W%Xx?1aR3&6iTCF?# z8rpc|FXZbKz%o~D%uduk|E%FvxmV26>%G+X%HvW?i3#S=S5oYP$m*+m z^~B?EaMdOj8+S0GhZ;tL*->E=>fimB=>ekL?`+z!7y%M1>n5?nmBW|oo6K<5{$@wZ zEi8xw6iV~{17KOc9g*{t)z+G2oQto}BHNk-&|pE>VYF=$q=Z08K)3vufT(nRyO9a@~DfCeI(!TiKQ~^ z#n?lqr*RKQu-@Ti&n6l>)qfn3&$D=W;-ga0^)}DJcZmx@IqD+r9I>TJP|bnx)zP*1 z^P$JWn3G}YxDJ|W9te-qEvwB&GbCcCH$zj*d zJH3;9O(Knr71m0HYuIAJx4L3|JU>H-=eXLB?y-bc7zd#e3&Hm~e5SE}-~FzkM03OK%{c{! z+e59b2E#=ugS2K~0VQo3DA#&`Cx6Jts;8}GX}ol+Rtdzlmm`4y;#miM4{twcVO1ZY zsSMSZ7}1M>5yu~~mQDwWuU@@`lN2c+1+sWfXzn+c%P!bI66AJ+sDGPAQ(8vwxRPXB zn>$eTdg-=*=TXzp*QR4dl1!4v(Mrt+Hj&r(sQh?mq~X$D*k{M#Dqx;mD!D~%NYUO4 zpCK<@p(Rs}j)%zU38EbW&zi@r8WPUM!NgQz&@}7C*GKKj%hg!uUp#EAyEh0I)f?T&J%yYYM2jdw`s2oAsbl4SCAk~suc$OpaNpIy{avc%)+&N9>YB(3+9 zI!4we8Q&?L=aG*Pox|*;4_B4cyec30BI&n1`1uAhsm$%Kh{3KU2kq!Oyd)-!-yzXL zKvKR1VgUwxEoW|*%?hy$4B58VJ%65?XN7haXK_O7H4V?Q zkL#WTlUL@Ci`N2K@ngngis!^-CfTgM@cItT%^4&PX>yT}4`k`x0gHVkB#zg_bR=GCml+;nyH`f}4Hhv>0STJGtG z$(_8EfYXbc@ zF!b5c^=_Cd>v>l;L|EOr7szH|HJ?)QQ9AqMmRe#1_cxFJ563ChCOl+uIkFmO$$hdH z9%ji_`>`)*zfZTDJ`={Pm=gKqz%CB(dIVlWbU#(+@hyMW8`Jc%h=y72anitQeZG3( z>i2HjXFkRQ=qqQ;m(zQzr3e90AK>siiaJTJ#d<0;w;$**g`3}uck#er2Q@o~B-BEZ z+?`!Hbdqc$#+X<-0!s|Ri7@yD8S|-=qZLHcTCa(kB#RHnEZuvMa{O##^HO_ zDy3q$-#tJG;@fas$R(PW=-u^BdJw>^z*oni#$3-tj}e!8-B0ArFf&aZMZ8+?!%rSL zcY3_{o~BGlaMkw?0|~d-GkIN^*BLD{vGNP6Hu~;%Jidq#CEiY#dn&+jopmvncsM&N z5w206M|OB`nuxVgRJ7u7OSNp0trImld!hHc?#DHPVzIP_+zN;4p54lgdl11I&fH!T zTtIrh_CCwEx*55`oxMxh&{{?!1&!n}PhwMvKz~7i*K$J?KyNW59}!7qZ${nRYObh$ z~LpP?NyG{T96{O$6 z?K@jWY-8^51E5JkMn$?>(lq$zY1BU*fuKRDEWl1~e;jv>=sAMtd9iOhO(<<|QI`C=E0h_rwm&A|P{Lc5WybJ5FlA=fiXFBkPJ zp7j=N0vDD@TXWZEJ4nxHw6%^QCmi-}%f^h;VcY22h^H%~C6l@? z9s7Bns@JTlZ%M^rrH2sLzuJU2-!Xc$4H%*DpQLB`=u%oO(6iU3GTuG41cLK zbN(|NkSHe%X0(%lzLmeS`#_;=7$~B~io90Rv1DPae2C-mmY!CDGbYD7u+6EIGx>5M4_s^Png`9>THw9GSTfcpjEY?CN>41DA zoSMcpi!;Z8WFgT>(`Q_kBk?Sy9}g?OIsWB)rjH!lM*)I5*JCdq6#C3K&V**!YHVaS zttQxJkWnJh~i2J z&O@~UCD`xz&2TQnq8gj`!!(L1m3?RAzr5f;U!dm3N%|7j-mH`7dH~uNsriO8^T5`$ zL%SFzYRQMXywhK{kjC*%jGQpr=!R2nu{4oQqG1BMvmNgHy_M)RE%c7|`6Qf?Hr#XE zbrF67O#Cj*%Q0#r^2s`N2RtD+G*8CLn(xgBaCbU-v9U{WVNVG;oD?N6AE>aOxn+|Eu}|((xhS7dS)V&HcMhZ7UYgT`cffoBZ0OcimC9F+ex8-JHG$>o zhMIX;$JE`A+xJy3H=jI!OL#cXUiS=F#ek@UQk0I3?wB^|6nBm{i^bS;=aKb(UM%6+ zNnO(VoB9R8mEN7!2Ujs&6lo847Y8%+M3CU_5SRyfKKt%tsW=wFbjd4Ui**@Ynbgnq zwtF7$=ng$!|B}OrMlvbr&;!~s(Kfb%eB23I&evn6`kJmMUA`)dv!Us)^d#dPB3-_A z_t46JtSU%D>M&(Oh0u?N`#dlg5gya{I(n^YxuZ%LvZ|Q;QhIxujkR?F+2dEi}U+j@u%CsvWPIpF?5c^gPsqfL;wHhlo(=ZRTN+A z6vB=tkWdG+8eCPw1n^eMo|;_nA+1H&Zb+>2QF6xPj*N6 zx5o*DaePOkt6uFp7#t4reS;HARNvp06(Lt;DP%2kX1bWWR)-lrX4%lnwWl1cLqEeU zjFzG*&N#gyHu&_7)10L_v6Nb8(zMb7Y4q6&kptZXenf|g(l zcc>?V8|ytk1(emvRq$t(2$eg;Nf2!2YU?WKWabER6?C%@1UrMAez6GtnOg8iLqAKr z9BiHJMW}4t+?)l0Ku=FkHcu`#FvJ?jAs`?C{83BwM^ly-|DkhshdBJ8va|p~y+Q7U zas_g*aR7hO-b?sD73!Y$&mw`r;Qusq--n-F{LvgIJ3BYunq*KD0^-E7SqSS=u+d#@Q$Fv!)G zLKygubw4?NP(n?D6)HSPl#`up0jd5la3B{O7mc=)trx|g3Qe3LU^|e78<2~O-H}6pM$+BZ!IG7m zo#PMq-$*}^e_1^1y&H|KtDCI_#ScxpnVCC)SS`TrPHrMp(D&@8`tSXTeid^3Q3y7_ zZ|_&>FH+}!pma8am{~*2oNay)bNvC~35HnyD&za3%)$mrZ2|Rp`c=WhPX!be{==LF z@8$WO`%f=^6#sQLG4A6;zxT|#zkbXnwooE(XONk*vxBY05BmjrI9dKQTed&X0&H#| zFSmbR@c!G4jN>@naSVbI>2qMsNnk~Ec z-umG2S{zBHk{93eJY!$D%?=SW;R%{ps}7ou{MSn_FC9Wl~BTq}rt$76FdhMN8u- zt2?f*AF?~^@~q=M%CaBr=VkXI*QDq8G;mQ%(P&8-P|lSS0sDj!e7w)cZZ7V`O%uY zgbiUQWA6*v2L=}%sM(fIo3R~)8Wh_Vw755otRJuD4UcquD%nx(?cLB;+}n12JM6WQ z9*2-RuK)$DW=}!=1#~dAQny{w`q!#(bQL9macK)OB|6zAsp}&pSXO6x7_h7 zYtIQ==ls9eBa^(ge`;>JrmTKlj;A(;YGqWKjD+5DYuI$oVu zyCQSNP>Pu*yTHeHT)aK{O7M}+iUXaAHX0b0Q<|@Om0eAPp8Em_t90!GGFZty=Qn#Q zDD8=nO|F9x*rg<#cizkh`AHvBe+XCA;eB-#mN5tS66Jw1g2TQz?bFshom)`cEQX}J zTS|?CVLIh55gy#%86d@Lf*5Ly-O1pi)!55q+Aih**&j!Gqn-#qu0|J z{1wyE#WxMBSX)pO(`pd34Xa$!IT~j^=;N_?X3cb-d_o5qMAy|W#=KfKs4pO!e+U}8 zn%KLDhvtQnPuQEd-ouszoM#cuUzTdrJ)psTBEbWG;-chzYx{skpKym=m=tre2g3A4 zG*e7eG#s%CBi61pKd~%6s^CQtI+Es!pCDG2Lm&4ed-C^JbnBod5QLjYYcf`M`Z&N% zTKE8|G!mCdu0I?{)boIo>|hDBdp=UCg6MaI9RL{re!k-W0F9GGh~Ry;I=+H&barvl z*))f zoF`bAq`%$CksW}AL#?+;5m~{sqwSFz&*5A}JA#jhLxV1v#AYg?j3ESH#jaRIP>S{( z+wKLX%xi-IFTODHw?fSfyYMW?Lc|=n^$gkvOP?&OGw9FwG&)h1o`>!X0)^u)g;T}1 z1zV#_N|X=5`pBo`ssp_6E1)V>(glIb0nC@nGP1`Ky{xT@mtT~4-oF$XO8bJ{S~u}g z9?wwj#r&8SWG$6Y=^7YOB!bv_wvspfl=(D0?~WcJjy^D`nO^Jz_u|CYNeV8JI_g<< z`l2Ui#3UlRffD?$mx`Skyed4}-?}vQJID<+d^+PFNs94RcpfVE^kr4ROG!y$g%Qfn z&fiQbLi<+5#k~X<4u8(Fd|Dd{)NcwKwjPyL}FFn(HzW60|(%m*4e}*HKs--*8ZHdku%;7um+E z@da^MFh2}aj+^)l*~2#U9&b{5H!hMS4Ib+Tz($z0_G46vJ+v;Y$3bQD(#Jzxvz*=4 zC*9j0F4jV~8Te3Pbtqp5+a#@@tTyD?tzURy{mQMAp~3dCZ6|PxEZv+LFOu^kZbh%A zh<~w}H*HSpaLkrY9^d0Bh1_V(%B%XV^3qF}?MGJvF7iCFZ~@}aXYYnxu=SL5kLgTCLz)1b8J3q(14j$Iuego5&Ya~5rEe<6 zc-E$(ji1e5zK6uvoQ1@+Qcc8)4|2YD4K6_=41XT0re0o1dlaQrOCnp7UNjs>U(}7 z7W`3fMs3vL5I4Joii!h5SqoqV(zJw>Ka%8?@*sz+|5JLK3ww@hd*)TmoF_p1#%RS- ze(@(ynfDjFD_fMWb!=ju(d$KTK1byw%}C?RXEWX^Z7Qt_cKJv%yaVaf z{g6@&WU__b3=7(Fg~i*TDxx1#en1|ejP2JL2)y<BIin) zXf?KYV}xceBH_I3eCwtkc{n`f^YRaJS+j6#4_ten9qHo~JCzZ1A+L?C*)*w~627^l z04MlvQ@)sxulK}HFr#Y=^hs_s)#J@{n(-3R=hVH?AQK z5l#2?i$s&>=U8w`eDcq2(G0V;_@EHxf(B>6XQGh42Ds|clbaZh4zI5!nEr*m4G7SD z4>Z3GoFp4x^*)Wm+v+DNxV&|V*hI9&aeP|AC6cpl@G-?D#osxDU(R_7Qu>qBGtS=o>3-gv3av|Z3++qJa^ z+pZ>WKl}9?3>$c zf8YH1&6Q6J<@#eQ=oi=iekV(4JkIYA7q!O- Ti1&3k&_8GBHup5weeVAN6S>U* literal 0 HcmV?d00001 diff --git a/system/xsl/Zutrittskarte.xsl b/system/xsl/Zutrittskarte.xsl new file mode 100755 index 000000000..a0dcb0a87 --- /dev/null +++ b/system/xsl/Zutrittskarte.xsl @@ -0,0 +1,224 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Pers.-Nr. + + + + + + + Ausgestellt am + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Gültig bis/valid thru + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +