diff --git a/lib/private/Settings/Manager.php b/lib/private/Settings/Manager.php index 7574695d709..8451e965955 100644 --- a/lib/private/Settings/Manager.php +++ b/lib/private/Settings/Manager.php @@ -327,10 +327,6 @@ class Manager implements IManager { * @inheritdoc */ public function getAdminSections() { - $query = $this->dbc->getQueryBuilder(); - $query->select(['class', 'priority']) - ->from(self::TABLE_ADMIN_SECTIONS); - // built-in sections $sections = [ 0 => [new Section('server', $this->l->t('Server settings'), 0)], @@ -341,7 +337,15 @@ class Manager implements IManager { 99 => [new Section('tips-tricks', $this->l->t('Tips & tricks'), 0)], ]; + $query = $this->dbc->getQueryBuilder(); + $query->selectDistinct('s.class') + ->addSelect('s.priority') + ->from(self::TABLE_ADMIN_SECTIONS, 's') + ->from(self::TABLE_ADMIN_SETTINGS, 'f') + ->where($query->expr()->eq('s.id', 'f.section')) + ; $result = $query->execute(); + while($row = $result->fetch()) { if(!isset($sections[$row['priority']])) { $sections[$row['priority']] = []; diff --git a/tests/lib/Settings/ManagerTest.php b/tests/lib/Settings/ManagerTest.php index cd5100eff6d..4728784167a 100644 --- a/tests/lib/Settings/ManagerTest.php +++ b/tests/lib/Settings/ManagerTest.php @@ -136,15 +136,33 @@ class ManagerTest extends TestCase { public function testGetAdminSections() { $qb = $this->getMockBuilder('\OCP\DB\QueryBuilder\IQueryBuilder')->getMock(); + $expr = $this->getMockBuilder('OCP\DB\QueryBuilder\IExpressionBuilder')->getMock(); $qb ->expects($this->once()) ->method('select') - ->with(['class', 'priority']) + ->with(['s.class', 's.priority']) + ->willReturn($qb); + $qb + ->expects($this->exactly(2)) + ->method('from') + ->willReturn($qb); + $qb + ->expects($this->at(1)) + ->method('from') + ->with('admin_sections', 's') + ->willReturn($qb); + $qb + ->expects($this->at(2)) + ->method('from') + ->with('admin_settings', 'f') ->willReturn($qb); $qb ->expects($this->once()) - ->method('from') - ->with('admin_sections') + ->method('expr') + ->willReturn($expr); + $qb + ->expects($this->once()) + ->method('where') ->willReturn($qb); $stmt = $this->getMockBuilder('\Doctrine\DBAL\Driver\Statement')->getMock(); $qb