forked from LightningSDK/Core-php
-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathbootstrap.php
More file actions
84 lines (74 loc) · 2.83 KB
/
Copy pathbootstrap.php
File metadata and controls
84 lines (74 loc) · 2.83 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
<?php
namespace Lightning;
// Set required global parameters.
if (!defined('HOME_PATH')) {
define('HOME_PATH', __DIR__ . '/..');
}
if (!defined('CONFIG_PATH')) {
define('CONFIG_PATH', HOME_PATH . '/Source/Config');
}
use Lightning\Tools\Configuration;
use Lightning\Tools\Logger;
// Set the autoloader to the Lightning autoloader.
spl_autoload_register(array('\\Lightning\\Bootstrap', 'classAutoloader'));
// Set the error handler.
if (Configuration::get('errorlog') == 'stacktrace') {
set_error_handler(array('\\Lightning\\Bootstrap', 'errorHandler'));
}
class Bootstrap {
static $loaded = false;
static $classes;
static $overrides = array();
static $overridable = array();
static $loadedClasses = array();
/**
* A custom class loader.
*
* @param string $classname
*/
public static function classAutoloader($classname) {
if (empty(self::$loadedClasses[$classname]) && $classname != 'Lightning\Tools\Configuration') {
if (!self::$loaded) {
// Load the class definitions.
self::$classes = Configuration::get('classes');
self::$overridable = Configuration::get('overridable');
self::$loaded = true;
}
if (!empty(self::$classes[$classname])) {
// Load an override class and override it.
$overridden_name = 'Overridden\\' . $classname;
self::$overrides[$overridden_name] = $overridden_name;
self::loadClassFile($classname);
self::loadClassFile(self::$classes[$classname]);
class_alias(self::$classes[$classname], $classname);
self::$loadedClasses[$classname] = $classname;
return;
}
if (isset(self::$overrides[$classname])) {
return;
}
$class_file = str_replace('Overridable\\', '', $classname);
if (isset(self::$overridable[$classname]) || isset(self::$overridable[$class_file])) {
self::loadClassFile($class_file);
self::$loadedClasses[$class_file] = $class_file;
class_alias(self::$overridable[$class_file], $class_file);
return;
}
}
self::$loadedClasses[$classname] = $classname;
self::loadClassFile($classname);
}
/**
* Require the requested class file.
*
* @param string $classname
* The name of the class.
*/
public static function loadClassFile($classname) {
$class_path = str_replace('\\', DIRECTORY_SEPARATOR, $classname);
require_once HOME_PATH . DIRECTORY_SEPARATOR . $class_path . '.php';
}
public static function errorHandler($errno, $errstr, $errfile, $errline) {
Logger::errorLogStacktrace($errno, $errstr, $errfile, $errline);
}
}