Skip to content

Commit 067c998

Browse files
committed
rebase and rework for 3.1
1 parent 7f5dfe5 commit 067c998

File tree

6 files changed

+231
-1127
lines changed

6 files changed

+231
-1127
lines changed

Collector/MigrationsCollector.php

Lines changed: 66 additions & 136 deletions
Original file line numberDiff line numberDiff line change
@@ -1,170 +1,100 @@
11
<?php
22

3-
/*
4-
* This file is part of the Doctrine MigrationsBundle
5-
*
6-
* The code was originally distributed inside the Symfony framework.
7-
*
8-
* (c) Michael Simonson <[email protected]>
9-
*
10-
* For the full copyright and license information, please view the LICENSE
11-
* file that was distributed with this source code.
12-
*/
3+
declare(strict_types=1);
134

145
namespace Doctrine\Bundle\MigrationsBundle\Collector;
156

16-
17-
use Doctrine\DBAL\Connection;
18-
use Doctrine\DBAL\Migrations\Configuration\Configuration;
19-
use Doctrine\DBAL\Migrations\Tools\Console\Helper\MigrationStatusInfosHelper;
7+
use Doctrine\Migrations\DependencyFactory;
8+
use Doctrine\Migrations\Metadata\AvailableMigration;
9+
use Doctrine\Migrations\Metadata\AvailableMigrationsList;
10+
use Doctrine\Migrations\Metadata\ExecutedMigration;
11+
use Doctrine\Migrations\Metadata\ExecutedMigrationsList;
12+
use Doctrine\Migrations\Metadata\Storage\TableMetadataStorageConfiguration;
2013
use Symfony\Component\HttpFoundation\Request;
2114
use Symfony\Component\HttpFoundation\Response;
22-
use Symfony\Component\HttpKernel\DataCollector\DataCollectorInterface;
15+
use Symfony\Component\HttpKernel\DataCollector\DataCollector;
2316

