Passed
Branch develop (078eb3)
by Andrew
05:54 queued 03:15
created

ConnectVariable::open()   A

Complexity

Conditions 3
Paths 3

Size

Total Lines 15
Code Lines 9

Duplication

Lines 0
Ratio 0 %

Importance

Changes 0
Metric Value
eloc 9
dl 0
loc 15
rs 9.9666
c 0
b 0
f 0
cc 3
nc 3
nop 1
1
<?php
2
/**
3
 * Connect plugin for Craft CMS 3.x
4
 *
5
 * Allows you to connect to external databases and perform db queries
6
 *
7
 * @link      https://nystudio107.com/
8
 * @copyright Copyright (c) 2018 nystudio107
9
 */
10
11
namespace nystudio107\connect\variables;
12
13
use nystudio107\connect\Connect;
14
use nystudio107\connect\db\Query;
15
use nystudio107\connect\models\Settings;
16
17
use Craft;
18
19
use yii\db\Connection;
20
use yii\db\Exception;
21
22
/**
23
 * @author    nystudio107
24
 * @package   Connect
25
 * @since     1.0.0
26
 */
27
class ConnectVariable
28
{
29
    // Public Methods
30
    // =========================================================================
31
32
    /**
33
     * Open a new database connection
34
     *
35
     * @param string $configName
36
     *
37
     * @return null|Connection
38
     */
39
    public function open(string $configName)
40
    {
41
        $connection = null;
42
        $config = $this->getDbConfig($configName);
43
        if (!empty($config)) {
44
            // Create a connection to the db
45
            $connection = new Connection($config);
46
            try {
47
                $connection->open();
48
            } catch (Exception $e) {
49
                Craft::error($e->getMessage(), __METHOD__);
50
            }
51
        }
52
53
        return $connection;
54
    }
55
56
    /**
57
     * Returns a new generic query.
58
     *
59
     * @param null|Connection $connection
60
     *
61
     * @return Query
62
     */
63
    public function query($connection = null): Query
64
    {
65
        return new Query([
66
            'db' => $connection,
67
        ]);
68
    }
69
70
    // Protected Methods
71
    // =========================================================================
72
73
    /**
74
     * Return a database config with the key $configName from the Settings
75
     *
76
     * @param string $configName
77
     *
78
     * @return array
79
     */
80
    protected function getDbConfig(string $configName): array
81
    {
82
        $config = [];
83
        /* @var Settings $settings */
84
        $settings = Connect::$plugin->getSettings();
85
        if ($settings !== null && !empty($settings->connections[$configName])) {
86
            $dbConnection = $settings->connections[$configName];
87
            $config = [
88
                'dsn' => "{$dbConnection['driver']}:"
89
                    ."host={$dbConnection['server']};"
90
                    ."dbname={$dbConnection['database']};"
91
                    ."port={$dbConnection['port']};",
92
                'username' => $dbConnection['user'],
93
                'password' => $dbConnection['password'],
94
                'tablePrefix' => $dbConnection['tablePrefix'],
95
            ];
96
        }
97
98
        return $config;
99
    }
100
}
101