Seditio Source
Root |
./othercms/elxis_5.3_atlas_rev2452/includes/loader.php
<?php
/**
* @version        $Id: loader.php 2431 2022-01-18 19:26:35Z IOS $
* @package        Elxis
* @subpackage    Elxis loader
* @copyright    Copyright (c) 2006-2022 Elxis CMS (https://www.elxis.org). All rights reserved.
* @license        Elxis Public License ( https://www.elxis.org/elxis-public-license.html )
* @author        Elxis Team ( https://www.elxis.org )
* @description     Elxis CMS bootstrap file
*/

defined('_ELXIS_') or die ('Direct access to this location is not allowed.');


class
elxisLoader {

    static private
$classes = array();
    static private
$files = array(); //generic files loader in order to avoid require_once


    /******************************/
    /* GET CLASS NAME FROM STRING */
    /******************************/
   
static private function getClassName($str) {
       
$parts = preg_split('/\:/', $str);
        if (
count($parts) > 1) {
           
$classfile = strtolower(array_pop($parts));
           
$parts2 = preg_split('/\./', $classfile, 2);
           
$class = 'elxis'.ucfirst($parts2[0]);
        } else {
           
$class = 'elxis'.ucfirst(strtolower($parts[0]));
        }
        return
$class;
    }


   
/*****************/
    /* INCLUDE CLASS */
    /*****************/
   
static public function load($str, $class='') {
        if (
$class == '') { $class = self::getClassName($str); }
        if (isset(
self::$classes[$class])) { return true; }
       
$file = ELXIS_PATH.'/includes/'.str_replace(':', '/', $str).'.php';
        if (
is_file($file)) {
            require(
$file);
        } else {
           
$trace = debug_backtrace();
           
$extra = '';
            if (
is_array($trace) && isset($trace[0])) {
               
$extra = "\n".'Backtrace report: File: '.$trace[0]['file'].' Line: '.$trace[0]['line'];
            }
           
trigger_error('File "'.$file.'" does not exist! Elxis loader could not load class '.$class.$extra, E_USER_ERROR);
            return
false;
        }

       
self::$classes[$class] = $file;
        return
true;
    }


   
/*********************/
    /* REQUIRE FILE ONCE */
    /*********************/
   
static public function loadFile($file) {
        if ((
$file == '') || !is_file(ELXIS_PATH.'/'.$file)) {
           
$trace = debug_backtrace();
           
$extra = '';
            if (
is_array($trace) && isset($trace[0])) {
               
$extra = "\n".'Backtrace report: File: '.$trace[0]['file'].' Line: '.$trace[0]['line'];
            }
           
trigger_error('File "'.$file.'" does not exist!'.$extra, E_USER_ERROR);
            return
false;
        } else {
            if (
in_array($file, self::$files)) { return true; }
            include(
ELXIS_PATH.'/'.$file);
           
self::$files[] = $file;
            return
true;
        }
    }


   
/*********************************/
    /* INCLUDE CLASS AND INITIATE IT */
    /*********************************/
   
static public function loadInit($str, $instance, $class='') {
        if (
eRegistry::isLoaded($instance)) { return true; }
        if (
$class == '') { $class = self::getClassName($str); }
       
$file = ELXIS_PATH.'/includes/'.str_replace(':', '/', $str).'.php';
        if (
is_file($file)) {
            require(
$file);
        } else {
           
$trace = debug_backtrace();
           
$extra = '';
            if (
is_array($trace) && isset($trace[0])) {
               
$extra = "\n".'Backtrace report: File: '.$trace[0]['file'].' Line: '.$trace[0]['line'];
            }
           
trigger_error('FATAR ERROR: File "'.$file.'" does not exist! Elxis loader could not load class '.$class.$extra, E_USER_ERROR);
            return
false;
        }

       
$obj = new $class();
       
eRegistry::set($obj, $instance);
    }


   
/*****************************/
    /* LOAD CLASS (AS SINGLETON) */
    /*****************************/
   
public static function loadClass($class) {
        if (
class_exists($class, false)) { return true; }
        if (
array_key_exists(strtolower($class), self::$classes)) {
            include(
self::$classes[$class]);
            return
true;
        }
        if (
strpos($class, 'DbTable') !== false) {
           
$tbl = str_replace('DbTable', '', $class);
            return
self::load('libraries:elxis:database:tables:'.$tbl.'.db', $class);
           }
        return
false;
    }

}


