Location: PHPKode > projects > Aratix > aratix/index.php
<?php
/*
** Aratix
** Version 0.1.0beta8 (Anubis)
**
** Autor: Manuel Burghammer
** E-Mail: hide@address.com
** Homepage: http://www.xitara.net
**
** File: index.php - Version 0.3.0 build 99
** Position: /
** Last Modified: 24.06.2006 - 18:15:19
**
** Diese Software steht unter der Creative Commons.
**
** Nachzulesen unter:
** http://creativecommons.org/licenses/by-sa/2.0/de/
**
** Aufgrund dieser Lizenz darf das Copyright weder
** entfernt noch unkenntlich gemacht werden.
*/

/* Debugging einstellen:
**
** 0 - Kein Logfile
** 1 - LOG
** 2 - WARN
** 3 - ERROR
** 4 - DEBUG
*/
$debug_level = 0;

/*
** config.inc.php
** mysql.conf.php
**
** nicht vorhanden sind,
** wird angenommen, das Aratix
** noch nicht installiert ist.
**
** Dadurch erfolgt eine weiterleitung
** in das Setupverzeichnis
*/
if(!file_exists('inc/config.inc.php') && !file_exists('inc/mysql.conf.php'))
	header('Location: http://' . $_SERVER['SERVER_NAME'] . '' . dirname($_SERVER['PHP_SELF']) . '/setup');

/* Folgende Definition wird in den
** Modulen ausgewertet um deren
** direkten Aufruf zu unterbinden
*/
define('ARATIX_PART', 1);

/* Startzeit speichern
*/
$starttime = microtime();

/* Aktuellen Pfad festlegen
*/
$current_path = dirname(__FILE__) . "/";

/* Software initialisieren
**
** sämtliche Initialisierungen
** erfolgen über die Datei
**
** init.inc.php
*/
include $current_path . 'inc/init.inc.php';

/* Cache löschen, nur bei der Entwicklung nötig
**
** In Produktivsystemen sollten diese Zeilen
** entfernt werden
*/
$content->clear_all_cache();

/* Login
**
** TODO:
** Bei einer fehlerhaften Anmeldung
** eine entsprechende Fehlerseite
** aufrufen
*/
if(get('action') == "login"){
	if(($session = login($db, $config)) == FALSE){
		echo "Login fehlgeschlagen!";
		exit();
	}
	else
		header("Location: http://" . $url . $config->get('folder') . "/index.php?session=" . $session . "&ident=" . md5(get('login')));
}

/* Logout
**
** Nach erfolgreichen Logout
** wird die Startseite aufgerufen.
*/
if(get('action') == "logout"){
	logout($db, get('session'), get('ident'));
	header("Location: http://" . $url . "/" . $config->get('folder'));
}

/* Statusüberprüfung
**
** Feststellen, ob User eingeloggt ist
** (auf vorhandene Session prüfen).
**
** Falls keine Session übergeben wurde,
** wird der Status "2" (Gast) vergeben.
**
** Falls eine Session übergeben wurde,
** wird diese in der Datenbank geprüft
** und der entsprechende Status zurück
** gegeben und ein String mit
**
** $session
** $ident
**
** erzeugt. Die Ident ist ein MD5-String
** des Loginnamens und muss mit der Session
** in der Datenbank zusammenpassen.
*/
if(!get('session') && !isset($session)){
	$user_status = 2;
	$session_string = "";
}
else{
	if(!isset($session))
		$session = get('session');
	if(get('action') != "login")
		$ident = get('ident');
	else
		$ident = MD5(get('login'));

	$user_status = update_session($db, $session, $ident);

	if($user_status == FALSE)
		die("Fehler in der Session");

	$user_name = $db->read(TB_SESSION, "user", "user_md5='" . $ident . "'");
	$session_string = "session=" . $session . "&ident=" . $ident . "&";
}
$debug->write(DEBUG, "Userstatus: " . $user_status, __FILE__, __CLASS__, __METHOD__, __FUNCTION__, __LINE__);

/* Feststellen, ob ID Übergeben wurde,
** sonst auf Startseite leiten.
**
** TODO:
** Falls ein Modul als Startseite
** angegeben wurde, dieses Aufrufen.
**
** Jeder angemeldete User kann seine
** eigene Startseite festlegen.
** Global kann diese vom Admin
** geändert werden.
*/

