GitHub Access Token became invalid

It seems like the GitHub access token used for retrieving details about this repository from GitHub became invalid. This might prevent certain types of inspections from being run (in particular, everything related to pull requests).
Please ask an admin of your repository to re-new the access token on this website.
Completed
Push — 1.x ( ecb649...535f6c )
by Théo
13:20
created

FixturesFinder::getDataLoadersFromDirectory()   C

Complexity

Conditions 7
Paths 10

Size

Total Lines 34
Code Lines 18

Duplication

Lines 0
Ratio 0 %

Code Coverage

Tests 23
CRAP Score 7

Importance

Changes 5
Bugs 2 Features 2
Metric Value
c 5
b 2
f 2
dl 0
loc 34
ccs 23
cts 23
cp 1
rs 6.7272
cc 7
eloc 18
nc 10
nop 1
crap 7
1
<?php
2
3
/*
4
 * This file is part of the Hautelook\AliceBundle package.
5
 *
6
 * (c) Baldur Rensch <[email protected]>
7
 *
8
 * For the full copyright and license information, please view the LICENSE
9
 * file that was distributed with this source code.
10
 */
11
12
namespace Hautelook\AliceBundle\Doctrine\Finder;
13
14
use Hautelook\AliceBundle\Doctrine\DataFixtures\LoaderInterface;
15
use Symfony\Component\DependencyInjection\ContainerAwareInterface;
16
use Symfony\Component\DependencyInjection\ContainerInterface;
17
use Symfony\Component\Finder\Finder as SymfonyFinder;
18
use Symfony\Component\Finder\SplFileInfo;
19
use Symfony\Component\HttpKernel\Bundle\BundleInterface;
20
21
/**
22
 * Extends its parent class to take into account doctrine data loaders.
23
 *
24
 * @author Théo FIDRY <[email protected]>
25
 */
26
class FixturesFinder extends \Hautelook\AliceBundle\Finder\FixturesFinder implements ContainerAwareInterface
27
{
28
    /**
29
     * @var ContainerInterface|null
30
     */
31
    private $container;
32
33
    /**
34
     * {@inheritdoc}
35
     */
36 168
    public function setContainer(ContainerInterface $container = null)
37
    {
38 168
        $this->container = $container;
39 168
    }
40
41
    /**
42
     * {@inheritdoc}
43
     *
44
     * Extended to look for data loaders. If a data loader is found, will take the fixtures from it instead of taking
45
     * all the fixtures files.
46
     */
47 117
    public function getFixturesFromDirectory($path)
48
    {
49 117
        $fixtures = [];
50
51 117
        $loaders = $this->getDataLoadersFromDirectory($path);
52 114
        foreach ($loaders as $loader) {
53 96
            $fixtures = array_merge($fixtures, $loader->getFixtures());
54 114
        }
55
56
        // If no data loader is found, takes all fixtures files
57 114
        if (0 === count($loaders)) {
58 75
            return parent::getFixturesFromDirectory($path);
59
        }
60
61 96
        return $fixtures;
62
    }
63
64
    /**
65
     * Gets all data loaders instances.
66
     *
67
     * For first get all the path for where to look for data loaders.
68
     *
69
     * @param BundleInterface[] $bundles
70
     * @param string            $environment
71
     *
72
     * @return LoaderInterface[] Fixtures files real paths.
73
     */
74 87
    public function getDataLoaders(array $bundles, $environment)
75
    {
76 87
        $loadersPaths = $this->getLoadersPaths($bundles, $environment);
77
78
        // Add all fixtures to the new Doctrine loader
79 87
        $loaders = [];
80 87
        foreach ($loadersPaths as $path) {
81 87
            $loaders = array_merge($loaders, $this->getDataLoadersFromDirectory($path));
82 87
        }
83
84 87
        return $loaders;
85
    }
86
87
    /**
88
     * Get data loaders inside the given directory.
89
     *
90
     * @param string $path Directory path
91
     *
92
     * @return LoaderInterface[]
93
     */
94 126
    private function getDataLoadersFromDirectory($path)
95
    {
96 126
        $loaders = [];
97
98
        // Get all PHP classes in given folder
99 126
        $phpClasses = [];
100 126
        $finder = SymfonyFinder::create()->depth(0)->in($path)->files()->name('*.php');
101 123
        foreach ($finder as $file) {
102
            /* @var SplFileInfo $file */
103 102
            $phpClasses[$file->getRealPath()] = true;
104 102
            require_once $file->getRealPath();
105 123
        }
106
107 123
        $loaderInterface = 'Hautelook\AliceBundle\Doctrine\DataFixtures\LoaderInterface';
108
109
        // Check if PHP classes are data loaders or not
110 123
        foreach (get_declared_classes() as $className) {
111 123
            $reflectionClass = new \ReflectionClass($className);
112 123
            $sourceFile = $reflectionClass->getFileName();
113
114 123
            if (true === isset($phpClasses[$sourceFile])) {
115 102
                if ($reflectionClass->implementsInterface($loaderInterface) && !$reflectionClass->isAbstract()) {
116 102
                    $loader = new $className();
117 102
                    $loaders[$className] = $loader;
118
119 102
                    if ($loader instanceof ContainerAwareInterface) {
120 102
                        $loader->setContainer($this->container);
121 102
                    }
122 120
                }
123 104
            }
124 123
        }
125
126 123
        return $loaders;
127
    }
128
}
129