Example #1
0
 /**
  * @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);
     }
 }
Example #2
0
 /**
  * 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;
 }
Example #3
0
 /**
  * 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;
 }