PluginProbe ʕ •ᴥ•ʔ
MailPoet – Newsletters, Email Marketing, and Automation / 5.35.1
MailPoet – Newsletters, Email Marketing, and Automation v5.35.1
5.36.0 5.35.1 5.35.0 5.34.3 5.34.2 5.34.1 5.34.0 5.33.1 5.33.0 5.32.0 5.31.0 5.30.0 5.29.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 / vendor-prefixed / doctrine / orm / src / Utility / PersisterHelper.php
mailpoet / vendor-prefixed / doctrine / orm / src / Utility Last commit date
HierarchyDiscriminatorResolver.php 9 months ago IdentifierFlattener.php 9 months ago LockSqlHelper.php 9 months ago PersisterHelper.php 9 months ago index.php 9 months ago
PersisterHelper.php
145 lines
1 <?php
2 declare (strict_types=1);
3 namespace MailPoetVendor\Doctrine\ORM\Utility;
4 if (!defined('ABSPATH')) exit;
5 use BackedEnum;
6 use MailPoetVendor\Doctrine\DBAL\Connection;
7 use MailPoetVendor\Doctrine\DBAL\Types\Type;
8 use MailPoetVendor\Doctrine\ORM\EntityManagerInterface;
9 use MailPoetVendor\Doctrine\ORM\Mapping\ClassMetadata;
10 use MailPoetVendor\Doctrine\ORM\Proxy\DefaultProxyClassNameResolver;
11 use MailPoetVendor\Doctrine\ORM\Query\QueryException;
12 use RuntimeException;
13 use function array_map;
14 use function array_merge;
15 use function is_array;
16 use function is_object;
17 use function sprintf;
18 class PersisterHelper
19 {
20 public static function getTypeOfField($fieldName, ClassMetadata $class, EntityManagerInterface $em)
21 {
22 if (isset($class->fieldMappings[$fieldName])) {
23 return [$class->fieldMappings[$fieldName]['type']];
24 }
25 if (!isset($class->associationMappings[$fieldName])) {
26 return [];
27 }
28 $assoc = $class->associationMappings[$fieldName];
29 if (!$assoc['isOwningSide']) {
30 return self::getTypeOfField($assoc['mappedBy'], $em->getClassMetadata($assoc['targetEntity']), $em);
31 }
32 if ($assoc['type'] & ClassMetadata::MANY_TO_MANY) {
33 $joinData = $assoc['joinTable'];
34 } else {
35 $joinData = $assoc;
36 }
37 $types = [];
38 $targetClass = $em->getClassMetadata($assoc['targetEntity']);
39 foreach ($joinData['joinColumns'] as $joinColumn) {
40 $types[] = self::getTypeOfColumn($joinColumn['referencedColumnName'], $targetClass, $em);
41 }
42 return $types;
43 }
44 public static function getTypeOfColumn($columnName, ClassMetadata $class, EntityManagerInterface $em)
45 {
46 if (isset($class->fieldNames[$columnName])) {
47 $fieldName = $class->fieldNames[$columnName];
48 if (isset($class->fieldMappings[$fieldName])) {
49 return $class->fieldMappings[$fieldName]['type'];
50 }
51 }
52 // iterate over to-one association mappings
53 foreach ($class->associationMappings as $assoc) {
54 if (!isset($assoc['joinColumns'])) {
55 continue;
56 }
57 foreach ($assoc['joinColumns'] as $joinColumn) {
58 if ($joinColumn['name'] === $columnName) {
59 $targetColumnName = $joinColumn['referencedColumnName'];
60 $targetClass = $em->getClassMetadata($assoc['targetEntity']);
61 return self::getTypeOfColumn($targetColumnName, $targetClass, $em);
62 }
63 }
64 }
65 // iterate over to-many association mappings
66 foreach ($class->associationMappings as $assoc) {
67 if (!(isset($assoc['joinTable']) && isset($assoc['joinTable']['joinColumns']))) {
68 continue;
69 }
70 foreach ($assoc['joinTable']['joinColumns'] as $joinColumn) {
71 if ($joinColumn['name'] === $columnName) {
72 $targetColumnName = $joinColumn['referencedColumnName'];
73 $targetClass = $em->getClassMetadata($assoc['targetEntity']);
74 return self::getTypeOfColumn($targetColumnName, $targetClass, $em);
75 }
76 }
77 }
78 throw new RuntimeException(sprintf('Could not resolve type of column "%s" of class "%s"', $columnName, $class->getName()));
79 }
80 public static function inferParameterTypes(string $field, $value, ClassMetadata $class, EntityManagerInterface $em) : array
81 {
82 $types = [];
83 switch (\true) {
84 case isset($class->fieldMappings[$field]):
85 $types = array_merge($types, [$class->fieldMappings[$field]['type']]);
86 break;
87 case isset($class->associationMappings[$field]):
88 $assoc = $class->associationMappings[$field];
89 $class = $em->getClassMetadata($assoc['targetEntity']);
90 if (!$assoc['isOwningSide']) {
91 $assoc = $class->associationMappings[$assoc['mappedBy']];
92 $class = $em->getClassMetadata($assoc['targetEntity']);
93 }
94 $columns = $assoc['type'] === ClassMetadata::MANY_TO_MANY ? $assoc['relationToTargetKeyColumns'] : $assoc['sourceToTargetKeyColumns'];
95 foreach ($columns as $column) {
96 $types[] = self::getTypeOfColumn($column, $class, $em);
97 }
98 break;
99 default:
100 $types[] = null;
101 break;
102 }
103 if (is_array($value)) {
104 return array_map(static function ($type) {
105 $type = Type::getType($type);
106 return $type->getBindingType() + Connection::ARRAY_PARAM_OFFSET;
107 }, $types);
108 }
109 return $types;
110 }
111 public static function convertToParameterValue($value, EntityManagerInterface $em) : array
112 {
113 if (is_array($value)) {
114 $newValue = [];
115 foreach ($value as $itemValue) {
116 $newValue = array_merge($newValue, self::convertToParameterValue($itemValue, $em));
117 }
118 return [$newValue];
119 }
120 return self::convertIndividualValue($value, $em);
121 }
122 private static function convertIndividualValue($value, EntityManagerInterface $em) : array
123 {
124 if (!is_object($value)) {
125 return [$value];
126 }
127 if ($value instanceof BackedEnum) {
128 return [$value->value];
129 }
130 $valueClass = DefaultProxyClassNameResolver::getClass($value);
131 if ($em->getMetadataFactory()->isTransient($valueClass)) {
132 return [$value];
133 }
134 $class = $em->getClassMetadata($valueClass);
135 if ($class->isIdentifierComposite) {
136 $newValue = [];
137 foreach ($class->getIdentifierValues($value) as $innerValue) {
138 $newValue = array_merge($newValue, self::convertToParameterValue($innerValue, $em));
139 }
140 return $newValue;
141 }
142 return [$em->getUnitOfWork()->getSingleIdentifierValue($value)];
143 }
144 }
145