From 781ba28b35bab1f6eb847f7b805fb69417ba3e5d Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Andreas=20=C3=96sterreicher?= Date: Thu, 8 Feb 2018 08:40:50 +0100 Subject: [PATCH] Removed FOP Generate Function Removed XSLFO2PDF Generate Function Added Signing Functionality for PDFs --- content/pdfExport.php | 719 ++++++++---------------------- include/dokument_export.class.php | 107 ++++- 2 files changed, 295 insertions(+), 531 deletions(-) diff --git a/content/pdfExport.php b/content/pdfExport.php index a48679948..580e42d82 100644 --- a/content/pdfExport.php +++ b/content/pdfExport.php @@ -16,14 +16,14 @@ * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307, USA. * * Authors: Christian Paminger , - * Andreas Oesterreicher and - * Rudolf Hangl . + * Andreas Oesterreicher and + * Rudolf Hangl . */ /* Erstellt diverse Dokumente * * Erstellt ein XML File Transformiert dieses mit * Hilfe der XSL-FO Vorlage aus der DB und generiert - * daraus ein PDF mittels xslfo2pdf bzw unoconv + * daraus ein PDF mittels unoconv */ /* @@ -34,8 +34,6 @@ session_start();*/ require_once('../config/vilesci.config.inc.php'); require_once('../include/functions.inc.php'); require_once('../include/benutzerberechtigung.class.php'); -require_once('../include/xslfo2pdf/xslfo2pdf.php'); -require_once('../include/fop.class.php'); require_once('../include/akte.class.php'); require_once('../include/vorlage.class.php'); require_once('../include/student.class.php'); @@ -45,7 +43,7 @@ require_once('../include/addon.class.php'); require_once('../include/studiengang.class.php'); require_once('../include/studiensemester.class.php'); require_once('../include/studienordnung.class.php'); -//require_once('../include/betriebsmittel.class.php'); +require_once('../include/dokument_export.class.php'); $user = get_uid(); $db = new basis_db(); @@ -54,125 +52,94 @@ $variable_obj = new variable(); $variable_obj->loadVariables($user); //Parameter holen -if(isset($_GET['xml'])) - $xml=$_GET['xml']; +if (isset($_GET['xml'])) + $xml = $_GET['xml']; else die('Fehlerhafte Parameteruebergabe'); -if(isset($_GET['xsl'])) - $xsl=$_GET['xsl']; +if (isset($_GET['xsl'])) + $xsl = $_GET['xsl']; else die('Fehlerhafte Parameteruebergabe'); +$sign = false; // TODO + // Studiengang ermitteln dessen Vorlage verwendet werden soll -$xsl_stg_kz=0; +$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']; +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']; + if (isset($_GET['stg_kz'])) + $xsl_stg_kz = $_GET['stg_kz']; else { // Werden UIDs oder Prestudent_IDs uebergeben, wird die Vorlage des Studiengangs genommen // in dem der 1. Studierende in der Liste ist - if(isset($_GET['uid']) && $_GET['uid']!='') + if (isset($_GET['uid']) && $_GET['uid']!='') { - if(strstr($_GET['uid'],';')) + if (strstr($_GET['uid'],';')) $uids = explode(';',$_GET['uid']); else $uids[1] = $_GET['uid']; $student_obj = new student(); - if($student_obj->load($uids[1])) + if ($student_obj->load($uids[1])) { - $xsl_stg_kz=$student_obj->studiengang_kz; + $xsl_stg_kz = $student_obj->studiengang_kz; } } - elseif(isset($_GET['prestudent_id']) && $_GET['prestudent_id']!='') + elseif (isset($_GET['prestudent_id']) && $_GET['prestudent_id']!='') { - if(strstr($_GET['prestudent_id'],';')) + if (strstr($_GET['prestudent_id'],';')) $prestudent_ids = explode(';',$_GET['prestudent_id']); else $prestudent_ids[1] = $_GET['prestudent_id']; $prestudent_obj = new prestudent(); - if($prestudent_obj->load($prestudent_ids[1])) + if ($prestudent_obj->load($prestudent_ids[1])) { - $xsl_stg_kz=$prestudent_obj->studiengang_kz; + $xsl_stg_kz = $prestudent_obj->studiengang_kz; } } } } -if(isset($_GET['xsl_oe_kurzbz'])) - $xsl_oe_kurzbz=$_GET['xsl_oe_kurzbz']; +if (isset($_GET['xsl_oe_kurzbz'])) + $xsl_oe_kurzbz = $_GET['xsl_oe_kurzbz']; else - $xsl_oe_kurzbz=''; + $xsl_oe_kurzbz = ''; //Parameter setzen -$params='?xmlformat=xml'; -if(isset($_GET['uid'])) - $params.='&uid='.urlencode($_GET['uid']); -if(isset($_GET['stg_kz'])) - $params.='&stg_kz='.urlencode($_GET['stg_kz']); -if(isset($_GET['person_id'])) - $params.='&person_id='.urlencode($_GET['person_id']); -if(isset($_GET['id'])) - $params.='&id='.urlencode($_GET['id']); -if(isset($_GET['prestudent_id'])) - $params.='&prestudent_id='.urlencode($_GET['prestudent_id']); -if(isset($_GET['buchungsnummern'])) - $params.='&buchungsnummern='.urlencode($_GET['buchungsnummern']); -if(isset($_GET['ss'])) - $params.='&ss='.urlencode($_GET['ss']); -if(isset($_GET['abschlusspruefung_id'])) - $params.='&abschlusspruefung_id='.urlencode($_GET['abschlusspruefung_id']); -if(isset($_GET['typ'])) - $params.='&typ='.urlencode($_GET['typ']); -if(isset($_GET['all'])) - $params.='&all='.urlencode($_GET['all']); -if(isset($_GET['preoutgoing_id'])) - $params.='&preoutgoing_id='.urlencode($_GET['preoutgoing_id']); -if(isset($_GET["lvid"])) - $params.='&lvid='.urlencode($_GET["lvid"]); -if(isset($_GET['projekt_kurzbz'])) - $params.='&projekt_kurzbz='.urlencode($_GET['projekt_kurzbz']); -if(isset($_GET['version']) && is_numeric($_GET['version'])) +$params = 'xmlformat=xml'; + +// GET Parameter die an XML durchgereicht werden +foreach ($_GET as $getkey=>$getvalue) +{ + if (in_array($getkey, + array('uid', 'stg_kz', 'person_id', 'id', 'prestudent_id', 'buchungsnummern', 'ss', 'abschlusspruefung_id', + 'typ', 'all', 'preoutgoing_id', 'lvid', 'projekt_kurzbz', 'von', 'bis', 'stundevon', 'stundebis', + 'sem', 'lehreinheit', 'mitarbeiter_uid', 'studienordnung_id', 'fixangestellt', 'standort', + 'abrechnungsmonat', 'form') + ) + ) + { + $params .= '&'.$getkey.'='.urlencode($getvalue); + } +} + +if (isset($_GET['vertrag_id'])) +{ + foreach($_GET['vertrag_id'] as $id) + { + $params .= '&vertrag_id[]='.urlencode($id); + } +} +if (isset($_GET['version']) && is_numeric($_GET['version'])) $version = $_GET['version']; else - $version =''; -if(isset($_GET['von'])) - $params.='&von='.urlencode($_GET['von']); -if(isset($_GET['bis'])) - $params.='&bis='.urlencode($_GET['bis']); -if(isset($_GET['stundevon'])) - $params.='&stundevon='.urlencode($_GET['stundevon']); -if(isset($_GET['stundebis'])) - $params.='&stundebis='.urlencode($_GET['stundebis']); -if(isset($_GET['sem'])) - $params.='&sem='.urlencode($_GET['sem']); -if(isset($_GET['lehreinheit'])) - $params.='&lehreinheit='.urlencode($_GET['lehreinheit']); -if(isset($_GET['mitarbeiter_uid'])) - $params.='&mitarbeiter_uid='.urlencode($_GET['mitarbeiter_uid']); -if(isset($_GET['vertrag_id'])) -{ - foreach($_GET['vertrag_id'] as $id) - { - $params.='&vertrag_id[]='.urlencode($id); - } -} -if(isset($_GET['studienordnung_id'])) - $params.='&studienordnung_id='.urlencode($_GET['studienordnung_id']); -if(isset($_GET['fixangestellt'])) - $params.='&fixangestellt='.urlencode($_GET['fixangestellt']); -if(isset($_GET['standort'])) - $params.='&standort='.urlencode($_GET['standort']); -if(isset($_GET['abrechnungsmonat'])) - $params.='&abrechnungsmonat='.urlencode($_GET['abrechnungsmonat']); -if(isset($_GET['form'])) - $params.='&form='.urlencode($_GET['form']); + $version = null; + $output = (isset($_GET['output'])?$_GET['output']:'odt'); $rechte = new benutzerberechtigung(); @@ -180,21 +147,21 @@ $rechte->getBerechtigungen($user); //OE fuer Output ermitteln -if ($xsl_oe_kurzbz!='') +if ($xsl_oe_kurzbz != '') { $oe_kurzbz = $xsl_oe_kurzbz; } else { - if($xsl_stg_kz=='') - $xsl_stg_kz='0'; + if ($xsl_stg_kz == '') + $xsl_stg_kz = '0'; $oe = new studiengang(); $oe->load($xsl_stg_kz); $oe_kurzbz = $oe->oe_kurzbz; } //Darf der User Dokumente in einem NICHT-PDF-Format exportieren? -if (isset($_GET['output']) && $_GET['output']!='pdf') +if (isset($_GET['output']) && $_GET['output'] != 'pdf') { if (!$rechte->isBerechtigt('system/change_outputformat',$oe_kurzbz)) { @@ -206,28 +173,24 @@ if (isset($_GET['output']) && $_GET['output']!='pdf') else $output = 'pdf'; +/** TODO *******************/ + //XSL aus der DB holen + $vorlage = new vorlage(); + if ($xsl_oe_kurzbz != '') + { + $vorlage->getAktuelleVorlage($xsl_oe_kurzbz, $xsl, $version); + } + else + { + if ($xsl_stg_kz == '') + $xsl_stg_kz = '0'; -//XSL aus der DB holen -$vorlage = new vorlage(); -if($xsl_oe_kurzbz!='') -{ - $vorlage->getAktuelleVorlage($xsl_oe_kurzbz, $xsl, $version); -} -else -{ - if($xsl_stg_kz=='') - $xsl_stg_kz='0'; - - $vorlage->getAktuelleVorlage($xsl_stg_kz, $xsl, $version); -} - -$xsl_content = $vorlage->text; - -if($xsl_content=='') - die('Für diese Organisationseinheit ist keine Vorlage im System hinterlegt'); + $vorlage->getAktuelleVorlage($xsl_stg_kz, $xsl, $version); + } +/** TODO ENDE ****************/ //Berechtigung pruefen -if($xsl=='AccountInfo') +if ($xsl == 'AccountInfo') { $isberechtigt = false; @@ -235,85 +198,80 @@ if($xsl=='AccountInfo') foreach ($uids as $uid) { //Berechtigung fuer das Drucken des Accountinfoblattes pruefen - $qry = "SELECT mitarbeiter_uid FROM public.tbl_mitarbeiter WHERE mitarbeiter_uid='".addslashes($uid)."'"; - if($result_ma = $db->db_query($qry)) + $ma = new mitarbeiter(); + if($ma->load($uid)) { - if($db->db_num_rows($result_ma)==1) + //Mitarbeiterrechte erforderlich + if ($rechte->isBerechtigt('admin', 0, 'suid') || $rechte->isBerechtigt('mitarbeiter', 0, 'suid')) { - //Mitarbeiterrechte erforderlich - if($rechte->isBerechtigt('admin', 0, 'suid') || $rechte->isBerechtigt('mitarbeiter', 0, 'suid')) - { - $isberechtigt=true; - } + $isberechtigt = true; } } - $qry = "SELECT student_uid, studiengang_kz FROM public.tbl_student WHERE student_uid='".addslashes($uid)."'"; - if($result_std = $db->db_query($qry)) + $stud = new student(); + if ($stud->load($uid)) { - if($db->db_num_rows($result_std)==1) + //Rechte pruefen + if ($rechte->isBerechtigt('admin', $stud->studiengang_kz, 'suid') || + $rechte->isBerechtigt('admin', 0, 'suid') || + $rechte->isBerechtigt('assistenz', $stud->studiengang_kz, 'suid') || + $rechte->isBerechtigt('assistenz', 0, 'suid') || + $rechte->isBerechtigt('support', 0, 'suid')) { - $row_std = $db->db_fetch_object($result_std); - //Rechte pruefen - if($rechte->isBerechtigt('admin', $row_std->studiengang_kz, 'suid') || - $rechte->isBerechtigt('admin', 0, 'suid') || - $rechte->isBerechtigt('assistenz', $row_std->studiengang_kz, 'suid') || - $rechte->isBerechtigt('assistenz', 0, 'suid') || - $rechte->isBerechtigt('support', 0, 'suid')) - { - $isberechtigt=true; - } + $isberechtigt=true; } } } - if(!$isberechtigt) + if (!$isberechtigt) { echo 'Sie haben keine Berechtigung um dieses AccountInfoBlatt zu drucken'; exit; } } -elseif(in_array($xsl,array('Lehrveranstaltungszeugnis','Zertifikat','Diplomurkunde','Diplomzeugnis','Bescheid', 'BescheidEng','Bakkurkunde','BakkurkundeEng','Bakkzeugnis', +elseif (in_array($xsl,array('Lehrveranstaltungszeugnis','Zertifikat','Diplomurkunde','Diplomzeugnis', +'Bescheid', 'BescheidEng','Bakkurkunde','BakkurkundeEng','Bakkzeugnis', 'PrProtokollBakk','PrProtokollDipl','Lehrauftrag','DiplomurkundeEng','Zeugnis','ZeugnisEng','StudienerfolgEng', 'Sammelzeugnis','PrProtDiplEng','PrProtBakkEng','BakkzeugnisEng','DiplomzeugnisEng','statusbericht', 'DiplSupplement','Zutrittskarte','Projektbeschr','Ausbildungsver','AusbildStatus','PrProtBA','PrProtMA', 'PrProtBAEng','PrProtMAEng','Studienordnung','Erfolgsnachweis','ErfolgsnwHead','Studienblatt','LV_Informationen', -'LVZeugnis','AnwListBarcode','Honorarvertrag','AusbVerEng','AusbVerEngHead','Zeugnis','ZeugnisNeu','ZeugnisEngNeu','ErfolgsnachweisE','ErfolgsnwHeadE','Magisterurkunde','Masterurkunde', -'Defensiourkunde','Magisterzeugnis','Laufzettel','StudienblattEng','Zahlung1','Terminliste','Studienbuchblatt','Veranstaltungen'))) +'LVZeugnis','AnwListBarcode','Honorarvertrag','AusbVerEng','AusbVerEngHead','Zeugnis','ZeugnisNeu','ZeugnisEngNeu', +'ErfolgsnachweisE','ErfolgsnwHeadE','Magisterurkunde','Masterurkunde','Defensiourkunde','Magisterzeugnis', +'Laufzettel','StudienblattEng','Zahlung1','Terminliste','Studienbuchblatt','Veranstaltungen'))) { - if(!$rechte->isBerechtigt('admin') && !$rechte->isBerechtigt('assistenz')) + if (!$rechte->isBerechtigt('admin') && !$rechte->isBerechtigt('assistenz')) { echo 'Sie haben keine Berechtigung dieses Dokument zu erstellen'; exit; } } -elseif(in_array($xsl,array('Ressource'))) +elseif (in_array($xsl,array('Ressource'))) { - if(!$rechte->isBerechtigt('lehre/lvplan')) + if (!$rechte->isBerechtigt('lehre/lvplan')) { echo 'Sie haben keine Berechtigung dieses Dokument zu erstellen'; exit; } } -elseif(in_array($xsl,array('Inskription','Studienerfolg','OutgoingLearning','OutgoingChangeL','LearningAgree','Zahlung','DichiaSost'))) +elseif (in_array($xsl,array('Inskription','Studienerfolg','OutgoingLearning','OutgoingChangeL','LearningAgree','Zahlung','DichiaSost'))) { - if(!$rechte->isBerechtigt('admin') && !$rechte->isBerechtigt('assistenz')) + if (!$rechte->isBerechtigt('admin') && !$rechte->isBerechtigt('assistenz')) { echo 'Sie haben keine Berechtigung dieses Dokument zu erstellen'; exit; } } -elseif($xsl=='Uebernahme') +elseif ($xsl=='Uebernahme') { - if(!$rechte->isBerechtigt('wawi/inventar') && !$rechte->isBerechtigt('assistenz') && !$rechte->isBerechtigt('basis/betriebsmittel')) + if (!$rechte->isBerechtigt('wawi/inventar') && !$rechte->isBerechtigt('assistenz') && !$rechte->isBerechtigt('basis/betriebsmittel')) { echo 'Sie haben keine Berechtigung dieses Dokument zu erstellen'; exit; } } -elseif($xsl=='Bestellung') +elseif ($xsl=='Bestellung') { - if(!$rechte->isBerechtigt('wawi/bestellung')) + if (!$rechte->isBerechtigt('wawi/bestellung')) { echo 'Sie haben keine Berechtigung dieses Dokument zu erstellen'; exit; @@ -322,15 +280,15 @@ elseif($xsl=='Bestellung') else { // Wenn Berechtigung direkt beim der Vorlage angegeben ist - if(count($vorlage->berechtigung)>0) + if (count($vorlage->berechtigung)>0) { - $allowed=false; + $allowed = false; foreach($vorlage->berechtigung as $berechtigung_kurzbz) { - if($rechte->isBerechtigt($berechtigung_kurzbz)) - $allowed=true; + if ($rechte->isBerechtigt($berechtigung_kurzbz)) + $allowed = true; } - if(!$allowed) + if (!$allowed) { echo 'unbekanntes Dokument oder keine Berechtigung'; exit; @@ -343,254 +301,80 @@ else } } - -$xml_found = false; -$addons = new addon(); - -foreach($addons->aktive_addons as $addon) -{ - $xmlfile = DOC_ROOT.'addons/'.$addon.'/rdf/'.$xml; - if(file_exists($xmlfile)) - { - $xml_found = true; - $xml_url = XML_ROOT.'../addons/'.$addon.'/rdf/'.$xml.$params; - break; - } -} -if(!$xml_found) - $xml_url=XML_ROOT.$xml.$params; - - -// Load the XML source -$xml_doc = new DOMDocument; - -//echo $xml_url; -if(!$xml_doc->load($xml_url)) - die('unable to load xml: '.$xml_url); - -//Pdf erstellen - //wenn uid gefunden wird, dann den Nachnamen zum Dateinamen dazuhaengen -$nachname=''; -if(isset($_GET['uid']) && $_GET['uid']!='') +$nachname = ''; +if (isset($_GET['uid']) && $_GET['uid']!='') { $uid = str_replace(';','',$_GET['uid']); $benutzer_obj = new benutzer(); - if($benutzer_obj->load($uid)) + if ($benutzer_obj->load($uid)) $nachname = '_'.convertProblemChars($benutzer_obj->nachname); } -$filename=$xsl.$nachname; +$filename = $xsl.$nachname; + +if ($xsl_oe_kurzbz == '') +{ + if ($xsl_stg_kz == '') + $xsl_stg_kz = '0'; + $stg_obj = new studiengang(); + if (!$stg_obj->load($xsl_stg_kz)) + die($stg_obj->errormsg); + $xsl_oe_kurzbz = $stg_obj->oe_kurzbz; +} if (!isset($_REQUEST["archive"])) { - if(mb_strstr($vorlage->mimetype, 'application/vnd.oasis.opendocument')) + if (mb_strstr($vorlage->mimetype, 'application/vnd.oasis.opendocument')) { - switch($vorlage->mimetype) + $dokument = new dokument_export($xsl, $xsl_oe_kurzbz, $version); + $dokument->addDataURL($xml, $params); + + /** + * Get Filename + * TODO cleanup + */ + if ($vorlage->bezeichnung!='') + $filename = $vorlage->bezeichnung.$nachname; + else + $filename = $vorlage->vorlage_kurzbz.$nachname; + + switch($xsl) { - case 'application/vnd.oasis.opendocument.text': - $endung = 'odt'; - break; - case 'application/vnd.oasis.opendocument.spreadsheet': - $endung = 'ods'; - break; - default: - $endung = 'pdf'; - } - - // Load the XSL source - $xsl_doc = new DOMDocument; - - if(!$xsl_doc->loadXML($xsl_content)) - die('unable to load xsl'); - - // Configure the transformer - $proc = new XSLTProcessor; - $proc->importStyleSheet($xsl_doc); // attach the xsl rules - - $buffer = $proc->transformToXml($xml_doc); - //echo $buffer; - //exit; - $tmp = sys_get_temp_dir(); - $tempfolder = $tmp.'/FHC'.uniqid(); - mkdir($tempfolder); - chdir($tempfolder); - file_put_contents('content.xml', $buffer); - - // Wenn ein Style XSL uebergeben wurde wird ein zweites XML File erstellt mit den - // Styleanweisungen und ebenfalls zum Zip hinzugefuegt - if(isset($_GET['style_xsl']) || $vorlage->style!='') - { - //Wenn die Spalte style in der DB befuellt ist, wird dieses verwendet - if($vorlage->style!='') - { - $style_xsl_doc = new DOMDocument; - if(!$style_xsl_doc->loadXML($vorlage->style)) - die('unable to load xsl from tbl_vorlagestudiengang'); - } - else - { - $style_xsl=$_GET['style_xsl']; - $style_vorlage = new vorlage(); - $style_vorlage->getAktuelleVorlage($xsl_stg_kz, $style_xsl, $version); - $style_xsl_doc = new DOMDocument; - if(!$style_xsl_doc->loadXML($style_vorlage->text)) - die('unable to load xsl'); - } - - // Configure the transformer - $style_proc = new XSLTProcessor; - $style_proc->importStyleSheet($style_xsl_doc); // attach the xsl rules - - $stylebuffer = $style_proc->transformToXml($xml_doc); - - file_put_contents('styles.xml', $stylebuffer); - } - - $vorlage_found=false; - $addons = new addon(); - - foreach($addons->aktive_addons as $addon) - { - $zipfile = DOC_ROOT.'addons/'.$addon.'/system/vorlage_zip/'.$vorlage->vorlage_kurzbz.'.'.$endung; - - if(file_exists($zipfile)) - { - $vorlage_found=true; + case 'LV_Informationen': + $studiengang = new studiengang($_GET['stg_kz']); + $studiensemester = new studiensemester($_GET['ss']); + $filename = $filename.'_'.$studiengang->kurzbzlang.'_'.$studiensemester->studiensemester_kurzbz; + break; + case 'Honorarvertrag': + $filename = $filename.'_'.$benutzer_obj->nachname.'_'.$benutzer_obj->vorname; + break; + case 'Studienordnung': + $studienordnung = new studienordnung(); + $studienordnung->loadStudienordnung($_GET['studienordnung_id']); + $filename = 'Studienordnung-Studienplan-'. sprintf("%'.04d",$studienordnung->studiengang_kz).'-'.$studienordnung->studiengangkurzbzlang; break; - } } - if(!$vorlage_found) - $zipfile = DOC_ROOT.'system/vorlage_zip/'.$vorlage->vorlage_kurzbz.'.'.$endung; + $dokument->setFilename($filename); - $tempname_zip = 'out.zip'; - if(copy($zipfile, $tempname_zip)) + if (!$dokument->create($output)) + die($dokument->errormsg); + + if ($sign === true) { - exec("zip $tempname_zip content.xml"); - if(isset($_GET['style_xsl']) || $vorlage->style!='') - exec("zip $tempname_zip styles.xml"); - - clearstatcache(); - if($vorlage->bezeichnung!='') - $filename = $vorlage->bezeichnung.$nachname; + if ($dokument->sign($user)) + { + $dokument->output(); + } else - $filename = $vorlage->vorlage_kurzbz.$nachname; - if($output == 'pdf') - { - if($xsl == 'LV_Informationen') - { - $studiengang = new studiengang($_GET['stg_kz']); - $studiensemester = new studiensemester($_GET['ss']); - $tempPdfName = $vorlage->vorlage_kurzbz.'_'.$studiengang->kurzbzlang.'_'.$studiensemester->studiensemester_kurzbz.'.pdf'; - $filename = $filename.'_'.$studiengang->kurzbzlang.'_'.$studiensemester->studiensemester_kurzbz.'.pdf'; - } - elseif($xsl == "Honorarvertrag") - { - $tempPdfName = $vorlage->vorlage_kurzbz.'_'.$benutzer_obj->nachname.'_'.$benutzer_obj->vorname.'.pdf'; - $filename = $filename.'_'.$benutzer_obj->nachname.'_'.$benutzer_obj->vorname.'.pdf'; - } - elseif($xsl == "Studienordnung") - { - $studienordnung = new studienordnung(); - $studienordnung->loadStudienordnung($_GET['studienordnung_id']); - $filename = 'Studienordnung-Studienplan-'. sprintf("%'.04d",$studienordnung->studiengang_kz).'-'.$studienordnung->studiengangkurzbzlang; - $tempPdfName = $vorlage->vorlage_kurzbz.'.pdf'; - } - else - { - $tempPdfName = $vorlage->vorlage_kurzbz.'.pdf'; - $filename = $filename.'.pdf'; - } - exec("unoconv -e IsSkipEmptyPages=false --stdout -f pdf $tempname_zip > $tempPdfName"); - - $fsize = filesize($tempPdfName); - $handle = fopen($tempPdfName,'r'); - header('Content-type: application/pdf'); - header('Content-Disposition: attachment; filename="'.$filename.'"'); - header('Content-Length: '.$fsize); - } - else if($output =='odt') - { - if($xsl == "Studienordnung") - { - $studienordnung = new studienordnung(); - $studienordnung->loadStudienordnung($_GET['studienordnung_id']); - $filename = 'Studienordnung-Studienplan-'. sprintf("%'.04d",$studienordnung->studiengang_kz).'-'.$studienordnung->studiengangkurzbzlang; - } - - $fsize = filesize($tempname_zip); - $handle = fopen($tempname_zip,'r'); - header('Content-type: '.$vorlage->mimetype); - header('Content-Disposition: attachment; filename="'.$filename.'.'.$endung.'"'); - header('Content-Length: '.$fsize); - } - else if($output =='doc') - { - $tempPdfName = $vorlage->vorlage_kurzbz.'.doc'; - if($xsl == "Studienordnung") - { - $studienordnung = new studienordnung(); - $studienordnung->loadStudienordnung($_GET['studienordnung_id']); - $filename = 'Studienordnung-Studienplan-'. sprintf("%'.04d",$studienordnung->studiengang_kz).'-'.$studienordnung->studiengangkurzbzlang.'.doc'; - } - else - { - $filename = $filename.'.doc'; - } - exec("unoconv -e IsSkipEmptyPages=false --stdout -f doc $tempname_zip > $tempPdfName"); - - $fsize = filesize($tempPdfName); - $handle = fopen($tempPdfName,'r'); - header('Content-type: application/vnd.ms-word'); - header('Content-Disposition: attachment; filename="'.$filename.'"'); - header('Content-Length: '.$fsize); - } - while (!feof($handle)) - { - echo fread($handle, 8192); + { + echo $dokument->errormsg; } - fclose($handle); - - unlink('content.xml'); - if(isset($_GET['style_xsl']) || $vorlage->style!='') - unlink('styles.xml'); - unlink($tempname_zip); - if($output=='pdf' || $output=='doc') - unlink($tempPdfName); - rmdir($tempfolder); - } - } - else - { - if(PDF_CREATE_FUNCTION=='FOP') - { - $fop = new fop(); - $xml = $xml_doc->saveXML(); - //$xml = ''; - //$xsl='foobar'; - $fop->generatePdf($xml, $xsl_content, $filename, "D"); } else - { - $fo2pdf = new XslFo2Pdf(); - - // Load the XSL source - $xsl_doc = new DOMDocument; - - if(!$xsl_doc->loadXML($xsl_content)) - die('unable to load xsl'); - - // Configure the transformer - $proc = new XSLTProcessor; - $proc->importStyleSheet($xsl_doc); // attach the xsl rules - - $buffer = $proc->transformToXml($xml_doc); - if (!$fo2pdf->generatePdf($buffer, $filename, "D")) - { - echo('Failed to generate PDF'); - } - } + $dokument->output(); + $dokument->close(); } } else @@ -599,16 +383,16 @@ else $uid = $_REQUEST["uid"]; $heute = date('Y-m-d'); - $student=new student(); + $student = new student(); $student->load($uid); - if(isset($_REQUEST['ss'])) + if (isset($_REQUEST['ss'])) { $ss = $_REQUEST["ss"]; - $prestudent=new prestudent(); + $prestudent = new prestudent(); $prestudent->getLastStatus($student->prestudent_id,$ss); - $semester=$prestudent->ausbildungssemester; + $semester = $prestudent->ausbildungssemester; $query = "SELECT tbl_studiengang.studiengang_kz, tbl_studentlehrverband.semester, tbl_studiengang.typ, @@ -621,9 +405,9 @@ else AND tbl_studentlehrverband.student_uid = ".$db->db_add_param($uid)." AND tbl_studentlehrverband.studiensemester_kurzbz = ".$db->db_add_param($ss); - if($result = $db->db_query($query)) + if ($result = $db->db_query($query)) { - if($row = $db->db_fetch_object($result)) + if ($row = $db->db_fetch_object($result)) { $person_id = $row->person_id; $titel = $xsl."_".strtoupper($row->typ).strtoupper($row->kurzbz)."_".$semester; @@ -646,161 +430,48 @@ else $bezeichnung = $vorlage->bezeichnung.'_'.$studiengang->kuerzel; } - if($rechte->isBerechtigt('admin', $studiengang_kz, 'suid') || $rechte->isBerechtigt('assistenz', $studiengang_kz, 'suid')) + if ($rechte->isBerechtigt('admin', $studiengang_kz, 'suid') + || $rechte->isBerechtigt('assistenz', $studiengang_kz, 'suid')) { - if(mb_strstr($vorlage->mimetype, 'application/vnd.oasis.opendocument')) + $dokument = new dokument_export($xsl, $xsl_oe_kurzbz, $version); + $dokument->addDataURL($xml, $params); + + $dokument->setFilename($filename); + + if (!$dokument->create($output)) + die($dokument->errormsg); + + if ($sign === true) { - switch($vorlage->mimetype) + if ($dokument->sign($user)) { - case 'application/vnd.oasis.opendocument.text': - $endung = 'odt'; - break; - case 'application/vnd.oasis.opendocument.spreadsheet': - $endung = 'ods'; - break; - default: - $endung = 'pdf'; - } - - // Load the XSL source - $xsl_doc = new DOMDocument; - - if(!$xsl_doc->loadXML($xsl_content)) - die('unable to load xsl'); - - // Configure the transformer - $proc = new XSLTProcessor; - $proc->importStyleSheet($xsl_doc); // attach the xsl rules - - $buffer = $proc->transformToXml($xml_doc); - //echo $buffer; - //exit; - $tmp = sys_get_temp_dir(); - $tempfolder = $tmp.'/FHC'.uniqid(); - mkdir($tempfolder); - chdir($tempfolder); - file_put_contents('content.xml', $buffer); - - // Wenn ein Style XSL uebergeben wurde wird ein zweites XML File erstellt mit den - // Styleanweisungen und ebenfalls zum Zip hinzugefuegt - if(isset($_GET['style_xsl']) || $vorlage->style!='') - { - //Wenn die Spalte style in der DB befuellt ist, wird dieses verwendet - if($vorlage->style!='') - { - $style_xsl_doc = new DOMDocument; - if(!$style_xsl_doc->loadXML($vorlage->style)) - die('unable to load xsl from tbl_vorlagestudiengang'); - } - else - { - $style_xsl=$_GET['style_xsl']; - $style_vorlage = new vorlage(); - $style_vorlage->getAktuelleVorlage($xsl_stg_kz, $style_xsl, $version); - $style_xsl_doc = new DOMDocument; - if(!$style_xsl_doc->loadXML($style_vorlage->text)) - die('unable to load xsl'); - } - - // Configure the transformer - $style_proc = new XSLTProcessor; - $style_proc->importStyleSheet($style_xsl_doc); // attach the xsl rules - - $stylebuffer = $style_proc->transformToXml($xml_doc); - - file_put_contents('styles.xml', $stylebuffer); - } - - $vorlage_found=false; - $addons = new addon(); - - foreach($addons->aktive_addons as $addon) - { - $zipfile = DOC_ROOT.'addons/'.$addon.'/system/vorlage_zip/'.$vorlage->vorlage_kurzbz.'.'.$endung; - - if(file_exists($zipfile)) - { - $vorlage_found=true; - break; - } - } - if(!$vorlage_found) - $zipfile = DOC_ROOT.'system/vorlage_zip/'.$vorlage->vorlage_kurzbz.'.'.$endung; - - - $tempname_zip = 'out.zip'; - if(copy($zipfile, $tempname_zip)) - { - exec("zip $tempname_zip content.xml"); - if(isset($_GET['style_xsl']) || $vorlage->style!='') - exec("zip $tempname_zip styles.xml"); - - clearstatcache(); - - $tempPdfName = $vorlage->vorlage_kurzbz.'.pdf'; - exec("unoconv -e IsSkipEmptyPages=false --stdout -f pdf $tempname_zip > $tempPdfName"); - } - $file = $tempfolder.'/'.$tempPdfName; - } - else - { - if(PDF_CREATE_FUNCTION=='FOP') - { - $fop = new fop(); - $file = $fop->generatePdf($xml_doc->saveXML(), $xsl_content, $filename, "F"); + $doc = $dokument->output(false); } else { - $filename = $user; - $fo2pdf = new XslFo2Pdf(); - - // Load the XSL source - $xsl_doc = new DOMDocument; - - if(!$xsl_doc->loadXML($xsl_content)) - die('unable to load xsl'); - - // Configure the transformer - $proc = new XSLTProcessor; - $proc->importStyleSheet($xsl_doc); // attach the xsl rules - - $buffer = $proc->transformToXml($xml_doc); - - if (!$fo2pdf->generatePdf($buffer, $filename, 'F')) - { - echo('Failed to generate PDF'); - } - $tmp = sys_get_temp_dir(); - $file = $tmp."/FHC".$filename.".pdf"; + echo $dokument->errormsg; } } + else + $doc = $dokument->output(false); + $dokument->close(); - $handle = fopen($file, "rb"); - $string = fread($handle, filesize($file)); - fclose($handle); - //$string = file_get_contents($file); - unlink($file); - - $hex=""; - //for ($i=0;$iperson_id = $person_id; - $akte->dokument_kurzbz = "Zeugnis"; - $akte->inhalt = $hex; - $akte->mimetype = "application/octet-stream"; - $akte->erstelltam = $heute; - $akte->gedruckt = true; - $akte->titel = $titel.".pdf"; - $akte->bezeichnung = $bezeichnung; - $akte->updateamum = ""; - $akte->updatevon = ""; - $akte->insertamum = date('Y-m-d h:m:s'); + $akte->dokument_kurzbz = 'Zeugnis'; + $akte->inhalt = $hex; + $akte->mimetype = 'application/octet-stream'; + $akte->erstelltam = $heute; + $akte->gedruckt = true; + $akte->titel = $titel.'.pdf'; + $akte->bezeichnung = $bezeichnung; + $akte->updateamum = ''; + $akte->updatevon = ''; + $akte->insertamum = date('Y-m-d H:i:s'); $akte->insertvon = $user; - $akte->ext_id = ""; - $akte->uid = $uid; + $akte->ext_id = ''; + $akte->uid = $uid; $akte->new = true; if (!$akte->save()) { diff --git a/include/dokument_export.class.php b/include/dokument_export.class.php index 3b5b76b21..ffe60c8d5 100644 --- a/include/dokument_export.class.php +++ b/include/dokument_export.class.php @@ -31,8 +31,9 @@ class dokument_export private $vorlage_file; // Vorlage ODT/ODS in das hineingezippt wird private $outputformat; // Datentyp des Ausgabefiles private $filename; // Dateiname des Ausgabefiles - private $temp_filename; - private $temp_folder; + private $temp_filename; // Dateinamen des Temp. Ausgabefiles + private $temp_folder; // Ordner in dem die Temp Dateien abgelegt werden + private $signed_filename; // Dateiname der signierten Datei private $images=array(); private $sourceDir; public $errormsg; @@ -151,7 +152,7 @@ class dokument_export $this->xml_data = new DOMDocument; if(!$this->xml_data->load($xml_url)) - die('unable to load xml: '.$xml_url); + die('unable to load xml: '.$xml_url.' XML:'.$xml.' PARAMs:'.$params); return true; } @@ -309,10 +310,18 @@ class dokument_export */ public function output($download=true) { - - $fsize = filesize($this->temp_filename); - if(!$handle = fopen($this->temp_filename,'r')) - die('load failed'); + if($this->signed_filename!='') + { + $fsize = filesize($this->signed_filename); + if(!$handle = fopen($this->signed_filename,'r')) + die('load failed'); + } + else + { + $fsize = filesize($this->temp_filename); + if(!$handle = fopen($this->temp_filename,'r')) + die('load failed'); + } if($download) { @@ -368,6 +377,10 @@ class dokument_export unlink('styles.xml'); unlink($this->temp_filename); + + if($this->signed_filename != '') + unlink($this->signed_filename); + if(file_exists("out.zip")) unlink('out.zip'); @@ -461,5 +474,85 @@ class dokument_export { $this->filename = $filename; } + + /** + * Schickt das Dokument an den Signaturserver um dieses mit einer Amtssignatur zu versehen + * Es koennen nur PDFs signiert werden + * @param $user User der die Signatur erstellen will + * @param $profile Signaturprofil mit der das Dokument signiert werden soll (Optional) + */ + public function sign($user, $profile = null) + { + if($this->outputformat != 'pdf') + { + $this->errormsg = 'Derzeit koennen nur PDFs signiert werden'; + return false; + } + + // Load the File + $file_data = file_get_contents($this->temp_filename); + + $data = new stdClass(); + $data->document = base64_encode($file_data); + + // Signatur Profil + if(!is_null($profile)) + $data->profile = $profile; + else + $data->profile = SIGNATUR_DEFAULT_PROFILE; + + // Username des Endusers der die Signatur angefordert hat + $data->user = $user; + + $ch = curl_init(); + + curl_setopt($ch, CURLOPT_URL, SIGNATUR_URL); + curl_setopt($ch, CURLOPT_CONNECTTIMEOUT, 7); + curl_setopt($ch, CURLOPT_USERAGENT, "FH-Complete"); + + // SSL Zertifikatsprüfung deaktivieren + // Besser ist es das Zertifikat am Server zu installieren! + //curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, false); + //curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false); + + $data_string = json_encode($data,JSON_FORCE_OBJECT); + + curl_setopt($ch, CURLOPT_CUSTOMREQUEST, "POST"); + curl_setopt($ch, CURLOPT_POSTFIELDS, $data_string); + curl_setopt($ch, CURLOPT_RETURNTRANSFER, true); + curl_setopt($ch, CURLOPT_HTTPHEADER, array( + 'Content-Type: application/json', + 'Content-Length:'.mb_strlen($data_string), + 'Authorization: Basic '.base64_encode(SIGNATUR_USER.":".SIGNATUR_PASSWORD) + ) + ); + + $result = curl_exec($ch); + if (curl_errno($ch)) + { + curl_close($ch); + $this->errormsg = 'Signaturserver ist derzeit nicht erreichbar'; + } + else + { + curl_close($ch); + $resultdata = json_decode($result); + + if (isset($resultdata->success) && $resultdata->success == 'true') + { + $this->signed_filename = $this->temp_folder .'/signed.pdf'; + file_put_contents($this->signed_filename, base64_decode($resultdata->document)); + return true; + } + else + { + if(isset($resultdata->errormsg)) + $this->errormsg = $resultdata->errormsg; + else + $this->errormsg = 'Unknown Error:'.print_r($resultdata,true); + return false; + } + } + } } ?>