Merge pull request #18399 from megaphonetech-dennis/contact-form-task_delete-php_spel...
[civicrm-core.git] / setup / plugins / checkRequirements / CheckDbWellFormed.civi-setup.php
1 <?php
2 /**
3 * @file
4 *
5 * Verify that the database parameters are well-formed.
6 */
7
8 if (!defined('CIVI_SETUP')) {
9 exit("Installation plugins must only be loaded by the installer.\n");
10 }
11
12 \Civi\Setup::dispatcher()
13 ->addListener('civi.setup.checkRequirements', function (\Civi\Setup\Event\CheckRequirementsEvent $e) {
14 \Civi\Setup::log()->info(sprintf('[%s] Handle %s', basename(__FILE__), 'checkRequirements'));
15
16 $dbFields = array('db', 'cmsDb');
17 foreach ($dbFields as $dbField) {
18 $errors = 0;
19 $db = $e->getModel()->{$dbField};
20
21 $keys = array_keys($db);
22 sort($keys);
23 $expectedKeys = array('server', 'username', 'password', 'database');
24 sort($expectedKeys);
25 if ($keys !== $expectedKeys) {
26 // if it failed it might be because of the optional ssl parameters
27 $expectedKeys[] = 'ssl_params';
28 sort($expectedKeys);
29 if ($keys !== $expectedKeys) {
30 $e->addError('database', $dbField, sprintf("The database credentials for \"%s\" should be specified as (%s) not (%s)",
31 $dbField,
32 implode(',', $expectedKeys),
33 implode(',', $keys)
34 ));
35 $errors++;
36 }
37 }
38
39 foreach ($db as $k => $v) {
40 if ($k === 'password' && empty($v)) {
41 $e->addWarning('database', "$dbField.$k", "The property \"$dbField.$k\" is blank. This may be correct in some controlled environments; it could also be a mistake or a symptom of an insecure configuration.");
42 }
43 elseif ($k !== 'ssl_params' && !is_scalar($v)) {
44 $e->addError('database', "$dbField.$k", "The property \"$dbField.$k\" is not well-formed.");
45 $errors++;
46 }
47 }
48
49 if (0 == $errors) {
50 $e->addInfo('database', $dbField, "The database credentials for \"$dbField\" are well-formed.");
51 }
52 }
53 });