/** * Initialize the context * * @return null */ public static function initialize() { if (self::$_debug_mode) { self::$debug_id = uniqid(); } try { // The time the script was loaded $starttime = explode(' ', microtime()); define('NOW', (int) $starttime[1]); // Set up error and exception handling set_exception_handler(array('TBGContext', 'exceptionHandler')); set_error_handler(array('TBGContext', 'errorHandler')); error_reporting(E_ALL | E_NOTICE | E_STRICT); // Set the start time self::setLoadStart($starttime[1] + $starttime[0]); TBGLogging::log('Initializing Caspar framework'); TBGLogging::log('PHP_SAPI says "' . PHP_SAPI . '"'); TBGLogging::log('We are version "' . TBGSettings::getVersion() . '"'); self::checkInstallMode(); if (!is_writable(THEBUGGENIE_CORE_PATH . DIRECTORY_SEPARATOR . 'cache')) { throw new Exception('The cache directory is not writable. Please correct the permissions of core/cache, and try again'); } if (!self::isCLI() && !ini_get('session.auto_start')) { self::initializeSession(); } TBGCache::checkEnabled(); if (TBGCache::isEnabled()) { TBGCache::setPrefix(str_replace('.', '_', TBGSettings::getVersion())); TBGLogging::log(TBGCache::getCacheType() == TBGCache::TYPE_APC ? 'Caching enabled: APC, filesystem' : 'Caching enabled: filesystem'); } else { TBGLogging::log('No caching available'); } TBGLogging::log('Loading B2DB'); if (self::isCLI()) { \b2db\Core::setHTMLException(false); } \b2db\Core::initialize(THEBUGGENIE_CORE_PATH . 'b2db_bootstrap.inc.php'); if (!\b2db\Core::isInitialized()) { throw new Exception("The Bug Genie seems installed, but B2DB isn't configured. This usually indicates an error with the installation. Try removing the file " . THEBUGGENIE_PATH . "installed and try again."); } if (!self::isReadySetup()) { \b2db\Core::setCachingEnabled(false); } TBGLogging::log('...done (Initializing B2DB)'); if (\b2db\Core::isInitialized()) { TBGLogging::log('Database connection details found, connecting'); \b2db\Core::doConnect(); TBGLogging::log('...done (Database connection details found, connecting)'); } TBGLogging::log('...done'); TBGLogging::log('Initializing context'); mb_internal_encoding("UTF-8"); mb_language('uni'); mb_http_output("UTF-8"); TBGLogging::log('Loading scope'); self::setScope(); TBGLogging::log('done (loading scope)'); if (!self::getRouting()->hasCachedRoutes()) { self::loadPreModuleRoutes(); } if (!self::isInstallmode()) { self::setupCoreListeners(); self::loadModules(); } if (!self::getRouting()->hasCachedRoutes()) { self::loadPostModuleRoutes(); if (!self::isInstallmode()) { self::getRouting()->cacheRoutes(); } } else { self::loadCachedRoutes(); } TBGLogging::log('...done'); TBGLogging::log('...done initializing'); TBGLogging::log('Caspar framework loaded'); } catch (Exception $e) { if (!self::isCLI() && !self::isInstallmode()) { throw $e; } } }