PageRenderTime 49ms CodeModel.GetById 11ms app.highlight 24ms RepoModel.GetById 1ms app.codeStats 0ms

/init/init.php

https://bitbucket.org/alexamiryan/stingle
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