Merge pull request #17771 from mattwire/ufmatch_validemail
[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 $e->addError('database', $dbField, sprintf("The database credentials for \"%s\" should be specified as (%s) not (%s)",
27 $dbField,
28 implode(',', $expectedKeys),
29 implode(',', $keys)
30 ));
31 $errors++;
32 }
33
34 foreach ($db as $k => $v) {
35 if ($k === 'password' && empty($v)) {
36 $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.");
37 }
38 elseif (!is_scalar($v)) {
39 $e->addError('database', "$dbField.$k", "The property \"$dbField.$k\" is not well-formed.");
40 $errors++;
41 }
42 }
43
44 if (0 == $errors) {
45 $e->addInfo('database', $dbField, "The database credentials for \"$dbField\" are well-formed.");
46 }
47 }
48 });