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
Pull Request — master (#194)
by Vincent
10:40
created

LoadDataFixturesCommand   A

Complexity

Total Complexity 17

Size/Duplication

Total Lines 215
Duplicated Lines 0 %

Coupling/Cohesion

Components 1
Dependencies 12

Test Coverage

Coverage 75.26%

Importance

Changes 14
Bugs 3 Features 6
Metric Value
wmc 17
c 14
b 3
f 6
lcom 1
cbo 12
dl 0
loc 215
ccs 73
cts 97
cp 0.7526
rs 10

4 Methods

Rating   Name   Duplication   Size   Complexity  
A __construct() 0 20 1
B configure() 0 38 2
C execute() 0 73 12
A askConfirmation() 0 15 2
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\Command;
13
14
use Doctrine\Bundle\DoctrineBundle\Registry;
15
use Doctrine\Common\Persistence\ManagerRegistry;
16
use Doctrine\DBAL\Sharding\PoolingShardConnection;
17
use Hautelook\AliceBundle\Alice\DataFixtures\Fixtures\LoaderInterface as FixturesLoaderInterface;
18
use Hautelook\AliceBundle\Alice\DataFixtures\LoaderInterface;
19
use Hautelook\AliceBundle\Doctrine\DataFixtures\Executor\FixturesExecutorInterface;
20
use Hautelook\AliceBundle\Doctrine\Finder\FixturesFinder;
21
use Hautelook\AliceBundle\Doctrine\Generator\LoaderGeneratorInterface;
22
use Hautelook\AliceBundle\Finder\FixturesFinderInterface;
23
use Hautelook\AliceBundle\Resolver\BundlesResolverInterface;
24
use Symfony\Bundle\FrameworkBundle\Console\Application;
25
use Symfony\Component\Console\Command\Command;
26
use Symfony\Component\Console\Helper\DialogHelper;
27
use Symfony\Component\Console\Helper\QuestionHelper;
28
use Symfony\Component\Console\Input\InputInterface;
29
use Symfony\Component\Console\Input\InputOption;
30
use Symfony\Component\Console\Output\OutputInterface;
31
use Symfony\Component\Console\Question\ConfirmationQuestion;
32
33
/**
34
 * Command used to load the fixtures.
35
 *
36
 * @author Théo FIDRY <[email protected]>
37
 */
38
class LoadDataFixturesCommand extends Command
39
{
40
    /**
41
     * @var BundlesResolverInterface
42
     */
43
    private $bundlesResolver;
44
45
    /**
46
     * @var ManagerRegistry
47
     */
48
    private $doctrine;
49
50
    /**
51
     * @var FixturesExecutorInterface
52
     */
53
    private $fixturesExecutor;
54
55
    /**
56
     * @var FixturesFinderInterface|FixturesFinder
57
     */
58
    private $fixturesFinder;
59
60
    /**
61
     * @var FixturesLoaderInterface
62
     */
63
    private $fixturesLoader;
64
65
    /**
66
     * @var LoaderInterface
67
     */
68
    private $loader;
69
70
    /**
71
     * @var LoaderGeneratorInterface
72
     */
73
    private $loaderGenerator;
74
75
    /**
76
     * @param string                    $name             Command name
77
     * @param ManagerRegistry           $doctrine
78
     * @param LoaderInterface           $loader
79
     * @param FixturesLoaderInterface   $fixturesLoader
80
     * @param FixturesFinderInterface   $fixturesFinder
81
     * @param BundlesResolverInterface  $bundlesResolver
82
     * @param LoaderGeneratorInterface  $loaderGenerator
83
     * @param FixturesExecutorInterface $fixturesExecutor
84
     */
85 45
    public function __construct(
86
        $name,
87
        ManagerRegistry $doctrine,
88
        LoaderInterface $loader,
89
        FixturesLoaderInterface $fixturesLoader,
90
        FixturesFinderInterface $fixturesFinder,
91
        BundlesResolverInterface $bundlesResolver,
92
        LoaderGeneratorInterface $loaderGenerator,
93
        FixturesExecutorInterface $fixturesExecutor
94
    ) {
95 45
        $this->doctrine = $doctrine;
96 45
        $this->loader = $loader;
97 45
        $this->fixturesLoader = $fixturesLoader;
98 45
        $this->fixturesFinder = $fixturesFinder;
99 45
        $this->bundlesResolver = $bundlesResolver;
100 45
        $this->loaderGenerator = $loaderGenerator;
101 45
        $this->fixturesExecutor = $fixturesExecutor;
102
103 45
        parent::__construct($name);
104 45
    }
105
106
    /**
107
     * {@inheritdoc}
108
     */
109 45
    protected function configure()
110
    {
111 45
        $this
112 45
            ->setDescription('Load data fixtures to your database.')
113 45
            ->addOption(
114 45
                'bundle',
115 45
                'b',
116 45
                InputOption::VALUE_OPTIONAL | InputOption::VALUE_IS_ARRAY,
117
                'Bundles where fixtures should be loaded.'
118 45
            )
119 45
            ->addOption(
120 45
                'manager',
121 45
                'em',
122 45
                InputOption::VALUE_REQUIRED,
123
                'The entity manager to use for this command.'
124 45
            )
125 45
            ->addOption(
126 45
                'append',
127 45
                null,
128 45
                InputOption::VALUE_NONE,
129
                'Append the data fixtures instead of deleting all data from the database first.'
130 45
            )
131 45
            ->addOption(
132 45
                'shard',
133 45
                null,
134 45
                InputOption::VALUE_REQUIRED,
135
                'The shard database id to use for this command.'
136 45
            )
137
        ;
138
139 45
        if ($this->doctrine instanceof Registry) {
140 41
            $this->addOption('purge-with-truncate',
141 41
                null,
142 41
                InputOption::VALUE_NONE,
143
                'Purge data by using a database-level TRUNCATE statement when using Doctrine ORM.'
144 41
            );
145 41
        }
146 45
    }
147
148
    /**
149
     * {@inheritdoc}
150
     *
151
     * \RuntimeException Unsupported Application type
152
     */
153 39
    protected function execute(InputInterface $input, OutputInterface $output)
154
    {
155 39
        if (false !== strpos($input->getFirstArgument(), 'hautelook_alice:fixtures:load')
156 39
            || false !== strpos($input->getFirstArgument(), 'h:f:l')
157 39
        ) {
158
            $output->writeln('<comment>The use of "hautelook_alice:fixtures:load" command is deprecated since 1.0 and will be removed in 2.0. Use the
159
"hautelook_alice:doctrine:fixtures:load" instead.</comment>');
160
        }
161
162
        // Warn the user that the database will be purged
163
        // Ask him to confirm his choice
164 39
        if ($input->isInteractive() && !$input->getOption('append')) {
165
            if (false === $this->askConfirmation(
166
                    $input,
167
                    $output,
168
                    '<question>Careful, database will be purged. Do you want to continue y/N ?</question>',
169
                    false
170
                )
171
            ) {
172
                return;
173
            }
174
        }
175
176 39
        $manager = $this->doctrine->getManager($input->getOption('manager'));
177 39
        $environment = $input->getOption('env');
178 39
        $bundles = $input->getOption('bundle');
179
180
        /** @var Application $application */
181 39
        $application = $this->getApplication();
182 39
        if (false === $application instanceof Application) {
183
            throw new \RuntimeException('Expected Symfony\Bundle\FrameworkBundle\Console\Application application.');
184
        }
185
186
        // Get bundles
187 39
        if (true === empty($bundles)) {
188 18
            $bundles = $application->getKernel()->getBundles();
189 18
        } else {
190 21
            $bundles = $this->bundlesResolver->resolveBundles($application, $bundles);
191
        }
192
193 39
        $fixtures = $this->fixturesFinder->getFixtures($application->getKernel(), $bundles, $environment);
194
195 39
        $output->writeln(sprintf('  <comment>></comment> <info>%s</info>', 'fixtures found:'));
196 39
        foreach ($fixtures as $fixture) {
197 39
            $output->writeln(sprintf('      <comment>-</comment> <info>%s</info>', $fixture));
198 39
        }
199
200 39
        $truncate = $input->hasOption('purge-with-truncate') ? $input->getOption('purge-with-truncate') : false;
201
202
        // Shard database
203 39
        $shard = $input->getOption('shard');
204 39
        if (!empty($shard)) {
205
            $connection = $manager->getConnection();
206
            if (!$connection instanceof PoolingShardConnection) {
207
                throw new \RuntimeException('Expected Doctrine\DBAL\Sharding\PoolingShardConnection connection when using shard option.');
208
            }
209
210
            // Switch to shard database
211
            $connection->connect($shard);
212
        }
213
214 39
        $this->fixturesExecutor->execute(
215 39
            $manager,
216 39
            $this->loaderGenerator->generate($this->loader, $this->fixturesLoader, $bundles, $environment),
217 39
            $fixtures,
218 39
            $input->getOption('append'),
219 39
            function ($message) use ($output) {
220 39
                $output->writeln(sprintf('  <comment>></comment> <info>%s</info>', $message));
221 39
            },
222
            $truncate
223 39
        );
224 39
        $output->writeln(sprintf('  <comment>></comment> <info>%s</info>', 'fixtures loaded'));
225 39
    }
226
227
    /**
228
     * Prompt to the user a message to ask him a confirmation.
229
     *
230
     * @param InputInterface  $input
231
     * @param OutputInterface $output
232
     * @param string          $question
233
     * @param bool            $default
234
     *
235
     * @return bool User choice.
236
     */
237
    private function askConfirmation(InputInterface $input, OutputInterface $output, $question, $default)
238
    {
239
        if (false === class_exists('Symfony\Component\Console\Question\ConfirmationQuestion')) {
240
            /** @var DialogHelper $dialogHelper */
241
            $dialogHelper = $this->getHelperSet()->get('dialog');
242
243
            return $dialogHelper->askConfirmation($output, $question, $default);
244
        }
245
246
        /** @var QuestionHelper $questionHelper */
247
        $questionHelper = $this->getHelperSet()->get('question');
248
        $question = new ConfirmationQuestion($question, $default);
249
250
        return (bool) $questionHelper->ask($input, $output, $question);
251
    }
252
}
253