diff options
author | Morris Jobke <hey@morrisjobke.de> | 2017-12-13 18:25:05 +0100 |
---|---|---|
committer | GitHub <noreply@github.com> | 2017-12-13 18:25:05 +0100 |
commit | 784d256103d5777db817aded96afcbd3a2362a10 (patch) | |
tree | e0cc8702b99f840cd8cb4a3d6ef35519d744c4cf | |
parent | 66391d65a68d89f5351c1be7810cd4abd0e82989 (diff) | |
parent | ee20741526eccc1a02ee48fea6d917d17c1cfe58 (diff) | |
download | nextcloud-server-784d256103d5777db817aded96afcbd3a2362a10.tar.gz nextcloud-server-784d256103d5777db817aded96afcbd3a2362a10.zip |
Merge pull request #7480 from nextcloud/fix_7454
Check for FreeType functions required for avatars
-rw-r--r-- | core/js/setupchecks.js | 9 | ||||
-rw-r--r-- | core/js/tests/specs/setupchecksSpec.js | 59 | ||||
-rw-r--r-- | settings/Controller/CheckSetupController.php | 9 | ||||
-rw-r--r-- | tests/Settings/Controller/CheckSetupControllerTest.php | 6 |
4 files changed, 73 insertions, 10 deletions
diff --git a/core/js/setupchecks.js b/core/js/setupchecks.js index 44bf33dd711..439826161d8 100644 --- a/core/js/setupchecks.js +++ b/core/js/setupchecks.js @@ -174,6 +174,15 @@ type: OC.SetupChecks.MESSAGE_TYPE_WARNING }); } + if (!data.hasFreeTypeSupport) { + messages.push({ + msg: t( + 'core', + 'Your PHP does not have freetype support. This will result in broken profile pictures and settings interface.' + ), + type: OC.SetupChecks.MESSAGE_TYPE_INFO + }) + } } else { messages.push({ msg: t('core', 'Error occurred while checking server setup'), diff --git a/core/js/tests/specs/setupchecksSpec.js b/core/js/tests/specs/setupchecksSpec.js index 0114f7d868f..00bc84f2a8f 100644 --- a/core/js/tests/specs/setupchecksSpec.js +++ b/core/js/tests/specs/setupchecksSpec.js @@ -156,7 +156,8 @@ describe('OC.SetupChecks tests', function() { isCorrectMemcachedPHPModuleInstalled: true, hasPassedCodeIntegrityCheck: true, isOpcacheProperlySetup: true, - isSettimelimitAvailable: true + isSettimelimitAvailable: true, + hasFreeTypeSupport: true }) ); @@ -189,7 +190,8 @@ describe('OC.SetupChecks tests', function() { isCorrectMemcachedPHPModuleInstalled: true, hasPassedCodeIntegrityCheck: true, isOpcacheProperlySetup: true, - isSettimelimitAvailable: true + isSettimelimitAvailable: true, + hasFreeTypeSupport: true }) ); @@ -223,7 +225,8 @@ describe('OC.SetupChecks tests', function() { isCorrectMemcachedPHPModuleInstalled: true, hasPassedCodeIntegrityCheck: true, isOpcacheProperlySetup: true, - isSettimelimitAvailable: true + isSettimelimitAvailable: true, + hasFreeTypeSupport: true }) ); @@ -255,7 +258,8 @@ describe('OC.SetupChecks tests', function() { isCorrectMemcachedPHPModuleInstalled: true, hasPassedCodeIntegrityCheck: true, isOpcacheProperlySetup: true, - isSettimelimitAvailable: true + isSettimelimitAvailable: true, + hasFreeTypeSupport: true }) ); @@ -285,7 +289,8 @@ describe('OC.SetupChecks tests', function() { isCorrectMemcachedPHPModuleInstalled: false, hasPassedCodeIntegrityCheck: true, isOpcacheProperlySetup: true, - isSettimelimitAvailable: true + isSettimelimitAvailable: true, + hasFreeTypeSupport: true }) ); @@ -315,7 +320,8 @@ describe('OC.SetupChecks tests', function() { isCorrectMemcachedPHPModuleInstalled: true, hasPassedCodeIntegrityCheck: true, isOpcacheProperlySetup: true, - isSettimelimitAvailable: true + isSettimelimitAvailable: true, + hasFreeTypeSupport: true }) ); @@ -345,7 +351,8 @@ describe('OC.SetupChecks tests', function() { isCorrectMemcachedPHPModuleInstalled: true, hasPassedCodeIntegrityCheck: true, isOpcacheProperlySetup: true, - isSettimelimitAvailable: false + isSettimelimitAvailable: false, + hasFreeTypeSupport: true }) ); @@ -396,7 +403,8 @@ describe('OC.SetupChecks tests', function() { isCorrectMemcachedPHPModuleInstalled: true, hasPassedCodeIntegrityCheck: true, isOpcacheProperlySetup: true, - isSettimelimitAvailable: true + isSettimelimitAvailable: true, + hasFreeTypeSupport: true }) ); @@ -427,7 +435,8 @@ describe('OC.SetupChecks tests', function() { hasPassedCodeIntegrityCheck: true, isOpcacheProperlySetup: false, phpOpcacheDocumentation: 'https://example.org/link/to/doc', - isSettimelimitAvailable: true + isSettimelimitAvailable: true, + hasFreeTypeSupport: true }) ); @@ -439,6 +448,38 @@ describe('OC.SetupChecks tests', function() { done(); }); }); + + it('should return an info if server has no freetype support', function(done) { + var async = OC.SetupChecks.checkSetup(); + + suite.server.requests[0].respond( + 200, + { + 'Content-Type': 'application/json' + }, + JSON.stringify({ + isUrandomAvailable: true, + securityDocs: 'https://docs.owncloud.org/myDocs.html', + serverHasInternetConnection: true, + isMemcacheConfigured: true, + forwardedForHeadersWorking: true, + isCorrectMemcachedPHPModuleInstalled: true, + hasPassedCodeIntegrityCheck: true, + isOpcacheProperlySetup: true, + phpOpcacheDocumentation: 'https://example.org/link/to/doc', + isSettimelimitAvailable: true, + hasFreeTypeSupport: false + }) + ); + + async.done(function( data, s, x ){ + expect(data).toEqual([{ + msg: 'Your PHP does not have freetype support. This will result in broken profile pictures and settings interface.', + type: OC.SetupChecks.MESSAGE_TYPE_INFO + }]); + done(); + }); + }); }); describe('checkGeneric', function() { diff --git a/settings/Controller/CheckSetupController.php b/settings/Controller/CheckSetupController.php index 5b7953bf392..06b9e80294b 100644 --- a/settings/Controller/CheckSetupController.php +++ b/settings/Controller/CheckSetupController.php @@ -410,6 +410,14 @@ Raw output } /** + * Check if the required FreeType functions are present + * @return bool + */ + protected function hasFreeTypeSupport() { + return function_exists('imagettfbbox') && function_exists('imagettftext'); + } + + /** * @return DataResponse */ public function check() { @@ -430,6 +438,7 @@ Raw output 'isOpcacheProperlySetup' => $this->isOpcacheProperlySetup(), 'phpOpcacheDocumentation' => $this->urlGenerator->linkToDocs('admin-php-opcache'), 'isSettimelimitAvailable' => $this->isSettimelimitAvailable(), + 'hasFreeTypeSupport' => $this->hasFreeTypeSupport(), ] ); } diff --git a/tests/Settings/Controller/CheckSetupControllerTest.php b/tests/Settings/Controller/CheckSetupControllerTest.php index f0e203e714b..3f47819bcbd 100644 --- a/tests/Settings/Controller/CheckSetupControllerTest.php +++ b/tests/Settings/Controller/CheckSetupControllerTest.php @@ -96,7 +96,7 @@ class CheckSetupControllerTest extends TestCase { $this->checker, $this->logger ]) - ->setMethods(['getCurlVersion', 'isPhpOutdated', 'isOpcacheProperlySetup'])->getMock(); + ->setMethods(['getCurlVersion', 'isPhpOutdated', 'isOpcacheProperlySetup', 'hasFreeTypeSupport'])->getMock(); } public function testIsInternetConnectionWorkingDisabledViaConfig() { @@ -321,6 +321,9 @@ class CheckSetupControllerTest extends TestCase { ->method('linkToDocs') ->with('admin-php-opcache') ->willReturn('http://docs.example.org/server/go.php?to=admin-php-opcache'); + $this->checkSetupController + ->method('hasFreeTypeSupport') + ->willReturn(false); $expected = new DataResponse( [ @@ -342,6 +345,7 @@ class CheckSetupControllerTest extends TestCase { 'isOpcacheProperlySetup' => false, 'phpOpcacheDocumentation' => 'http://docs.example.org/server/go.php?to=admin-php-opcache', 'isSettimelimitAvailable' => true, + 'hasFreeTypeSupport' => false, ] ); $this->assertEquals($expected, $this->checkSetupController->check()); |