diff --git a/content/dokumentenakt.pdf.php b/content/dokumentenakt.pdf.php new file mode 100755 index 000000000..1b0077c74 --- /dev/null +++ b/content/dokumentenakt.pdf.php @@ -0,0 +1,218 @@ +. + */ + + +require_once(dirname(__FILE__).'/../config/vilesci.config.inc.php'); +require_once(dirname(__FILE__).'/../include/pdf.class.php'); +require_once(dirname(__FILE__).'/../include/dokument_export.class.php'); +require_once(dirname(__FILE__).'/../include/phrasen.class.php'); +require_once(dirname(__FILE__).'/../include/prestudent.class.php'); +require_once(dirname(__FILE__).'/../include/dms.class.php'); + +$sprache = getSprache(); +$p=new phrasen($sprache); + +$db = new basis_db(); + +$user = get_uid(); + +if(!isset($_GET["prestudent_ids"]) || !isset($_GET["vorlage_kurzbz"])) + die($p->t('anwesenheitsliste/fehlerhafteParameteruebergabe')); + +$prestudent_ids = explode(";", $_GET["prestudent_ids"]); + +if(count($prestudent_ids) < 1) + die($p->t('anwesenheitsliste/fehlerhafteParameteruebergabe')); + + + +/* + * Temporaeren Ordner fuer die erstellung der Dokumente generieren + */ +$tmpDir = sys_get_temp_dir() . "/dokumentenakt_" . uniqid(); + +if (!file_exists($tmpDir)) + mkdir($tmpDir, 0777, true); + +/* + * converter classes + */ +$pdf = new pdf(); +$docExp = new dokument_export(); + + +/* + * Create Documents + */ +$allDocs = array(); +foreach($prestudent_ids as $pid) +{ + $prestudent = new prestudent(); + if(!$prestudent->load($pid)) + cleanUpAndDie($p->t('tools/studentWurdeNichtGefunden')."(".$pid.")", $tmpDir); + + /* + * Deckblatt + */ + $filename = $tmpDir . "/".uniqid(); + $doc = new dokument_export('Bewerberakt'); + $doc->addDataArray(array('vorname' => $prestudent->vorname, 'nachname' => $prestudent->nachname),'bewerberakt'); + + if(!$doc->create('pdf')) + die($doc->errormsg); + $doc->temp_filename = $filename; + $doc->output(false); + //$doc->close(); + $allDocs[] = $filename; + + + /* + * Get all Documents + */ + $query= ' + SELECT + titel, dms_id, inhalt + FROM + public.tbl_dokumentstudiengang + JOIN public.tbl_prestudent USING(studiengang_kz) + JOIN public.tbl_akte USING(person_id,dokument_kurzbz) + WHERE + onlinebewerbung + AND prestudent_id='.$db->db_add_param($pid, FHC_INTEGER).'; + '; + + $result = $db->db_query($query); + while($row = $db->db_fetch_object($result)) + { + + + $filename = ""; + if($row->dms_id != null) + { + $dms = new dms(); + $dms->load($row->dms_id); + + $filename = DMS_PATH . $dms->filename; + } + else if($row->inhalt != null) + { + $filename = $tmpDir . "/".uniqid(); + $fileData = base64_decode($row->inhalt); + file_put_contents($filename, $fileData); + } + + + if($filename == "") + continue; + + + /* + * Determine the filetype + * and convert, if nessecary + */ + $explodedTitle = explode(".", $row->titel); + $type = $explodedTitle[count($explodedTitle)-1]; + if($type == "jpg" || $type = "jpeg") + { + $fullFilename = $tmpDir . "/".uniqid() . ".pdf"; + if(!$pdf->jpegToPdf($filename, $fullFilename)) + cleanUpAndDie($pdf->errormsg, $tmpDir); + } + else if($type == "odt" || $type == "doc" || $type == "docx") + { + $fullFilename = $tmpDir . "/".uniqid() . ".pdf"; + $docExp->convert($filename, $fullFilename, "pdf"); + } + else if($type == "pdf") + { + $fullFilename = $row->titel; + } + else + cleanUpAndDie("falscher typ TODO", $tmpDir); + + // only filled, if the file is supported + if($fullFilename != "") + { + $allDocs[] = $fullFilename; + } + + } +} + + +/* + * generate the merged PDF + */ +$finishedPdf = $tmpDir . "/Dokumentenakt.pdf"; +if(!$pdf->merge($allDocs, $finishedPdf)) + cleanUpAndDie($pdf->errormsg, $tmpDir); +$fsize = filesize($finishedPdf); + +if(!$handle = fopen($finishedPdf,'r')) + die('load failed'); + +header('Content-type: application/pdf'); +header('Content-Disposition: attachment; filename="'.$finishedPdf); +header('Content-Length: '.$fsize); + +while (!feof($handle)) +{ + echo fread($handle, 8192); +} +fclose($handle); + + + + +/* + * Cleanup + */ +removeFolder($tmpDir); + + + + + +/* + * Functions + */ +function cleanUpAndDie($msg, $tmpDir) +{ + removeFolder($tmpDir); + die($msg); +} + +function removeFolder($dir) +{ + + if($dir == "/") + return false; + if (is_dir($dir) === true) + { + $files = array_diff(scandir($dir), array('.', '..')); + foreach ($files as $file) + { + unlink($dir . "/" . $file); + } + return rmdir($dir); + } + return false; +} +?> diff --git a/include/dokument_export.class.php b/include/dokument_export.class.php index f60f94c3e..c24725ec1 100644 --- a/include/dokument_export.class.php +++ b/include/dokument_export.class.php @@ -16,6 +16,7 @@ * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307, USA. * * Authors: Andreas Oesterreicher and + * Andreas Moik . */ require_once(dirname(__FILE__).'/vorlage.class.php'); require_once(dirname(__FILE__).'/addon.class.php'); @@ -37,8 +38,11 @@ class dokument_export /** * Konstruktor */ - public function __construct($vorlage, $oe_kurzbz=0, $version=null) + public function __construct($vorlage = null, $oe_kurzbz=0, $version=null) { + if(!isset($vorlage)) + return; + //Vorlage aus der Datenbank holen $this->vorlage = new vorlage(); if(!$this->vorlage->getAktuelleVorlage($oe_kurzbz, $vorlage, $version)) @@ -389,5 +393,28 @@ class dokument_export } return $_xml_data->asXML(); } + + /** + * Konvertiert ein Dokument in ein anderes Format + * @param string $inFile Origin File Path + * @param string $outFile Output file + * @param string $format Format to export To + * @return boolean + */ + public function convert($inFile, $outFile, $format = "pdf") + { + $command = 'unoconv --format %s --output %s %s'; + $command = sprintf($command, $format, $outFile, $inFile); + + + exec($command, $out, $ret); + if($ret!=0) + { + $this->errormsg = 'Dokumentenkonvertierung ist derzeit nicht möglich. Bitte informieren Sie den Administrator'; + return false; + } + + return true; + } } ?> diff --git a/include/pdf.class.php b/include/pdf.class.php new file mode 100644 index 000000000..033c0f5a6 --- /dev/null +++ b/include/pdf.class.php @@ -0,0 +1,107 @@ +. + */ + +class Pdf +{ + public $errormsg = ""; + + /** + * Fügt beliebig viele PDF Dateien zu einer zusammen + * @param array $files Array mit Dateien + * @param string $outFile Zieldatei + * @return boolean + */ + public function merge($files, $outFile) + { + $cmd = "gs -q -dNOPAUSE -dBATCH -sDEVICE=pdfwrite -sOutputFile=$outFile "; + $finfo = finfo_open(FILEINFO_MIME_TYPE); + + // add all pdf files to the command + foreach($files as $f) + { + $cmd .= $f." "; + if(!file_exists($f)) + { + $this->errormsg = "File not found: '$f'"; + return false; + } + if(finfo_file($finfo, $f) != "application/pdf") + { + $this->errormsg = "Wrong format: '$f'"; + return false; + } + } + + finfo_close($finfo); + + exec($cmd, $out, $ret); + if($ret!=0) + { + $this->errormsg = 'PDF-zusammenfuegung ist derzeit nicht möglich. Bitte informieren Sie den Administrator'; + return false; + } + return true; + } + + + /** + * Konvertiert eine jpeg Datei zu einer PDF + * @param string $image jpeg Datei + * @param string $outFile Zieldatei + * @return boolean + */ + public function jpegToPdf($image, $outFile) + { + if(!file_exists($image)) + { + $this->errormsg = "File not found: '$image'"; + return false; + } + + $s = getimagesize($image); + + /* + * längere Seite ermitteln + * Hochformat wenn die Seiten gleich lang sind. + */ + if($s[0] > $s[1]) + { + $height = 595; + $width = 842; + } + else + { + $height = 842; + $width = 595; + } + + // -r300 = 300 ppi + $cmd = 'gs -q -dNOPAUSE -dBATCH -sDEVICE=pdfwrite -r100 -o '.$outFile.' viewjpeg.ps -c "('.$image.') << /PageSize [' . $width . ' ' . $height .'] /.HWMargins [18 18 18 13.5] /countspaces { [ exch { dup 32 ne { pop } if } forall ] length } bind def >> setpagedevice viewJPEG"'; + + exec($cmd, $out, $ret); + if($ret!=0) + { + $this->errormsg = 'jpegToPdf ist derzeit nicht möglich. Bitte informieren Sie den Administrator'; + return false; + } + return true; + } +} + diff --git a/system/dbupdate_3.2.php b/system/dbupdate_3.2.php index d309f81af..2ab852b18 100755 --- a/system/dbupdate_3.2.php +++ b/system/dbupdate_3.2.php @@ -1297,6 +1297,39 @@ if(!@$db->db_query("SELECT bezeichnung_mehrsprachig FROM public.tbl_status LIMIT } + + +/************************************ 07.16 Vorlage für bewerberakt ************************************/ +if($result = $db->db_query("SELECT * FROM public.tbl_vorlage WHERE vorlage_kurzbz='Bewerberakt'")) +{ + if($db->db_num_rows($result)==0) + { + $qry_oe = "SELECT oe_kurzbz FROM public.tbl_organisationseinheit WHERE oe_parent_kurzbz is null"; + if($result = $db->db_query($qry_oe)) + { + $qry = "INSERT INTO public.tbl_vorlage(vorlage_kurzbz, bezeichnung, anmerkung,mimetype) + VALUES('Bewerberakt','Bewerberakt Deckblatt', 'wird als Deckblatt fuer den Bewerberakt verwendet', 'application/vnd.oasis.opendocument.text');"; + + $text = file_get_contents('xsl/Bewerberakt.xsl'); + + while($row = $db->db_fetch_object($result)) + { + $qry.="INSERT INTO public.tbl_vorlagestudiengang(vorlage_kurzbz, studiengang_kz, version, text, + oe_kurzbz, style, berechtigung, anmerkung_vorlagestudiengang, aktiv) VALUES( + 'Bewerberakt',0,0,".$db->db_add_param($text).",".$db->db_add_param($row->oe_kurzbz).",null,null,'',true);"; + } + } + + if(!$db->db_query($qry)) + echo 'Bewerberakt Dokumentenvorlage: '.$db->db_last_error().'
'; + else + echo 'Bewerberakt Dokumentenvorlage hinzugefuegt
'; + } +} + + + + // *** Pruefung und hinzufuegen der neuen Attribute und Tabellen echo '

Pruefe Tabellen und Attribute!

'; diff --git a/system/vorlage_zip/Bewerberakt.odt b/system/vorlage_zip/Bewerberakt.odt new file mode 100644 index 000000000..88226e050 Binary files /dev/null and b/system/vorlage_zip/Bewerberakt.odt differ diff --git a/system/xsl/Bewerberakt.xsl b/system/xsl/Bewerberakt.xsl new file mode 100644 index 000000000..d8e5e30ec --- /dev/null +++ b/system/xsl/Bewerberakt.xsl @@ -0,0 +1,14 @@ + + + + + + + +Bewerberakt + + + +