<?php
//////////////////////////////////////////////////////////////
// Router: sprechende Adressen wie /transport/container/161
//
// Der Webserver schickt alles hierher, was keine eigene Datei ist
// (.htaccess im Wurzelverzeichnis). Kennt der Router die Adresse, sucht er
// die Rechte und bindet die Seite ein; kennt er sie nicht, kommt 404.
//
// Die Umstellung laeuft modulweise: was noch nicht in libs/routen.inc.php
// steht, wird weiter ueber seine Datei aufgerufen und funktioniert wie bisher.
//////////////////////////////////////////////////////////////

define('BB_ROUTER', 1);

require_once(__DIR__.'/libs/routen.inc.php');

$adresse = isset($_SERVER['REQUEST_URI']) ? (string)$_SERVER['REQUEST_URI'] : '';
$adresse = parse_url($adresse, PHP_URL_PATH);
$adresse = '/'.trim((string)$adresse, '/');

$treffer = bb_route_finden($adresse);
if ($treffer === false)
{
	header('HTTP/1.1 404 Not Found');
	header('content-type: text/html; charset=UTF-8');
	echo '<!DOCTYPE html><html lang="de"><head><meta charset="utf-8"><title>Nicht gefunden</title></head>'
		.'<body style="font:15px/1.5 system-ui,sans-serif;margin:3rem">'
		.'<h1 style="font-size:20px">Diese Seite gibt es nicht</h1>'
		.'<p><a href="/index.php">Zur Startseite</a></p></body></html>';
	exit(0);
}

// Die Werte aus der Adresse stehen danach in $_GET und $_REQUEST, als kaemen
// sie aus der Adresszeile - die Seiten dahinter aendern sich dadurch nicht.
foreach ($treffer['werte'] as $name => $wert)
{
	$_GET[$name] = $wert;
	$_REQUEST[$name] = $wert;
}

$datei = __DIR__.'/'.$treffer['datei'];
if (!is_file($datei))
{
	header('HTTP/1.1 500 Internal Server Error');
	echo 'Die Seite zu dieser Adresse fehlt: '.htmlspecialchars($treffer['datei'], ENT_QUOTES, 'UTF-8');
	exit(0);
}

// Im Verzeichnis der Seite arbeiten: die Seiten laden ihre Bibliotheken
// relativ (require '../libs/bluebilling.inc.php') und verlinken relativ.
chdir(dirname($datei));

// Die Rechte je Bereich prueft libs/bluebilling.inc.php, sobald die Sitzung
// offen ist - hier ist noch niemand angemeldet. Die Adresse wird nur gemerkt.
$GLOBALS['bb_route_adresse'] = $adresse;

require($datei);
