From 67909cf87bf17e6369d7e244aa956060aa40d25d Mon Sep 17 00:00:00 2001 From: Roeland Jago Douma Date: Tue, 21 Mar 2017 20:53:37 +0100 Subject: [PATCH] Make DI work for all apps As stated in https://github.com/nextcloud/server/pull/3901#issuecomment-288135309 appid's don't have to match the namespace. Work around this Signed-off-by: Roeland Jago Douma --- .../DependencyInjection/DIContainer.php | 19 +++++++++++++------ 1 file changed, 13 insertions(+), 6 deletions(-) diff --git a/lib/private/AppFramework/DependencyInjection/DIContainer.php b/lib/private/AppFramework/DependencyInjection/DIContainer.php index 06825d2dd5..9d27aff486 100644 --- a/lib/private/AppFramework/DependencyInjection/DIContainer.php +++ b/lib/private/AppFramework/DependencyInjection/DIContainer.php @@ -373,21 +373,28 @@ class DIContainer extends SimpleContainer implements IAppContainer { }); } + private function getFallbackNamespace($name) { + $segments = explode('\\', $name); + if (count($segments) >= 2) { + return $segments[0] . '\\' . ucfirst(strtolower($segments[1])); + } else { + return null; + } + } + public function query($name) { $name = $this->sanitizeName($name); if ($this->offsetExists($name)) { return parent::query($name); } else { - if (strpos($name, 'OCA\\') === 0 && substr_count($name, '\\') >= 2) { - $segments = explode('\\', $name); - if (strtolower($segments[1]) === strtolower($this['AppName'])) { - return parent::query($name); - } - } else if ($this['AppName'] === 'settings' && strpos($name, 'OC\\Settings\\') === 0) { + if ($this['AppName'] === 'settings' && strpos($name, 'OC\\Settings\\') === 0) { return parent::query($name); } else if ($this['AppName'] === 'core' && strpos($name, 'OC\\Core\\') === 0) { return parent::query($name); + } else if (strpos($name, \OC\AppFramework\App::buildAppNamespace($this['AppName'])) === 0 || + $this->getFallbackNamespace($name) === \OC\AppFramework\App::buildAppNamespace($this['AppName'])) { + return parent::query($name); } }