Example #1
0
 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'};
 }