diff --git a/settings/Controller/AppSettingsController.php b/settings/Controller/AppSettingsController.php index cd34edf567..325b6a0daf 100644 --- a/settings/Controller/AppSettingsController.php +++ b/settings/Controller/AppSettingsController.php @@ -47,6 +47,7 @@ use OCP\INavigationManager; use OCP\IRequest; use OCP\IL10N; use OCP\IConfig; +use OCP\IURLGenerator; use OCP\L10N\IFactory; /** @@ -77,6 +78,8 @@ class AppSettingsController extends Controller { private $bundleFetcher; /** @var Installer */ private $installer; + /** @var IURLGenerator */ + private $urlGenerator; /** * @param string $appName @@ -90,8 +93,9 @@ class AppSettingsController extends Controller { * @param IFactory $l10nFactory * @param BundleFetcher $bundleFetcher * @param Installer $installer + * @param IURLGenerator $urlGenerator */ - public function __construct($appName, + public function __construct(string $appName, IRequest $request, IL10N $l10n, IConfig $config, @@ -101,7 +105,8 @@ class AppSettingsController extends Controller { AppFetcher $appFetcher, IFactory $l10nFactory, BundleFetcher $bundleFetcher, - Installer $installer) { + Installer $installer, + IURLGenerator $urlGenerator) { parent::__construct($appName, $request); $this->l10n = $l10n; $this->config = $config; @@ -112,6 +117,7 @@ class AppSettingsController extends Controller { $this->l10nFactory = $l10nFactory; $this->bundleFetcher = $bundleFetcher; $this->installer = $installer; + $this->urlGenerator = $urlGenerator; } /** @@ -128,6 +134,7 @@ class AppSettingsController extends Controller { $params = []; $params['category'] = $category; $params['appstoreEnabled'] = $this->config->getSystemValue('appstoreenabled', true) === true; + $params['urlGenerator'] = $this->urlGenerator; $this->navigationManager->setActiveEntry('core_apps'); $templateResponse = new TemplateResponse($this->appName, 'apps', $params, 'user'); diff --git a/settings/templates/apps.php b/settings/templates/apps.php index d7b232b915..9e2f9cf2df 100644 --- a/settings/templates/apps.php +++ b/settings/templates/apps.php @@ -14,6 +14,8 @@ script( ] ); /** @var array $_ */ +/** @var \OCP\IURLGenerator $urlGenerator */ +$urlGenerator = $_['urlGenerator']; ?> diff --git a/tests/Settings/Controller/AppSettingsControllerTest.php b/tests/Settings/Controller/AppSettingsControllerTest.php index 6631873d8a..2f916b8970 100644 --- a/tests/Settings/Controller/AppSettingsControllerTest.php +++ b/tests/Settings/Controller/AppSettingsControllerTest.php @@ -30,6 +30,7 @@ use OC\Settings\Controller\AppSettingsController; use OCP\AppFramework\Http\ContentSecurityPolicy; use OCP\AppFramework\Http\JSONResponse; use OCP\AppFramework\Http\TemplateResponse; +use OCP\IURLGenerator; use OCP\L10N\IFactory; use Test\TestCase; use OCP\IRequest; @@ -66,6 +67,8 @@ class AppSettingsControllerTest extends TestCase { private $bundleFetcher; /** @var Installer|\PHPUnit_Framework_MockObject_MockObject */ private $installer; + /** @var IURLGenerator|\PHPUnit_Framework_MockObject_MockObject */ + private $urlGenerator; public function setUp() { parent::setUp(); @@ -83,6 +86,7 @@ class AppSettingsControllerTest extends TestCase { $this->l10nFactory = $this->createMock(IFactory::class); $this->bundleFetcher = $this->createMock(BundleFetcher::class); $this->installer = $this->createMock(Installer::class); + $this->urlGenerator = $this->createMock(IURLGenerator::class); $this->appSettingsController = new AppSettingsController( 'settings', @@ -95,7 +99,8 @@ class AppSettingsControllerTest extends TestCase { $this->appFetcher, $this->l10nFactory, $this->bundleFetcher, - $this->installer + $this->installer, + $this->urlGenerator ); } @@ -204,7 +209,14 @@ class AppSettingsControllerTest extends TestCase { $policy = new ContentSecurityPolicy(); $policy->addAllowedImageDomain('https://usercontent.apps.nextcloud.com'); - $expected = new TemplateResponse('settings', 'apps', ['category' => 'installed', 'appstoreEnabled' => true], 'user'); + $expected = new TemplateResponse('settings', + 'apps', + [ + 'category' => 'installed', + 'appstoreEnabled' => true, + 'urlGenerator' => $this->urlGenerator, + ], + 'user'); $expected->setContentSecurityPolicy($policy); $this->assertEquals($expected, $this->appSettingsController->viewApps()); @@ -224,7 +236,14 @@ class AppSettingsControllerTest extends TestCase { $policy = new ContentSecurityPolicy(); $policy->addAllowedImageDomain('https://usercontent.apps.nextcloud.com'); - $expected = new TemplateResponse('settings', 'apps', ['category' => 'installed', 'appstoreEnabled' => false], 'user'); + $expected = new TemplateResponse('settings', + 'apps', + [ + 'category' => 'installed', + 'appstoreEnabled' => false, + 'urlGenerator' => $this->urlGenerator, + ], + 'user'); $expected->setContentSecurityPolicy($policy); $this->assertEquals($expected, $this->appSettingsController->viewApps());