From dc779cd270fee41623724222c7387cfe2d1bfc04 Mon Sep 17 00:00:00 2001 From: Luca Haid Date: Sun, 18 Jan 2026 21:02:01 +0100 Subject: [PATCH] fixed submodule routing --- application/MobileApp/MobileAppController.php | 36 ++++++++++++++++--- 1 file changed, 31 insertions(+), 5 deletions(-) diff --git a/application/MobileApp/MobileAppController.php b/application/MobileApp/MobileAppController.php index 294972802..3a356ceb3 100644 --- a/application/MobileApp/MobileAppController.php +++ b/application/MobileApp/MobileAppController.php @@ -398,21 +398,31 @@ class MobileAppController extends mfBaseController { * /MobileApp/{module}/{submodule}/{endpoint} */ protected function handleApiCall($module, $submodule, $endpoint) { - // Normalize names - $moduleName = ucfirst(strtolower($module)); - $submoduleName = ucfirst(strtolower($submodule)); - // Check authentication for API calls if (!$this->user || !$this->user->id) { self::returnJson(['success' => false, 'error' => 'Not authenticated'], 401); return; } + // Find module directory (case-insensitive) + $moduleName = $this->findModuleDirectory(APPDIR . "MobileApp/Modules", $module); + if (!$moduleName) { + self::returnJson(['success' => false, 'error' => "Module not found: {$module}"], 404); + return; + } + + // Find submodule directory (case-insensitive) + $submoduleName = $this->findModuleDirectory(APPDIR . "MobileApp/Modules/{$moduleName}", $submodule); + if (!$submoduleName) { + self::returnJson(['success' => false, 'error' => "Submodule not found: {$module}/{$submodule}"], 404); + return; + } + // Build handler path $handlerFile = APPDIR . "MobileApp/Modules/{$moduleName}/{$submoduleName}/{$submoduleName}Handler.php"; if (!file_exists($handlerFile)) { - self::returnJson(['success' => false, 'error' => "Module not found: {$moduleName}/{$submoduleName}"], 404); + self::returnJson(['success' => false, 'error' => "Handler not found: {$moduleName}/{$submoduleName}"], 404); return; } @@ -445,4 +455,20 @@ class MobileAppController extends mfBaseController { self::returnJson(['success' => false, 'error' => "Endpoint not found: {$endpoint}"], 404); } + + /** + * Find directory with case-insensitive matching + * Required for Linux compatibility where filesystem is case-sensitive + */ + protected function findModuleDirectory($basePath, $name) { + if (!is_dir($basePath)) return null; + $dirs = scandir($basePath); + foreach ($dirs as $dir) { + if ($dir === '.' || $dir === '..') continue; + if (strtolower($dir) === strtolower($name) && is_dir($basePath . '/' . $dir)) { + return $dir; + } + } + return null; + } }