24-
class MigrationsCollector implements DataCollectorInterface
17+
class MigrationsCollector extends DataCollector
2518
{
26-
/** @var string */
27-
private $migrationTablename;
28-
29-
/** @var string */
30-
private $migrationName;
31-
32-
/** @var Connection */
33-
private $connection;
34-
35-
/** @var string */
36-
private $migrationNamespace;
37-
38-
/** @var string */
39-
private $migrationDirectory;
19+
/** @var DependencyFactory */
20+
private $dependencyFactory;
4021

41-
public function __construct(Connection $connection, $migrationNamespace, $migrationDirectory, $migrationTablename, $migrationName)
22+
public function __construct(DependencyFactory $dependencyFactory)
4223
{
43-
$this->connection = $connection;
44-
$this->migrationNamespace = $migrationNamespace;
45-
$this->migrationDirectory = $migrationDirectory;
46-
$this->migrationTablename = $migrationTablename;
47-
$this->migrationName = $migrationName;
24+
$this->dependencyFactory = $dependencyFactory;
4825
}
4926

50-
/**
51-
* Collects data for the given Request and Response.
52-
*
53-
* @param Request $request A Request instance
54-
* @param Response $response A Response instance
55-
* @param \Exception $exception An Exception instance
56-
*/
57-
public function collect(Request $request, Response $response, \Exception $exception = null)
27+
public function collect(Request $request, Response $response, \Throwable $exception = null)
5828
{
59-
$configuration = new Configuration($this->connection);
60-
$configuration->setMigrationsNamespace($this->migrationNamespace);
61-
$configuration->setMigrationsDirectory($this->migrationDirectory);
62-
$configuration->setMigrationsTableName($this->migrationTablename);
63-
$configuration->setName($this->migrationName);
64-
$configuration->registerMigrationsFromDirectory($configuration->getMigrationsDirectory());
65-
$migrationsStatusInfos = new MigrationStatusInfosHelper($configuration);
66-
$this->data = $migrationsStatusInfos->getMigrationsInfos();
67-
$newMigrationsList = $configuration->getMigrationsToExecute('up', $configuration->getLatestVersion());
68-
$this->data['newMigrationsList'] = array_map(function($migration) {
69-
return $migration->getVersion();
70-
}, $newMigrationsList);
71-
$this->data['executedUnavailableMigrationsList'] = array_map(function($migration) {
72-
return $migration->getVersion();
73-
}, $migrationsStatusInfos->getExecutedUnavailableMigrations());
29+
$metadataStorage = $this->dependencyFactory->getMetadataStorage();
30+
$planCalculator = $this->dependencyFactory->getMigrationPlanCalculator();
31+
$statusCalculator = $this->dependencyFactory->getMigrationStatusCalculator();
7432

75-
$this->connection = null;
76-
$this->migrationDirectory = null;
77-
$this->migrationNamespace = null;
78-
$this->migrationName = null;
79-
$this->migrationTablename = null;
80-
}
81-
82-
/**
83-
* Returns the name of the collector.
84-
*
85-
* @return string The collector name
86-
*/
87-
public function getName()
88-
{
89-
return 'doctrine.migrations_collector';
90-
}
91-
92-
public function getPreviousMigration()
93-
{
94-
return $this->data['Previous Version'];
95-
}
96-
97-
public function getCurrentMigration()
98-
{
99-
return $this->data['Current Version'];
100-
}
101-
102-
public function getNextMigration()
103-
{
104-
return $this->data['Next Version'];
105-
}
33+
$availableMigrations = $planCalculator->getMigrations();
34+
$this->data['available_migrations'] = $this->flattenAvailableMigrations($availableMigrations);
35+
$this->data['executed_migrations'] = $this->flattenExecutedMigrations(
36+
$metadataStorage->getExecutedMigrations(),
37+
$availableMigrations
38+
);
39+
$this->data['new_migrations'] = $this->flattenAvailableMigrations($statusCalculator->getNewMigrations());
40+
$this->data['executed_unavailable_migrations'] = $this->flattenExecutedMigrations(
41+
$statusCalculator->getExecutedUnavailableMigrations(),
42+
new AvailableMigrationsList([])
43+
);
10644

107-
public function getLatestMigration()
108-
{
109-
return $this->data['Latest Version'];
110-
}
45+
$this->data['storage'] = get_class($metadataStorage);
46+
$configuration = $this->dependencyFactory->getConfiguration();
47+
$storage = $configuration->getMetadataStorageConfiguration();
48+
if ($storage instanceof TableMetadataStorageConfiguration) {
49+
$this->data['table'] = $storage->getTableName();
50+
$this->data['column'] = $storage->getVersionColumnName();
51+
}
11152

112-
public function getExecutedMigrations()
113-
{
114-
return $this->data['Executed Migrations'];
115-
}
53+
$connection = $this->dependencyFactory->getConnection();
54+
$this->data['driver'] = get_class($connection->getDriver());
55+
$this->data['name'] = $connection->getDatabase();
11656

117-
public function getExecutedUnavailableMigrations()
118-
{
119-
return $this->data['Executed Unavailable Migrations'];
57+
$this->data['namespaces'] = $configuration->getMigrationDirectories();
12058
}
12159

122-
public function getAvailableMigrations()
60+
public function getName()
12361
{
124-
return $this->data['Available Migrations'];
62+
return 'migrations';
12563
}
12664

127-
public function getNewMigrations()
65+
public function getData()
12866
{
129-
return $this->data['New Migrations'];
67+
return $this->data;
13068
}
13169

132-
public function getNewMigrationsList()
70+
public function reset()
13371
{
134-
return $this->data['newMigrationsList'];
72+
$this->data = [];
13573
}
13674

137-
public function getExecutedUnavailableMigrationsList()
138-
{
139-
return $this->data['executedUnavailableMigrationsList'];
75+
private function flattenExecutedMigrations(
76+
ExecutedMigrationsList $executedMigrations,
77+
AvailableMigrationsList $availableMigrations
78+
): array {
79+
return array_map(static function (ExecutedMigration $migration) use ($availableMigrations) {
80+
$version = $migration->getVersion();
81+
return [
82+
'version' => (string)$version,
83+
'executed_at' => $migration->getExecutedAt(),
84+
'execution_time' => $migration->getExecutionTime(),
85+
'description' => $availableMigrations->hasMigration($version)
86+
? $availableMigrations->getMigration($version)->getMigration()->getDescription() : null,
87+
];
88+
}, $executedMigrations->getItems());
14089
}
14190

142-
public function getDatabaseDriver()
143-
{
144-
return $this->data['Database Driver'];
145-
}
146-
public function getDatabaseName()
147-
{
148-
return $this->data['Database Name'];
149-
}
150-
public function getConfigurationSource()
151-
{
152-
return $this->data['Configuration Source'];
153-
}
154-
public function getVersionTableName()
155-
{
156-
return $this->data['Version Table Name'];
157-
}
158-
public function getVersionColumnName()
159-
{
160-
return $this->data['Version Column Name'];
161-
}
162-
public function getMigrationNamespace()
163-
{
164-
return $this->data['Migrations Namespace'];
165-
}
166-
public function getMigrationDirectory()
91+
private function flattenAvailableMigrations(AvailableMigrationsList $migrationsList): array
16792
{
168-
return $this->data['Migrations Directory'];
93+
return array_map(static function (AvailableMigration $migration) {
94+
return [
95+
'version' => (string)$migration->getVersion(),
96+
'description' => $migration->getMigration()->getDescription(),
97+
];
98+
}, $migrationsList->getItems());
16999
}
170100
}

DependencyInjection/Configuration.php

Lines changed: 0 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -25,17 +25,6 @@
2525
*/
2626
class Configuration implements ConfigurationInterface
2727
{
28-
/** @var bool */
29-
private $debug;
30-
31-
/**
32-
* @param bool $debug Whether to use the debug mode
33-
*/
34-
public function __construct(bool $debug)
35-
{
36-
$this->debug = $debug;
37-
}
38-
3928
/**
4029
* Generates the configuration tree.
4130
*
@@ -158,7 +147,6 @@ public function getConfigTreeBuilder(): TreeBuilder
158147
})
159148
->end()
160149
->end()
161-
->booleanNode('profiler_enabled')->defaultValue($this->debug)->end()
162150
->end();
163151

164152
return $treeBuilder;

DependencyInjection/DoctrineMigrationsExtension.php

Lines changed: 1 addition & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -40,7 +40,7 @@ class DoctrineMigrationsExtension extends Extension
4040
*/
4141
public function load(array $configs, ContainerBuilder $container): void
4242
{
43-
$configuration = $this->getConfiguration($configs, $container);
43+
$configuration = new Configuration();
4444

4545
$config = $this->processConfiguration($configuration, $configs);
4646

@@ -169,12 +169,4 @@ public function getNamespace(): string
169169
{
170170
return 'http://symfony.com/schema/dic/doctrine/migrations/3.0';
171171
}
172-
173-
/**
174-
* {@inheritDoc}
175-
*/
176-
public function getConfiguration(array $config, ContainerBuilder $container)
177-
{
178-
return new Configuration($container->getParameter('kernel.debug'));
179-
}
180172
}

Resources/config/services.xml

Lines changed: 2 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -142,12 +142,8 @@
142142
</service>
143143

144144
<service id="doctrine_migrations.migrations_collector" class="Doctrine\Bundle\MigrationsBundle\Collector\MigrationsCollector">
145-
<argument type="service" id="doctrine.dbal.default_connection"/>
146-
<argument>%doctrine_migrations.namespace%</argument>
147-
<argument>%doctrine_migrations.dir_name%</argument>
148-
<argument>%doctrine_migrations.table_name%</argument>
149-
<argument>%doctrine_migrations.name%</argument>
150-
<tag name="data_collector" template="DoctrineMigrationsBundle:Collector:migrations.html.twig" id="doctrine_bundle.migrations_collector" priority="249"/>
145+
<argument type="service" id="doctrine.migrations.dependency_factory"/>
146+
<tag name="data_collector" template="@DoctrineMigrations/Collector/migrations.html.twig" id="migrations" priority="249"/>
151147
</service>
152148
</services>
153149

0 commit comments

Comments
 (0)