public static function initScreens($ErrorHandler, $ProgramFileName) { self::init($ErrorHandler); // if (!self::$IsWeb) trigger_error("You should not be calling Config::initScreens unless run from Apache", E_USER_ERROR); if (empty($ProgramFileName)) { trigger_error("Must pass screen program file name to Config::initScreens", E_USER_ERROR); } self::$ScreenProgramFile = basename($ProgramFileName); self::$LoginXMLObj = self::GetScreenSettings("Login.php"); if (empty(self::$LoginXMLObj)) { trigger_error("Cannot find configuration in the screen XML file for Login.php", E_USER_ERROR); } if (!self::$LoginXMLObj->{'Environment'}) { trigger_error("Must specify the location of the screens database in menu XML for Login.php", E_USER_ERROR); } // We need to start session handling and check if the user is already logged in // Screen Environment is temporarily set here for Login.php just to get the login database info // For MySQLSessions self::$ScreenEnvironment = self::$LoginXMLObj->{'Environment'}; if (self::$LoginXMLObj->{'Cache'} !== False) { $Cache = (string) self::$LoginXMLObj->{'Cache'}; } else { $Cache = "True"; } if ($Cache == "False") { session_cache_limiter("nocache"); } self::$SessionsObj = new MySQLSessions(); session_set_save_handler(array(self::$SessionsObj, "open"), array(self::$SessionsObj, "close"), array(self::$SessionsObj, "read"), array(self::$SessionsObj, "write"), array(self::$SessionsObj, "destroy"), array(self::$SessionsObj, "gc")); session_name("Neobits"); ini_set('session.gc_maxlifetime', 28800); session_set_cookie_params(0, "/", self::$CookieDomain); // 8 Hour Expiration session_start(); if (isset($_SESSION["USER"])) { // Already logged in if (isset($_SESSION['LAST_ACTIVITY']) && time() - $_SESSION['LAST_ACTIVITY'] > 28800) { // Last request was more than 8 hours ago, log user out for inactivity self::EndLoggedInSession(); if (!self::$LoginXMLObj->{'URL'}) { trigger_error("URL not found in XML file for Login.php", E_USER_ERROR); } $LoginURL = (string) self::$LoginXMLObj->{'URL'}; self::CloseSessionHandler(); header("Location: {$LoginURL}"); exit; } self::$ScreenUser = $_SESSION["USER"]; if (isset($_SESSION["SCREENLIST"])) { self::$UserScreenAccess = $_SESSION["SCREENLIST"]; } else { self::$UserScreenAccess = self::GetUserScreenAccess(self::$ScreenUser); } // Check if the user has security for the screen if (array_key_exists(self::$ScreenProgramFile, self::$UserScreenAccess) === False) { $LoginURL = (string) self::$LoginXMLObj->{'URL'}; self::CloseSessionHandler(); header("Location: {$LoginURL}"); exit; } } else { // Not logged in, check what screen we are on if (self::$ScreenProgramFile == "Login.php") { // Logging in } else { // Redirect to login screen if (!self::$LoginXMLObj->{'URL'}) { trigger_error("URL not found in XML file for Login.php", E_USER_ERROR); } $LoginURL = (string) self::$LoginXMLObj->{'URL'}; self::CloseSessionHandler(); header("Location: {$LoginURL}"); exit; } } $_SESSION['LAST_ACTIVITY'] = time(); // update last activity time stamp // Now get the environment for the user screen self::$ScreenXMLObj = self::GetScreenSettings(self::$ScreenProgramFile); self::$ScreenEnvironment = self::$ScreenXMLObj->{'Environment'}; }