Files
piratepoet/mailpoet/lib/Doctrine/ConnectionFactory.php
Jan Jakes ce526e84e0 Do not set MySQL platform autoamtically, enable auto-detection
This will enable correct detection of MySQL vs MariaDB platform in Doctrine,
as well as they particular versions, such as 5.7 or 8.4, etc.

[MAILPOET-6232]
2024-09-17 09:37:58 +02:00

60 lines
1.8 KiB
PHP

<?php // phpcs:ignore SlevomatCodingStandard.TypeHints.DeclareStrictTypes.DeclareStrictTypesMissing
namespace MailPoet\Doctrine;
use MailPoet\Doctrine\Middlewares\PostConnectMiddleware;
use MailPoet\Doctrine\Types\BigIntType;
use MailPoet\Doctrine\Types\DateTimeTzToStringType;
use MailPoet\Doctrine\Types\JsonOrSerializedType;
use MailPoet\Doctrine\Types\JsonType;
use MailPoet\Doctrine\Types\SerializedArrayType;
use MailPoet\Doctrine\WPDB\Driver as WPDBDriver;
use MailPoetVendor\Doctrine\DBAL\Configuration;
use MailPoetVendor\Doctrine\DBAL\Driver;
use MailPoetVendor\Doctrine\DBAL\Driver\Middleware;
use MailPoetVendor\Doctrine\DBAL\DriverManager;
use MailPoetVendor\Doctrine\DBAL\Types\Type;
class ConnectionFactory {
const DRIVER_CLASS = WPDBDriver::class;
private $types = [
BigIntType::NAME => BigIntType::class,
DateTimeTzToStringType::NAME => DateTimeTzToStringType::class,
JsonType::NAME => JsonType::class,
JsonOrSerializedType::NAME => JsonOrSerializedType::class,
SerializedArrayType::NAME => SerializedArrayType::class,
];
public function createConnection() {
$this->setupTypes();
return DriverManager::getConnection(
[
'driverClass' => self::DRIVER_CLASS,
],
$this->getConfiguration()
);
}
private function setupTypes() {
foreach ($this->types as $name => $class) {
if (Type::hasType($name)) {
Type::overrideType($name, $class);
} else {
Type::addType($name, $class);
}
}
}
private function getConfiguration(): Configuration {
$config = new Configuration();
$driverMiddleware = new class implements Middleware {
public function wrap(Driver $driver): Driver {
return new PostConnectMiddleware($driver);
}
};
$config->setMiddlewares([$driverMiddleware]);
return $config;
}
}