Check if path can be loadded before attempting it.
[core.git] / inc / loader / class_ClassLoader.php
index 895c5c729795b4c1f3fec1686384de40657bd6a1..eea558055fee071088fdac0eefd59d9f53e3e2a2 100644 (file)
@@ -4,7 +4,7 @@
  *
  * @author             Roland Haeder <webmaster@shipsimu.org>
  * @version            0.0.0
- * @copyright  Copyright (c) 2007, 2008 Roland Haeder, 2009 - 2012 Core Developer Team
+ * @copyright  Copyright (c) 2007, 2008 Roland Haeder, 2009 - 2013 Core Developer Team
  * @license            GNU GPL 3.0 or any newer version
  * @link               http://www.shipsimu.org
  *
@@ -98,6 +98,17 @@ class ClassLoader {
         */
        private $total = 0;
 
+       /**
+        * Framework/application paths for classes, etc.
+        */
+       private static $frameworkPaths = array(
+               'exceptions', // Exceptions
+               'interfaces', // Interfaces
+               'main',       // General main classes
+               'middleware'  // The middleware
+       );
+
+
        /**
         * The protected constructor. Please use the factory method below, or use
         * getSelfInstance() for singleton
@@ -157,6 +168,44 @@ class ClassLoader {
                return $loaderInstance;
        }
 
+       /**
+        * Scans for all framework classes, exceptions and interfaces.
+        *
+        * @return      void
+        */
+       public static function scanFrameworkClasses () {
+               // Cache loader instance
+               $loaderInstance = self::getSelfInstance();
+
+               // Load all classes
+               foreach (self::$frameworkPaths as $className) {
+                       // Try to load the framework classes
+                       $loaderInstance->scanClassPath('inc/classes/' . $className . '/');
+               } // END - foreach
+       }
+
+       /**
+        * Scans for application's classes, etc.
+        *
+        * @return      void
+        */
+       public static function scanApplicationClasses () {
+               // Get config instance
+               $cfg = FrameworkConfiguration::getSelfInstance();
+
+               // Load all classes for the application
+               foreach (self::$frameworkPaths as $class) {
+                       // Create path name
+                       $path = sprintf('%s/%s/%s', $cfg->getConfigEntry('application_path'), $cfg->getConfigEntry('app_name'), $class);
+
+                       // Is the path readable?
+                       if (is_dir($path)) {
+                               // Try to load the application classes
+                               ClassLoader::getSelfInstance()->scanClassPath($path);
+                       } // END - if
+               } // END - foreach
+       }
+
        /**
         * Initializes our loader class
         *
@@ -279,9 +328,9 @@ class ClassLoader {
 
                // Get a new iterator
                //* DEBUG: */ echo "<strong>Base path: {$basePath}</strong><br />\n";
-               $iterator = new RecursiveDirectoryIterator($basePath);
-               $recursive = new RecursiveIteratorIterator($iterator);
-               foreach ($recursive as $entry) {
+               $iterator = new RecursiveIteratorIterator(new RecursiveDirectoryIterator($basePath));
+
+               foreach ($iterator as $entry) {
                        // Get filename from iterator
                        $fileName = $entry->getFileName();