/** * @ignore */ private static function purgeFolder($uFolder) { $tDirectory = Io::glob($uFolder, null, Io::GLOB_RECURSIVE | Io::GLOB_FILES); if ($tDirectory === false) { return; } foreach ($tDirectory as $tFilename) { if (substr($tFilename, -1) === '/') { continue; } unlink($tFilename); } }
/** * Loads the default configuration for the current application. * * @uses Config::loadFile() * @throws \Exception if any extension is not found * @return array loaded configuration */ public static function load() { $tConfigFiles = array(Framework::$corepath . 'config.json'); if (Framework::$application !== null) { Io::glob(Framework::$application->path . 'config/', '*.json', Io::GLOB_RECURSIVE | Io::GLOB_FILES, "", $tConfigFiles); } $tLastModified = Io::getLastModified($tConfigFiles); $tOutputFile = Io::translatePath('{writable}cache/config'); if (!Framework::$disableCaches && Io::isReadableAndNewer($tOutputFile, $tLastModified)) { self::$loadedFromCache = true; return Io::readSerialize($tOutputFile); } $tConfig = array(); foreach ($tConfigFiles as $tFile) { self::loadFile($tConfig, $tFile, true); } if (isset($tConfig['extensionList'])) { foreach ($tConfig['extensionList'] as $tExtension) { $tFile = Framework::$corepath . 'src/Scabbia/Extensions/' . $tExtension . '/config.json'; if (file_exists($tFile)) { self::loadFile($tConfig, $tFile, false); continue; } if (Framework::$application !== null) { $tFile = Framework::$application->path . 'Extensions/' . $tExtension . '/config.json'; if (file_exists($tFile)) { self::loadFile($tConfig, $tFile, false); continue; } } throw new \Exception('extension not found - ' . $tExtension); } } self::$loadedFromCache = false; if (!Framework::$readonly) { Io::writeSerialize($tOutputFile, $tConfig); } return $tConfig; }
/** * Invokes the startup methods just for framework extensions so other parties can take over execution. */ public static function run() { Request::init(); // determine active application $tSelectedApplication = null; foreach (self::$applications as $tApplication) { if (count($tApplication['endpoints']) > 0) { foreach ($tApplication['endpoints'] as $tEndpoint) { foreach ((array) $tEndpoint['address'] as $tEndpointAddress) { if (Request::matchesHostname($tEndpointAddress)) { $tSelectedApplication = $tApplication; break 3; } } } } else { $tSelectedApplication = $tApplication; break; } } // construct application object if ($tSelectedApplication !== null) { self::$application = new Application($tSelectedApplication['namespace'], $tSelectedApplication['directory']); } // load configuration w/ extensions Config::$default = Config::load(); // include files foreach (Config::get('includeList', array()) as $tInclude) { $tIncludePath = pathinfo(Io::translatePath($tInclude)); $tFiles = Io::glob($tIncludePath['dirname'] . '/', $tIncludePath['basename'], Io::GLOB_FILES); if ($tFiles !== false) { foreach ($tFiles as $tFilename) { //! todo require_once? include $tFilename; } } } // loadClass classes foreach (Config::get('loadClassList', array()) as $tClass) { class_exists($tClass, true); } // events foreach (Config::get('eventList', array()) as $tLoad) { if ($tLoad['name'] === 'load') { Events::invokeSingle(array($tLoad['type'], $tLoad['value'])); continue; } Events::register($tLoad['name'], $tLoad['type'], $tLoad['value']); } Request::setRoutes(); // output handling ob_start('Scabbia\\Framework::output'); ob_implicit_flush(false); try { // run extensions $tParms = array(); Events::invoke('pre-run', $tParms); // ignite application if ($tSelectedApplication !== null) { self::$application->before->invoke(); $tReturn = self::$application->callbacks->invoke(); self::$application->after->invoke(); if (self::$application->otherwise !== null && $tReturn !== false) { call_user_func(self::$application->otherwise); return false; } } } catch (CustomException $ex) { if ($tSelectedApplication !== null) { call_user_func(self::$application->onError, $ex->type, $ex->title, $ex->getMessage()); } return false; } return true; }