if(!($module = get('module'))){
	if(!($page_id = get("id")))
		$page_id = 1;

/* Seitendaten auslesen
**
** Daten der aktuellen Seite
** Aus der Datenbank holen.
*/
	$page_data = $db->read(TB_PAGES, "head_text, content, id, module_name", "id=" . $page_id);
	$debug->write(DEBUG, "Seitendaten auslesen: " . $page_id, __FILE__, __CLASS__, __METHOD__, __FUNCTION__, __LINE__);

	if($module == "")
		$module = $page_data['module_name'];

	if($module != ""){
		if(!check_module_acc($db, $module, $user_status)){
			echo "Keine Berechtigung für dieses Modul!";
			exit();
		}
	$my->table($module);
	include('modules/module_' . $module . '/module_' . $module . '.php');
	$page_id = $module;
	}

/* Seitenberechtigung
**
** Falls User für diese Seite nicht berechtigt
** ist, wird eine Fehlermeldung ausgegeben.
**
** TODO:
** Statt der Fehlerausgabe soll eine
** Weiterleitung auf eine Fehlerseite
** erfolgen
*/

/* Debugausgabe, zum löschen markiert */
// 	echo "Status: $user_status<br />\n";
/* Debugausgabe Ende */

	if(!check_page_acc($db, $page_id, $user_status) && !isset($module)){
		echo "Keine Berechtigung für diese Seite!";
		exit();
	}
}
else {
	if(!check_module_acc($db, $module, $user_status)){
		echo "Keine Berechtigung für dieses Modul!";
		exit();
	}
	$my->table($module);
	include('modules/module_' . $module . '/module_' . $module . '.php');
	$page_id = $module;
}

/* Seitendaten aus der Datenbank
** auslesen.
*/
$site_title = $config->get("title");
$generator = $config->get("generator");
$core_version = $config->get("version");
$description = $config->get("description");
$author = $config->get("author");
$keywords = $config->get("keywords");

/* Layout
**
** Falls ein Layout in der URL übergeben
** wurde, wird dieses verwendet.
** Das wird nur für Gäste nötig, da bei
** Usern das gewählte Layout in der
** Datenbank gespeichert wird
**
** TODO:
** Wird evtl. wieder entfernt, falls die
** Umsetzung Probleme macht.
*/
if(($layout = get('layout')) == "")
	$layout = $config->get('layout');

/* Template-Engine (Smarty)
**
** Verzeichnisse definieren, in denen
** die aktuellen Templates liegen.
** Dort werden die Layouts abgelegt
*/
$content->template_dir = "templates/" .$layout;
$content->compile_dir = "templates_c/" . $layout;

/* Blockdaten auslesen
**
** Für alle Blöcke Daten aus der Datenbank
** holen.
**
** $align_array
** enthält die möglichen Positionen.
*/
$align_array = array("left", "right", "top", "bottom"); // Blockpositionen definieren

