PluginProbe ʕ •ᴥ•ʔ
MailPoet – Newsletters, Email Marketing, and Automation / 4.50.0
MailPoet – Newsletters, Email Marketing, and Automation v4.50.0
5.28.1 5.28.0 5.27.0 5.26.0 5.26.1 5.25.0 5.24.0 4.43.0 4.43.1 4.44.0 4.44.1 4.45.0 4.46.0 4.47.0 4.48.0 4.48.1 4.48.2 4.49.0 4.49.1 4.5.0 4.5.1 4.5.2 4.50.0 4.50.1 4.51.0 4.51.1 4.51.2 4.52.0 4.53.0 4.54.0 4.55.0 4.56.0 4.57.0 4.58.0 4.58.1 4.58.2 4.6.0 4.6.1 4.6.2 4.7.0 4.7.1 4.8.0 4.8.1 4.9.0 5.0.0 5.0.1 5.0.2 5.1.0 5.1.1 5.10.0 5.10.1 5.11.0 5.12.0 5.12.1 5.12.10 5.12.11 5.12.12 5.12.13 5.12.2 5.12.3 5.12.4 5.12.5 5.12.6 5.12.7 5.12.8 5.12.9 5.13.0 5.13.1 5.13.2 5.14.0 5.14.1 5.14.2 5.14.3 5.15.0 5.15.1 5.16.0 5.16.1 5.16.2 5.16.3 5.16.4 5.17.0 5.17.1 5.17.2 5.17.3 5.17.4 5.17.5 5.17.6 5.18.0 5.19.0 5.2.0 5.2.1 5.2.2 5.2.3 5.20.0 5.21.0 5.21.1 5.21.2 5.21.3 5.22.0 5.22.1 5.22.2 5.22.3 5.22.4 5.23.0 5.23.1 5.23.2 5.3.0 5.3.1 5.3.2 5.3.3 5.3.4 5.3.5 5.3.6 5.3.7 5.4.0 5.4.1 5.4.2 5.5.0 5.5.1 5.5.2 5.6.0 5.6.1 5.6.2 5.6.3 5.6.4 5.7.0 5.7.1 5.8.0 5.8.1 5.9.0 3.0.0-beta.15 3.7.1 3.0.0-beta.16 3.7.2 3.0.0-beta.17 3.7.3 3.0.0-beta.18 3.7.4 3.0.0-beta.19 3.7.5 3.0.0-beta.2 3.7.6 3.0.0-beta.20 3.7.8 3.0.0-beta.21 3.70.0 3.0.0-beta.22 3.71.0 3.0.0-beta.23 3.71.1 3.0.0-beta.23.1 3.71.2 3.0.0-beta.23.2 3.71.3 3.0.0-beta.24 3.72.0 3.0.0-beta.25 3.73.0 3.0.0-beta.26 3.73.1 3.0.0-beta.27 3.73.2 3.0.0-beta.28 3.74.0 3.0.0-beta.29 3.74.1 3.0.0-beta.3 3.74.2 3.0.0-beta.30 3.74.3 3.0.0-beta.31 3.75.0 3.0.0-beta.32 3.75.1 3.0.0-beta.33 3.76.0 3.0.0-beta.33.1 3.77.0 3.0.0-beta.34.0.0 3.77.1 3.0.0-beta.36.0.0 3.78.0 3.0.0-beta.36.0.1 3.79.0 3.0.0-beta.36.2.0 3.8 3.0.0-beta.36.3.0 3.8.1 3.0.0-beta.36.3.1 3.8.2 3.0.0-beta.37.0.0 3.8.3 3.0.0-beta.4 3.8.4 3.0.0-beta.5 3.8.5 3.0.0-beta.6 3.8.6 3.0.0-beta.7 3.80.0 3.0.0-beta.7.1 3.81.0 3.0.0-beta.8 3.82.0 3.0.0-beta.9 3.83.0 3.0.0-rc.1.0.0 3.84.0 3.0.0-rc.1.0.1 3.84.1 3.0.0-rc.1.0.2 3.85.0 3.0.0-rc.1.0.3 3.85.1 3.0.0-rc.1.0.4 3.86.0 3.0.0-rc.2.0.0 3.87.0 3.0.0-rc.2.0.1 3.87.1 3.0.0-rc.2.0.2 3.87.2 3.0.0-rc.2.0.3 3.88.0 3.0.1 3.88.1 3.0.2 3.88.2 3.0.3 3.89.0 3.0.4 3.89.1 3.0.5 3.89.2 3.0.6 3.89.3 3.0.7 3.89.4 3.0.8 3.9.0 3.0.9 3.9.1 3.1.0 3.90.0 3.10 3.90.1 3.10.1 3.90.2 3.100.0 3.91.0 3.100.1 3.91.1 3.100.2 3.92.0 3.101.0 3.92.1 3.101.1 3.93.0 3.102.0 3.93.1 3.102.1 3.94.0 3.103.0 3.95.0 3.103.1 3.95.1 3.11.0 3.96.0 3.11.1 3.96.1 3.11.2 3.97.0 3.11.3 3.98.0 3.11.4 3.98.1 3.11.5 3.99.0 3.12.0 3.99.1 3.12.1 4.0.0 3.13.0 4.0.1 3.14.0 4.1.0 3.14.1 4.1.1 3.15.0 4.10.0 3.16.0 4.11.0 3.16.1 4.11.1 3.16.2 4.12.0 3.16.3 4.12.1 3.17.0 4.12.2 3.17.1 4.13.0 3.17.2 4.14.0 3.18.0 4.15.0 3.18.1 4.16.0 3.18.2 4.17.0 3.19.0 4.17.1 3.19.1 4.18.0 3.19.2 4.18.1 3.19.3 4.19.0 3.2.0 4.2.0 3.2.1 4.20.0 3.2.2 4.20.1 3.2.3 4.20.2 3.2.4 4.21.0 3.2.5 4.22.0 3.20.0 4.22.1 3.21.0 4.22.2 3.21.1 4.23.0 3.22.0 4.24.0 3.23.0 4.25.0 3.23.1 4.26.0 3.23.2 4.26.1 3.24.0 4.27.0 3.25.0 4.28.0 3.25.1 4.29.0 3.26.0 4.3.0 3.26.1 4.3.1 3.27.0 4.30.0 3.28.0 4.31.0 3.29.0 4.31.1 3.3.0 4.32.0 3.3.1 4.33.0 3.3.2 4.34.0 3.3.3 4.35.0 3.3.4 4.35.1 3.3.5 4.36.0 3.3.6 4.37.0 3.30.0 4.38.0 3.31.0 4.39.0 3.31.1 4.4.0 3.32.0 4.40.0 3.32.1 4.41.0 3.32.2 4.41.1 3.33.0 4.41.2 3.34.0 4.41.3 3.34.1 4.42.0 3.34.2 4.42.1 3.34.3 3.34.4 3.35.0 3.35.1 3.35.3 3.35.4 3.36.0 3.37.0 3.37.1 3.37.2 3.37.3 3.38.0 3.38.1 3.39.0 3.39.1 3.39.2 3.4.0 3.4.1 3.4.2 3.4.3 3.4.4 3.40.0 3.40.1 3.41.0 3.41.1 3.41.2 3.42.0 3.42.1 3.42.2 3.42.3 3.43.0 3.43.1 3.44.0 3.45.0 3.45.1 3.46.0 3.46.1 3.46.10 3.46.11 3.46.12 3.46.13 3.46.14 3.46.2 3.46.3 3.46.4 3.46.5 3.46.6 3.46.7 3.46.8 3.46.9 3.47.0 3.47.1 3.47.10 3.47.11 3.47.2 3.47.3 3.47.5 3.47.6 3.47.7 3.47.9 3.48.0 3.48.1 3.49.0 3.49.1 3.5.0 3.5.1 3.50.0 3.51.0 3.51.1 3.51.2 3.52.0 3.53.0 3.54.0 3.54.1 3.54.2 3.54.3 3.55.0 3.55.1 3.56.0 3.56.1 3.56.2 3.57.0 3.57.1 3.58.0 3.59.0 3.59.1 3.59.2 3.6.0 3.6.1 3.6.2 3.6.3 3.6.4 3.6.5 3.6.6 3.6.7 3.60.0 3.60.1 3.60.10 3.60.11 3.60.12 3.60.2 3.60.3 3.60.4 3.60.6 3.60.7 3.60.8 3.60.9 3.61.0 3.62.0 3.62.1 3.63.0 3.64.0 3.64.1 3.64.2 3.64.3 3.65.0 trunk 3.65.1 3.0.0 3.66.0 3.0.0-beta.1 3.67.0 3.0.0-beta.10 3.67.1 3.0.0-beta.11 3.68.0 3.0.0-beta.12 3.69.0 3.0.0-beta.13 3.69.1 3.0.0-beta.14 3.7.0
mailpoet / lib / Doctrine / ConnectionFactory.php
mailpoet / lib / Doctrine Last commit date
Annotations 3 years ago EntityTraits 2 years ago EventListeners 2 years ago Types 3 years ago Validator 3 years ago ArrayCache.php 3 years ago CacheOnlyMappingDriver.php 3 years ago ConfigurationFactory.php 3 years ago ConnectionFactory.php 3 years ago EntityManagerFactory.php 2 years ago MetadataCache.php 2 years ago PSRArrayCache.php 3 years ago PSRCacheInvalidArgumentException.php 3 years ago PSRCacheItem.php 3 years ago PSRMetadataCache.php 3 years ago ProxyClassNameResolver.php 3 years ago Repository.php 2 years ago SerializableConnection.php 3 years ago TablePrefixMetadataFactory.php 2 years ago index.php 3 years ago
ConnectionFactory.php
103 lines
1 <?php // phpcs:ignore SlevomatCodingStandard.TypeHints.DeclareStrictTypes.DeclareStrictTypesMissing
2
3 namespace MailPoet\Doctrine;
4
5 if (!defined('ABSPATH')) exit;
6
7
8 use MailPoet\Config\Env;
9 use MailPoet\Doctrine\Types\BigIntType;
10 use MailPoet\Doctrine\Types\DateTimeTzToStringType;
11 use MailPoet\Doctrine\Types\JsonOrSerializedType;
12 use MailPoet\Doctrine\Types\JsonType;
13 use MailPoet\Doctrine\Types\SerializedArrayType;
14 use MailPoetVendor\Doctrine\DBAL\Driver\PDO\MySQL\Driver;
15 use MailPoetVendor\Doctrine\DBAL\DriverManager;
16 use MailPoetVendor\Doctrine\DBAL\Platforms\MySqlPlatform;
17 use MailPoetVendor\Doctrine\DBAL\Types\Type;
18 use PDO;
19
20 class ConnectionFactory {
21 const DRIVER = 'pdo_mysql';
22 const PLATFORM_CLASS = MySqlPlatform::class;
23
24 private $minWaitTimeout = 60;
25
26 private $types = [
27 BigIntType::NAME => BigIntType::class,
28 DateTimeTzToStringType::NAME => DateTimeTzToStringType::class,
29 JsonType::NAME => JsonType::class,
30 JsonOrSerializedType::NAME => JsonOrSerializedType::class,
31 SerializedArrayType::NAME => SerializedArrayType::class,
32 ];
33
34 public function createConnection() {
35 global $wpdb;
36 $platformClass = self::PLATFORM_CLASS;
37 $connectionParams = [
38 'wrapperClass' => SerializableConnection::class,
39 'driver' => self::DRIVER,
40 'driverClass' => Driver::class,
41 'platform' => new $platformClass,
42 'user' => Env::$dbUsername,
43 'password' => Env::$dbPassword,
44 'dbname' => Env::$dbName,
45 'driverOptions' => $this->getDriverOptions(Env::$dbTimezoneOffset, Env::$dbCharset, Env::$dbCollation),
46 ];
47
48 if (!empty(Env::$dbCharset)) {
49 $connectionParams['charset'] = Env::$dbCharset;
50 }
51
52 if (!empty(Env::$dbSocket)) {
53 $connectionParams['unix_socket'] = Env::$dbSocket;
54 } else {
55 $connectionParams['host'] = Env::$dbIsIpv6 ? ('[' . Env::$dbHost . ']') : Env::$dbHost;
56 if (!empty(Env::$dbPort)) {
57 $connectionParams['port'] = Env::$dbPort;
58 } else {
59 $connectionParams['port'] = $wpdb->get_var('SELECT @@port');
60 }
61 }
62
63 $this->setupTypes();
64 return DriverManager::getConnection($connectionParams);
65 }
66
67 private function getDriverOptions($timezoneOffset, $charset, $collation) {
68 $driverOptions = [
69 "@@session.time_zone = '$timezoneOffset'",
70 "@@session.sql_mode = REPLACE(
71 REPLACE(
72 REPLACE(@@sql_mode, 'ONLY_FULL_GROUP_BY', ''),
73 '_QUOTES', ''
74 ), 'ANSI', '')", // This is needed because ONLY_FULL_GROUP_BY mode in MariaDB is much more restrictive than in MySQL
75 // We need to use CONVERT for MySQL 8, Maria DB bug which triggers #1232 - Incorrect argument type to variable 'wait_timeout`
76 // https://stackoverflow.com/questions/35187378/mariadb-type-error-when-setting-session-variable
77 "@@session.wait_timeout = GREATEST(CONVERT(COALESCE(@@wait_timeout, 0), SIGNED), $this->minWaitTimeout)",
78 ];
79
80 if (!empty(Env::$dbCharset)) {
81 $driverOptions[] = "NAMES $charset" . (empty($collation) ? '' : " COLLATE $collation");
82 }
83
84 return [
85 PDO::MYSQL_ATTR_INIT_COMMAND => 'SET ' . implode(', ', $driverOptions),
86 // In PHP 8.1 was changed MySQL behavior that numbers are returned as native PHP types instead of strings. https://www.php.net/manual/en/migration81.incompatible.php
87 // We force the previous state due to the backward compatibility of the Idiorm.
88 // This can be removed when we drop Idiorm.
89 PDO::ATTR_STRINGIFY_FETCHES => true,
90 ];
91 }
92
93 private function setupTypes() {
94 foreach ($this->types as $name => $class) {
95 if (Type::hasType($name)) {
96 Type::overrideType($name, $class);
97 } else {
98 Type::addType($name, $class);
99 }
100 }
101 }
102 }
103