diff options
author | Morris Jobke <hey@morrisjobke.de> | 2018-08-28 17:50:20 +0200 |
---|---|---|
committer | GitHub <noreply@github.com> | 2018-08-28 17:50:20 +0200 |
commit | c6b1c21b8fd53fe524e38306cf8526f2eff4ad61 (patch) | |
tree | 0e16cbab9f9fc6b851afb00ae380591bcdcf262c /lib/private | |
parent | e9dd6aec61501114be22eaa10e952a8b6a3d275b (diff) | |
parent | 61370549f3f86565b73823ff3aba9ba28ec0a8be (diff) | |
download | nextcloud-server-c6b1c21b8fd53fe524e38306cf8526f2eff4ad61.tar.gz nextcloud-server-c6b1c21b8fd53fe524e38306cf8526f2eff4ad61.zip |
Merge pull request #10854 from nextcloud/fix-10764
Allow same section class for multiple section types (fix #10764)
Diffstat (limited to 'lib/private')
-rw-r--r-- | lib/private/Settings/Manager.php | 23 |
1 files changed, 19 insertions, 4 deletions
diff --git a/lib/private/Settings/Manager.php b/lib/private/Settings/Manager.php index 260e33d1929..f1baf35b7ab 100644 --- a/lib/private/Settings/Manager.php +++ b/lib/private/Settings/Manager.php @@ -133,7 +133,11 @@ class Manager implements IManager { * @return void */ public function registerSection(string $type, string $section) { - $this->sectionClasses[$section] = $type; + if (!isset($this->sectionClasses[$type])) { + $this->sectionClasses[$type] = []; + } + + $this->sectionClasses[$type][] = $section; } /** @@ -145,7 +149,11 @@ class Manager implements IManager { $this->sections[$type] = []; } - foreach ($this->sectionClasses as $class => $sectionType) { + if (!isset($this->sectionClasses[$type])) { + return $this->sections[$type]; + } + + foreach ($this->sectionClasses[$type] as $index => $class) { try { /** @var ISection $section */ $section = \OC::$server->query($class); @@ -159,9 +167,16 @@ class Manager implements IManager { continue; } - $this->sections[$sectionType][$section->getID()] = $section; + $sectionID = $section->getID(); + + if (isset($this->sections[$type][$sectionID])) { + $this->log->logException(new \InvalidArgumentException('Section with the same ID already registered'), ['level' => ILogger::INFO]); + continue; + } + + $this->sections[$type][$sectionID] = $section; - unset($this->sectionClasses[$class]); + unset($this->sectionClasses[$type][$index]); } return $this->sections[$type]; |