/* Für jede Position wird ein
** seperates Array erzeugt, das
** im Template ausgegeben werden
** kann. Alternativ ist es möglich,
** jeden Block anhand des Namens
** direkt im Template aufzurufen.
*/
foreach($align_array as $align){ // Für jede Position die Schleife durchlaufen
	$debug->write(DEBUG, "Blockdaten auslesen: " . $align, __FILE__, __CLASS__, __METHOD__, __FUNCTION__, __LINE__);
/* Das WHERE-Statement initialisieren.
** Falls der User der Admin ist, bleibt
** diese Variable leer.
*/
	$user_blocks = "";

/* Wenn der User kein Admin ist, dann
** wird das Statement erzeugt.
*/
	if($user_status != 99999 && $user_status != ""){
		$user_status_array = $user->group_array($user_status);

		if(count($user_status_array) == 0)
			$user_status_array = array("2");

		$user_blocks .= " AND (";

/* Für jede Gruppe, der der User angehört,
** wird die Schleife durchlaufen, um
** ein gesammtes Statement zu erzeugen
*/
		foreach($user_status_array as $user_status_){
			$user_blocks .= " groups LIKE '%|" . $user_status_ . "|%'";

			if($user_status_array[count($user_status_array) - 1] != $user_status_)
				$user_blocks .= " OR";
			else
				$user_blocks .= ")";
		}
	}

/* Wenn der User KEIN Gast ist,
** wird der Block für das Login
** NICHT angezeigt.
*/
	if($user_status != 2)
		$user_blocks .= " AND name!='login'";

/* Feststellen, welche Blöcke für diese
** Kategorie festgelegt sind
*/

	if(get('category'))
		$user_blocks .= " AND (categories LIKE '%|" . get('category') . "|%' OR categories='')";

/* Blöcke auslesen, für die
** der User berechtigt ist.
*/
	${'block_list_' . $align . "_tmp"} = $db->read_array(TB_BLOCKS, "*", "align='" . $align . "' AND active='true'" . $user_blocks, "position ASC");

	if(count(${'block_list_' . $align . "_tmp"}) != 0){
		foreach(${'block_list_' . $align . "_tmp"} as $block_tmp){
			${'block_list_' . $align}[$block_tmp['name']] = $block_tmp;
		}
	}

/* Zähler für das Positionsarray
** initialisieren. Dieser "numeriert"
** die Blockliste für die entsprechende
** Position durch.
*/
	$align_array_count = 0;

/* Jeden vorhandenen Block
** auslesen und in ein Array
** schreiben
*/
	if(isset(${'block_list_' . $align})){
		foreach(${'block_list_' . $align} as $block){
			$my->table($block['name']);
			include($current_path . "blocks/block_" . $block['name'] . "/block_" . $block['name'] . ".php"); // Dateien einbinden
			$debug->write(DEBUG, "Block einbinden: " .  $block['name'], __FILE__, __CLASS__, __METHOD__, __FUNCTION__, __LINE__);

/* Aktuelle Sprache auslesen. Wenn der
** User eingeloggt ist, die entsprechende
** Sprache des Users auslesen.
** Bei einem Gast wird die Sprache ausgelesen,
** die als Standard in der Konfiguration
** festgelegt ist.
*/
			if(isset($user_name))
				$block_header = $db->read(TB_LANG . "_" . get_language($config, $user_name), "text", "var='block_" . $block['name'] . "'");
			else
				$block_header = $db->read(TB_LANG . "_" . get_language($config), "text", "var='block_" . $block['name'] . "'");

/* Content in Array schreiben */
			${'block_list_' . $align}[$block['name']]['content'] = ${'b_' . $block['name']};
			$debug->write(DEBUG, "Blockinhalt: " .  ${'b_' . $block['name']}, __FILE__, __CLASS__, __METHOD__, __FUNCTION__, __LINE__);

/* Überschriften in Array schreiben */
			${'block_list_' . $align}[$block['name']]['name'] = $block_header[0];
			$debug->write(DEBUG, "Blocküberschrift: " . $block_header[0], __FILE__, __CLASS__, __METHOD__, __FUNCTION__, __LINE__);

/* Arraycounter erhöhen */
			$align_array_count++;

/* Ein Array erzeugen für die CSS-Dateien
**
** Für jeden angezeigten Block können
** CSS-Dateien eingebunden werden.
** Die Software erkennt automatisch,
** ob CSS-Dateien für den Block vorhanden
** sind.
*/
			$block_css_list[] = $block['name'];
		}

/* Das Array mit den Blockdaten
** an Smarty übergeben
*/
		$content->assign("block_list_" . $align, ${'block_list_' . $align});
	}
}

/* Überprüfen ob ein Modul anstatt des Seiteninhalten
** angezeigt werden soll
*/
if($module == ""){
/* Seitentitel in Variable Speichern */
	$page_title = $page_data['head_text'];

/* Daten an Smarty übergeben */
	$content->assign("page_title", $page_data['head_text']);
	$content->assign("page_content", html_entity_decode(stripslashes($page_data['content'])));
	$content->assign("page_id", $page_data['id']);
}
else {
	$page_title = $config->i18n("module_" . $module);

	$content->assign("page_title", $page_title);
	$content->assign("page_content", html_entity_decode(stripslashes(${"m_" . $module})));
}
/* Verzeichnis für Bilder übergeben.
**
** Die Bilder müssen im Ordner
**
** $layout/images
**
** liegen
*/
$content->assign("images", "templates/" . $layout . "/images");
$content->assign("version", $config->get('version'));

/* Beginn der HTML Ausgabe.
**
** Der Header liegt nicht im Template,
** um Anpassungen an Suchmaschinen oder
** andere Spezialanforderungen leichter,
** und vorallem Layout-Übergreifend
** vornehmen zu können.
*/
// header("content-type: text/html; charset=$charset");
header("Last-Modified: " . gmdate("D, d M Y H:i:s") . " GMT");
header("Cache-Control: no-store, no-cache, must-revalidate");
header("Cache-Control: post-check=0, pre-check=0", false);
header("Pragma: no-cache");

echo <<<EOF
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"
            "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
	<meta name="description" content="$description">
	<meta name="author" content="$author">
	<meta name="keywords" content="$keywords">
	<meta name="generator" content="$generator $core_version">
	<meta http-equiv="content-type" content="text/html; charset=$charset">
	<title>$page_title | $site_title</title>
	<link rel="stylesheet" type="text/css" href="templates/copyright.css">

EOF;

/* Alle CSS-Dateien für das Layout
** einbinden, die im Ordner "css"
** vorhanden sind
*/
$css_dir = dir("templates/" . $layout . "/css");

