Manager::createNewConnection()   A
last analyzed

Complexity

Conditions 3
Paths 11

Size

Total Lines 20
Code Lines 13

Duplication

Lines 0
Ratio 0 %

Importance

Changes 0
Metric Value
cc 3
eloc 13
c 0
b 0
f 0
nc 11
nop 5
dl 0
loc 20
rs 9.8333
1
<?php
2
3
namespace Nip\Database;
4
5
use Nip\Database\Connections\Connection;
0 ignored issues
show
Bug introduced by
This use statement conflicts with another class in this namespace, Nip\Database\Connection. Consider defining an alias.

Let?s assume that you have a directory layout like this:

.
|-- OtherDir
|   |-- Bar.php
|   `-- Foo.php
`-- SomeDir
    `-- Foo.php

and let?s assume the following content of Bar.php:

// Bar.php
namespace OtherDir;

use SomeDir\Foo; // This now conflicts the class OtherDir\Foo

If both files OtherDir/Foo.php and SomeDir/Foo.php are loaded in the same runtime, you will see a PHP error such as the following:

PHP Fatal error:  Cannot use SomeDir\Foo as Foo because the name is already in use in OtherDir/Foo.php

However, as OtherDir/Foo.php does not necessarily have to be loaded and the error is only triggered if it is loaded before OtherDir/Bar.php, this problem might go unnoticed for a while. In order to prevent this error from surfacing, you must import the namespace with a different alias:

// Bar.php
namespace OtherDir;

use SomeDir\Foo as SomeDirFoo; // There is no conflict anymore.
Loading history...
6
7
/**
8
 * Class Manager.
9
 * @deprecated use \Nip\Database\DatabaseManager
10
 */
11
class Manager extends DatabaseManager
12
{
13
    /**
14
     * @param $config
15
     *
16
     * @return Connection
17
     */
18
    public function newConnectionFromConfig($config)
19
    {
20
        $connection = $this->createNewConnection(
21
            $config->adapter,
22
            $config->host,
23
            $config->user,
24
            $config->password,
25
            $config->name
26
        );
27
28
        return $connection;
29
    }
30
31
    /**
32
     * @param $adapter
33
     * @param $host
34
     * @param $user
35
     * @param $password
36
     * @param $database
37
     *
38
     * @return Connection
39
     */
40
    public function createNewConnection($adapter, $host, $user, $password, $database)
41
    {
42
        try {
43
            $connection = $this->newConnection();
44
45
            $adapter = $connection->newAdapter($adapter);
46
            $connection->setAdapter($adapter);
47
48
            $connection->connect($host, $user, $password, $database);
49
            $this->initNewConnection($connection);
50
        } catch (Exception $e) {
51
            echo '<h1>Error connecting to database</h1>';
52
            if (app()->get('staging')->getStage()->inTesting()) {
53
                echo '<h4>' . $e->getMessage() . '</h4>';
54
                $e->log();
0 ignored issues
show
Bug introduced by
The method log() does not exist on Nip\Database\Exception. ( Ignorable by Annotation )

If this is a false-positive, you can also ignore this issue in your code via the ignore-call  annotation

54
                $e->/** @scrutinizer ignore-call */ 
55
                    log();

This check looks for calls to methods that do not seem to exist on a given type. It looks for the method on the type itself as well as in inherited classes or implemented interfaces.

This is most likely a typographical error or the method has been renamed.

Loading history...
55
            }
56
            die();
0 ignored issues
show
Best Practice introduced by
Using exit here is not recommended.

In general, usage of exit should be done with care and only when running in a scripting context like a CLI script.

Loading history...
57
        }
58
59
        return $connection;
60
    }
61
62
    /**
63
     * @param $connection
64
     */
65
    public function initNewConnection($connection)
66
    {
67
        if ($this->getBootstrap()->getDebugBar()->isEnabled()) {
68
            $this->getBootstrap()->getDebugBar()->initDatabaseAdapter($connection->getAdapter());
69
        }
70
    }
71
72
    /**
73
     * @return Connection
74
     */
75
    public function newConnection()
76
    {
77
        return new Connection(false);
0 ignored issues
show
Bug introduced by
false of type false is incompatible with the type Closure|PDO expected by parameter $pdo of Nip\Database\Connections\Connection::__construct(). ( Ignorable by Annotation )

If this is a false-positive, you can also ignore this issue in your code via the ignore-type  annotation

77
        return new Connection(/** @scrutinizer ignore-type */ false);
Loading history...
78
    }
79
}
80