switch (
strtoupper(substr(PHP_OS, 0, 3))) {
    case
'WIN':
       
define('ELXIS_OS', 'WIN');
       
define('DS', "\\");
       
define("_LEND", "\r\n");
    break;
    case
'MAC':
       
define('ELXIS_OS', 'MAC');
       
define('DS', "/");
       
define("_LEND", "\r");
    break;
    default:
       
define('ELXIS_OS', 'LIN');
       
define('DS', "/");
       
define("_LEND", "\n");
    break;
}

if (!
file_exists(ELXIS_PATH.'/configuration.php')) {
    require(
ELXIS_PATH.'/includes/install/install.php');
    exit;
}

//require(ELXIS_PATH.'/includes/libraries/elxis/apc.class.php');//deprecated as of Elxis 5.0
//elxisAPC::init();
require(ELXIS_PATH.'/includes/libraries/elxis/exit.class.php');
require(
ELXIS_PATH.'/includes/libraries/elxis/defender.class.php');

$defstart = microtime(true);
$defender = new elxisDefender();
$defender->check();
$dt = microtime(true) - $defstart;
define('ELXIS_DEFENDER_DT', $dt);
unset(
$defstart, $dt);

/**************************************************/
/* TRY TO AUTOLOAD CLASS BEFORE FATAL ERROR OCCUR */
/**************************************************/
function autoloader($class) {
    if (
strpos($class, 'Swift') === 0) { return false; }
    if (
elxisLoader::loadClass($class)) {
        return
true;
    } else {
       
trigger_error('Class "'.$class.'" could not be autoloaded by the Elxis loader', E_USER_ERROR);
        return
false;
    }
}

spl_autoload_register('autoloader', true);


/*******************/
/* SYSTEM SHUTDOWN */
/*******************/
function elxisSystemShutdown() {
    if (
eRegistry::isLoaded('eFiles')) {
       
eRegistry::get('eFiles')->closeFTP();
    }
    if (isset(
$_SESSION)) { session_write_close(); }
}

ini_set('display_errors', 0);
date_default_timezone_set('UTC');

if (
version_compare(phpversion(), '5.4', '<')) {
    if (
get_magic_quotes_gpc()) {
       
$process = array(&$_GET, &$_POST, &$_COOKIE, &$_REQUEST);
        while (list(
$key, $val) = each($process)) {
            foreach (
$val as $k => $v) {
                unset(
$process[$key][$k]);
                if (
is_array($v)) {
                   
$process[$key][stripslashes($k)] = $v;
                   
$process[] = &$process[$key][stripslashes($k)];
                } else {
                   
$process[$key][stripslashes($k)] = stripslashes($v);
                }
            }
        }
        unset(
$process);
    }
}

elxisLoader::load('libraries:elxis:registry.class', 'eRegistry');
register_shutdown_function('elxisSystemShutdown');
elxisLoader::loadInit('libraries:elxis:performance.class', 'ePerformance');
elxisLoader::load('libraries:elxis:factory.class', 'eFactory');
elxisLoader::loadInit('libraries:elxis:framework.class', 'elxis', 'elxisFramework');
elxisLoader::load('libraries:elxis:error.class');
elxisError::init();
set_error_handler('elxisErrorHandler');
register_shutdown_function('elxisErrorShutdown');
elxisLoader::load('libraries:utf8:utf8.class', 'elxisUTF8');
elxisUTF8::init();
elxisLoader::loadInit('libraries:elxis:uri.class', 'eURI', 'elxisUri');
elxisLoader::loadInit('libraries:elxis:language.class', 'eLang', 'elxisLanguage');
elxisLoader::loadInit('libraries:elxis:date.class', 'eDate', 'elxisDate');
eFactory::getElxis()->initSession(); //after URI!

$defstart = microtime(true);
$defender->reCheck();
$dt = microtime(true) - $defstart;
define('ELXIS_DEFENDER_DT2', $dt);
unset(
$defstart, $dt, $defender);

$isoffline = false;
if (!
defined('ELXIS_ADMIN')) {
    if (
eFactory::getElxis()->getConfig('ONLINE') === 0) {
       
$isoffline = true;
    } else if (
eFactory::getElxis()->getConfig('ONLINE') === 2) {
       
$isoffline = (eFactory::getElxis()->user()->gid == 1) ? false : true;
    } else if (
eFactory::getElxis()->getConfig('ONLINE') === 3) {
       
$isoffline = true;
        if ((
eFactory::getElxis()->user()->gid !== 7) && (eFactory::getElxis()->acl()->getLevel() > 1)) { $isoffline = false; }
    }
}

if (
$isoffline) {
   
exitPage::make('offline', 'LOAD-0001');
} else {
   
elxisLoader::loadInit('libraries:elxis:document.class', 'eDoc', 'elxisDocument');
   
eFactory::getDocument()->make();
}

if (isset(
$_SESSION)) { session_write_close(); }

?>