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 ( 535f6c...0488a6 )
by Théo
17:35
created

LoadDataFixturesCommand   A

Complexity

Total Complexity 17

Size/Duplication

Total Lines 216
Duplicated Lines 0 %

Coupling/Cohesion

Components 1
Dependencies 12

Test Coverage

Coverage 79.59%

Importance

Changes 12
Bugs 3 Features 4
Metric Value
wmc 17
c 12
b 3
f 4
lcom 1
cbo 12
dl 0
loc 216
ccs 78
cts 98
cp 0.7959
rs 10

4 Methods

Rating   Name   Duplication   Size   Complexity  
A __construct() 0 20 1
B configure() 0 39 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 120
    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 120
        $this->doctrine = $doctrine;
96 120
        $this->loader = $loader;
97 120
        $this->fixturesLoader = $fixturesLoader;
98 120
        $this->fixturesFinder = $fixturesFinder;
99 120
        $this->bundlesResolver = $bundlesResolver;
100 120
        $this->loaderGenerator = $loaderGenerator;
101 120
        $this->fixturesExecutor = $fixturesExecutor;
102
103 120
        parent::__construct($name);
104 120
    }
105
106
    /**
107
     * {@inheritdoc}
108
     */
109 120
    protected function configure()
110
    {
111 120
        $this
112 120
            ->setAliases(['fixtures:load'])
113 120
            ->setDescription('Load data fixtures to your database.')
114 120
            ->addOption(
115 120
                'bundle',
116 120
                'b',
117 120
                InputOption::VALUE_OPTIONAL | InputOption::VALUE_IS_ARRAY,
118
                'Bundles where fixtures should be loaded.'
119 120
            )
120 120
            ->addOption(
121 120
                'manager',
122 120
                'em',
123 120
                InputOption::VALUE_REQUIRED,
124
                'The entity manager to use for this command.'
125 120
            )
126 120
            ->addOption(
127 120
                'append',
128 120
                null,
129 120
                InputOption::VALUE_NONE,
130
                'Append the data fixtures instead of deleting all data from the database first.'
131 120
            )
132 120
            ->addOption(
133 120
                'shard',
134 120
                null,
135 120
                InputOption::VALUE_REQUIRED,
136
                'The shard database id to use for this command.'
137 120
            )
138
        ;
139
140 120
        if ($this->doctrine instanceof Registry) {
141 120
            $this->addOption('purge-with-truncate',
142 120
                null,
143 120
                InputOption::VALUE_NONE,
144
                'Purge data by using a database-level TRUNCATE statement when using Doctrine ORM.'
145 120
            );
146 120
        }
147 120
    }
148
149
    /**
150
     * {@inheritdoc}
151
     *
152
     * \RuntimeException Unsupported Application type
153
     */
154 114
    protected function execute(InputInterface $input, OutputInterface $output)
155
    {
156 114
        if (false !== strpos($input->getFirstArgument(), 'hautelook_alice:fixtures:load')
157 114
            || false !== strpos($input->getFirstArgument(), 'h:f:l')
158 114
        ) {
159
            $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
160
"hautelook_alice:doctrine:fixtures:load" instead.</comment>');
161
        }
162
163
        // Warn the user that the database will be purged
164
        // Ask him to confirm his choice
165 114
        if ($input->isInteractive() && !$input->getOption('append')) {
166
            if (false === $this->askConfirmation(
167
                    $input,
168
                    $output,
169
                    '<question>Careful, database will be purged. Do you want to continue y/N ?</question>',
170
                    false
171
                )
172
            ) {
173
                return;
174
            }
175
        }
176
177 114
        $manager = $this->doctrine->getManager($input->getOption('manager'));
178 78
        $environment = $input->getOption('env');
179 78
        $bundles = $input->getOption('bundle');
180
181
        /** @var Application $application */
182 78
        $application = $this->getApplication();
183 78
        if (false === $application instanceof Application) {
184
            throw new \RuntimeException('Expected Symfony\Bundle\FrameworkBundle\Console\Application application.');
185
        }
186
187
        // Get bundles
188 78
        if (true === empty($bundles)) {
189 30
            $bundles = $application->getKernel()->getBundles();
190 30
        } else {
191 48
            $bundles = $this->bundlesResolver->resolveBundles($application, $bundles);
192
        }
193
194 78
        $fixtures = $this->fixturesFinder->getFixtures($application->getKernel(), $bundles, $environment);
195
196 78
        $output->writeln(sprintf('  <comment>></comment> <info>%s</info>', 'fixtures found:'));
197 78
        foreach ($fixtures as $fixture) {
198 78
            $output->writeln(sprintf('      <comment>-</comment> <info>%s</info>', $fixture));
199 78
        }
200
201 78
        $truncate = $input->hasOption('purge-with-truncate') ? $input->getOption('purge-with-truncate') : false;
202
203
        // Shard database
204 78
        $shard = $input->getOption('shard');
205 78
        if (!empty($shard)) {
206 6
            $connection = $manager->getConnection();
207 6
            if (!$connection instanceof PoolingShardConnection) {
208
                throw new \RuntimeException('Expected Doctrine\DBAL\Sharding\PoolingShardConnection connection when using shard option.');
209
            }
210
211
            // Switch to shard database
212 6
            $connection->connect($shard);
213 6
        }
214
215 78
        $this->fixturesExecutor->execute(
216 78
            $manager,
217 78
            $this->loaderGenerator->generate($this->loader, $this->fixturesLoader, $bundles, $environment),
218 78
            $fixtures,
219 78
            $input->getOption('append'),
220 78
            function ($message) use ($output) {
221 78
                $output->writeln(sprintf('  <comment>></comment> <info>%s</info>', $message));
222 78
            },
223
            $truncate
224 78
        );
225 78
        $output->writeln(sprintf('  <comment>></comment> <info>%s</info>', 'fixtures loaded'));
226 78
    }
227
228
    /**
229
     * Prompt to the user a message to ask him a confirmation.
230
     *
231
     * @param InputInterface  $input
232
     * @param OutputInterface $output
233
     * @param string          $question
234
     * @param bool            $default
235
     *
236
     * @return bool User choice.
237
     */
238
    private function askConfirmation(InputInterface $input, OutputInterface $output, $question, $default)
239
    {
240
        if (false === class_exists('Symfony\Component\Console\Question\ConfirmationQuestion')) {
241
            /** @var DialogHelper $dialogHelper */
242
            $dialogHelper = $this->getHelperSet()->get('dialog');
243
244
            return $dialogHelper->askConfirmation($output, $question, $default);
245
        }
246
247
        /** @var QuestionHelper $questionHelper */
248
        $questionHelper = $this->getHelperSet()->get('question');
249
        $question = new ConfirmationQuestion($question, $default);
250
251
        return (bool) $questionHelper->ask($input, $output, $question);
252
    }
253
}
254