PluginProbe ʕ •ᴥ•ʔ
MailPoet – Newsletters, Email Marketing, and Automation / 5.34.2
MailPoet – Newsletters, Email Marketing, and Automation v5.34.2
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 / symfony / validator / Mapping / ClassMetadata.php
mailpoet / vendor-prefixed / symfony / validator / Mapping Last commit date
Factory 1 year ago Loader 1 year ago AutoMappingStrategy.php 4 years ago CascadingStrategy.php 4 years ago ClassMetadata.php 1 year ago ClassMetadataInterface.php 4 years ago GenericMetadata.php 4 years ago GetterMetadata.php 1 year ago MemberMetadata.php 4 years ago MetadataInterface.php 4 years ago PropertyMetadata.php 5 months ago PropertyMetadataInterface.php 4 years ago TraversalStrategy.php 4 years ago index.php 3 years ago
ClassMetadata.php
263 lines
1 <?php
2 namespace MailPoetVendor\Symfony\Component\Validator\Mapping;
3 if (!defined('ABSPATH')) exit;
4 use MailPoetVendor\Symfony\Component\Validator\Constraint;
5 use MailPoetVendor\Symfony\Component\Validator\Constraints\Cascade;
6 use MailPoetVendor\Symfony\Component\Validator\Constraints\Composite;
7 use MailPoetVendor\Symfony\Component\Validator\Constraints\GroupSequence;
8 use MailPoetVendor\Symfony\Component\Validator\Constraints\Traverse;
9 use MailPoetVendor\Symfony\Component\Validator\Constraints\Valid;
10 use MailPoetVendor\Symfony\Component\Validator\Exception\ConstraintDefinitionException;
11 use MailPoetVendor\Symfony\Component\Validator\Exception\GroupDefinitionException;
12 class ClassMetadata extends GenericMetadata implements ClassMetadataInterface
13 {
14 public $name;
15 public $defaultGroup;
16 public $members = [];
17 public $properties = [];
18 public $getters = [];
19 public $groupSequence = [];
20 public $groupSequenceProvider = \false;
21 public $traversalStrategy = TraversalStrategy::IMPLICIT;
22 private $reflClass;
23 public function __construct(string $class)
24 {
25 $this->name = $class;
26 // class name without namespace
27 if (\false !== ($nsSep = \strrpos($class, '\\'))) {
28 $this->defaultGroup = \substr($class, $nsSep + 1);
29 } else {
30 $this->defaultGroup = $class;
31 }
32 }
33 public function __sleep()
34 {
35 $parentProperties = parent::__sleep();
36 // Don't store the cascading strategy. Classes never cascade.
37 unset($parentProperties[\array_search('cascadingStrategy', $parentProperties)]);
38 return \array_merge($parentProperties, ['getters', 'groupSequence', 'groupSequenceProvider', 'members', 'name', 'properties', 'defaultGroup']);
39 }
40 public function getClassName()
41 {
42 return $this->name;
43 }
44 public function getDefaultGroup()
45 {
46 return $this->defaultGroup;
47 }
48 public function addConstraint(Constraint $constraint)
49 {
50 $this->checkConstraint($constraint);
51 if ($constraint instanceof Traverse) {
52 if ($constraint->traverse) {
53 // If traverse is true, traversal should be explicitly enabled
54 $this->traversalStrategy = TraversalStrategy::TRAVERSE;
55 } else {
56 // If traverse is false, traversal should be explicitly disabled
57 $this->traversalStrategy = TraversalStrategy::NONE;
58 }
59 // The constraint is not added
60 return $this;
61 }
62 if ($constraint instanceof Cascade) {
63 if (\PHP_VERSION_ID < 70400) {
64 throw new ConstraintDefinitionException(\sprintf('The constraint "%s" requires PHP 7.4.', Cascade::class));
65 }
66 $this->cascadingStrategy = CascadingStrategy::CASCADE;
67 foreach ($this->getReflectionClass()->getProperties() as $property) {
68 if ($this->canCascade($property->getType())) {
69 $this->addPropertyConstraint($property->getName(), new Valid());
70 }
71 }
72 // The constraint is not added
73 return $this;
74 }
75 $constraint->addImplicitGroupName($this->getDefaultGroup());
76 parent::addConstraint($constraint);
77 return $this;
78 }
79 public function addPropertyConstraint(string $property, Constraint $constraint)
80 {
81 if (!isset($this->properties[$property])) {
82 $this->properties[$property] = new PropertyMetadata($this->getClassName(), $property);
83 $this->addPropertyMetadata($this->properties[$property]);
84 }
85 $constraint->addImplicitGroupName($this->getDefaultGroup());
86 $this->properties[$property]->addConstraint($constraint);
87 return $this;
88 }
89 public function addPropertyConstraints(string $property, array $constraints)
90 {
91 foreach ($constraints as $constraint) {
92 $this->addPropertyConstraint($property, $constraint);
93 }
94 return $this;
95 }
96 public function addGetterConstraint(string $property, Constraint $constraint)
97 {
98 if (!isset($this->getters[$property])) {
99 $this->getters[$property] = new GetterMetadata($this->getClassName(), $property);
100 $this->addPropertyMetadata($this->getters[$property]);
101 }
102 $constraint->addImplicitGroupName($this->getDefaultGroup());
103 $this->getters[$property]->addConstraint($constraint);
104 return $this;
105 }
106 public function addGetterMethodConstraint(string $property, string $method, Constraint $constraint)
107 {
108 if (!isset($this->getters[$property])) {
109 $this->getters[$property] = new GetterMetadata($this->getClassName(), $property, $method);
110 $this->addPropertyMetadata($this->getters[$property]);
111 }
112 $constraint->addImplicitGroupName($this->getDefaultGroup());
113 $this->getters[$property]->addConstraint($constraint);
114 return $this;
115 }
116 public function addGetterConstraints(string $property, array $constraints)
117 {
118 foreach ($constraints as $constraint) {
119 $this->addGetterConstraint($property, $constraint);
120 }
121 return $this;
122 }
123 public function addGetterMethodConstraints(string $property, string $method, array $constraints)
124 {
125 foreach ($constraints as $constraint) {
126 $this->addGetterMethodConstraint($property, $method, $constraint);
127 }
128 return $this;
129 }
130 public function mergeConstraints(self $source)
131 {
132 if ($source->isGroupSequenceProvider()) {
133 $this->setGroupSequenceProvider(\true);
134 }
135 foreach ($source->getConstraints() as $constraint) {
136 $this->addConstraint(clone $constraint);
137 }
138 foreach ($source->getConstrainedProperties() as $property) {
139 foreach ($source->getPropertyMetadata($property) as $member) {
140 $member = clone $member;
141 foreach ($member->getConstraints() as $constraint) {
142 if (\in_array($constraint::DEFAULT_GROUP, $constraint->groups, \true)) {
143 $member->constraintsByGroup[$this->getDefaultGroup()][] = $constraint;
144 }
145 $constraint->addImplicitGroupName($this->getDefaultGroup());
146 }
147 if ($member instanceof MemberMetadata && !$member->isPrivate($this->name)) {
148 $property = $member->getPropertyName();
149 $this->members[$property][] = $member;
150 if ($member instanceof PropertyMetadata && !isset($this->properties[$property])) {
151 $this->properties[$property] = $member;
152 } elseif ($member instanceof GetterMetadata && !isset($this->getters[$property])) {
153 $this->getters[$property] = $member;
154 }
155 } else {
156 $this->addPropertyMetadata($member);
157 }
158 }
159 }
160 }
161 public function hasPropertyMetadata(string $property)
162 {
163 return \array_key_exists($property, $this->members);
164 }
165 public function getPropertyMetadata(string $property)
166 {
167 return $this->members[$property] ?? [];
168 }
169 public function getConstrainedProperties()
170 {
171 return \array_keys($this->members);
172 }
173 public function setGroupSequence($groupSequence)
174 {
175 if ($this->isGroupSequenceProvider()) {
176 throw new GroupDefinitionException('Defining a static group sequence is not allowed with a group sequence provider.');
177 }
178 if (\is_array($groupSequence)) {
179 $groupSequence = new GroupSequence($groupSequence);
180 }
181 if (\in_array(Constraint::DEFAULT_GROUP, $groupSequence->groups, \true)) {
182 throw new GroupDefinitionException(\sprintf('The group "%s" is not allowed in group sequences.', Constraint::DEFAULT_GROUP));
183 }
184 if (!\in_array($this->getDefaultGroup(), $groupSequence->groups, \true)) {
185 throw new GroupDefinitionException(\sprintf('The group "%s" is missing in the group sequence.', $this->getDefaultGroup()));
186 }
187 $this->groupSequence = $groupSequence;
188 return $this;
189 }
190 public function hasGroupSequence()
191 {
192 return $this->groupSequence && \count($this->groupSequence->groups) > 0;
193 }
194 public function getGroupSequence()
195 {
196 return $this->groupSequence;
197 }
198 public function getReflectionClass()
199 {
200 if (!$this->reflClass) {
201 $this->reflClass = new \ReflectionClass($this->getClassName());
202 }
203 return $this->reflClass;
204 }
205 public function setGroupSequenceProvider(bool $active)
206 {
207 if ($this->hasGroupSequence()) {
208 throw new GroupDefinitionException('Defining a group sequence provider is not allowed with a static group sequence.');
209 }
210 if (!$this->getReflectionClass()->implementsInterface('MailPoetVendor\\Symfony\\Component\\Validator\\GroupSequenceProviderInterface')) {
211 throw new GroupDefinitionException(\sprintf('Class "%s" must implement GroupSequenceProviderInterface.', $this->name));
212 }
213 $this->groupSequenceProvider = $active;
214 }
215 public function isGroupSequenceProvider()
216 {
217 return $this->groupSequenceProvider;
218 }
219 public function getCascadingStrategy()
220 {
221 return $this->cascadingStrategy;
222 }
223 private function addPropertyMetadata(PropertyMetadataInterface $metadata)
224 {
225 $property = $metadata->getPropertyName();
226 $this->members[$property][] = $metadata;
227 }
228 private function checkConstraint(Constraint $constraint)
229 {
230 if (!\in_array(Constraint::CLASS_CONSTRAINT, (array) $constraint->getTargets(), \true)) {
231 throw new ConstraintDefinitionException(\sprintf('The constraint "%s" cannot be put on classes.', \get_debug_type($constraint)));
232 }
233 if ($constraint instanceof Composite) {
234 foreach ($constraint->getNestedConstraints() as $nestedConstraint) {
235 $this->checkConstraint($nestedConstraint);
236 }
237 }
238 }
239 private function canCascade(?\ReflectionType $type = null) : bool
240 {
241 if (null === $type) {
242 return \false;
243 }
244 if ($type instanceof \ReflectionIntersectionType) {
245 foreach ($type->getTypes() as $nestedType) {
246 if ($this->canCascade($nestedType)) {
247 return \true;
248 }
249 }
250 return \false;
251 }
252 if ($type instanceof \ReflectionUnionType) {
253 foreach ($type->getTypes() as $nestedType) {
254 if (!$this->canCascade($nestedType)) {
255 return \false;
256 }
257 }
258 return \true;
259 }
260 return $type instanceof \ReflectionNamedType && (\in_array($type->getName(), ['array', 'null'], \true) || \class_exists($type->getName()));
261 }
262 }
263