showText();
// => EXIT
}
/*********************************************************************************
Create and validate sessions, check auto login, read session variables
/********************************************************************************/
// start PHP session
try
{
Session::start(COOKIE_PREFIX);
}
catch (\RuntimeException $exception)
{
// TODO
}
// determine session id
if(array_key_exists(COOKIE_PREFIX . '_SESSION_ID', $_COOKIE))
{
$gSessionId = $_COOKIE[COOKIE_PREFIX . '_SESSION_ID'];
}
else
{
$gSessionId = session_id();
}
// Session handling
if(array_key_exists('gCurrentSession', $_SESSION) && $_SESSION['gCurrentSession']->hasObject('gCurrentOrganization'))
{
// read session object from PHP session
/**
* @var Session $gCurrentSession
*/
$gCurrentSession = $_SESSION['gCurrentSession'];
// reload session data and if necessary the organization object
$gCurrentSession->refreshSession();
// read system component
/**
* @var Component $gSystemComponent
*/
$gSystemComponent =& $gCurrentSession->getObject('gSystemComponent');
// read language data from session and assign them to the language object
/**
* @var LanguageData $gLanguageData
*/
$gLanguageData =& $gCurrentSession->getObject('gLanguageData');
// read organization data from session object
/**
* @var Organization $gCurrentOrganization
*/
$gCurrentOrganization =& $gCurrentSession->getObject('gCurrentOrganization');
$gSettingsManager =& $gCurrentOrganization->getSettingsManager();
}
else
{
// create new session object and store it in PHP session
$gCurrentSession = new Session($gDb, $gSessionId, COOKIE_PREFIX);
$_SESSION['gCurrentSession'] = $gCurrentSession;
// create system component
$gSystemComponent = new Component($gDb);
$gSystemComponent->readDataByColumns(array('com_type' => 'SYSTEM', 'com_name_intern' => 'CORE'));
$gCurrentSession->addObject('gSystemComponent', $gSystemComponent);
// create object of the organization of config file with their preferences
if($gCurrentSession->getOrganizationId() > 0)
{
$gCurrentOrganization = new Organization($gDb, $gCurrentSession->getOrganizationId());
}
else
{
$gCurrentOrganization = new Organization($gDb, $g_organization);
}
if((int) $gCurrentOrganization->getValue('org_id') === 0)
{
$gLogger->error('Organization could not be found!', array('$g_organization' => $g_organization));
// organization not found
exit('
Error: The organization of the config.php could not be found in the database!
');
}
// add the organization to the session
$gSettingsManager =& $gCurrentOrganization->getSettingsManager();
$gCurrentSession->addObject('gCurrentOrganization', $gCurrentOrganization);
$gCurrentSession->setValue('ses_org_id', $gCurrentOrganization->getValue('org_id'));
// create a language data object and assign it to the language object
$gLanguageData = new LanguageData($gSettingsManager->getString('system_language'));
$gCurrentSession->addObject('gLanguageData', $gLanguageData);
// delete old entries in session table
$gCurrentSession->tableCleanup($gSettingsManager->getInt('logout_minutes'));
}
$gL10n = new Language($gLanguageData);
// Deprecated: backwards compatibility
$gPreferences = $gSettingsManager->getAll();
$orgId = (int) $gCurrentOrganization->getValue('org_id');
$sesUsrId = (int) $gCurrentSession->getValue('ses_usr_id');
// now if auto login is done, read global user data
if($gCurrentSession->hasObject('gCurrentUser'))
{
/**
* @var ProfileFields $gProfileFields
*/
$gProfileFields =& $gCurrentSession->getObject('gProfileFields');
/**
* @var User $gCurrentUser
*/
$gCurrentUser =& $gCurrentSession->getObject('gCurrentUser');
// checks if user in database session is the same as in php session
if((int) $gCurrentUser->getValue('usr_id') !== $sesUsrId)
{
$gCurrentUser->clear();
$gCurrentSession->setValue('ses_usr_id', '');
}
}
else
{
// create object with current user field structure und user object
$gProfileFields = new ProfileFields($gDb, $orgId);
$gCurrentUser = new User($gDb, $gProfileFields, $sesUsrId);
// if session is created with auto login then update user login data
// if user object is created and session has usr_id then this is an auto login
// and we should update the login data and count logins
if($sesUsrId > 0)
{
$gCurrentUser->updateLoginData();
}
// save all data in session
$gCurrentSession->addObject('gProfileFields', $gProfileFields);
$gCurrentSession->addObject('gCurrentUser', $gCurrentUser);
}
$sesRenew = (int) $gCurrentSession->getValue('ses_renew');
$usrId = (int) $gCurrentUser->getValue('usr_id');
// check if organization or user object must be renewed if data was changed by other users
if($sesRenew === 1 || $sesRenew === 3)
{
// read new field structure in object and than create new user object with new field structure
$gProfileFields->readProfileFields($orgId);
$gCurrentUser->readDataById($usrId);
$gCurrentSession->setValue('ses_renew', 0);
}
// check session if user login is valid
if($sesUsrId > 0)
{
if($gCurrentSession->isValidLogin($usrId))
{
$gValidLogin = true;
}
else
{
$gCurrentUser->clear();
}
}
// update session recordset (i.a. refresh timestamp)
$gCurrentSession->save();
// create necessary objects and parameters
// set default theme if no theme was set
if (!$gSettingsManager->has('theme'))
{
$gSettingsManager->set('theme', 'modern');
}
define('THEME_ADMIDIO_PATH', ADMIDIO_PATH . FOLDER_THEMES . '/' . $gSettingsManager->getString('theme')); // Will get "THEME_PATH" in v4.0
define('THEME_URL', ADMIDIO_URL . FOLDER_THEMES . '/' . $gSettingsManager->getString('theme'));
define('THEME_SERVER_PATH', THEME_ADMIDIO_PATH); // TODO deprecated: Remove in Admidio 4.0
define('THEME_PATH', THEME_URL); // TODO deprecated: Remove in Admidio 4.0
// Create message object which can be called if a message should be shown
$gMessage = new Message();
// Create object for navigation between the scripts and modules
// Every URL will be stored in a stack and can be called if user want's to navigate back
if($gCurrentSession->hasObject('gNavigation'))
{
/**
* @var Navigation $gNavigation
*/
$gNavigation =& $gCurrentSession->getObject('gNavigation');
}
else
{
$gNavigation = new Navigation();
$gCurrentSession->addObject('gNavigation', $gNavigation);
}
try
{
// check version of database against version of file system and show notice if not equal
$gSystemComponent->checkDatabaseVersion();
}
catch(AdmException $e)
{
$gMessage->showThemeBody(false);
$gMessage->hideButtons();
$gMessage->show($e->getText(), 'Admidio - '.$gL10n->get('INS_UPDATE'));
}
// set default homepage
if($gValidLogin)
{
$gHomepage = ADMIDIO_URL . '/' . $gSettingsManager->getString('homepage_login');
}
else
{
$gHomepage = ADMIDIO_URL . '/' . $gSettingsManager->getString('homepage_logout');
}