<?php
//installationsdatei
if(is_file("cms/install.php")) {
	header("Location: cms/install.php");
	exit;	
}

//Init-Einstellungen
ini_set('display_errors', 0);
error_reporting(E_ALL ^ E_NOTICE);
ini_set(session.use_trans_sid, OFF); //PHPSESSID nicht in Url übergeben
session_start();


//Konfigurationsdatei
$config_include = true; //Sicherheitsmaßnahme, Datei kann nur von unseren Skripten aufgerufen werden  ...
require_once("cms/includes/cms_config.inc.php");

// Aktuelle URI ohne Get-Parameter
$url = explode("?",$_SERVER["REQUEST_URI"]);
define('SELF_URI', $url[0]);

header("Content-Type: text/html; charset=utf-8"); 
//Autoload für Klassen
function autoload($class_name) {
	$path = "cms/includes/classes/" . $class_name . ".php";
	if(file_exists($path)) require_once($path);
}
spl_autoload_register('autoload');

//Autoload für anderen Klassennamenaufbau von Drittanbietern, z.B. PHP-Mailer
function autoload2($class_name) {
	$path = "cms/includes/classes/class." . strtolower($class_name) . ".php";
	if(file_exists($path)) require_once($path);
}
spl_autoload_register('autoload2');

//Autoload für CMS-Module
function autoload_module($class_name) {
    $main_class_name = $class_name;
    //Ausnahme für Klassen mit zwei Classen-Definitions-Dateien
    if($main_class_name=="SlideshowElements") $main_class_name = "Slideshow";
    
    $path = "cms/modul_" . strtolower($main_class_name) . "/classes/".$class_name.".php";
	if(file_exists($path)) require_once($path);
    //else echo $path." konnte nicht geladen werden!";
}
spl_autoload_register('autoload_module');

//Autoload für individuelle Erweiterungen, Veränderungen von Core Klassen
function autoload3($class_name) {
	$path = "templates/includes/classes/" . $class_name . ".php";
	if(file_exists($path)) require_once($path);
}
spl_autoload_register('autoload3');

//Datenbankverbindung
require_once("cms/includes/dbconnect.inc.php");

//Funktionslibrary, benötigt für z.B. str_length() in Standard-Klassen verwendet
require_once("cms/includes/lib.inc.php");



//### ACHTUNG: Bei Projekt Online-Stellung anpassen: ###
//Projekttitel für title-Tag
$frontend_title = $config['frontend_title'];
if($config['base_path'] == '') {
	$frontend_base_url = $config['base_url']; //Slash davor entfernen
}
else {
	$frontend_base_url = $config['base_url'] . $config['base_path'];
}
//###

//Aktuelle Sprache
$languages = new Language;
$all_languages_array = $languages->getActiveLangs(); //Alle Sprachversionen holen und speichern

//Keine Sprache gewählt -> Standardsprache aus DB holen
//INFO: Falls die gewählte Sprache aus irgendwelchen Gründen nicht zu der angezeigten Seite passen sollten, wird diese weiter unten noch einmal überschrieben
if(!isset($_SESSION["frontend_lang"])) {
	$_SESSION["frontend_lang"] = $languages->getDefaultLang();
}
//Sprachvariable übergeben
if(isset($_GET["lang"])) {
	$_SESSION["frontend_lang"] = $_GET["lang"];
}

//Page Objekt
$current_page = new MyPage;
//content Objekt
$contents = new Content;

//Startseite für die aktuelle Sprachversion suchen
//Wichtig! Wert ist nötig für Navigationsfunktionen etc.
$homepage_id = $current_page->findHomepageForLang($_SESSION["frontend_lang"]);

