diff --git a/lib/private/app.php b/lib/private/app.php index 74b21b2b10..e51fe73cb1 100644 --- a/lib/private/app.php +++ b/lib/private/app.php @@ -73,6 +73,16 @@ class OC_App { return str_replace(array('\0', '/', '\\', '..'), '', $app); } + /** + * Check if an app is loaded + * + * @param string $app + * @return bool + */ + public static function isAppLoaded($app) { + return in_array($app, self::$loadedApps, true); + } + /** * loads all apps * diff --git a/lib/private/route/router.php b/lib/private/route/router.php index 4899236609..33669452f2 100644 --- a/lib/private/route/router.php +++ b/lib/private/route/router.php @@ -150,6 +150,12 @@ class Router implements IRouter { \OC::$server->getEventLogger()->start('loadroutes' . $requestedApp, 'Loading Routes'); foreach ($routingFiles as $app => $file) { if (!isset($this->loadedApps[$app])) { + if (!\OC_App::isAppLoaded($app)) { + // app MUST be loaded before app routes + // try again next time loadRoutes() is called + $this->loaded = false; + continue; + } $this->loadedApps[$app] = true; $this->useCollection($app); $this->requireRouteFile($file, $app);