<?php

/* print_content - Erstellung einer druckoptimierten Version einer Webseite
M. Schulte, DECHEMA e.V.
Letzte Anpassung: 12.04.2011: Inhalte, die dynamisch über php generiert werden (ohne zusaetzliche HTML-Includes) werden nun direkt eingebunden (ebenfalls URLs, die weder vom Typ "html" sind noch solche, zu denen keine ergaenzenden inc-Dateien angelegt wurden
05.08.2005: Ermittlung des korrekten absoluten Pfads zu den Bilddateien (Zeile 66)
02.05.2009: Globale Variablen ersetzt
10.09.2010: zentrale Funktion zum Auslesen der Dateien (fopen-Funktion, bei html-Dateien)
18.10.2010: zusaetzliche Funktion zum Auslesen von URLs, die ueber php eingebunden werden und die selbst html-Inhalte includieren (file-Funktion, bei php-Dateien wg. Problemen mit Impressum, Datenschutz); Achtung: gleichnamige *.inc Dateien, die die auszulesenden URLs enthalten, sind im Verz. include zu erstellen!
12.04.2011: Inhalte, die dynamisch ueber php generiert werden (ohne zusaetzliche HTML-Includes) werden nun direkt eingebunden (ebenfalls URLs, die weder vom Typ "html" sind noch solche, zu denen keine ergaenzenden inc-Dateien angelegt wurden
*/

// Option, bestimmte Inhalte ein- oder auszublenden (z.B. Antworten bei FAQ)
if (!isset($_GET['displayStatus']))
{
	$displayStatus = "inline"; //Default
}
else $displayStatus = $_GET['displayStatus'];

// Festlegung, ob Bilder im Ausdruck weggelassen werden sollen, oder nicht (yes/no).
$stripImages = "no";

// Base domain name der Website (ohne vorangestellte slashes)
// zur Behandung evtl. Probleme mit relativen Links
$baseURL="www.achema.de";

// $refpage: Die Adresse der Seite, die per Navigation zuletzt augerufen wurde
$theHref = $_GET['theHref'];


// Unterscheidung der verschiedenen Dateitypen
if ((substr($theHref, -3) == "htm") || (substr($theHref, -4) == "html")) {
	$fileType = "html";
	$refpage = rawurldecode($theHref);
}

/* wenn theHref eine php-Datei ist, die selbst html-Instanzen includiert, 
muessen einzubindende/zu druckende Inhalte in einem Array "$contentArray" definiert sein.
Dieses Array wird z.Zt. in einer gleichnamigen Include-Datei mit der Extension .inc im Verz. include erwartet
Bsp.: php-Datei "start.php" -> Include-Datei "start.inc" mit Array $contentArray
Anmerkung: werden fuer unterschiedliche Sprachfassungen jeweils gesonderte php-Dateien genutzt (Bsp. Impressum, Datenschutz), so ist z.Zt. fuer jede dieser Dateien eine separate inc-Datei anzulegen (Duplikat)
Besteht keine solche Include-Datei, wird der ueber $theHref adressierte Inhalt komplett 1:1 eingebunden
*/
elseif (substr($theHref, -3) == "php") {
	$length = strlen($theHref) - 4; //4 Zeichen: vom Dateinamen werden die Extension php und der Punkt abgeschnitten
	$includeUrl = "include/" .substr($theHref, 0, $length) .".inc"; //Url zur gleichnamigen inc-Datei
	// Pruefen, ob gleichnamige Include-Datei vorhanden ist
	if (file_exists($includeUrl)) {
		$fileType = "php_mit_html_incl";
		require($includeUrl);
		switch($_GET['spkz'])
		{
			case "D":	for ($i=0; $i<sizeof($contentArray); $i++) {
						$refpage[$i] = $contentArray[$i][0];
					}
						break;

			case "E":	for ($i=0; $i<sizeof($contentArray); $i++) {
						$refpage[$i] = $contentArray[$i][1];
					}
						break;

			default:	for ($i=0; $i<sizeof($contentArray); $i++) {
						$refpage[$i] = $contentArray[$i][0];
					}
		}
	}
	else {
		$fileType = "php";
	}
}

