Completed
Push — master ( 96d434...f2324b )
by Daniel
04:52 queued 55s
created

doctrine-phpcr-odm/tests/Functional/Container.php (4 issues)

Upgrade to new PHP Analysis Engine

These results are based on our legacy PHP analysis, consider migrating to our new PHP analysis engine instead. Learn more

1
<?php
2
3
namespace Psi\Bridge\ContentType\Doctrine\PhpcrOdm\Tests\Functional;
4
5
use Doctrine\Common\Persistence\Mapping\Driver\MappingDriverChain;
6
use Doctrine\DBAL\DriverManager;
7
use Doctrine\ODM\PHPCR\Configuration;
8
use Doctrine\ODM\PHPCR\DocumentManager;
9
use Doctrine\ODM\PHPCR\Mapping\Driver\AnnotationDriver;
10
use Doctrine\ODM\PHPCR\Mapping\Driver\XmlDriver;
11
use Doctrine\ODM\PHPCR\NodeTypeRegistrator;
12
use Jackalope\RepositoryFactoryDoctrineDBAL;
13
use Jackalope\Transport\DoctrineDBAL\RepositorySchema;
14
use PHPCR\SimpleCredentials;
15
use Psi\Bridge\ContentType\Doctrine\PhpcrOdm\CollectionIdentifierUpdater;
16
use Psi\Bridge\ContentType\Doctrine\PhpcrOdm\FieldMapper;
17
use Psi\Bridge\ContentType\Doctrine\PhpcrOdm\NodeTypeRegistrator as CtNodeTypeRegistrator;
18
use Psi\Bridge\ContentType\Doctrine\PhpcrOdm\PropertyEncoder;
19
use Psi\Bridge\ContentType\Doctrine\PhpcrOdm\Subscriber\CollectionSubscriber;
20
use Psi\Bridge\ContentType\Doctrine\PhpcrOdm\Subscriber\MetadataSubscriber;
21
use Psi\Component\ContentType\Tests\Functional\Container as BaseContainer;
22
23
class Container extends BaseContainer
24
{
25
    public function __construct(array $config)
26
    {
27
        parent::__construct(array_merge([
28
            'mapping' => [],
29
            'db_path' => __DIR__ . '/../../../../cache/test.sqlite',
30
        ], $config));
31
32
        $this->loadDoctrineDbal();
0 ignored issues
show
The call to the method Psi\Bridge\ContentType\D...ner::loadDoctrineDbal() seems un-needed as the method has no side-effects.

PHP Analyzer performs a side-effects analysis of your code. A side-effect is basically anything that might be visible after the scope of the method is left.

Let’s take a look at an example:

class User
{
    private $email;

    public function getEmail()
    {
        return $this->email;
    }

    public function setEmail($email)
    {
        $this->email = $email;
    }
}

If we look at the getEmail() method, we can see that it has no side-effect. Whether you call this method or not, no future calls to other methods are affected by this. As such code as the following is useless:

$user = new User();
$user->getEmail(); // This line could safely be removed as it has no effect.

On the hand, if we look at the setEmail(), this method _has_ side-effects. In the following case, we could not remove the method call:

$user = new User();
$user->setEmail('email@domain'); // This line has a side-effect (it changes an
                                 // instance variable).
Loading history...
33
        $this->loadPhpcrOdm();
0 ignored issues
show
The call to the method Psi\Bridge\ContentType\D...ntainer::loadPhpcrOdm() seems un-needed as the method has no side-effects.

PHP Analyzer performs a side-effects analysis of your code. A side-effect is basically anything that might be visible after the scope of the method is left.

Let’s take a look at an example:

class User
{
    private $email;

    public function getEmail()
    {
        return $this->email;
    }

    public function setEmail($email)
    {
        $this->email = $email;
    }
}

If we look at the getEmail() method, we can see that it has no side-effect. Whether you call this method or not, no future calls to other methods are affected by this. As such code as the following is useless:

$user = new User();
$user->getEmail(); // This line could safely be removed as it has no effect.

On the hand, if we look at the setEmail(), this method _has_ side-effects. In the following case, we could not remove the method call:

$user = new User();
$user->setEmail('email@domain'); // This line has a side-effect (it changes an
                                 // instance variable).
Loading history...
34
    }
35
36
    private function loadDoctrineDbal()
37
    {
38
        $this['dbal.connection'] = function () {
39
            return DriverManager::getConnection([
40
                'driver'    => 'pdo_sqlite',
41
                'path' => $this['config']['db_path'],
42
            ]);
43
        };
44
    }
45
46
    private function loadPhpcrOdm()
47
    {
48
        $this['psi_content_type.storage.doctrine.phpcr_odm.property_encoder'] = function ($container) {
0 ignored issues
show
The parameter $container is not used and could be removed.

This check looks from parameters that have been defined for a function or method, but which are not used in the method body.

Loading history...
49
            return new PropertyEncoder('psict', 'https://github.com/psiphp/content-type');
50
        };
51
52
        $this['psi_content_type.storage.doctrine.phpcr_odm.field_mapper'] = function ($container) {
53
            return new FieldMapper(
54
                $container['psi_content_type.storage.doctrine.phpcr_odm.property_encoder'],
55
                $container['psi_content_type.field_loader']
56
            );
57
        };
58
59
        $this['psi_content_type.storage.doctrine.phpcr_odm.collection_updater'] = function ($container) {
60
            return new CollectionIdentifierUpdater(
61
                $container['psi_content_type.metadata.factory'],
62
                $container['psi_content_type.storage.doctrine.phpcr_odm.property_encoder']
63
            );
64
        };
65
66
        $this['doctrine_phpcr.document_manager'] = function ($container) {
67
            $registerNodeTypes = false;
68
69
            // automatically setup the schema if the db doesn't exist yet.
70
            if (!file_exists($container['config']['db_path'])) {
71
                if (!file_exists($dir = dirname($container['config']['db_path']))) {
72
                    mkdir($dir);
73
                }
74
75
                $connection = $container['dbal.connection'];
76
77
                $schema = new RepositorySchema();
78
                foreach ($schema->toSql($connection->getDatabasePlatform()) as $sql) {
79
                    $connection->exec($sql);
80
                }
81
82
                $registerNodeTypes = true;
83
            }
84
85
            // register the phpcr session
86
            $factory = new RepositoryFactoryDoctrineDBAL();
87
            $repository = $factory->getRepository([
88
                'jackalope.doctrine_dbal_connection' => $container['dbal.connection'],
89
            ]);
90
            $session = $repository->login(new SimpleCredentials(null, null), 'default');
91
92
            if ($registerNodeTypes) {
93
                $typeRegistrator = new NodeTypeRegistrator();
94
                $typeRegistrator->registerNodeTypes($session);
95
                $ctTypeRegistrator = new CtNodeTypeRegistrator(
96
                    $container['psi_content_type.storage.doctrine.phpcr_odm.property_encoder']
97
                );
98
                $ctTypeRegistrator->registerNodeTypes($session);
99
            }
100
101
            // annotation driver
102
            $annotationDriver = new AnnotationDriver($container['annotation_reader'], [
0 ignored issues
show
$annotationDriver is not used, you could remove the assignment.

This check looks for variable assignements that are either overwritten by other assignments or where the variable is not used subsequently.

$myVar = 'Value';
$higher = false;

if (rand(1, 6) > 3) {
    $higher = true;
} else {
    $higher = false;
}

Both the $myVar assignment in line 1 and the $higher assignment in line 2 are dead. The first because $myVar is never used and the second because $higher is always overwritten for every possible time line.

Loading history...
103
                __DIR__ . '/../../vendor/doctrine/phpcr-odm/lib/Doctrine/ODM/PHPCR/Document',
104
                __DIR__ . '/Example',
105
            ]);
106
            $xmlDriver = new XmlDriver([__DIR__ . '/mappings']);
107
            $annotationDriver = new AnnotationDriver($container['annotation_reader'], [
108
                __DIR__ . '/../../vendor/doctrine/phpcr-odm/lib/Doctrine/ODM/PHPCR/Document',
109
                __DIR__ . '/Example',
110
            ]);
111
            $chain = new MappingDriverChain();
112
            $chain->addDriver($annotationDriver, 'Psi\Bridge\ContentType\Doctrine\PhpcrOdm\Tests\Functional\Example');
113
            $chain->addDriver($xmlDriver, 'Psi\Component\ContentType\Tests\Functional\Example\Model');
114
            $chain->addDriver($annotationDriver, 'Doctrine');
115
116
            $config = new Configuration();
117
            $config->setMetadataDriverImpl($chain);
118
119
            $manager = DocumentManager::create($session, $config);
120
            $manager->getEventManager()->addEventSubscriber(new MetadataSubscriber(
121
                $container['psi_content_type.metadata.factory'],
122
                $container['psi_content_type.field_loader'],
123
                $container['psi_content_type.storage.doctrine.phpcr_odm.field_mapper']
124
            ));
125
            $manager->getEventManager()->addEventSubscriber(new CollectionSubscriber(
126
                $container['psi_content_type.metadata.factory'],
127
                $container['psi_content_type.storage.doctrine.phpcr_odm.property_encoder']
128
            ));
129
130
            return $manager;
131
        };
132
    }
133
}
134