From fe96eda462eabbe7a9ac00f87b75eb782d661e77 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 | 74 ------------------- 8 files changed, 67 insertions(+), 94 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 d18528ff4d465..5c29e5ece4dc3 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\\PhpModules' => $baseDir . '/../lib/SetupChecks/PhpModules.php', 'OCA\\Settings\\SetupChecks\\PhpOutdated' => $baseDir . '/../lib/SetupChecks/PhpOutdated.php', diff --git a/apps/settings/composer/composer/autoload_static.php b/apps/settings/composer/composer/autoload_static.php index 5512082304f21..250ca31757cc9 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\\PhpModules' => __DIR__ . '/..' . '/../lib/SetupChecks/PhpModules.php', 'OCA\\Settings\\SetupChecks\\PhpOutdated' => __DIR__ . '/..' . '/../lib/SetupChecks/PhpOutdated.php', diff --git a/apps/settings/lib/AppInfo/Application.php b/apps/settings/lib/AppInfo/Application.php index 518dc88bfa04a..7516a307d0007 100644 --- a/apps/settings/lib/AppInfo/Application.php +++ b/apps/settings/lib/AppInfo/Application.php @@ -58,6 +58,7 @@ use OCA\Settings\SetupChecks\MemcacheConfigured; use OCA\Settings\SetupChecks\PhpDefaultCharset; use OCA\Settings\SetupChecks\PhpModules; +use OCA\Settings\SetupChecks\PhpFreetypeSupport; use OCA\Settings\SetupChecks\PhpGetEnv; use OCA\Settings\SetupChecks\PhpOutdated; use OCA\Settings\SetupChecks\PhpOutputBuffering; @@ -164,6 +165,7 @@ public function register(IRegistrationContext $context): void { $context->registerSetupCheck(MemcacheConfigured::class); $context->registerSetupCheck(PhpDefaultCharset::class); $context->registerSetupCheck(PhpModules::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 80dd695298001..270956326ed3e 100644 --- a/apps/settings/lib/Controller/CheckSetupController.php +++ b/apps/settings/lib/Controller/CheckSetupController.php @@ -454,14 +454,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(); @@ -754,7 +746,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 0ca3c77559f1e..20c8b4f14fe8b 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', @@ -333,9 +332,6 @@ public function testCheck() { ->expects($this->once()) ->method('getOpcacheSetupRecommendations') ->willReturn(['recommendation1', 'recommendation2']); - $this->checkSetupController - ->method('hasFreeTypeSupport') - ->willReturn(false); $this->checkSetupController ->method('hasMissingIndexes') ->willReturn([]); @@ -449,7 +445,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 80b6e07757831..d19034f341996 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 cf7e3f80503b1..cfa51f3cf40c4 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: [], @@ -289,7 +288,6 @@ describe('OC.SetupChecks tests', function() { isCorrectMemcachedPHPModuleInstalled: true, OpcacheSetupRecommendations: [], isSettimelimitAvailable: true, - hasFreeTypeSupport: true, missingIndexes: [], missingPrimaryKeys: [], missingColumns: [], @@ -349,7 +347,6 @@ describe('OC.SetupChecks tests', function() { isCorrectMemcachedPHPModuleInstalled: true, OpcacheSetupRecommendations: [], isSettimelimitAvailable: true, - hasFreeTypeSupport: true, missingIndexes: [], missingPrimaryKeys: [], missingColumns: [], @@ -405,7 +402,6 @@ describe('OC.SetupChecks tests', function() { isCorrectMemcachedPHPModuleInstalled: false, OpcacheSetupRecommendations: [], isSettimelimitAvailable: true, - hasFreeTypeSupport: true, missingIndexes: [], missingPrimaryKeys: [], missingColumns: [], @@ -459,7 +455,6 @@ describe('OC.SetupChecks tests', function() { isCorrectMemcachedPHPModuleInstalled: true, OpcacheSetupRecommendations: [], isSettimelimitAvailable: true, - hasFreeTypeSupport: true, missingIndexes: [], missingPrimaryKeys: [], missingColumns: [], @@ -516,7 +511,6 @@ describe('OC.SetupChecks tests', function() { isCorrectMemcachedPHPModuleInstalled: true, OpcacheSetupRecommendations: [], isSettimelimitAvailable: true, - hasFreeTypeSupport: true, missingIndexes: [], missingPrimaryKeys: [], missingColumns: [], @@ -573,7 +567,6 @@ describe('OC.SetupChecks tests', function() { isCorrectMemcachedPHPModuleInstalled: true, OpcacheSetupRecommendations: [], isSettimelimitAvailable: true, - hasFreeTypeSupport: true, missingIndexes: [], missingPrimaryKeys: [], missingColumns: [], @@ -628,7 +621,6 @@ describe('OC.SetupChecks tests', function() { isCorrectMemcachedPHPModuleInstalled: true, OpcacheSetupRecommendations: [], isSettimelimitAvailable: false, - hasFreeTypeSupport: true, missingIndexes: [], missingPrimaryKeys: [], missingColumns: [], @@ -683,7 +675,6 @@ describe('OC.SetupChecks tests', function() { isCorrectMemcachedPHPModuleInstalled: true, OpcacheSetupRecommendations: [], isSettimelimitAvailable: true, - hasFreeTypeSupport: true, missingIndexes: [], missingPrimaryKeys: [], missingColumns: [], @@ -757,7 +748,6 @@ describe('OC.SetupChecks tests', function() { isCorrectMemcachedPHPModuleInstalled: true, OpcacheSetupRecommendations: [], isSettimelimitAvailable: true, - hasFreeTypeSupport: true, missingIndexes: [], missingPrimaryKeys: [], missingColumns: [], @@ -818,7 +808,6 @@ describe('OC.SetupChecks tests', function() { isCorrectMemcachedPHPModuleInstalled: true, OpcacheSetupRecommendations: ['recommendation1', 'recommendation2'], isSettimelimitAvailable: true, - hasFreeTypeSupport: true, missingIndexes: [], missingPrimaryKeys: [], missingColumns: [], @@ -857,60 +846,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, - 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(); @@ -926,7 +861,6 @@ describe('OC.SetupChecks tests', function() { isCorrectMemcachedPHPModuleInstalled: true, OpcacheSetupRecommendations: [], isSettimelimitAvailable: true, - hasFreeTypeSupport: true, missingIndexes: [], missingPrimaryKeys: [], missingColumns: [], @@ -984,7 +918,6 @@ describe('OC.SetupChecks tests', function() { isCorrectMemcachedPHPModuleInstalled: true, OpcacheSetupRecommendations: [], isSettimelimitAvailable: true, - hasFreeTypeSupport: true, missingIndexes: [], missingPrimaryKeys: [], missingColumns: [], @@ -1039,7 +972,6 @@ describe('OC.SetupChecks tests', function() { isCorrectMemcachedPHPModuleInstalled: true, OpcacheSetupRecommendations: [], isSettimelimitAvailable: true, - hasFreeTypeSupport: true, missingIndexes: [], missingPrimaryKeys: [], missingColumns: [], @@ -1091,7 +1023,6 @@ describe('OC.SetupChecks tests', function() { isCorrectMemcachedPHPModuleInstalled: true, OpcacheSetupRecommendations: [], isSettimelimitAvailable: true, - hasFreeTypeSupport: true, missingIndexes: [], missingPrimaryKeys: [], missingColumns: [], @@ -1146,7 +1077,6 @@ describe('OC.SetupChecks tests', function() { isCorrectMemcachedPHPModuleInstalled: true, OpcacheSetupRecommendations: [], isSettimelimitAvailable: true, - hasFreeTypeSupport: true, missingIndexes: [], missingPrimaryKeys: [], missingColumns: [], @@ -1201,7 +1131,6 @@ describe('OC.SetupChecks tests', function() { isCorrectMemcachedPHPModuleInstalled: true, OpcacheSetupRecommendations: [], isSettimelimitAvailable: true, - hasFreeTypeSupport: true, missingIndexes: [], missingPrimaryKeys: [], missingColumns: [], @@ -1255,7 +1184,6 @@ describe('OC.SetupChecks tests', function() { isCorrectMemcachedPHPModuleInstalled: true, OpcacheSetupRecommendations: [], isSettimelimitAvailable: true, - hasFreeTypeSupport: true, missingIndexes: [], missingPrimaryKeys: [], missingColumns: [], @@ -1309,7 +1237,6 @@ describe('OC.SetupChecks tests', function() { isCorrectMemcachedPHPModuleInstalled: true, OpcacheSetupRecommendations: [], isSettimelimitAvailable: true, - hasFreeTypeSupport: true, missingIndexes: [], missingPrimaryKeys: [], missingColumns: [], @@ -1370,7 +1297,6 @@ describe('OC.SetupChecks tests', function() { isCorrectMemcachedPHPModuleInstalled: true, OpcacheSetupRecommendations: [], isSettimelimitAvailable: true, - hasFreeTypeSupport: true, missingIndexes: [], missingPrimaryKeys: [], missingColumns: [],