//else $fileType = "html"; // Default

/* $path: Pfad zu den zugehörigen Dateien (Bildern)
   Regulärer Ausdruck schneidet den angehängten Dateinamen ab (Pfad bleibt übrig).
   Zu ersetzende Zeichenkette beginnt mit Buchstaben, Zahlen, Tiefstrich oder Bindestrich,
   gefolgt von einem Punkt ("escaped" mit \) und einer Zeichenkette mit 3-4 Zeichen,
   bestehend aus h, t, m, l oder p (also z.B. htm, html oder php).
   Das $-Zeichen steht für "Ende der Zeichenkette erwartet" (Dateiname steht zuletzt)
*/ 
$path = eregi_replace("[_0-9a-z-]+\.+[htmlp]{3,4}$","",$_GET['theHref']);

// Start- und Endpunkt koennen im zu druckenden Dokument gekennzeichnet sein
$startingpoint = "<!-- startprint -->";
$endingpoint = "<!-- stopprint -->";

// let's turn off any ugly errors for a sec-
error_reporting(0);

// Funktion zum Auslesen von Dateien (fopen-Funktion, bei html-Dateien)
function readContent($fileName)
{
	$read = fopen($fileName, "r") or die ("<br />Error reading file<br />"); // Die in der URL uebergebene Datei zum Lesen oeffnen
	$value = "";
	while(!feof($read)){ // feof prueft, ob der Dateizeiger am Ende der Datei steht
		$value = fread($read, 16000); // fread liest Binaerdaten aus der Datei (Parameter: Laenge in Bytes)
	}
	fclose($read); // Schliessen der Datei
	$start= strpos($value, "$startingpoint"); // strpos sucht erstes Vorkommen des Suchstrings und liefert die Position
	$finish= strpos($value, "$endingpoint");
	$length= $finish-$start;
	if (!($start===false or $finish===false)) { // Beruecksichtigung von start- bzw. stopprint-Marken
		$value=substr($value, $start, $length);
		}
	$fileContent = ("$value");
	return $fileContent;
}

// Funktion zum zeilenweisen Auslesen (file-Funktion, bei php-Dateien, eingefuehrt mit Einbindung von Impressum, Datenschutz)
function readFileContent($fileName)
{
	$file = file($fileName);
	foreach ($file as $string){
		$text .= $string;
	}
	// Sonderfaelle Impressum, Datenschutz
	$searchString1 = "impressum";
	$searchString2 = "imprint";
	$searchString3 = "datenschutz";
	$searchString4 = "privacy";
	$pos1 = strpos($fileName, $searchString1);
	$pos2 = strpos($fileName, $searchString2);
	$pos3 = strpos($fileName, $searchString3);
	$pos4 = strpos($fileName, $searchString4);
	if (!$pos1 === false || !$pos2 === false || !$pos3 === false || !$pos4 === false) {
			//echo($fileName .": " .$pos3); Debug
			$text = str_replace("src=\"", "src=\"http://www.dechema.de", $text); // URLs zu Abb.
			$text = str_replace("href=\"", "href=\"http://www.dechema.de", $text); // Links im Dokument
			$text = str_replace("mce_real_href=\"", "", $text); //hartnaeckige Extra-Verlinkung aus dem CMS
			
		}
	// Sonderfall News (Fehler Ueberschrift, Englisch
	$searchString5 = "news_en";
	$pos5 = strpos($fileName, $searchString5);
	if (!$pos5 === false) {
		$text = str_replace("Aktuelles", "News", $text);
	}
	return $text;
}


