diff --git a/content/pdfExport.php b/content/pdfExport.php index e1bd6ee12..d9b6128d3 100644 --- a/content/pdfExport.php +++ b/content/pdfExport.php @@ -31,6 +31,7 @@ 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'); $user = get_uid(); $db = new basis_db(); @@ -94,6 +95,10 @@ else } } +if(isset($_GET['xsl_oe_kurzbz'])) + $xsl_oe_kurzbz=$_GET['xsl_oe_kurzbz']; +else + $xsl_oe_kurzbz=''; //Parameter setzen $params='?xmlformat=xml'; @@ -186,20 +191,32 @@ if(!$xml_doc->load($xml_url)) die('unable to load xml: '.$xml_url); //XSL aus der DB holen -$qry = "SELECT text FROM public.tbl_vorlagestudiengang WHERE (studiengang_kz=0"; -if($xsl_stg_kz!='') -$qry.=" OR studiengang_kz='".addslashes($xsl_stg_kz)."'"; -$qry.=") AND vorlage_kurzbz='$xsl'"; -if(isset($version) && $version!='') - $qry.=" AND version='$version'"; -$qry.=" ORDER BY studiengang_kz DESC, version DESC LIMIT 1"; -//echo $qry; -if(!$result = $db->db_query($qry)) - die('Fehler beim Laden der Vorlage'.$db->db_last_error()); -if(!$row = $db->db_fetch_object($result)) - die('Vorlage wurde nicht gefunden'.$qry); +$vorlage = new vorlage(); +if($xsl_oe_kurzbz!='') +{ + $vorlage->getAktuelleVorlage($xsl_oe_kurzbz, $xsl, $version); +} +else +{ + if($xsl_stg_kz=='') + $xsl_stg_kz='0'; -$xsl_content = $row->text; + $vorlage->getAktuelleVorlage($xsl_stg_kz, $xsl, $version); +} +//$qry = "SELECT text FROM public.tbl_vorlagestudiengang WHERE (studiengang_kz=0"; +//if($xsl_stg_kz!='') +//$qry.=" OR studiengang_kz='".addslashes($xsl_stg_kz)."'"; +//$qry.=") AND vorlage_kurzbz='$xsl'"; +//if(isset($version) && $version!='') +// $qry.=" AND version='$version'"; +//$qry.=" ORDER BY studiengang_kz DESC, version DESC LIMIT 1"; +//echo $qry; +//if(!$result = $db->db_query($qry)) +// die('Fehler beim Laden der Vorlage'.$db->db_last_error()); +//if(!$row = $db->db_fetch_object($result)) +// die('Vorlage wurde nicht gefunden'.$qry); + +$xsl_content = $vorlage->text; //Pdf erstellen diff --git a/include/vorlage.class.php b/include/vorlage.class.php index 9bf9e8544..cbfdebcf3 100644 --- a/include/vorlage.class.php +++ b/include/vorlage.class.php @@ -44,17 +44,46 @@ class vorlage extends basis_db } /** - * Liefert die Aktuelle Vorlage + * Liefert die aktuelle Vorlage + * * - * @param $studiengang_kz - * @param $vorlage_kurzbz + * @param $oe_kurzbz Organisationseinheit der Vorlage + * Fuer Kompatibilitaetszwecke kann hier statt der oe_kurzbz auch die Studiengangskennzahl uebergeben werden. + * Dies wird in den kommenden Versionen jedoch nicht mehr moeglich sein! + * @param $vorlage_kurzbz Name der Vorlage + * @param $version optional kann die Versionsnummer der Vorlage uebergeben werden * @return boolean */ - public function getAktuelleVorlage($studiengang_kz, $vorlage_kurzbz) + public function getAktuelleVorlage($oe_kurzbz, $vorlage_kurzbz, $version=null) { - $qry = "SELECT * FROM public.tbl_vorlagestudiengang WHERE - (studiengang_kz=0 OR studiengang_kz='".addslashes($studiengang_kz)."') AND - vorlage_kurzbz='".addslashes($vorlage_kurzbz)."' ORDER BY studiengang_kz DESC, version DESC LIMIT 1"; + $studiengang_kz=''; + if(is_numeric($oe_kurzbz)) + { + $studiengang_kz=$oe_kurzbz; + } + + if($studiengang_kz!='') + { + $qry = "SELECT * FROM public.tbl_vorlagestudiengang WHERE + (studiengang_kz=0 OR studiengang_kz='".addslashes($studiengang_kz)."') AND + vorlage_kurzbz='".addslashes($vorlage_kurzbz)."'"; + if(!is_null($version) && $version!='') + { + $qry.=" AND version=='".addslashes($version)."'"; + } + $qry .=" ORDER BY studiengang_kz DESC, version DESC LIMIT 1"; + } + else + { + $qry = "SELECT * FROM public.tbl_vorlagestudiengang + WHERE oe_kurzbz='".addslashes($oe_kurzbz)."' + AND vorlage_kurzbz='".addslashes($vorlage_kurzbz)."'"; + if(!is_null($version) && $version!='') + { + $qry.=" AND version=='".addslashes($version)."'"; + } + $qry.=" ORDER BY version DESC LIMIT 1"; + } if($this->db_query($qry)) { @@ -68,8 +97,28 @@ class vorlage extends basis_db } else { - $this->errormsg = 'Keine Vorlage gefunden'; - return false; + if($studiengang_kz!='') + { + $this->errormsg = 'Keine Vorlage gefunden'; + return false; + } + else + { + //Wenn keine Vorlage zu dieser Organisationseinheit gefunden wurde, + //nachsehen ob fuer eine der uebergeordneten OEs eine Vorlage vorhanden ist. + $oe = new organisationseinheit(); + $oe->load($oe_kurzbz); + + if($oe->oe_parent_kurzbz!='') + { + return $this->getAktuelleVorlage($oe->oe_parent_kurzbz, $vorlage_kurzbz, $version); + } + else + { + $this->errormsg = 'Keine Vorlage gefunden'; + return false; + } + } } } else diff --git a/wawi/pdfExport.php b/wawi/pdfExport.php new file mode 100644 index 000000000..d9b6128d3 --- /dev/null +++ b/wawi/pdfExport.php @@ -0,0 +1,373 @@ +, + * Andreas Oesterreicher and + * Rudolf Hangl . + */ +/* Erstellt einen Lehrauftrag im PDF Format + * + * Erstellt ein XML File Transformiert dieses mit + * Hilfe der XSL-FO Vorlage aus der DB und generiert + * daraus ein PDF (xslfo2pdf) + */ +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'); + +$user = get_uid(); +$db = new basis_db(); +loadVariables($user); + +function clean_string($string) + { + $trans = array("ä" => "ae", + "Ä" => "Ae", + "ö" => "oe", + "Ö" => "Oe", + "ü" => "ue", + "Ü" => "Ue", + "á" => "a", + "à" => "a", + "é" => "e", + "è" => "e", + "ó" => "o", + "ò" => "o", + "í" => "i", + "ì" => "i", + "ù" => "u", + "ú" => "u", + "ß" => "ss"); + + $string = strtr($string, $trans); + return mb_ereg_replace("[^a-zA-Z0-9]", "", $string); + //[:space:] + } + +//Parameter holen +if(isset($_GET['xml'])) + $xml=$_GET['xml']; +else + die('Fehlerhafte Parameteruebergabe'); +if(isset($_GET['xsl'])) + $xsl=$_GET['xsl']; +else + die('Fehlerhafte Parameteruebergabe'); + +$xsl_stg_kz=0; +if(isset($_GET['xsl_stg_kz'])) + $xsl_stg_kz=$_GET['xsl_stg_kz']; +else + if(isset($_GET['stg_kz'])) + $xsl_stg_kz=$_GET['stg_kz']; + else + if(isset($_GET['uid']) && $_GET['uid']!='') + { + if(strstr(';',$_GET['uid'])) + $uids = explode(';',$_GET['uid']); + else + $uids = $_GET['uid']; + //var_dump($uids); + $qry = "SELECT student_uid, studiengang_kz FROM public.tbl_student WHERE student_uid='".addslashes($uids[1])."'"; + if($result_std = $db->db_query($qry)) + if($db->db_num_rows($result_std)==1) + { + $row_std = $db->db_fetch_object($result_std); + $xsl_stg_kz=$row_std->studiengang_kz; + } + } + +if(isset($_GET['xsl_oe_kurzbz'])) + $xsl_oe_kurzbz=$_GET['xsl_oe_kurzbz']; +else + $xsl_oe_kurzbz=''; + +//Parameter setzen +$params='?xmlformat=xml'; +if(isset($_GET['uid'])) + $params.='&uid='.$_GET['uid']; +if(isset($_GET['person_id'])) + $params.='&person_id='.$_GET['person_id']; +if(isset($_GET['id'])) + $params.='&id='.$_GET['id']; +if(isset($_GET['prestudent_id'])) + $params.='&prestudent_id='.$_GET['prestudent_id']; +if(isset($_GET['buchungsnummern'])) + $params.='&buchungsnummern='.$_GET['buchungsnummern']; +if(isset($_GET['stg_kz'])) + $params.='&stg_kz='.$_GET['stg_kz']; +if(isset($_GET['ss'])) + $params.='&ss='.$_GET['ss']; +if(isset($_GET['abschlusspruefung_id'])) + $params.='&abschlusspruefung_id='.$_GET['abschlusspruefung_id']; +if(isset($_GET['typ'])) + $params.='&typ='.$_GET['typ']; +if(isset($_GET['all'])) + $params.='&all='.$_GET['all']; +if(isset($_GET["lvid"])) + $params.='&lvid='.$_GET["lvid"]; +if(isset($_GET['version']) && is_numeric($_GET['version'])) + $version = $_GET['version']; +else + $version =''; + +if($xsl=='AccountInfo') +{ + $isberechtigt = false; + $rechte = new benutzerberechtigung(); + $rechte->getBerechtigungen($user); + + $uids = explode(';',$_GET['uid']); + 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)) + { + if($db->db_num_rows($result_ma)==1) + { + //Mitarbeiterrechte erforderlich + if($rechte->isBerechtigt('admin', 0, 'suid') || $rechte->isBerechtigt('mitarbeiter', 0, 'suid')) + { + $isberechtigt=true; + } + } + } + + $qry = "SELECT student_uid, studiengang_kz FROM public.tbl_student WHERE student_uid='".addslashes($uid)."'"; + if($result_std = $db->db_query($qry)) + { + if($db->db_num_rows($result_std)==1) + { + $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; + } + } + } + } + + if(!$isberechtigt) + { + echo 'Sie haben keine Berechtigung um dieses AccountInfoBlatt zu drucken'; + exit; + } +} + +//Berechtigung pruefen +$rechte = new benutzerberechtigung(); +$rechte->getBerechtigungen($user); + +$xml_url=XML_ROOT.$xml.$params; + +// Load the XML source +$xml_doc = new DOMDocument; + +if(!$xml_doc->load($xml_url)) + die('unable to load xml: '.$xml_url); + +//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); +} +//$qry = "SELECT text FROM public.tbl_vorlagestudiengang WHERE (studiengang_kz=0"; +//if($xsl_stg_kz!='') +//$qry.=" OR studiengang_kz='".addslashes($xsl_stg_kz)."'"; +//$qry.=") AND vorlage_kurzbz='$xsl'"; +//if(isset($version) && $version!='') +// $qry.=" AND version='$version'"; +//$qry.=" ORDER BY studiengang_kz DESC, version DESC LIMIT 1"; +//echo $qry; +//if(!$result = $db->db_query($qry)) +// die('Fehler beim Laden der Vorlage'.$db->db_last_error()); +//if(!$row = $db->db_fetch_object($result)) +// die('Vorlage wurde nicht gefunden'.$qry); + +$xsl_content = $vorlage->text; + +//Pdf erstellen + +//wenn uid gefunden wird, dann den Nachnamen zum Dateinamen dazuhaengen +$nachname=''; +if(isset($_GET['uid']) && $_GET['uid']!='') +{ + $uid = str_replace(';','',$_GET['uid']); + $qry = "SELECT nachname FROM campus.vw_benutzer WHERE uid='".addslashes($uid)."'"; + + if($result = $db->db_query($qry)) + { + if($row = $db->db_fetch_object($result)) + { + $nachname = '_'.clean_string($row->nachname); + } + } +} +$filename=$xsl.$nachname; + +if (!isset($_REQUEST["archive"])) +{ + 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'); + } + } +} +else +{ + $uid = $_REQUEST["uid"]; + $ss = $_REQUEST["ss"]; + $heute = date('Y-m-d'); + $query = "SELECT + tbl_studiengang.studiengang_kz, tbl_studentlehrverband.semester, tbl_studiengang.typ, + tbl_studiengang.kurzbz, tbl_person.person_id FROM tbl_person, tbl_benutzer, + tbl_studentlehrverband, tbl_studiengang + WHERE + tbl_studentlehrverband.student_uid = tbl_benutzer.uid + AND tbl_benutzer.person_id = tbl_person.person_id + AND tbl_studentlehrverband.studiengang_kz = tbl_studiengang.studiengang_kz + AND tbl_studentlehrverband.student_uid = '".addslashes($uid)."' + AND tbl_studentlehrverband.studiensemester_kurzbz = '".addslashes($ss)."'"; + + if($result = $db->db_query($query)) + { + if($row = $db->db_fetch_object($result)) + { + $person_id = $row->person_id; + $titel = "Zeugnis_".strtoupper($row->typ).strtoupper($row->kurzbz)."_".$row->semester; + $bezeichnung = "Zeugnis ".strtoupper($row->typ).strtoupper($row->kurzbz)." ".$row->semester.". Semester"; + $studiengang_kz = $row->studiengang_kz; + } + else + { + $echo = 'Datensatz wurde nicht gefunden'; + } + } + + if($rechte->isBerechtigt('admin', $studiengang_kz, 'suid') || $rechte->isBerechtigt('assistenz', $studiengang_kz, 'suid')) + { + if(PDF_CREATE_FUNCTION=='FOP') + { + $fop = new fop(); + $file = $fop->generatePdf($xml_doc->saveXML(), $xsl_content, $filename, "F"); + } + 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'); + } + $file = "/tmp/".$filename.".pdf"; + } + + $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->insertvon = $user; + $akte->ext_id = ""; + $akte->uid = $uid; + $akte->new = true; + if (!$akte->save()) + { + echo 'Erstellen Fehlgeschlagen: '.$akte->errormsg; + return false; + } + else + { + return true; + } + } + else + echo 'Keine Berechtigung zum Speichern'; +} +?>