From cc6c5ded1fb3cbf3d3b9c71e49ae56100640719a Mon Sep 17 00:00:00 2001 From: Ad Schellevis Date: Mon, 5 Mar 2018 22:12:55 +0100 Subject: [PATCH] mvc, support multiple controller directories in routing --- .../mvc/app/library/OPNsense/Core/Routing.php | 31 ++++++++++--------- 1 file changed, 17 insertions(+), 14 deletions(-) diff --git a/src/opnsense/mvc/app/library/OPNsense/Core/Routing.php b/src/opnsense/mvc/app/library/OPNsense/Core/Routing.php index 853d34086..7fc5313d2 100644 --- a/src/opnsense/mvc/app/library/OPNsense/Core/Routing.php +++ b/src/opnsense/mvc/app/library/OPNsense/Core/Routing.php @@ -101,21 +101,24 @@ class Routing // we should consider some kind of caching here // $registered_modules = array(); - foreach (glob($this->rootDir."*", GLOB_ONLYDIR) as $namespace_base) { - foreach (glob($namespace_base."/*", GLOB_ONLYDIR) as $module_base) { - if (is_dir($module_base.$this->suffix)) { - $basename = strtolower(basename($module_base)); - $api_base = $module_base . $this->suffix; - $namespace_name = str_replace('/', '\\', str_replace($this->rootDir, '', $api_base)); - if (empty($registered_modules[$basename])) { - $registered_modules[$basename] = array(); + $rootDirs = is_string($this->rootDir) ? array($this->rootDir) : $this->rootDir ; + foreach ($rootDirs as $rootDir) { + foreach (glob($rootDir."*", GLOB_ONLYDIR) as $namespace_base) { + foreach (glob($namespace_base."/*", GLOB_ONLYDIR) as $module_base) { + if (is_dir($module_base.$this->suffix)) { + $basename = strtolower(basename($module_base)); + $api_base = $module_base . $this->suffix; + $namespace_name = str_replace('/', '\\', str_replace($this->rootDir, '', $api_base)); + if (empty($registered_modules[$basename])) { + $registered_modules[$basename] = array(); + } + // always place OPNsense components on top + $sortOrder = stristr($module_base, '/OPNsense/') ? "0" : count($registered_modules[$basename]) + 1; + $registered_modules[$basename][$sortOrder] = array(); + $registered_modules[$basename][$sortOrder]['namespace'] = $namespace_name; + $registered_modules[$basename][$sortOrder]['path'] = $api_base; + ksort($registered_modules[$basename]); } - // always place OPNsense components on top - $sortOrder = stristr($module_base, '/OPNsense/') ? "0" : count($registered_modules[$basename]) + 1; - $registered_modules[$basename][$sortOrder] = array(); - $registered_modules[$basename][$sortOrder]['namespace'] = $namespace_name; - $registered_modules[$basename][$sortOrder]['path'] = $api_base; - ksort($registered_modules[$basename]); } } }