// Funktion zur Ausblendung von Bildern (optional, je nach Wert von $stripImages)
function i_denude($variable)
{
return(eregi_replace("<img [^>]*>", "", $variable));
}

// Funktion zur Ausgabe von im Dokument zunaechst ausgeblendeten Elementen (Text, style="display:none;")
function display_invisible($variable)
{
return(eregi_replace("display:none;", "display:visible;", $variable));
}

// Funktion zur Entfernung von Font-Tags
function i_denudef($variable)
{
return(eregi_replace("<font[^>]*>", "", $variable));
}

// Funktion zur Entfernung von weiterfuehrenden Links im zu druckenden Dokument
// Unterstreichung
function i_denudelinks($variable)
{
$withoutLinks = eregi_replace("<a href=\"[^>]*>", "<u>", $variable);
$withoutLinks = eregi_replace("<a target=[^>]*>", "<u>", $withoutLinks);
$withoutLinks = eregi_replace("<a [^>]*>", "<u>", $withoutLinks);
return $withoutLinks;
}

// auszugebender String vor Bereinigung
switch($fileType)
{
	case "html":	$readTheHref=TRUE; // URL mit Inhalt soll gelesen werden
			$PHPrint = readContent($refpage);
				break;
	
	case "php_mit_html_incl":	$readTheHref=TRUE;
					for ($i=0; $i<sizeof($contentArray); $i++) {
					$PHPrint .= readFileContent($refpage[$i]); // Zusammensetzung der includierten Dateiinhalte
					}
						break;
	case "php":	$readTheHref=FALSE; // URL soll nicht gelesen sondern direkt eingebunden werden
	default:	$readTheHref = FALSE;
}

// alte Version: $PHPrint = ("$value");

// Bilder herausnehmen, wenn Option gewünscht
if ($stripImages == "yes") {
$PHPrint = i_denude("$PHPrint");
}

// Bei Ausdruck von Bildern Pfad anpassen (wird jetzt absolut ermittelt)
elseif ($path != "") {
$PHPrint = eregi_replace( "<img src=\"", "<img src=\"" .$path, $PHPrint );
}

//Ausgabe von im Dokument zunaechst ausgeblendeten Elementen
$PHPrint = display_invisible("$PHPrint");

// Font-Tags herausnehmen
$PHPrint = i_denudef("$PHPrint");
$PHPrint = eregi_replace( "</font>", "", $PHPrint );

// Entfernung von weiterführenden Links im zu druckenden Dokument
$PHPrint = i_denudelinks("$PHPrint");
$PHPrint = eregi_replace( "</a>", "</u>", $PHPrint );

// evtl. vorhandene Backslashes entfernen
$PHPrint = stripslashes("$PHPrint");
?>

<html>
<head>
	<link rel=stylesheet type="text/css" href="css/style_print.css">
	<link rel=stylesheet type="text/css" href="css/formatierung.css">
</head>
<body>

<?php
// Ausgabeteil

// Basis-URL
//echo "<base href=\"$baseURL\">";

// Kopf
echo ("<div id=\"headline\">");
echo ("<img src=\"skin/achema_online.gif\">");
echo ("<hr>");
echo ("</div>");


// Ausgabe des bereinigten Inhalts
if ($readTheHref) {
	echo $PHPrint;
}
else include("$theHref");

// URL soll mit ausgedruckt werden
echo ("<p>&nbsp;</p>");
echo ("<hr><p>Page printed from: " .sprintf("%s%s","http://",$baseURL) ."</p>");

/* Pfad zu den Dateien (nur zu Debug-Zwecken)
echo "Path: " .$path;
*/

// Copyright nicht vergessen!
echo "<p> &copy; DECHEMA Ausstellungs-GmbH 2013. All rights reserved.</p>";

?>
<p>&nbsp;</p>
<p>
[<a href="javascript:print();"><b>print</b></a>] &nbsp;
[<a href="javascript:self.close();"><b>close window</b></a>]
</p>
</body>
</html>