From 5485f893222d48e6e8cc7da1f6e9215320be42d4 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?C=C3=B4me=20Chilliet?= Date: Thu, 26 Oct 2023 16:07:11 +0200 Subject: [PATCH] Migrate Freetype check to SetupCheck API MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Signed-off-by: Côme Chilliet --- .../composer/composer/autoload_classmap.php | 1 + .../composer/composer/autoload_static.php | 1 + apps/settings/lib/AppInfo/Application.php | 2 + .../lib/Controller/CheckSetupController.php | 9 --- .../lib/SetupChecks/PhpFreetypeSupport.php | 63 ++++++++++++++++ .../Controller/CheckSetupControllerTest.php | 5 -- core/js/setupchecks.js | 6 -- core/js/tests/specs/setupchecksSpec.js | 75 ------------------- 8 files changed, 67 insertions(+), 95 deletions(-) create mode 100644 apps/settings/lib/SetupChecks/PhpFreetypeSupport.php diff --git a/apps/settings/composer/composer/autoload_classmap.php b/apps/settings/composer/composer/autoload_classmap.php index 42233a044524a..0490e0abb8f26 100644 --- a/apps/settings/composer/composer/autoload_classmap.php +++ b/apps/settings/composer/composer/autoload_classmap.php @@ -82,6 +82,7 @@ 'OCA\\Settings\\SetupChecks\\LegacySSEKeyFormat' => $baseDir . '/../lib/SetupChecks/LegacySSEKeyFormat.php', 'OCA\\Settings\\SetupChecks\\MemcacheConfigured' => $baseDir . '/../lib/SetupChecks/MemcacheConfigured.php', 'OCA\\Settings\\SetupChecks\\PhpDefaultCharset' => $baseDir . '/../lib/SetupChecks/PhpDefaultCharset.php', + 'OCA\\Settings\\SetupChecks\\PhpFreetypeSupport' => $baseDir . '/../lib/SetupChecks/PhpFreetypeSupport.php', 'OCA\\Settings\\SetupChecks\\PhpGetEnv' => $baseDir . '/../lib/SetupChecks/PhpGetEnv.php', 'OCA\\Settings\\SetupChecks\\PhpOutdated' => $baseDir . '/../lib/SetupChecks/PhpOutdated.php', 'OCA\\Settings\\SetupChecks\\PhpOutputBuffering' => $baseDir . '/../lib/SetupChecks/PhpOutputBuffering.php', diff --git a/apps/settings/composer/composer/autoload_static.php b/apps/settings/composer/composer/autoload_static.php index fa0640c656cf4..abc9fe11e9afd 100644 --- a/apps/settings/composer/composer/autoload_static.php +++ b/apps/settings/composer/composer/autoload_static.php @@ -97,6 +97,7 @@ class ComposerStaticInitSettings 'OCA\\Settings\\SetupChecks\\LegacySSEKeyFormat' => __DIR__ . '/..' . '/../lib/SetupChecks/LegacySSEKeyFormat.php', 'OCA\\Settings\\SetupChecks\\MemcacheConfigured' => __DIR__ . '/..' . '/../lib/SetupChecks/MemcacheConfigured.php', 'OCA\\Settings\\SetupChecks\\PhpDefaultCharset' => __DIR__ . '/..' . '/../lib/SetupChecks/PhpDefaultCharset.php', + 'OCA\\Settings\\SetupChecks\\PhpFreetypeSupport' => __DIR__ . '/..' . '/../lib/SetupChecks/PhpFreetypeSupport.php', 'OCA\\Settings\\SetupChecks\\PhpGetEnv' => __DIR__ . '/..' . '/../lib/SetupChecks/PhpGetEnv.php', 'OCA\\Settings\\SetupChecks\\PhpOutdated' => __DIR__ . '/..' . '/../lib/SetupChecks/PhpOutdated.php', 'OCA\\Settings\\SetupChecks\\PhpOutputBuffering' => __DIR__ . '/..' . '/../lib/SetupChecks/PhpOutputBuffering.php', diff --git a/apps/settings/lib/AppInfo/Application.php b/apps/settings/lib/AppInfo/Application.php index 42fa4f9bec27e..87e5d20897fcb 100644 --- a/apps/settings/lib/AppInfo/Application.php +++ b/apps/settings/lib/AppInfo/Application.php @@ -57,6 +57,7 @@ use OCA\Settings\SetupChecks\LegacySSEKeyFormat; use OCA\Settings\SetupChecks\MemcacheConfigured; use OCA\Settings\SetupChecks\PhpDefaultCharset; +use OCA\Settings\SetupChecks\PhpFreetypeSupport; use OCA\Settings\SetupChecks\PhpGetEnv; use OCA\Settings\SetupChecks\PhpOutdated; use OCA\Settings\SetupChecks\PhpOutputBuffering; @@ -162,6 +163,7 @@ public function register(IRegistrationContext $context): void { $context->registerSetupCheck(LegacySSEKeyFormat::class); $context->registerSetupCheck(MemcacheConfigured::class); $context->registerSetupCheck(PhpDefaultCharset::class); + $context->registerSetupCheck(PhpFreetypeSupport::class); $context->registerSetupCheck(PhpGetEnv::class); $context->registerSetupCheck(PhpOutdated::class); $context->registerSetupCheck(PhpOutputBuffering::class); diff --git a/apps/settings/lib/Controller/CheckSetupController.php b/apps/settings/lib/Controller/CheckSetupController.php index 38dd05014815c..c166ad209c78a 100644 --- a/apps/settings/lib/Controller/CheckSetupController.php +++ b/apps/settings/lib/Controller/CheckSetupController.php @@ -449,14 +449,6 @@ protected function getOpcacheSetupRecommendations(): array { return $recommendations; } - /** - * Check if the required FreeType functions are present - * @return bool - */ - protected function hasFreeTypeSupport() { - return function_exists('imagettfbbox') && function_exists('imagettftext'); - } - protected function hasMissingIndexes(): array { $indexInfo = new MissingIndexInformation(); @@ -783,7 +775,6 @@ public function check() { 'isCorrectMemcachedPHPModuleInstalled' => $this->isCorrectMemcachedPHPModuleInstalled(), 'OpcacheSetupRecommendations' => $this->getOpcacheSetupRecommendations(), 'isSettimelimitAvailable' => $this->isSettimelimitAvailable(), - 'hasFreeTypeSupport' => $this->hasFreeTypeSupport(), 'missingPrimaryKeys' => $this->hasMissingPrimaryKeys(), 'missingIndexes' => $this->hasMissingIndexes(), 'missingColumns' => $this->hasMissingColumns(), diff --git a/apps/settings/lib/SetupChecks/PhpFreetypeSupport.php b/apps/settings/lib/SetupChecks/PhpFreetypeSupport.php new file mode 100644 index 0000000000000..3c67c3ddb6ef2 --- /dev/null +++ b/apps/settings/lib/SetupChecks/PhpFreetypeSupport.php @@ -0,0 +1,63 @@ + + * + * @author Côme Chilliet + * + * @license GNU AGPL version 3 or any later version + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU Affero General Public License as + * published by the Free Software Foundation, either version 3 of the + * License, or (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU Affero General Public License for more details. + * + * You should have received a copy of the GNU Affero General Public License + * along with this program. If not, see . + * + */ + +namespace OCA\Settings\SetupChecks; + +use OCP\IL10N; +use OCP\SetupCheck\ISetupCheck; +use OCP\SetupCheck\SetupResult; + +class PhpFreetypeSupport implements ISetupCheck { + public function __construct( + private IL10N $l10n, + ) { + } + + public function getName(): string { + return $this->l10n->t('Freetype'); + } + + public function getCategory(): string { + return 'php'; + } + + /** + * Check if the required FreeType functions are present + */ + protected function hasFreeTypeSupport(): bool { + return function_exists('imagettfbbox') && function_exists('imagettftext'); + } + + public function run(): SetupResult { + if ($this->hasFreeTypeSupport()) { + return SetupResult::success($this->l10n->t('Supported')); + } else { + return SetupResult::info( + $this->l10n->t('Your PHP does not have FreeType support, resulting in breakage of profile pictures and the settings interface.'), + ); + } + } +} diff --git a/apps/settings/tests/Controller/CheckSetupControllerTest.php b/apps/settings/tests/Controller/CheckSetupControllerTest.php index cbe77b0f9dd1d..ad5ecb7bfc543 100644 --- a/apps/settings/tests/Controller/CheckSetupControllerTest.php +++ b/apps/settings/tests/Controller/CheckSetupControllerTest.php @@ -194,7 +194,6 @@ protected function setUp(): void { 'getCurlVersion', 'isPhpOutdated', 'getOpcacheSetupRecommendations', - 'hasFreeTypeSupport', 'hasMissingIndexes', 'hasMissingPrimaryKeys', 'isSqliteUsed', @@ -334,9 +333,6 @@ public function testCheck() { ->expects($this->once()) ->method('getOpcacheSetupRecommendations') ->willReturn(['recommendation1', 'recommendation2']); - $this->checkSetupController - ->method('hasFreeTypeSupport') - ->willReturn(false); $this->checkSetupController ->method('hasMissingIndexes') ->willReturn([]); @@ -455,7 +451,6 @@ public function testCheck() { 'isCorrectMemcachedPHPModuleInstalled' => true, 'OpcacheSetupRecommendations' => ['recommendation1', 'recommendation2'], 'isSettimelimitAvailable' => true, - 'hasFreeTypeSupport' => false, 'isSqliteUsed' => false, 'databaseConversionDocumentation' => 'http://docs.example.org/server/go.php?to=admin-db-conversion', 'missingIndexes' => [], diff --git a/core/js/setupchecks.js b/core/js/setupchecks.js index 7617d813defc1..0c93f0903f338 100644 --- a/core/js/setupchecks.js +++ b/core/js/setupchecks.js @@ -264,12 +264,6 @@ type: OC.SetupChecks.MESSAGE_TYPE_WARNING }); } - if (!data.hasFreeTypeSupport) { - messages.push({ - msg: t('core', 'Your PHP does not have FreeType support, resulting in breakage of profile pictures and the settings interface.'), - type: OC.SetupChecks.MESSAGE_TYPE_INFO - }) - } if (data.missingIndexes.length > 0) { var listOfMissingIndexes = ""; data.missingIndexes.forEach(function(element){ diff --git a/core/js/tests/specs/setupchecksSpec.js b/core/js/tests/specs/setupchecksSpec.js index 7dcbdd327080d..b39c0a254b62b 100644 --- a/core/js/tests/specs/setupchecksSpec.js +++ b/core/js/tests/specs/setupchecksSpec.js @@ -229,7 +229,6 @@ describe('OC.SetupChecks tests', function() { isCorrectMemcachedPHPModuleInstalled: true, OpcacheSetupRecommendations: [], isSettimelimitAvailable: true, - hasFreeTypeSupport: true, missingIndexes: [], missingPrimaryKeys: [], missingColumns: [], @@ -290,7 +289,6 @@ describe('OC.SetupChecks tests', function() { isCorrectMemcachedPHPModuleInstalled: true, OpcacheSetupRecommendations: [], isSettimelimitAvailable: true, - hasFreeTypeSupport: true, missingIndexes: [], missingPrimaryKeys: [], missingColumns: [], @@ -351,7 +349,6 @@ describe('OC.SetupChecks tests', function() { isCorrectMemcachedPHPModuleInstalled: true, OpcacheSetupRecommendations: [], isSettimelimitAvailable: true, - hasFreeTypeSupport: true, missingIndexes: [], missingPrimaryKeys: [], missingColumns: [], @@ -408,7 +405,6 @@ describe('OC.SetupChecks tests', function() { isCorrectMemcachedPHPModuleInstalled: false, OpcacheSetupRecommendations: [], isSettimelimitAvailable: true, - hasFreeTypeSupport: true, missingIndexes: [], missingPrimaryKeys: [], missingColumns: [], @@ -463,7 +459,6 @@ describe('OC.SetupChecks tests', function() { isCorrectMemcachedPHPModuleInstalled: true, OpcacheSetupRecommendations: [], isSettimelimitAvailable: true, - hasFreeTypeSupport: true, missingIndexes: [], missingPrimaryKeys: [], missingColumns: [], @@ -521,7 +516,6 @@ describe('OC.SetupChecks tests', function() { isCorrectMemcachedPHPModuleInstalled: true, OpcacheSetupRecommendations: [], isSettimelimitAvailable: true, - hasFreeTypeSupport: true, missingIndexes: [], missingPrimaryKeys: [], missingColumns: [], @@ -579,7 +573,6 @@ describe('OC.SetupChecks tests', function() { isCorrectMemcachedPHPModuleInstalled: true, OpcacheSetupRecommendations: [], isSettimelimitAvailable: true, - hasFreeTypeSupport: true, missingIndexes: [], missingPrimaryKeys: [], missingColumns: [], @@ -635,7 +628,6 @@ describe('OC.SetupChecks tests', function() { isCorrectMemcachedPHPModuleInstalled: true, OpcacheSetupRecommendations: [], isSettimelimitAvailable: false, - hasFreeTypeSupport: true, missingIndexes: [], missingPrimaryKeys: [], missingColumns: [], @@ -691,7 +683,6 @@ describe('OC.SetupChecks tests', function() { isCorrectMemcachedPHPModuleInstalled: true, OpcacheSetupRecommendations: [], isSettimelimitAvailable: true, - hasFreeTypeSupport: true, missingIndexes: [], missingPrimaryKeys: [], missingColumns: [], @@ -766,7 +757,6 @@ describe('OC.SetupChecks tests', function() { isCorrectMemcachedPHPModuleInstalled: true, OpcacheSetupRecommendations: [], isSettimelimitAvailable: true, - hasFreeTypeSupport: true, missingIndexes: [], missingPrimaryKeys: [], missingColumns: [], @@ -828,7 +818,6 @@ describe('OC.SetupChecks tests', function() { isCorrectMemcachedPHPModuleInstalled: true, OpcacheSetupRecommendations: ['recommendation1', 'recommendation2'], isSettimelimitAvailable: true, - hasFreeTypeSupport: true, missingIndexes: [], missingPrimaryKeys: [], missingColumns: [], @@ -868,61 +857,6 @@ describe('OC.SetupChecks tests', function() { }); }); - 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({ - suggestedOverwriteCliURL: '', - isFairUseOfFreePushService: true, - forwardedForHeadersWorking: true, - isCorrectMemcachedPHPModuleInstalled: true, - OpcacheSetupRecommendations: [], - isSettimelimitAvailable: true, - hasFreeTypeSupport: false, - missingIndexes: [], - missingPrimaryKeys: [], - missingColumns: [], - cronErrors: [], - cronInfo: { - diffInSeconds: 0 - }, - isMemoryLimitSufficient: true, - appDirsWithDifferentOwner: [], - isImagickEnabled: true, - areWebauthnExtensionsEnabled: true, - is64bit: true, - recommendedPHPModules: [], - pendingBigIntConversionColumns: [], - isMysqlUsedWithoutUTF8MB4: false, - isEnoughTempSpaceAvailableIfS3PrimaryStorageIsUsed: true, - reverseProxyGeneratedURL: 'https://server', - temporaryDirectoryWritable: true, - generic: { - network: { - "Internet connectivity": { - severity: "success", - description: null, - linkToDoc: null - } - }, - }, - }) - ); - - async.done(function( data, s, x ){ - expect(data).toEqual([{ - msg: 'Your PHP does not have FreeType support, resulting in breakage of profile pictures and the settings interface.', - type: OC.SetupChecks.MESSAGE_TYPE_INFO - }]); - done(); - }); - }); - it('should return an error if the php version is no longer supported', function(done) { var async = OC.SetupChecks.checkSetup(); @@ -938,7 +872,6 @@ describe('OC.SetupChecks tests', function() { isCorrectMemcachedPHPModuleInstalled: true, OpcacheSetupRecommendations: [], isSettimelimitAvailable: true, - hasFreeTypeSupport: true, missingIndexes: [], missingPrimaryKeys: [], missingColumns: [], @@ -997,7 +930,6 @@ describe('OC.SetupChecks tests', function() { isCorrectMemcachedPHPModuleInstalled: true, OpcacheSetupRecommendations: [], isSettimelimitAvailable: true, - hasFreeTypeSupport: true, missingIndexes: [], missingPrimaryKeys: [], missingColumns: [], @@ -1053,7 +985,6 @@ describe('OC.SetupChecks tests', function() { isCorrectMemcachedPHPModuleInstalled: true, OpcacheSetupRecommendations: [], isSettimelimitAvailable: true, - hasFreeTypeSupport: true, missingIndexes: [], missingPrimaryKeys: [], missingColumns: [], @@ -1106,7 +1037,6 @@ describe('OC.SetupChecks tests', function() { isCorrectMemcachedPHPModuleInstalled: true, OpcacheSetupRecommendations: [], isSettimelimitAvailable: true, - hasFreeTypeSupport: true, missingIndexes: [], missingPrimaryKeys: [], missingColumns: [], @@ -1162,7 +1092,6 @@ describe('OC.SetupChecks tests', function() { isCorrectMemcachedPHPModuleInstalled: true, OpcacheSetupRecommendations: [], isSettimelimitAvailable: true, - hasFreeTypeSupport: true, missingIndexes: [], missingPrimaryKeys: [], missingColumns: [], @@ -1218,7 +1147,6 @@ describe('OC.SetupChecks tests', function() { isCorrectMemcachedPHPModuleInstalled: true, OpcacheSetupRecommendations: [], isSettimelimitAvailable: true, - hasFreeTypeSupport: true, missingIndexes: [], missingPrimaryKeys: [], missingColumns: [], @@ -1273,7 +1201,6 @@ describe('OC.SetupChecks tests', function() { isCorrectMemcachedPHPModuleInstalled: true, OpcacheSetupRecommendations: [], isSettimelimitAvailable: true, - hasFreeTypeSupport: true, missingIndexes: [], missingPrimaryKeys: [], missingColumns: [], @@ -1328,7 +1255,6 @@ describe('OC.SetupChecks tests', function() { isCorrectMemcachedPHPModuleInstalled: true, OpcacheSetupRecommendations: [], isSettimelimitAvailable: true, - hasFreeTypeSupport: true, missingIndexes: [], missingPrimaryKeys: [], missingColumns: [], @@ -1390,7 +1316,6 @@ describe('OC.SetupChecks tests', function() { isCorrectMemcachedPHPModuleInstalled: true, OpcacheSetupRecommendations: [], isSettimelimitAvailable: true, - hasFreeTypeSupport: true, missingIndexes: [], missingPrimaryKeys: [], missingColumns: [],