Merge pull request #10854 from nextcloud/fix-10764
Allow same section class for multiple section types (fix #10764)
This commit is contained in:
commit
c6b1c21b8f
|
@ -133,7 +133,11 @@ class Manager implements IManager {
|
||||||
* @return void
|
* @return void
|
||||||
*/
|
*/
|
||||||
public function registerSection(string $type, string $section) {
|
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] = [];
|
$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 {
|
try {
|
||||||
/** @var ISection $section */
|
/** @var ISection $section */
|
||||||
$section = \OC::$server->query($class);
|
$section = \OC::$server->query($class);
|
||||||
|
@ -159,9 +167,16 @@ class Manager implements IManager {
|
||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
|
|
||||||
$this->sections[$sectionType][$section->getID()] = $section;
|
$sectionID = $section->getID();
|
||||||
|
|
||||||
unset($this->sectionClasses[$class]);
|
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[$type][$index]);
|
||||||
}
|
}
|
||||||
|
|
||||||
return $this->sections[$type];
|
return $this->sections[$type];
|
||||||
|
|
|
@ -220,4 +220,45 @@ class ManagerTest extends TestCase {
|
||||||
10 => [new Security($this->userManager)],
|
10 => [new Security($this->userManager)],
|
||||||
], $this->manager->getPersonalSettings('security'));
|
], $this->manager->getPersonalSettings('security'));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public function testSameSectionAsPersonalAndAdmin() {
|
||||||
|
$this->l10n
|
||||||
|
->expects($this->any())
|
||||||
|
->method('t')
|
||||||
|
->will($this->returnArgument(0));
|
||||||
|
|
||||||
|
$this->manager->registerSection('personal', \OCA\WorkflowEngine\Settings\Section::class);
|
||||||
|
$this->manager->registerSection('admin', \OCA\WorkflowEngine\Settings\Section::class);
|
||||||
|
|
||||||
|
$this->url->expects($this->exactly(9))
|
||||||
|
->method('imagePath')
|
||||||
|
->willReturnMap([
|
||||||
|
['core', 'actions/info.svg', '1'],
|
||||||
|
['settings', 'password.svg', '2'],
|
||||||
|
['core', 'clients/phone.svg', '3'],
|
||||||
|
['settings', 'admin.svg', '0'],
|
||||||
|
['core', 'actions/settings-dark.svg', '1'],
|
||||||
|
['core', 'actions/share.svg', '2'],
|
||||||
|
['core', 'actions/password.svg', '3'],
|
||||||
|
['core', 'places/contacts.svg', '5'],
|
||||||
|
['settings', 'help.svg', '4'],
|
||||||
|
]);
|
||||||
|
|
||||||
|
$this->assertEquals([
|
||||||
|
0 => [new Section('personal-info', 'Personal info', 0, '1')],
|
||||||
|
5 => [new Section('security', 'Security', 0, '2')],
|
||||||
|
15 => [new Section('sync-clients', 'Mobile & desktop', 0, '3')],
|
||||||
|
55 => [\OC::$server->query(\OCA\WorkflowEngine\Settings\Section::class)],
|
||||||
|
], $this->manager->getPersonalSections());
|
||||||
|
|
||||||
|
$this->assertEquals([
|
||||||
|
0 => [new Section('overview', 'Overview', 0, '0')],
|
||||||
|
1 => [new Section('server', 'Basic settings', 0, '1')],
|
||||||
|
5 => [new Section('sharing', 'Sharing', 0, '2')],
|
||||||
|
10 => [new Section('security', 'Security', 0, '3')],
|
||||||
|
50 => [new Section('groupware', 'Groupware', 0, '5')],
|
||||||
|
55 => [\OC::$server->query(\OCA\WorkflowEngine\Settings\Section::class)],
|
||||||
|
98 => [new Section('additional', 'Additional settings', 0, '1')],
|
||||||
|
], $this->manager->getAdminSections());
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in New Issue