diff --git a/mailpoet/lib/Doctrine/ConnectionFactory.php b/mailpoet/lib/Doctrine/ConnectionFactory.php index f5da2d35a6..315167e82b 100644 --- a/mailpoet/lib/Doctrine/ConnectionFactory.php +++ b/mailpoet/lib/Doctrine/ConnectionFactory.php @@ -2,12 +2,16 @@ 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\Platforms\MySQLPlatform; use MailPoetVendor\Doctrine\DBAL\Types\Type; @@ -32,7 +36,7 @@ class ConnectionFactory { ]; $this->setupTypes(); - return DriverManager::getConnection($connectionParams); + return DriverManager::getConnection($connectionParams, $this->getConfiguration()); } private function setupTypes() { @@ -44,4 +48,15 @@ class ConnectionFactory { } } } + + 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; + } } diff --git a/mailpoet/lib/Doctrine/Middlewares/PostConnectMiddleware.php b/mailpoet/lib/Doctrine/Middlewares/PostConnectMiddleware.php new file mode 100644 index 0000000000..c86af99cf5 --- /dev/null +++ b/mailpoet/lib/Doctrine/Middlewares/PostConnectMiddleware.php @@ -0,0 +1,14 @@ +exec('SET time_zone = "+00:00"'); + return $connection; + } +} diff --git a/mailpoet/lib/Doctrine/WPDB/Connection.php b/mailpoet/lib/Doctrine/WPDB/Connection.php index 6b48b091f9..411746c1d0 100644 --- a/mailpoet/lib/Doctrine/WPDB/Connection.php +++ b/mailpoet/lib/Doctrine/WPDB/Connection.php @@ -18,11 +18,6 @@ class Connection implements ServerInfoAwareConnection { if (!$wpdb instanceof wpdb) { throw new ConnectionException('WPDB is not initialized.'); } - /** - * Ensure connection is in UTC timezone. - * We use timestamp columns and we expect to get UTC time - */ - $wpdb->query("SET time_zone = '+00:00'"); } public function prepare(string $sql): Statement { diff --git a/mailpoet/tests/integration/Doctrine/ConnectionFactoryTest.php b/mailpoet/tests/integration/Doctrine/ConnectionFactoryTest.php index 4c61221b0f..dc6d061288 100644 --- a/mailpoet/tests/integration/Doctrine/ConnectionFactoryTest.php +++ b/mailpoet/tests/integration/Doctrine/ConnectionFactoryTest.php @@ -3,10 +3,11 @@ namespace MailPoet\Test\Config; use MailPoet\Doctrine\ConnectionFactory; +use MailPoet\Doctrine\Middlewares\PostConnectMiddleware; use MailPoet\Doctrine\Types\JsonOrSerializedType; use MailPoet\Doctrine\Types\JsonType; -use MailPoet\Doctrine\WPDB\Driver as WPDBDriver; use MailPoetVendor\Doctrine\DBAL\Connection; +use MailPoetVendor\Doctrine\DBAL\Driver; use MailPoetVendor\Doctrine\DBAL\Platforms\MySQLPlatform; use MailPoetVendor\Doctrine\DBAL\Types\Type; @@ -16,7 +17,8 @@ class ConnectionFactoryTest extends \MailPoetTest { $connection = $connectionFactory->createConnection(); verify($connection)->instanceOf(Connection::class); - verify($connection->getDriver())->instanceOf(WPDBDriver::class); + verify($connection->getDriver())->instanceOf(Driver::class); + verify($connection->getDriver())->instanceOf(PostConnectMiddleware::class); verify($connection->getDatabasePlatform())->instanceOf(MySQLPlatform::class); verify(Type::getType(JsonType::NAME))->instanceOf(JsonType::class);