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"; }