Location: PHPKode > scripts > Admidio > admidio-2.2.9/adm_program/system/common.php
<?php
/******************************************************************************
 * Script beinhaltet allgemeine Daten / Variablen, die fuer alle anderen
 * Scripte notwendig sind
 *
 * Copyright    : (c) 2004 - 2011 The Admidio Team
 * Homepage     : http://www.admidio.org
 * License      : GNU Public License 2 http://www.gnu.org/licenses/gpl-2.0.html
 *
 *****************************************************************************/

if ('common.php' == basename($_SERVER['SCRIPT_FILENAME']))
{
    die('This page may not be called directly !');
}

// Konstanten und Konfigurationsdatei einbinden
require_once(substr(__FILE__, 0, strpos(__FILE__, 'adm_program')-1). '/config.php');
require_once(substr(__FILE__, 0, strpos(__FILE__, 'adm_program')-1). '/adm_program/system/constants.php');

// falls Debug-Kennzeichen nicht in config.php gesetzt wurde, dann hier auf false setzen
if(isset($g_debug) == false || $g_debug != 1)
{
    $g_debug = 0;
}

if($g_debug)
{
    // aktuelles Script mit Uebergaben in Logdatei schreiben
    error_log("--------------------------------------------------------------------------------\n".
              $_SERVER['SCRIPT_FILENAME']. "\n? ". $_SERVER['QUERY_STRING']);
}

 // Standard-Praefix ist adm auch wegen Kompatibilitaet zu alten Versionen
if(strlen($g_tbl_praefix) == 0)
{
    $g_tbl_praefix = 'adm';
}

// Default-DB-Type ist immer MySql
if(!isset($g_db_type))
{
    $g_db_type = 'mysql';
}

// includes OHNE Datenbankverbindung
require_once(SERVER_PATH. '/adm_program/system/db/'. $g_db_type. '.php');
require_once(SERVER_PATH. '/adm_program/system/function.php');
require_once(SERVER_PATH. '/adm_program/system/string.php');
require_once(SERVER_PATH. '/adm_program/system/classes/datetime_extended.php');
require_once(SERVER_PATH. '/adm_program/system/classes/language.php');
require_once(SERVER_PATH. '/adm_program/system/classes/message.php');
require_once(SERVER_PATH. '/adm_program/system/classes/navigation.php');
require_once(SERVER_PATH. '/adm_program/system/classes/organization.php');
require_once(SERVER_PATH. '/adm_program/system/classes/table_session.php');
require_once(SERVER_PATH. '/adm_program/system/classes/user.php');
require_once(SERVER_PATH. '/adm_program/system/forum/forum.php');

// Variablen von HMTL & PHP-Code befreien
$_REQUEST = array_map('strStripTags', $_REQUEST);
$_GET     = array_map('strStripTags', $_GET);
$_POST    = array_map('strStripTags', $_POST);
$_COOKIE  = array_map('strStripTags', $_COOKIE);

// Anfuehrungszeichen escapen, damit DB-Abfragen sicher sind
if(get_magic_quotes_gpc() == false)
{
    $_REQUEST = strAddSlashesDeep($_REQUEST);
    $_GET     = strAddSlashesDeep($_GET);
    $_POST    = strAddSlashesDeep($_POST);
    $_COOKIE  = strAddSlashesDeep($_COOKIE);
}

// Globale Variablen
$g_valid_login = false;
$g_layout      = array();

 // Verbindung zu Datenbank herstellen
$g_db = new MySqlDB();
$g_adm_con = $g_db->connect($g_adm_srv, $g_adm_usr, $g_adm_pw, $g_adm_db);

// Script fuer das Forum ermitteln und includen, bevor die Session erstellt wird
Forum::includeForumScript($g_db);

// Cookie-Praefix ermitteln und Sonderzeichen entfernen
$cookie_praefix = 'ADMIDIO_'. $g_organization;
if($g_debug)
{
    $cookie_praefix .= '_'. ADMIDIO_VERSION. '_'. BETA_VERSION;
}
$cookie_praefix = strtr($cookie_praefix, ' .,;:','_____');

// PHP-Session starten
if(headers_sent() == false)
{
    session_name($cookie_praefix. '_PHP_ID');
    session_start();
}

// Session-ID ermitteln
if(isset($_COOKIE[$cookie_praefix. '_ID']))
{
    $g_session_id = $_COOKIE[$cookie_praefix. '_ID'];
}
else
{
    $g_session_id = session_id();
}

