diff --git a/src/ContaoManager/Plugin.php b/src/ContaoManager/Plugin.php index 8f3664d8..30c07dce 100644 --- a/src/ContaoManager/Plugin.php +++ b/src/ContaoManager/Plugin.php @@ -13,7 +13,11 @@ use Contao\ManagerPlugin\Bundle\BundlePluginInterface; use Contao\ManagerPlugin\Bundle\Parser\ParserInterface; use Contao\ManagerPlugin\Config\ConfigPluginInterface; +use Contao\ManagerPlugin\Config\ContainerBuilder as PluginContainerBuilder; +use Contao\ManagerPlugin\Config\ExtensionPluginInterface; use Contao\ManagerPlugin\Routing\RoutingPluginInterface; +use Doctrine\DBAL\Exception\ConnectionException; +use Doctrine\DBAL\DriverManager; use Symfony\Component\Config\Loader\LoaderInterface; use Symfony\Component\Config\Loader\LoaderResolverInterface; use Symfony\Component\DependencyInjection\ContainerBuilder; @@ -27,7 +31,7 @@ * * @author Andreas Schempp */ -class Plugin implements BundlePluginInterface, ConfigPluginInterface, RoutingPluginInterface +class Plugin implements BundlePluginInterface, ConfigPluginInterface, RoutingPluginInterface, ExtensionPluginInterface { /** * @var string|null @@ -128,6 +132,48 @@ function (RouteCollection $carry, RouteCollection $item) { return $collection; } + /** + * {@inheritdoc} + */ + public function getExtensionConfig($extensionName, array $extensionConfigs, PluginContainerBuilder $container) + { + if ('doctrine' !== $extensionName) { + return $extensionConfigs; + } + + $params = []; + + foreach ($extensionConfigs as $extensionConfig) { + if (isset($extensionConfig['dbal']['connections']['default'])) { + $params = array_merge($params, $extensionConfig['dbal']['connections']['default']); + } + } + + $parameterBag = $container->getParameterBag(); + + foreach ($params as $key => $value) { + $params[$key] = $parameterBag->resolveValue($value); + } + + try { + $connection = DriverManager::getConnection($params); + $connection->connect(); + $connection->close(); + } catch (ConnectionException $e) { + $extensionConfigs[] = [ + 'dbal' => [ + 'connections' => [ + 'default' => [ + 'server_version' => '5.1', + ], + ], + ], + ]; + } + + return $extensionConfigs; + } + /** * Sets path to enable autoloading of legacy Contao modules. *