oont-contents/plugins/mailpoet/lib/Doctrine/ConnectionFactory.php
2025-02-08 15:10:23 +01:00

62 lines
1.8 KiB
PHP

<?php // phpcs:ignore SlevomatCodingStandard.TypeHints.DeclareStrictTypes.DeclareStrictTypesMissing
namespace MailPoet\Doctrine;
if (!defined('ABSPATH')) exit;
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;
}
}