// globale Klassen mit Datenbankbezug werden in Sessionvariablen gespeichert, 
// damit die Daten nicht bei jedem Script aus der Datenbank ausgelesen werden muessen
if(isset($_SESSION['g_current_organization']) 
&& isset($_SESSION['g_preferences'])
&& $g_organization == $_SESSION['g_current_organization']->getValue('org_shortname'))
{
    $g_current_organization     =& $_SESSION['g_current_organization'];
    $g_current_organization->db =& $g_db;
    $g_preferences              =& $_SESSION['g_preferences'];
}
else
{
    $g_current_organization = new Organization($g_db, $g_organization);
    
    if($g_current_organization->getValue('org_id') == 0)
    {
        // Organisation wurde nicht gefunden
        die('<div style="color: #CC0000;">Error: The organization of the config.php could not be found in the database!</div>');
    }
    
    // organisationsspezifische Einstellungen aus adm_preferences auslesen
    $g_preferences = $g_current_organization->getPreferences();
    
    // Daten in Session-Variablen sichern
    $_SESSION['g_current_organization'] =& $g_current_organization;
    $_SESSION['g_preferences']          =& $g_preferences;
}

// Sprachdateien einlesen
$g_l10n = new Language($g_preferences['system_language']);

// Pfad zum gewaehlten Theme zusammensetzen
if(isset($g_preferences['theme']) == false)
{
    $g_preferences['theme'] = 'classic';
}
define('THEME_SERVER_PATH', SERVER_PATH. '/adm_themes/'. $g_preferences['theme']);
define('THEME_PATH', $g_root_path. '/adm_themes/'. $g_preferences['theme']);

// Daten des angemeldeten Users auch in Session speichern
if(isset($_SESSION['g_current_user']))
{
    $g_current_user =& $_SESSION['g_current_user'];
    $g_current_user->db =& $g_db;
}
else
{
    $g_current_user  = new User($g_db);
    $_SESSION['g_current_user'] =& $g_current_user;
}

// Nachrichtenklasse anlegen
$g_message = new Message();

// Objekt fuer die Zuruecknavigation in den Modulen
// hier werden die Urls in einem Stack gespeichert
if(isset($_SESSION['navigation']) == false)
{
    $_SESSION['navigation'] = new Navigation();
}

// pruefen, ob Datenbank-Version zu den Scripten passt
if(isset($g_preferences['db_version']) == false
|| isset($g_preferences['db_version_beta']) == false
|| version_compare($g_preferences['db_version'], ADMIDIO_VERSION) != 0
|| version_compare($g_preferences['db_version_beta'], BETA_VERSION) != 0)
{
    unset($_SESSION['g_current_organization']);
    $g_message->show($g_l10n->get('SYS_DATABASE_INVALID', $g_preferences['db_version'], ADMIDIO_VERSION, '<a href="mailto:'.$g_preferences['email_administrator'].'">', '</a>'));
}

/*********************************************************************************
Session auf Gueltigkeit pruefen bzw. anlegen
/********************************************************************************/

$g_current_session = new TableSession($g_db, $g_session_id);

// erst einmal pruefen, ob evtl. frueher ein Autologin-Cookie gesetzt wurde
// dann diese Session wiederherstellen

$b_auto_login = false;
if($g_preferences['enable_auto_login'] == 1 && isset($_COOKIE[$cookie_praefix. '_DATA']))
{
    $admidio_data = explode(';', $_COOKIE[$cookie_praefix. '_DATA']);
    
    if($admidio_data[0] == true         // autologin
    && is_numeric($admidio_data[1]))    // user_id 
    {   
        if($g_current_user->getValue('usr_id') != $admidio_data[1])
        {
            // User aus der Autologin-Session wiederherstellen
            require_once(SERVER_PATH. '/adm_program/system/classes/table_auto_login.php');
            $auto_login = new TableAutoLogin($g_db, $g_session_id);
            
            // User nur herstellen, wenn Cookie-User-Id == gespeicherte DB-User-Id
            if($auto_login->getValue('atl_usr_id') == $admidio_data[1])
            {
                $g_current_user->readData($auto_login->getValue('atl_usr_id'));
                // Logins zaehlen und aktuelles Login-Datum aktualisieren
                $g_current_user->updateLoginData();            
                $b_auto_login = true;
            }
            else
            {
                // irgendwas stimmt nicht -> sicherheitshalber den Auto-Login-Eintrag loeschen
                $auto_login->delete();
            }
        }
        else
        {
            $b_auto_login = true;
        }
        
        if($g_current_session->getValue('ses_id') == 0)
        {
            $g_current_session->setValue('ses_session_id', $g_session_id);
            $g_current_session->setValue('ses_usr_id',  $g_current_user->getValue('usr_id'));
            $g_current_session->save();
        }
    }
}

