/init/init.php
PHP | 173 lines | 133 code | 36 blank | 4 comment | 21 complexity | 2f8d492ba33da9279f701fa077a545b8 MD5 | raw file
1<?php
2require_once(STINGLE_PATH . "core/Cgi.class.php");
3require_once(STINGLE_PATH . "core/Config.class.php");
4require_once(STINGLE_PATH . "core/ConfigManager.class.php");
5require_once(STINGLE_PATH . "core/Debug.class.php");
6require_once(STINGLE_PATH . "core/Dependency.class.php");
7require_once(STINGLE_PATH . "core/Hook.class.php");
8require_once(STINGLE_PATH . "core/HookManager.class.php");
9require_once(STINGLE_PATH . "core/Loader.class.php");
10require_once(STINGLE_PATH . "core/Model.class.php");
11require_once(STINGLE_PATH . "core/PackageManager.class.php");
12require_once(STINGLE_PATH . "core/Reg.class.php");
13require_once(STINGLE_PATH . "core/SiteMode.class.php");
14
15require_once(STINGLE_PATH . "core/Exceptions/EmptyArgumentException.class.php");
16require_once(STINGLE_PATH . "core/Exceptions/InvalidArrayArgumentException.class.php");
17require_once(STINGLE_PATH . "core/Exceptions/InvalidIntegerArgumentException.class.php");
18require_once(STINGLE_PATH . "core/Exceptions/InvalidTimestampArgumentException.class.php");
19
20require_once(STINGLE_PATH . "configs/system.inc.php");
21
22require_once(STINGLE_PATH . "helpers/system.php");
23require_once(STINGLE_PATH . "helpers/func.php");
24
25if(!isset($SYSCONFIG)){ $SYSCONFIG = array(); }
26if(!isset($CONFIG)){ $CONFIG = array(); }
27
28$sysconfig = new Config($SYSCONFIG);
29
30register_shutdown_function("shutdown");
31set_exception_handler("default_exception_handler");
32set_error_handler("default_error_handler");
33
34Reg::register('packageMgr', new PackageManager());
35
36$globalConfig = null;
37if($sysconfig->Stingle->BootCompiler === true){
38 if(!defined('DISABLE_APCU') && extension_loaded('apcu')){
39 $globalConfig = apcu_fetch('globalConfig');
40 if($globalConfig === false){
41 $globalConfig = ConfigManager::mergeConfigs(new Config($CONFIG), $sysconfig);
42 apcu_store('globalConfig', $globalConfig);
43 }
44 }
45 else{
46 $configCacheFilename = $sysconfig->Stingle->CoreCachePath . 'configs';
47 if(file_exists($configCacheFilename)){
48 try{
49 $globalConfig = unserialize(file_get_contents($configCacheFilename));
50 }
51 catch(Exception $e){
52 unlink($configCacheFilename);
53 $globalConfig = ConfigManager::mergeConfigs(new Config($CONFIG), $sysconfig);
54 }
55 }
56 else{
57 $globalConfig = ConfigManager::mergeConfigs(new Config($CONFIG), $sysconfig);
58 file_put_contents($configCacheFilename, serialize($globalConfig));
59 }
60 }
61}
62else{
63 $globalConfig = ConfigManager::mergeConfigs(new Config($CONFIG), $sysconfig);
64}
65ConfigManager::setGlobalConfig($globalConfig);
66ConfigManager::initCache();
67
68
69if(isset($globalConfig->Stingle->errorReporting)){
70 error_reporting($globalConfig->Stingle->errorReporting);
71}
72
73if($globalConfig->Stingle->autostartSession){
74 startSession();
75}
76
77if($globalConfig->Stingle->autoObStart){
78 ob_start('stingleOutputHandler');
79}
80
81Cgi::setMode(defined("IS_CGI"));
82Debug::setMode($globalConfig->Debug->enabled);
83SiteMode::set($globalConfig->SiteMode->mode);
84
85// Register User Hooks
86if(isset($globalConfig->Hooks)){
87 foreach(get_object_vars($globalConfig->Hooks) as $hookName => $funcName){
88 if(is_object($funcName)){
89 foreach (get_object_vars($funcName) as $regFuncName){
90 HookManager::registerHook(new Hook($hookName, $regFuncName));
91 }
92 }
93 else{
94 HookManager::registerHook(new Hook($hookName, $funcName));
95 }
96 }
97}
98
99// Init packages/plugins
100HookManager::callHook("BeforePackagesLoad");
101
102$classesCacheFilename = $globalConfig->Stingle->CoreCachePath . 'classes.php';
103if($globalConfig->Stingle->BootCompiler === true){
104 if(file_exists($classesCacheFilename)){
105 $GLOBALS['doNotIncludeClasses'] = true;
106 require_once ($classesCacheFilename);
107 }
108 if(!isset($GLOBALS['includedClasses'])){
109 $GLOBALS['includedClasses'] = array();
110 }
111}
112
113foreach(get_object_vars($globalConfig->Packages) as $package){
114 $package = get_object_vars($package);
115 if(!isset($package[1])){
116 $package[1] = array();
117 }
118 Reg::get('packageMgr')->addPackage($package[0], $package[1]);
119}
120Reg::get('packageMgr')->load();
121
122HookManager::callHook("AfterPackagesLoad");
123
124if(ConfigManager::getGlobalConfig()->Stingle->BootCompiler === true){
125 if(!file_exists($classesCacheFilename)){
126 $fileContents = "<?php\n\n";
127 if(count($GLOBALS['includedClasses']) > 0 and !isset($GLOBALS['doNotIncludeClasses'])){
128 foreach($GLOBALS['includedClasses'] as $file){
129 $content = file_get_contents($file['file']);
130 $content = str_replace("<?php", "", $content);
131 $content = str_replace("<?", "", $content);
132 $content = str_replace("?>", "", $content);
133
134 if(!empty($file['precompileCode'])){
135 $fileContents .= $file['precompileCode'] . "\n\n";
136 }
137
138 $fileContents .= $content . "\n\n";
139
140 if(!empty($file['postcompileCode'])){
141 $fileContents .= $file['postcompileCode'] . "\n\n";
142 }
143 }
144
145 file_put_contents($classesCacheFilename, $fileContents);
146 }
147 }
148
149
150}
151
152// Request Parser
153HookManager::callHook("BeforeRequestParser");
154
155HookManager::callHook("BeforeRequestParserStep2");
156
157HookManager::callHook("RequestParser");
158
159HookManager::callHook("AfterRequestParser");
160
161HookManager::callHook("BeforeController");
162
163HookManager::callHook("Controller");
164
165HookManager::callHook("AfterController");
166
167//$time = microtime(true);
168HookManager::callHook("BeforeOutput");
169
170HookManager::callHook("Output");
171
172HookManager::callHook("AfterOutput");
173