diff --git a/core/c/auto.php b/core/c/auto.php
new file mode 100644
index 0000000..70ebeb9
--- /dev/null
+++ b/core/c/auto.php
@@ -0,0 +1,182 @@
+_set('configSettingsSection', Config::getInstance()->getConfig()[View::NIBIRU_SETTINGS]);
+ $this->_set('configAutoloaderSection', Config::getInstance()->getConfig()[self::SETTINGS_SECTION]);
+ $this->_set('modelFolderPath', $this->_get('configSettingsSection')[self::DB_MODEL_FOLDER]);
+ $this->_set('moduleFolderPath', $this->_get('configSettingsSection')[self::SETTINGS_MODULE_SELECTOR]);
+ }
+
+ /**
+ * @desc Singleton instance
+ * @return Auto
+ */
+ public static function loader(): Auto
+ {
+ $className = get_called_class();
+ if( self::$_instance === null )
+ {
+ self::$_instance = new $className();
+ }
+ return self::$_instance;
+ }
+
+ /**
+ * @desc will set a given property for this class
+ * @param string $name
+ * @param $value
+ * @return void
+ */
+ protected function _set(string $name, $value): void
+ {
+ try {
+ $_class_properties = get_class_vars(__CLASS__);
+ if (array_key_exists($name, $_class_properties))
+ {
+ $this->$name = $value;
+ }
+ } catch (\Exception $e) {
+ error_log("Exception in _set method: " . $e->getMessage());
+ } catch (\Error $e) {
+ error_log("Error in _set method: " . $e->getMessage());
+ }
+ }
+ /**
+ * @desc will return the value of the requested property
+ * @param string $name
+ * @return mixed
+ */
+ protected function _get(string $name): mixed
+ {
+ try {
+ $_class_properties = get_class_vars(__CLASS__);
+ if (array_key_exists($name, $_class_properties))
+ {
+ return $this->$name;
+ }
+ } catch (\Exception $e) {
+ error_log("Exception in _get method: " . $e->getMessage());
+ } catch (\Error $e) {
+ error_log("Error in _get method: " . $e->getMessage());
+ }
+ }
+
+ /**
+ * @desc Generic method to load files based on a given path and file pattern.
+ * @param string $basePath The base path where the files are located.
+ * @param string $pattern The regex pattern to match the files.
+ * @return void
+ */
+ public function loadFiles(string $basePath, string $pattern = '/^.+\.php$/i')
+ {
+ $directoryIterator = new RecursiveDirectoryIterator($basePath);
+ $iterator = new RecursiveIteratorIterator($directoryIterator);
+ $phpFiles = new RegexIterator($iterator, $pattern, \RecursiveRegexIterator::GET_MATCH);
+
+ foreach ($phpFiles as $file) {
+ require_once $file[0];
+ }
+ }
+
+ /**
+ * @desc Load all PHP model files from the specified directory.
+ * @return void
+ */
+ public function loadModelFiles()
+ {
+ $this->loadFiles(__DIR__ . $this->_get('modelFolderPath'));
+ }
+
+ /**
+ * @param $moduleName
+ * @param $componentType
+ * @param $registeredComponents
+ * @return void
+ */
+ protected function loadModuleComponents($moduleName, $componentType, $registeredComponents): void
+ {
+ foreach ($registeredComponents as $componentName) {
+ $componentBasePath = str_replace(self::REGEX_PATH_NAME, '', __DIR__ . $this->_get('moduleFolderPath')) . $moduleName;
+ if ($componentType === self::FILTER_TRAIT_NAME || $componentType === self::FILTER_CLASS_PLUGIN_NAME || $componentType === self::FILTER_INTERFACE_NAME)
+ {
+ $componentPath = $this->determineComponentPath($componentName, $componentBasePath, $componentType);
+ } else {
+ $componentPath = $componentBasePath . '/' . $componentType . '/' . $componentName . '.php';
+ }
+
+ // Load the component if the file exists
+ if (file_exists($componentPath))
+ {
+ require_once $componentPath;
+ }
+ }
+ }
+
+ // Example method to determine the path for special traits and plugins
+ protected function determineComponentPath($componentName, $componentBasePath, $componentType)
+ {
+ // Placeholder logic to determine the correct path for traits and plugins
+ // You might need to implement additional logic based on your framework's structure
+ // For example, you might have a mapping or convention that relates component names to modules
+ return $componentBasePath . '/' . $componentType . '/' . $componentName . '.php';
+ }
+
+ /**
+ * Load modules by utilizing the generic loadFiles method.
+ * @return void
+ */
+ public function loadModules(): void
+ {
+ $registeredModules = $this->_get('configAutoloaderSection')[self::SETTINGS_CLASS_POS];
+ $modulePath = str_replace(self::REGEX_PATH_NAME, '', __DIR__ . $this->_get('moduleFolderPath'));
+
+ foreach ($registeredModules as $moduleName) {
+ $moduleMainFile = $modulePath . $moduleName . '/' . $moduleName . '.php';
+ $this->loadModuleComponents($moduleName, self::FILTER_INTERFACE_NAME, $this->_get('configAutoloaderSection')[self::SETTINGS_IFACE_POS]);
+ $this->loadModuleComponents($moduleName, self::FILTER_TRAIT_NAME, $this->_get('configAutoloaderSection')[self::SETTINGS_TRAIT_POS]);
+ if (file_exists($moduleMainFile))
+ {
+ require_once $moduleMainFile;
+ }
+
+ $this->loadModuleComponents($moduleName, 'plugins', $this->_get('configAutoloaderSection')[self::SETTINGS_CLASS_PLUGIN_POS]);
+ }
+ }
+}
diff --git a/core/c/autoloader.php b/core/c/autoloader.php
index 70c81d6..ee76d35 100755
--- a/core/c/autoloader.php
+++ b/core/c/autoloader.php
@@ -9,6 +9,7 @@
* User: kasdorf
* Date: 10.11.17
* Time: 09:44
+ * @deprecated - this class is deprecated, use the auto autoloader instead (c/auto.php)
*/
class Autoloader
{
diff --git a/core/c/dispatcher.php b/core/c/dispatcher.php
index 7450e6e..3607244 100755
--- a/core/c/dispatcher.php
+++ b/core/c/dispatcher.php
@@ -7,8 +7,8 @@
*/
namespace Nibiru;
-use Nibiru\Autoloader\Autoloader;
-require_once __DIR__ . '/../c/autoloader.php';
+use Nibiru\Auto\Auto;
+require_once __DIR__ . '/../c/auto.php';
final class Dispatcher
{
@@ -38,7 +38,8 @@ public function run()
}
Router::getInstance();
Router::getInstance()->route();
- Autoloader::getInstance()->runRequireOnce();
+ Auto::loader()->loadModelFiles();
+ Auto::loader()->loadModules();
if(is_file(__DIR__ . '/../../application/controller/' . Router::getInstance()->tplName() . 'Controller.php'))
{
require_once __DIR__ . '/../../application/controller/' . Router::getInstance()->tplName() . 'Controller.php';
diff --git a/core/c/jsonnavigation.php b/core/c/jsonnavigation.php
index 3d5e301..1624b92 100755
--- a/core/c/jsonnavigation.php
+++ b/core/c/jsonnavigation.php
@@ -1,141 +1,185 @@
loadNavigationRecursively(Settings::SETTINGS_PATH . self::NAVIGATION . $item['subNav']);
+ }
+ }
+
+ return $navArray;
+ }
+
+ /**
+ * @desc - Will load the navigation json file to the $_navigation
+ * @param string $navigation
+ * @return array
+ */
+ public function loadCompleteNavigation( string $navigation = self::NAVIGATION ): array
+ {
+ $mainNavFilename = Settings::SETTINGS_PATH . parent::getInstance()->getConfig()["SETTINGS"][$navigation];
+ return $this->loadNavigationRecursively($mainNavFilename);
+ }
/**
* @return string
*/
- protected static function getName(): string
- {
- return self::$_name;
- }
+ protected static function getSectionName(): string
+ {
+ return self::$_section_name;
+ }
+
+ /**
+ * @param string $section_name
+ */
+ private static function setSectionName( string $section_name )
+ {
+ self::$_section_name = $section_name;
+ }
+
+ /**
+ * @return string
+ */
+ protected static function getName(): string
+ {
+ return self::$_name;
+ }
/**
* @param $name
*/
- private static function setName( string $name )
- {
- self::$_name = $name;
- }
-
- /**
- * @return null
- */
- protected static function getFileContentString( )
- {
- return self::$_file_content_string;
- }
-
- /**
- * Content String
- */
- private static function setFileContentString( )
- {
- self::$_file_content_string = file_get_contents( Settings::SETTINGS_PATH . parent::getInstance()->getConfig()["SETTINGS"][self::getSectionName()] );
- }
-
- /**
- * @return array
- */
- protected static function getFileContentArray( ): array
- {
- return self::$_file_content_array;
- }
-
- /**
- * will set the file Content array
- */
- private static function setFileContentArray( )
- {
- self::$_file_content_array = file( Settings::SETTINGS_PATH . parent::getInstance()->getConfig()["SETTINGS"][self::getSectionName()] );
- }
+ private static function setName( string $name )
+ {
+ self::$_name = $name;
+ }
+
+ /**
+ * @return null
+ */
+ protected static function getFileContentString( )
+ {
+ return self::$_file_content_string;
+ }
+
+ /**
+ * Content String
+ */
+ private static function setFileContentString( )
+ {
+ self::$_file_content_string = file_get_contents( Settings::SETTINGS_PATH . parent::getInstance()->getConfig()["SETTINGS"][self::getSectionName()] );
+ }
+
+ /**
+ * @return array
+ */
+ protected static function getFileContentArray( ): array
+ {
+ return self::$_file_content_array;
+ }
+
+ /**
+ * will set the file Content array
+ */
+ private static function setFileContentArray( )
+ {
+ self::$_file_content_array = file( Settings::SETTINGS_PATH . parent::getInstance()->getConfig()["SETTINGS"][self::getSectionName()] );
+ }
/**
* @return \RecursiveIteratorIterator
*/
- protected static function getNavigation( ): \RecursiveIteratorIterator
- {
- return self::$_navigation;
- }
+ protected static function getNavigation( ): \RecursiveIteratorIterator
+ {
+ return self::$_navigation;
+ }
/**
* Will load the navigation json file to the $_navigation
* variable
*/
- private static function setNavigation( )
- {
- self::$_navigation = new \RecursiveIteratorIterator(
- new \RecursiveArrayIterator(
- json_decode( self::getFileContentString() , TRUE )
- ), \RecursiveIteratorIterator::SELF_FIRST
- );
- }
-
- /**
- * Displays the content of the file line by line on the
- * screen if it is in json format
- */
- public function displayRawJsonNavigation( )
- {
- foreach (self::getNavigation() as $key => $val)
- {
- if(is_array($val))
- {
- echo "$key:
\n";
- }
- else
- {
- echo "$key => $val
\n";
- }
- }
- }
+ private static function setNavigation( )
+ {
+ self::$_navigation = new \RecursiveIteratorIterator(
+ new \RecursiveArrayIterator(
+ json_decode( self::getFileContentString() , TRUE )
+ ), \RecursiveIteratorIterator::SELF_FIRST
+ );
+ }
+
+ /**
+ * Displays the content of the file line by line on the
+ * screen if it is in json format
+ */
+ public function displayRawJsonNavigation( )
+ {
+ foreach (self::getNavigation() as $key => $val)
+ {
+ if(is_array($val))
+ {
+ echo "$key:
\n";
+ }
+ else
+ {
+ echo "$key => $val
\n";
+ }
+ }
+ }
/**
* Loads the navigation from a json file into
diff --git a/core/c/registry.php b/core/c/registry.php
index f068ca2..9eede78 100755
--- a/core/c/registry.php
+++ b/core/c/registry.php
@@ -8,7 +8,7 @@
* @category - [PLEASE SPECIFIY]
* @license - BSD License
*/
-use Nibiru\Autoloader\Autoloader;
+use Nibiru\Auto\Auto;
final class Registry
{
@@ -47,7 +47,7 @@ private function getModulesPath(): string
*/
private function _setModulesPath( ): void
{
- $this->_modules_path = __DIR__ . str_replace(Autoloader::REGEX_PATH_NAME, '', Config::getInstance()->getConfig()[View::NIBIRU_SETTINGS][self::CONFIG_MODULE_KEY]);
+ $this->_modules_path = __DIR__ . str_replace(Auto::REGEX_PATH_NAME, '', Config::getInstance()->getConfig()[View::NIBIRU_SETTINGS][self::CONFIG_MODULE_KEY]);
}
/**
@@ -114,7 +114,7 @@ private function _setModuleName(string $module_name): void
*/
private function loadModuleRegistry(): void
{
- foreach(Config::getInstance()->getConfig()[Autoloader::SETTINGS_SECTION][Autoloader::SETTINGS_CLASS_POS] as $module)
+ foreach(Config::getInstance()->getConfig()[Auto::SETTINGS_SECTION][Auto::SETTINGS_CLASS_POS] as $module)
{
$this->_setModuleName($module);
}
diff --git a/core/i/version.php b/core/i/version.php
index 0821b50..c427a39 100644
--- a/core/i/version.php
+++ b/core/i/version.php
@@ -11,5 +11,5 @@
*/
interface IVersion
{
- const NIBIRU_VERSION = "0.9.7";
+ const NIBIRU_VERSION = "1.0.0";
}