Completed
Push — master ( 067f37...f8d940 )
by Craig
04:48
created

DbCredsHelper::__construct()   A

Complexity

Conditions 1
Paths 1

Size

Total Lines 3
Code Lines 1

Duplication

Lines 0
Ratio 0 %

Importance

Changes 0
Metric Value
cc 1
eloc 1
c 0
b 0
f 0
nc 1
nop 1
dl 0
loc 3
rs 10
1
<?php
2
3
declare(strict_types=1);
4
5
/*
6
 * This file is part of the Zikula package.
7
 *
8
 * Copyright Zikula - https://ziku.la/
9
 *
10
 * For the full copyright and license information, please view the LICENSE
11
 * file that was distributed with this source code.
12
 */
13
14
namespace Zikula\Bundle\CoreInstallerBundle\Helper;
15
16
use Symfony\Component\Filesystem\Exception\IOExceptionInterface;
17
use Zikula\Bundle\CoreBundle\Helper\LocalDotEnvHelper;
18
19
class DbCredsHelper
20
{
21
    /**
22
     * @var string
23
     */
24
    private $projectDir;
25
26
    public function __construct(string $projectDir)
27
    {
28
        $this->projectDir = $projectDir;
29
    }
30
31
    public function writeDatabaseDsn(array $data = []): bool
32
    {
33
        if (!isset($data['database_driver'], $data['database_host'], $data['database_user'], $data['database_name'])) {
34
            throw new \InvalidArgumentException('Database connection credentials must be set');
35
        }
36
37
        $vars = [
38
            'DATABASE_USER' => $data['database_user'],
39
            'DATABASE_PWD' => $data['database_password'],
40
            'DATABASE_NAME' => $data['database_name'],
41
            'DATABASE_URL' => '!' . $data['database_driver']
42
                . '://$DATABASE_USER:$DATABASE_PWD'
43
                . '@' . $data['database_host'] . (!empty($data['database_port']) ? ':' . $data['database_port'] : '')
44
                . '/$DATABASE_NAME?serverVersion=5.7' // any value for serverVersion will work (bypasses DBALException)
45
        ];
46
47
        try {
48
            (new LocalDotEnvHelper($this->projectDir))->writeLocalEnvVars($vars);
49
        } catch (IOExceptionInterface $exception) {
50
            return false;
51
        }
52
53
        return true;
54
    }
55
}
56