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 000000000..6f2fff292 Binary files /dev/null and b/system/vorlage_zip/Zutrittskarte.odt differ 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 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +