summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorMorris Jobke <hey@morrisjobke.de>2018-12-05 09:29:52 +0100
committerGitHub <noreply@github.com>2018-12-05 09:29:52 +0100
commit328f93f66d09391a78a512d4059fc8f35a7ac5df (patch)
tree40ac247a21080b43b7a8686455fc5a23aa342f6e
parent13da72730c92eeb977f69c56c4debcbb18498944 (diff)
parentf4b582ec448c2e49fcaf47e4bd95d6b348df024a (diff)
downloadnextcloud-server-328f93f66d09391a78a512d4059fc8f35a7ac5df.tar.gz
nextcloud-server-328f93f66d09391a78a512d4059fc8f35a7ac5df.zip
Merge pull request #12837 from nextcloud/backport/12821/stable15
[stable15] Add setup check for recommended PHP modules (i.e. Imagick, intl)
-rw-r--r--core/js/setupchecks.js15
-rw-r--r--core/js/tests/specs/setupchecksSpec.js37
-rw-r--r--settings/Controller/CheckSetupController.php26
-rw-r--r--tests/Settings/Controller/CheckSetupControllerTest.php19
4 files changed, 76 insertions, 21 deletions
diff --git a/core/js/setupchecks.js b/core/js/setupchecks.js
index c50781f1485..222b12b8f40 100644
--- a/core/js/setupchecks.js
+++ b/core/js/setupchecks.js
@@ -324,6 +324,19 @@
type: OC.SetupChecks.MESSAGE_TYPE_INFO
})
}
+ if (data.recommendedPHPModules.length > 0) {
+ var listOfRecommendedPHPModules = "";
+ data.recommendedPHPModules.forEach(function(element){
+ listOfRecommendedPHPModules += "<li>" + element + "</li>";
+ });
+ messages.push({
+ msg: t(
+ 'core',
+ 'This instance is missing some recommended PHP modules. For improved performance and better compatibility it is highly recommended to install them.'
+ ) + "<ul><code>" + listOfRecommendedPHPModules + "</code></ul>",
+ type: OC.SetupChecks.MESSAGE_TYPE_INFO
+ })
+ }
if (data.isSqliteUsed) {
messages.push({
msg: t(
@@ -340,7 +353,7 @@
type: OC.SetupChecks.MESSAGE_TYPE_WARNING
})
}
- if (data.isPhpMailerUsed) {
+ if (data.isPHPMailerUsed) {
messages.push({
msg: t(
'core',
diff --git a/core/js/tests/specs/setupchecksSpec.js b/core/js/tests/specs/setupchecksSpec.js
index b8a2164de54..b6b127bae53 100644
--- a/core/js/tests/specs/setupchecksSpec.js
+++ b/core/js/tests/specs/setupchecksSpec.js
@@ -210,7 +210,8 @@ describe('OC.SetupChecks tests', function() {
diffInSeconds: 0
},
isMemoryLimitSufficient: true,
- appDirsWithDifferentOwner: []
+ appDirsWithDifferentOwner: [],
+ recommendedPHPModules: []
})
);
@@ -259,7 +260,8 @@ describe('OC.SetupChecks tests', function() {
diffInSeconds: 0
},
isMemoryLimitSufficient: true,
- appDirsWithDifferentOwner: []
+ appDirsWithDifferentOwner: [],
+ recommendedPHPModules: []
})
);
@@ -309,7 +311,8 @@ describe('OC.SetupChecks tests', function() {
diffInSeconds: 0
},
isMemoryLimitSufficient: true,
- appDirsWithDifferentOwner: []
+ appDirsWithDifferentOwner: [],
+ recommendedPHPModules: []
})
);
@@ -357,7 +360,8 @@ describe('OC.SetupChecks tests', function() {
diffInSeconds: 0
},
isMemoryLimitSufficient: true,
- appDirsWithDifferentOwner: []
+ appDirsWithDifferentOwner: [],
+ recommendedPHPModules: []
})
);
@@ -403,7 +407,8 @@ describe('OC.SetupChecks tests', function() {
diffInSeconds: 0
},
isMemoryLimitSufficient: true,
- appDirsWithDifferentOwner: []
+ appDirsWithDifferentOwner: [],
+ recommendedPHPModules: []
})
);
@@ -451,7 +456,8 @@ describe('OC.SetupChecks tests', function() {
isMemoryLimitSufficient: true,
appDirsWithDifferentOwner: [
'/some/path'
- ]
+ ],
+ recommendedPHPModules: []
})
);
@@ -497,7 +503,8 @@ describe('OC.SetupChecks tests', function() {
diffInSeconds: 0
},
isMemoryLimitSufficient: true,
- appDirsWithDifferentOwner: []
+ appDirsWithDifferentOwner: [],
+ recommendedPHPModules: []
})
);
@@ -543,7 +550,8 @@ describe('OC.SetupChecks tests', function() {
diffInSeconds: 0
},
isMemoryLimitSufficient: true,
- appDirsWithDifferentOwner: []
+ appDirsWithDifferentOwner: [],
+ recommendedPHPModules: []
})
);
@@ -589,6 +597,7 @@ describe('OC.SetupChecks tests', function() {
diffInSeconds: 0
},
appDirsWithDifferentOwner: [],
+ recommendedPHPModules: [],
isMemoryLimitSufficient: false
})
);
@@ -656,7 +665,8 @@ describe('OC.SetupChecks tests', function() {
diffInSeconds: 0
},
isMemoryLimitSufficient: true,
- appDirsWithDifferentOwner: []
+ appDirsWithDifferentOwner: [],
+ recommendedPHPModules: []
})
);
@@ -703,7 +713,8 @@ describe('OC.SetupChecks tests', function() {
diffInSeconds: 0
},
isMemoryLimitSufficient: true,
- appDirsWithDifferentOwner: []
+ appDirsWithDifferentOwner: [],
+ recommendedPHPModules: []
})
);
@@ -750,7 +761,8 @@ describe('OC.SetupChecks tests', function() {
diffInSeconds: 0
},
isMemoryLimitSufficient: true,
- appDirsWithDifferentOwner: []
+ appDirsWithDifferentOwner: [],
+ recommendedPHPModules: []
})
);
@@ -797,7 +809,8 @@ describe('OC.SetupChecks tests', function() {
diffInSeconds: 0
},
isMemoryLimitSufficient: true,
- appDirsWithDifferentOwner: []
+ appDirsWithDifferentOwner: [],
+ recommendedPHPModules: []
})
);
diff --git a/settings/Controller/CheckSetupController.php b/settings/Controller/CheckSetupController.php
index e906af77bae..4211b9b4c6c 100644
--- a/settings/Controller/CheckSetupController.php
+++ b/settings/Controller/CheckSetupController.php
@@ -527,7 +527,7 @@ Raw output
return [];
}
- protected function isPhpMailerUsed(): bool {
+ protected function isPHPMailerUsed(): bool {
return $this->config->getSystemValue('mail_smtpmode', 'smtp') === 'php';
}
@@ -583,6 +583,27 @@ Raw output
}
/**
+ * Checks for potential PHP modules that would improve the instance
+ *
+ * @return string[] A list of PHP modules that is recommended
+ */
+ protected function hasRecommendedPHPModules(): array {
+ $recommendedPHPModules = [];
+
+ if (!function_exists('grapheme_strlen')) {
+ $recommendedPHPModules[] = 'intl';
+ }
+
+ if ($this->config->getAppValue('theming', 'enabled', 'no') === 'yes') {
+ if (!extension_loaded('imagick')) {
+ $recommendedPHPModules[] = 'imagick';
+ }
+ }
+
+ return $recommendedPHPModules;
+ }
+
+ /**
* @return DataResponse
*/
public function check() {
@@ -617,10 +638,11 @@ Raw output
'missingIndexes' => $this->hasMissingIndexes(),
'isSqliteUsed' => $this->isSqliteUsed(),
'databaseConversionDocumentation' => $this->urlGenerator->linkToDocs('admin-db-conversion'),
- 'isPhpMailerUsed' => $this->isPhpMailerUsed(),
+ 'isPHPMailerUsed' => $this->isPHPMailerUsed(),
'mailSettingsDocumentation' => $this->urlGenerator->getAbsoluteURL('index.php/settings/admin'),
'isMemoryLimitSufficient' => $this->memoryInfo->isMemoryLimitSufficient(),
'appDirsWithDifferentOwner' => $this->getAppDirsWithDifferentOwner(),
+ 'recommendedPHPModules' => $this->hasRecommendedPHPModules(),
]
);
}
diff --git a/tests/Settings/Controller/CheckSetupControllerTest.php b/tests/Settings/Controller/CheckSetupControllerTest.php
index 7731e08eed0..360bd27f254 100644
--- a/tests/Settings/Controller/CheckSetupControllerTest.php
+++ b/tests/Settings/Controller/CheckSetupControllerTest.php
@@ -155,9 +155,10 @@ class CheckSetupControllerTest extends TestCase {
'hasFreeTypeSupport',
'hasMissingIndexes',
'isSqliteUsed',
- 'isPhpMailerUsed',
+ 'isPHPMailerUsed',
'hasOpcacheLoaded',
'getAppDirsWithDifferentOwner',
+ 'hasRecommendedPHPModules',
])->getMock();
}
@@ -472,7 +473,7 @@ class CheckSetupControllerTest extends TestCase {
]);
$this->checkSetupController
->expects($this->once())
- ->method('isPhpMailerUsed')
+ ->method('isPHPMailerUsed')
->willReturn(false);
$this->checker
->expects($this->once())
@@ -487,6 +488,11 @@ class CheckSetupControllerTest extends TestCase {
->method('getAppDirsWithDifferentOwner')
->willReturn([]);
+ $this->checkSetupController
+ ->expects($this->once())
+ ->method('hasRecommendedPHPModules')
+ ->willReturn([]);
+
$expected = new DataResponse(
[
'isGetenvServerWorking' => true,
@@ -525,16 +531,17 @@ class CheckSetupControllerTest extends TestCase {
'isSqliteUsed' => false,
'databaseConversionDocumentation' => 'http://docs.example.org/server/go.php?to=admin-db-conversion',
'missingIndexes' => [],
- 'isPhpMailerUsed' => false,
+ 'isPHPMailerUsed' => false,
'mailSettingsDocumentation' => 'https://server/index.php/settings/admin',
'isMemoryLimitSufficient' => true,
'appDirsWithDifferentOwner' => [],
+ 'recommendedPHPModules' => [],
]
);
$this->assertEquals($expected, $this->checkSetupController->check());
}
- public function testIsPhpMailerUsed() {
+ public function testIsPHPMailerUsed() {
$checkSetupController = $this->getMockBuilder('\OC\Settings\Controller\CheckSetupController')
->setConstructorArgs([
'settings',
@@ -564,8 +571,8 @@ class CheckSetupControllerTest extends TestCase {
->with('mail_smtpmode', 'smtp')
->will($this->returnValue('not-php'));
- $this->assertTrue($this->invokePrivate($checkSetupController, 'isPhpMailerUsed'));
- $this->assertFalse($this->invokePrivate($checkSetupController, 'isPhpMailerUsed'));
+ $this->assertTrue($this->invokePrivate($checkSetupController, 'isPHPMailerUsed'));
+ $this->assertFalse($this->invokePrivate($checkSetupController, 'isPHPMailerUsed'));
}
public function testGetCurlVersion() {