From d081d2d159ecf0fb53701613ac94ca4bba2c4ce7 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Andreas=20=C3=96sterreicher?= Date: Mon, 12 Feb 2018 14:35:08 +0100 Subject: [PATCH] Zutrittskarten werden ueber dokument_export.class.php erstellt --- content/zutrittskarte.php | 650 +++++++++++++++++--------------------- 1 file changed, 292 insertions(+), 358 deletions(-) diff --git a/content/zutrittskarte.php b/content/zutrittskarte.php index f487c766d..cfa78cd43 100644 --- a/content/zutrittskarte.php +++ b/content/zutrittskarte.php @@ -1,358 +1,292 @@ - 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'); -require_once('../include/studiengang.class.php'); -require_once('../include/benutzerfunktion.class.php'); -require_once('../include/organisationseinheit.class.php'); - -$user = get_uid(); -$db = new basis_db(); - -$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'); -} - -//UIDs werden entweder als data Parameter mit ";" getrennt übergeben -$uid = isset($_REQUEST['data'])?$_REQUEST['data']:''; -//ODER als POST Array über den Parameter users -$users = isset($_REQUEST['users'])?$_REQUEST['users']:''; -$type = isset($_REQUEST['type'])?$_REQUEST['type']:'normal'; -$output = isset($_REQUEST['output'])?$_REQUEST['output']:'pdf'; -if($uid=='' && $users=='') - die('Parameter data is missing'); - -$uid_arr = array(); -if($users!='') - $uid_arr = $users; -else - $uid_arr = explode(';',$uid); - -// Wenn Array mehrere Elemente hat und erstes Element im Array leer ist -> entfernen -if (isset($uid_arr[1]) && $uid_arr[0] == '') - array_shift($uid_arr); - -// Tempordner fuer das erstellen des ODT anlegen -$tempfolder = '/tmp/'.uniqid(); -mkdir($tempfolder); -chdir($tempfolder); - -// Unterordner fuer die Bilder erstellen -mkdir('Pictures'); - -// Studiengang ermitteln dessen Vorlage verwendet werden soll -$xsl_stg_kz=0; -// Direkte uebergabe des Studienganges dessen Vorlage verwendet werden soll -if(isset($_GET['xsl_stg_kz'])) - $xsl_stg_kz=$_GET['xsl_stg_kz']; -else -{ - // Wenn eine Studiengangskennzahl uebergeben wird, wird die Vorlage dieses Studiengangs verwendet - if(isset($_GET['stg_kz'])) - $xsl_stg_kz=$_GET['stg_kz']; - else - { - // Vorlage des Studiengangs aus $uid_arr ermitteln (1. Studierender im Array) - if($uid_arr[0] != '') - { - $student_obj = new student(); - if($student_obj->load($uid_arr[0])) - { - $xsl_stg_kz = $student_obj->studiengang_kz; - } - } - } -} - -// Vorlage der Zutrittskarte laden - -if($xsl_stg_kz=='') - $xsl_stg_kz='0'; - -$vorlage = new vorlage(); -if(!$vorlage->getAktuelleVorlage($xsl_stg_kz, 'Zutrittskarte')) - die($vorlage->errormsg); -$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 = ''; - - // 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)) - { - //Wenn kein Lichtbild in den Akten vorhanden ist, Foto aus tbl_person holen - if ($db->db_num_rows($result) == 0) - { - $qry_person = "SELECT foto FROM public.tbl_person WHERE person_id=".$db->db_add_param($bn->person_id, FHC_INTEGER); - - if($result_person = $db->db_query($qry_person)) - { - if($row_person = $db->db_fetch_object($result_person)) - { - //Wenn auch kein Foto in tbl_person gespeichert ist, mit der naechsten UID fortfahren - if($row_person->foto == '') - continue; - else - $cTmpHEX = $row_person->foto; - } - } - } - - if($row = $db->db_fetch_object($result)) - { - //Wenn der Inhalt des Lichtbilds leer ist, Foto aus tbl_person holen - if ($row->foto =='') - { - $qry_person = "SELECT foto FROM public.tbl_person WHERE person_id=".$db->db_add_param($bn->person_id, FHC_INTEGER); - - if($result_person = $db->db_query($qry_person)) - { - if($row_person = $db->db_fetch_object($result_person)) - { - //Wenn auch kein Foto in tbl_person gespeichert ist, mit der naechsten UID fortfahren - if($row_person->foto == '') - continue; - else - $cTmpHEX = $row_person->foto; - } - } - } - else - $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); - $benutzerfunktion = new benutzerfunktion(); - $benutzerfunktion->getBenutzerFunktionByUid($uid, NULL, date("Y-m-d"), date("Y-m-d")); - if(!empty($benutzerfunktion->result[0])) - { - $oe = new organisationseinheit($benutzerfunktion->result[0]->oe_kurzbz); - } - else - { - $oe = new organisationseinheit(); - } - $xml.=" - - uid."]]> - vorname."]]> - nachname."]]> - titelpre."]]> - titelpost."]]> - personalnummer."]]> - - formatDatum($ma->gebdatum,'d.m.Y')."]]> - bezeichnung."]]> - "; - } - else - { - $student = new student(); - $student->load($bn->uid); - $konto = new konto(); - $studiengang = new studiengang(); - $studiengang->load($student->studiengang_kz); - - $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.=" - - formatDatum($gueltigbis,'d/m/Y')."]]> - "; - } - else - { - //Student - $xml.=" - - uid."]]> - vorname."]]> - nachname."]]> - titelpre."]]> - titelpost."]]> - kurzbzlang."]]> - formatDatum($bn->gebdatum,'d.m.Y')."]]> - matrikelnr."]]> - - 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"); - - if($output=='pdf') - { - exec("unoconv --stdout -f pdf $tempname_zip > out.pdf"); - $tempname_zip='out.pdf'; - } - - //Ausgeben des Dokuments - clearstatcache(); - $fsize = filesize($tempname_zip); - $handle = fopen($tempname_zip,'r'); - if($output=='pdf') - { - header('Content-type: application/pdf'); - header('Content-Disposition: attachment; filename="'.$vorlage->vorlage_kurzbz.'.pdf"'); - } - else - { - 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/*'); -} -?> + 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'); +require_once('../include/studiengang.class.php'); +require_once('../include/benutzerfunktion.class.php'); +require_once('../include/organisationseinheit.class.php'); +require_once('../include/dokument_export.class.php'); + +$user = get_uid(); +$db = new basis_db(); + +$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'); +} + +//UIDs werden entweder als data Parameter mit ";" getrennt übergeben +$uid = isset($_REQUEST['data'])?$_REQUEST['data']:''; +//ODER als POST Array über den Parameter users +$users = isset($_REQUEST['users'])?$_REQUEST['users']:''; +$type = isset($_REQUEST['type'])?$_REQUEST['type']:'normal'; +$output = isset($_REQUEST['output'])?$_REQUEST['output']:'pdf'; +if ($uid == '' && $users == '') + die('Parameter data is missing'); + +$images = array(); +$uid_arr = array(); +if ($users != '') + $uid_arr = $users; +else + $uid_arr = explode(';', $uid); + +// Wenn Array mehrere Elemente hat und erstes Element im Array leer ist -> entfernen +if (isset($uid_arr[1]) && $uid_arr[0] == '') + array_shift($uid_arr); + +// Tempordner fuer das erstellen des ODT anlegen +$tempfolder = '/tmp/fhc-'.uniqid(); +mkdir($tempfolder); +chdir($tempfolder); + +// Unterordner fuer die Bilder erstellen +mkdir('Pictures'); + +// Studiengang ermitteln dessen Vorlage verwendet werden soll +$xsl_stg_kz = 0; +// Direkte uebergabe des Studienganges dessen Vorlage verwendet werden soll +if (isset($_GET['xsl_stg_kz'])) +{ + $xsl_stg_kz = $_GET['xsl_stg_kz']; +} +else +{ + // Wenn eine Studiengangskennzahl uebergeben wird, wird die Vorlage dieses Studiengangs verwendet + if (isset($_GET['stg_kz'])) + $xsl_stg_kz = $_GET['stg_kz']; + else + { + // Vorlage des Studiengangs aus $uid_arr ermitteln (1. Studierender im Array) + if ($uid_arr[0] != '') + { + $student_obj = new student(); + if ($student_obj->load($uid_arr[0])) + { + $xsl_stg_kz = $student_obj->studiengang_kz; + } + } + } +} + +// Vorlage der Zutrittskarte laden + +if ($xsl_stg_kz == '') + $xsl_stg_kz = '0'; + +$xsl_oe_kurzbz = ''; +$stg = new studiengang(); +if ($stg->load($xsl_stg_kz)) +{ + $xsl_oe_kurzbz = $stg->oe_kurzbz; +} +else + die('Unknown Studiengang'); + +$dokument = new dokument_export('Zutrittskarte', $xsl_oe_kurzbz); +$filename = 'Zutrittskarte'; + +foreach ($uid_arr as $uid) +{ + $bn = new benutzer(); + if ($bn->load($uid)) + { + $gueltigbis = ''; + + // Bild der Person holen + $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); + + $b64bild = '/9j/4AAQSkZJRgABAQEASABIAAD/4QAWRXhpZgAATU0AKgAAAAgAAAAAAAD//gAXQ3JlYXRlZCB3aXRoIFRoZSBHSU1Q/'; + $b64bild .= '9sAQwAFAwQEBAMFBAQEBQUFBgcMCAcHBwcPCwsJDBEPEhIRDxERExYcFxMUGhURERghGBodHR8fHxMXIiQiHiQcHh8e/'; + $b64bild .= '9sAQwEFBQUHBgcOCAgOHhQRFB4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4e/'; + $b64bild .= '8AAEQgAAQABAwEiAAIRAQMRAf/EABUAAQEAAAAAAAAAAAAAAAAAAAAI/8QAFBABAAAAAAAAAAAAAAAAAAAAAP/'; + $b64bild .= 'EABQBAQAAAAAAAAAAAAAAAAAAAAD/xAAUEQEAAAAAAAAAAAAAAAAAAAAA/9oADAMBAAIRAxEAPwCywAf/2Q=='; + + if ($result = $db->db_query($qry)) + { + //Wenn kein Lichtbild in den Akten vorhanden ist, Foto aus tbl_person holen + if ($db->db_num_rows($result) == 0) + { + $qry_person = "SELECT foto FROM public.tbl_person + WHERE person_id=".$db->db_add_param($bn->person_id, FHC_INTEGER); + + if ($result_person = $db->db_query($qry_person)) + { + if ($row_person = $db->db_fetch_object($result_person)) + { + //Wenn auch kein Foto in tbl_person gespeichert ist, mit der naechsten UID fortfahren + if ($row_person->foto == '') + continue; + else + $b64bild = $row_person->foto; + } + } + } + + if ($row = $db->db_fetch_object($result)) + { + //Wenn der Inhalt des Lichtbilds leer ist, Foto aus tbl_person holen + if ($row->foto == '') + { + $qry_person = "SELECT foto FROM public.tbl_person + WHERE person_id=".$db->db_add_param($bn->person_id, FHC_INTEGER); + + if ($result_person = $db->db_query($qry_person)) + { + if ($row_person = $db->db_fetch_object($result_person)) + { + //Wenn auch kein Foto in tbl_person gespeichert ist, mit der naechsten UID fortfahren + if ($row_person->foto == '') + continue; + else + $b64bild = $row_person->foto; + } + } + } + else + $b64bild = $row->foto; + } + } + + $imagefilename = $tempfolder.'/Pictures/'.$bn->uid.'.jpg'; + // Bild in den Temp Ordner zwischenspeichern + file_put_contents($imagefilename, base64_decode($b64bild)); + + $images[] = $imagefilename; + // Bild zum Manifest-File des ODTs hinzufuegen + $dokument->addImage($imagefilename, $bn->uid.'.jpg', 'image/jpg'); + + if (check_lektor($uid)) + { + $ma = new mitarbeiter(); + $ma->load($uid); + $benutzerfunktion = new benutzerfunktion(); + $benutzerfunktion->getBenutzerFunktionByUid($uid, null, date("Y-m-d"), date("Y-m-d")); + if (!empty($benutzerfunktion->result[0])) + { + $oe = new organisationseinheit($benutzerfunktion->result[0]->oe_kurzbz); + } + else + { + $oe = new organisationseinheit(); + } + $data[]['mitarbeiter'] = array( + 'uid' => $bn->uid, + 'vorname' => $bn->vorname, + 'nachname' => $bn->nachname, + 'titelpre' => $bn->titelpre, + 'titepost' => $bn->titelpost, + 'personalnummer' => $ma->personalnummer, + 'ausstellungsdatum' => date('d.m.Y'), + 'gebdatum' => $datum_obj->formatDatum($ma->gebdatum, 'd.m.Y'), + 'organisationseinheit' => $oe->bezeichnung + ); + } + else + { + $student = new student(); + $student->load($bn->uid); + $konto = new konto(); + $studiengang = new studiengang(); + $studiengang->load($student->studiengang_kz); + + $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 + $data[]['datum'] = array( + 'gueltigbis' => $datum_obj->formatDatum($gueltigbis, 'd/m/Y') + ); + } + else + { + $data[]['student'] = array( + 'uid' => $bn->uid, + 'vorname' => $bn->vorname, + 'nachname' => $bn->nachname, + 'titelpre' => $bn->titelpre, + 'titepost' => $bn->titelpost, + 'studiengang' => $studiengang->kurzbzlang, + 'gebdatum' => $datum_obj->formatDatum($bn->gebdatum, 'd.m.Y'), + 'matrikelnummer' => $student->matrikelnr, + 'ausstellungsdatum' => date('M.Y'), + 'gueltigbis' => $datum_obj->formatDatum($gueltigbis, 'd.m.Y') + ); + } + } + } +} + +$dokument->addDataArray($data, 'zutrittskarte'); +$dokument->setFilename($filename); + +if (!$dokument->create($output)) + die($dokument->errormsg); + +$dokument->output(); +$dokument->close(); + +// Cleanup Temp Images +foreach($images as $image) +{ + if(file_exists($image)) + unlink($image); +} +rmdir($tempfolder.'/Pictures'); +rmdir($tempfolder);