if($g_current_session->getValue('ses_id') > 0)
{
    // erst einmal pruefen, ob Organisation- oder Userobjekt neu eingelesen werden muessen,
    // da die Daten evtl. von anderen Usern in der DB geaendert wurden
    if($g_current_session->getValue('ses_renew') == 1 || $g_current_session->getValue('ses_renew') == 3)
    {
        // Feldstruktur entfernen und Userobjekt neu einlesen
        $g_current_user->userFieldData = array();
        $g_current_user->readData($g_current_user->getValue('usr_id'));
        $g_current_session->setValue('ses_renew', 0);
    }
    if($g_current_session->getValue('ses_renew') == 2 || $g_current_session->getValue('ses_renew') == 3)
    {
        // Organisationsobjekt neu einlesen
        $g_current_organization->readData($g_organization);
        $g_preferences = $g_current_organization->getPreferences();
        $g_current_session->setValue('ses_renew', 0);
    }

    // nun die Session pruefen
    if($g_current_session->getValue('ses_usr_id') > 0)
    {
        if($g_current_session->getValue('ses_usr_id') == $g_current_user->getValue('usr_id'))
        {
            // Session gehoert zu einem eingeloggten User -> pruefen, ob der User noch eingeloggt sein darf
            $time_gap = time() - strtotime($g_current_session->getValue('ses_timestamp', 'Y-m-d H:i:s'));
            
            // wenn laenger nichts gemacht wurde, als in Orga-Prefs eingestellt ist, dann ausloggen
            if($time_gap < $g_preferences['logout_minutes'] * 60 || $b_auto_login == true) 
            {
                // bei Autologin ggf. den Beginn aktualisieren, wenn die Luecke zu gross geworden ist
                if($time_gap > $g_preferences['logout_minutes'] * 60 && $b_auto_login == true)
                {
                    $g_current_session->setValue('ses_begin', DATETIME_NOW);
                }

                // User-Login ist gueltig
                $g_valid_login = true;
                $g_current_session->setValue('ses_timestamp', DATETIME_NOW);
            }
            else
            {
                // User war zu lange inaktiv -> User aus Session entfernen
                $g_current_user->clear();
                $g_current_session->setValue('ses_usr_id', '');
            }
        }
        else
        {
            // irgendwas stimmt nicht, also alles zuruecksetzen
            $g_current_user->clear();
            $g_current_session->setValue('ses_usr_id', '');
        }
    }
    
    // Update auf Sessionsatz machen (u.a. timestamp aktualisieren)
    $g_current_session->save();
}
else
{
    // Session existierte noch nicht, dann neu anlegen
    $g_current_user->clear();
    $g_current_session->setValue('ses_session_id', $g_session_id);
    $g_current_session->save();
    
    // Alle alten Session loeschen
    $g_current_session->tableCleanup($g_preferences['logout_minutes']);
}

// Homepageseite festlegen
if($g_valid_login)
{
    $g_homepage = $g_root_path. '/'. $g_preferences['homepage_login'];
}
else
{
    $g_homepage = $g_root_path. '/'. $g_preferences['homepage_logout'];
}

/*********************************************************************************
Verbindung zur Forum-Datenbank herstellen und die Funktionen, sowie Routinen des Forums laden.
/********************************************************************************/

if($g_preferences['enable_forum_interface']) 
{
    // Admidio-Zugangsdaten nehmen, wenn entsprechende Einstellung gesetzt ist
    if($g_preferences['forum_sqldata_from_admidio']) 
    {
        $g_preferences['forum_srv'] = $g_db->server;
        $g_preferences['forum_usr'] = $g_db->user;
        $g_preferences['forum_pw']  = $g_db->password;
        $g_preferences['forum_db']  = $g_db->dbname;
    }
    
    // globale Klassen mit Datenbankbezug werden in Sessionvariablen gespeichert, 
    // damit die Daten nicht bei jedem Script aus der Datenbank ausgelesen werden muessen
    if(isset($_SESSION['g_forum']))
    {
        $g_forum =& $_SESSION['g_forum'];
    }
    else
    {
        $g_forum = Forum::createForumObject($g_preferences['forum_version']);
        $_SESSION['g_forum'] =& $g_forum;
    }
        
    if(!$g_forum->connect($g_preferences['forum_srv'], $g_preferences['forum_usr'], $g_preferences['forum_pw'], $g_preferences['forum_db'], $g_db))
    {
        // Verbindungsprobleme, deshalb Forum deaktivieren, damit Admidio ggf. noch funktioniert
        $g_preferences['enable_forum_interface'] = 0;
    }
    else
    {
        // Einstellungen des Forums einlesen
        if(!$g_forum->initialize(session_id(), $g_preferences['forum_praefix'], $g_preferences['forum_export_user'], $g_preferences['forum_link_intern'], $g_current_user->getValue('usr_login_name')))
        {
            echo '<div style="color: #CC0000;">Verbindungsfehler zum Forum !<br />
                Das eingegebene Forumpräfix <strong>'. $g_preferences['forum_praefix'].'</strong> ist nicht korrekt oder<br />
                es wurde die falsche Datenbankverbindung zum Forum angegeben.</div>';
        }
    }    
}

?>
Return current item: Admidio