//ID übergeben?
if(is_numeric($_GET["id"])) {	
	
	$page_id = $_GET["id"];
	
	//Sprache gewechselt -> Verknüpfte Seite suchen und weiterleiten, sonst Startseite
	if(isset($_GET["lang"])) {
		if($verknuepfte_seite = $languages->findLinkedPage($_GET["id"],$_SESSION["frontend_lang"])) {
			Redirect::to($current_page->createFrontendLink($verknuepfte_seite["id"],$verknuepfte_seite["titel"],$verknuepfte_seite["seo_path"],$verknuepfte_seite["seo_url"]));
		}
		else {
			Redirect::to($base_url);
		}
	}
}
//Url enthält keine Id, dann versuchen über den Seitentitel die Seite zu finden
elseif(!is_numeric($_GET["id"]) && $_SERVER["REQUEST_URI"] != "/index.php" && $_SERVER["REQUEST_URI"] != "index.php" && $_SERVER["REQUEST_URI"] != "/" && SELF_URI != "/") {	

	//Übergabeparameter rausfiltern, um Seo-Url auslesen zu können
	//$titel_arr = explode("/",$_SERVER["REQUEST_URI"]);
	//pre($titel_arr);
	//$found = preg_grep("/(.htm)/", $titel_arr);	
	//pre($found);	
	//$titel = implode('/',$titel_arr);
	$uri = $_SERVER["REQUEST_URI"];
	$seo_url = substr($uri,0,strpos($uri, ".htm"));
	//echo "seo_url:".$seo_url;
	//exit;
	$page_id = NULL;
	
}
//Ansonsten: Startseite für die aktuelle Sprache holen
else {
	$page_id = $homepage_id;
}

//Seitendaten in Array schreiben
//Über ID holen
if($page_id !== NULL) $current_page_data = $current_page->getPageData($page_id);
//Über SEO-Url holen
else { 
    $seo_url = str_replace("//","/",$seo_url); //Double-Slashes entfernen, falls vorhanden
	$current_page_data = $current_page->getPageDatafromSeoUrl($seo_url); 
}

//Page ID in Content Objekt speichern
$contents->setPageID($current_page_data["id"]);
// Die Daten der aktuell angezeigten Seite im Content Objekt speichern, damit man auf die Daten der aktuellen Seite in Inhaltselement Ausgaben zugreifen kann
$contents->setPageData($current_page_data);

//Falls Sprache des Datensatzes nicht der gesetzten entspricht -> jetzt nochmal überschreiben
if($_SESSION["frontend_lang"] != $current_page_data["sprachen_id"]) {
	$_SESSION["frontend_lang"] = $current_page_data["sprachen_id"];
}

//Startseite ($_GET = $homepage_id), aber offline -> "under construction"
if($page_id ==  $homepage_id && $current_page_data["aktiv"] != 1) {
	Redirect::to($base_url . "offline.php");
}

//ID nicht vorhanden -> 404
if(empty($current_page_data)) {
    header("HTTP/1.0 404 Not Found");
	Redirect::to($base_url . "404.php");
}

//Seite ist offline -> index.php, außer für PREVIEW
if($current_page_data["aktiv"] != 1) {
	if(isset($_REQUEST["preview"])) {
		//Dann Seite anzeigen	
	} else {
		Redirect::to($base_url);
	}
}

//Template
//Template ID der aktuellen Seite in Content Objekt speichern, z.B. wichtig für Funktion getFrontendContent()
$contents->template_id = $current_page_data["templates_id"];
$templates = new Template;
if(!$template = $templates->getTemplatePath($current_page_data["templates_id"])) {
	echo 'Für die aktuelle Seite ist kein Template gewählt!';
	exit();
}
else {
	//Innerhalb eines Templates soll auf $data, anstelle von $current_page_data zugegriffen werden können
	$data = $current_page_data;
	$template_base_dir = "templates/"; //Für relative Pfade innerhalb Template, z.B. <img>
	if(is_file($template_base_dir.$template)) {
		include_once($template_base_dir.$template); //Template für die aktuelle Seite inkludieren
	} else echo "Template '".$template_base_dir.$template."' nicht gefunden!";
}
?>