while(false !== ($css_file = $css_dir->read())){
	if($css_file != "." && $css_file != "..")
		echo "\t<link rel=\"stylesheet\" type=\"text/css\" href=\"templates/$layout/css/" . $css_file . "\">\n";
}

/* Alle CSS-Dateien im Ordner 'css'
** im Blockordner einbinden.
*/
foreach($block_css_list as $block_css){
	if(file_exists("blocks/block_" . $block_css . "/css")){
		$css_dir = dir("blocks/block_" . $block_css . "/css");

		while(false !== ($css_file = $css_dir->read())){
			if($css_file != "." && $css_file != "..")
				echo "\t<link rel=\"stylesheet\" type=\"text/css\" href=\"blocks/block_" . $block_css . "/css/" . $css_file . "\">\n";
		}
	}
}
if(file_exists("modules/module_" . $module . "/css")){
	$css_dir = dir("modules/module_" . $module . "/css");

	while(false !== ($css_file = $css_dir->read())){
		if($css_file != "." && $css_file != "..")
			echo "\t<link rel=\"stylesheet\" type=\"text/css\" href=\"modules/module_" . $module . "/css/" . $css_file . "\">\n";
	}
}

/* Alle Javascripts im Ordner 'javascript'
** einbinden
*/
foreach($block_css_list as $block_js){
	if(file_exists("blocks/block_" . $block_js . "/js")){
		$js_dir = dir("blocks/block_" . $block_js . "/js");

		while(false !== ($js_file = $js_dir->read())){
			if($js_file != "." && $js_file != "..")
				echo "\t<script type=\"text/javascript\" src=\"blocks/block_" . $block_js . "/js/" . $js_file . "\"></script>\n";
		}
	}
}
if(file_exists("modules/module_" . $module . "/javascript")){
	$js_dir = dir("modules/module_" . $module . "/javascript");

	while(false !== ($js_file = $js_dir->read())){
		if($js_file != "." && $js_file != "..")
			echo "\t<script type=\"text/javascript\" src=\"modules/module_" . $module . "/javascript/" . $js_file . "\"></script>\n";
	}
}
if(is_dir("modules/module_images/javascript")){
	$js_dir = dir("modules/module_images/javascript");

	while(false !== ($js_file = $js_dir->read())){
		if($js_file != "." && $js_file != "..")
			echo "\t<script type=\"text/javascript\" src=\"modules/module_images/javascript/" . $js_file . "\"></script>\n";
	}
}
if(is_dir("extern/overlib"))
	echo "\t<script type=\"text/javascript\" src=\"extern/overlib/overlib.js\"></script>\n";

/* HTML-Ausgabe bis zum Body-Tag */
echo <<<EOF
</head>
<body>

EOF;

if(is_dir("extern/overlib"))
	echo '<div id="overDiv" style="position:absolute; visibility:hidden; z-index:1000;"></div>' . "\n";

/* Berechnen der Ausführungsdauer
*/
$content->assign("runtime", runtime());

/* Pathway übergeben
*/
pathway();

/* Ausgabe des Templates.
**
** TODO:
** Ob ein dreiteiliges Template
** bleibt, entscheide ich noch.
** Falls dieses Sinnvoll ist, wird
** das beibehalten
*/
if(file_exists("templates/" . $layout . "/header.tpl"))
	$content->display('header.tpl');
if(file_exists("templates/" . $layout . "/index.tpl"))
	$content->display('index.tpl');
if(file_exists("templates/" . $layout . "/content.tpl"))
	$content->display('content.tpl');
if(file_exists("templates/" . $layout . "/footer.tpl"))
	$content->display('footer.tpl');

/**********************************************************************************/
/**** Folgendes Copyright darf weder entfernt, noch unsichtbar gemacht werden. ****/
/**********************************************************************************/
echo <<<EOF
<!-- Diese Software steht unter der Creative Commons Lizenz -->
<!-- Die Lizenzbestimmungen sind hier nachzulesen: http://creativecommons.org/licenses/by-sa/2.0/de/ -->
<div id="copyright">
	 <a href="http://www.aratix.de" target="_blank">Aratix</a> ist ein Produkt der <a href="http://www.xitara.net" target="_blank">Xitara Websolution</a>
</div>

EOF;

/* Anpassungen des Erscheinungsbildes können in der Datei global.css gemacht werden.
** Es ist untersagt, Hintergrund- und Schriftfarbe so zu wählen, dass das Copyright nicht mehr zu erkennen ist.
*/

/* Ende der HTML-Ausgabe
**
** das Layout ist nur für den Teil
** innerhalb des Body-Tags zuständig.
*/
echo <<<EOF
</body>
</html>
EOF;

/* Die Verbindung zur Datenbank trennen */
$db->disconnect($db->connect_id);
?>
Return current item: Aratix