From 50ebea41f60f2864a565ea9985c5462c2df5f09e Mon Sep 17 00:00:00 2001
From: Robin McCorkell <rmccorkell@karoshi.org.uk>
Date: Thu, 6 Aug 2015 16:08:02 +0100
Subject: [PATCH] Only load app routes if the app has already been loaded

---
 lib/private/app.php          | 10 ++++++++++
 lib/private/route/router.php |  6 ++++++
 2 files changed, 16 insertions(+)

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);
-- 
GitLab