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 — 1.x (#218)
by Eric
35:16
created

LoadDataFixturesCommand::__construct()   A

Complexity

Conditions 1
Paths 1

Size

Total Lines 20
Code Lines 17

Duplication

Lines 0
Ratio 0 %

Code Coverage

Tests 10
CRAP Score 1

Importance

Changes 7
Bugs 1 Features 3
Metric Value
c 7
b 1
f 3
dl 0
loc 20
ccs 10
cts 10
cp 1
rs 9.4285
cc 1
eloc 17
nc 1
nop 8
crap 1

How to fix   Many Parameters   

Many Parameters

Methods with many parameters are not only hard to understand, but their parameters also often become inconsistent when you need more, or different data.

There are several approaches to avoid long parameter lists:

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 48
    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 48
        $this->doctrine = $doctrine;
96 48
        $this->loader = $loader;
97 48
        $this->fixturesLoader = $fixturesLoader;
98 48
        $this->fixturesFinder = $fixturesFinder;
99 48
        $this->bundlesResolver = $bundlesResolver;
100 48
        $this->loaderGenerator = $loaderGenerator;
101 48
        $this->fixturesExecutor = $fixturesExecutor;
102
103 48
        parent::__construct($name);
104 48
    }
105
106
    /**
107
     * {@inheritdoc}
108
     */
109 48
    protected function configure()
110
    {
111 48
        $this
112 48
            ->setDescription('Load data fixtures to your database.')
113 48
            ->addOption(
114 48
                'bundle',
115 48
                'b',
116 48
                InputOption::VALUE_OPTIONAL | InputOption::VALUE_IS_ARRAY,
117
                'Bundles where fixtures should be loaded.'
118 48
            )
119 48
            ->addOption(
120 48
                'manager',
121 48
                'em',
122 48
                InputOption::VALUE_REQUIRED,
123
                'The entity manager to use for this command.'
124 48
            )
125 48
            ->addOption(
126 48
                'append',
127 48
                null,
128 48
                InputOption::VALUE_NONE,
129
                'Append the data fixtures instead of deleting all data from the database first.'
130 48
            )
131 48
            ->addOption(
132 48
                'shard',
133 48
                null,
134 48
                InputOption::VALUE_REQUIRED,
135
                'The shard database id to use for this command.'
136 48
            )
137
        ;
138
139 48
        if ($this->doctrine instanceof Registry) {
140 48
            $this->addOption('purge-with-truncate',
141 48
                null,
142 48
                InputOption::VALUE_NONE,
143
                'Purge data by using a database-level TRUNCATE statement when using Doctrine ORM.'
144 48
            );
145 48
        }
146 48
    }
147
148
    /**
149
     * {@inheritdoc}
150
     *
151
     * \RuntimeException Unsupported Application type
152
     */
153 42
    protected function execute(InputInterface $input, OutputInterface $output)
154
    {
155 42
        if (false !== strpos($input->getFirstArgument(), 'hautelook_alice:fixtures:load')
156 42
            || false !== strpos($input->getFirstArgument(), 'h:f:l')
157 42
        ) {
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 42
        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 42
        $manager = $this->doctrine->getManager($input->getOption('manager'));
177 42
        $environment = $input->getOption('env');
178 42
        $bundles = $input->getOption('bundle');
179
180
        /** @var Application $application */
181 42
        $application = $this->getApplication();
182 42
        if (false === $application instanceof Application) {
183
            throw new \RuntimeException('Expected Symfony\Bundle\FrameworkBundle\Console\Application application.');
184
        }
185
186
        // Get bundles
187 42
        if (true === empty($bundles)) {
188 18
            $bundles = $application->getKernel()->getBundles();
189 18
        } else {
190 24
            $bundles = $this->bundlesResolver->resolveBundles($application, $bundles);
191
        }
192
193 42
        $fixtures = $this->fixturesFinder->getFixtures($application->getKernel(), $bundles, $environment);
194
195 42
        $output->writeln(sprintf('  <comment>></comment> <info>%s</info>', 'fixtures found:'));
196 42
        foreach ($fixtures as $fixture) {
197 42
            $output->writeln(sprintf('      <comment>-</comment> <info>%s</info>', $fixture));
198 42
        }
199
200 42
        $truncate = $input->hasOption('purge-with-truncate') ? $input->getOption('purge-with-truncate') : false;
201
202
        // Shard database
203 42
        $shard = $input->getOption('shard');
204 42
        if (!empty($shard)) {
205 3
            $connection = $manager->getConnection();
206 3
            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 3
            $connection->connect($shard);
212 3
        }
213
214 42
        $this->fixturesExecutor->execute(
215 42
            $manager,
216 42
            $this->loaderGenerator->generate($this->loader, $this->fixturesLoader, $bundles, $environment),
217 42
            $fixtures,
218 42
            $input->getOption('append'),
219 42
            function ($message) use ($output) {
220 42
                $output->writeln(sprintf('  <comment>></comment> <info>%s</info>', $message));
221 42
            },
222
            $truncate
223 42
        );
224 42
        $output->writeln(sprintf('  <comment>></comment> <info>%s</info>', 'fixtures loaded'));
225 42
    }
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