PluginProbe ʕ •ᴥ•ʔ
MailPoet – Newsletters, Email Marketing, and Automation / 5.36.0
MailPoet – Newsletters, Email Marketing, and Automation v5.36.0
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 / Cache / Persister / Collection / AbstractCollectionPersister.php
mailpoet / vendor-prefixed / doctrine / orm / src / Cache / Persister / Collection Last commit date
AbstractCollectionPersister.php 9 months ago CachedCollectionPersister.php 9 months ago NonStrictReadWriteCachedCollectionPersister.php 9 months ago ReadOnlyCachedCollectionPersister.php 9 months ago ReadWriteCachedCollectionPersister.php 9 months ago index.php 9 months ago
AbstractCollectionPersister.php
159 lines
1 <?php
2 declare (strict_types=1);
3 namespace MailPoetVendor\Doctrine\ORM\Cache\Persister\Collection;
4 if (!defined('ABSPATH')) exit;
5 use MailPoetVendor\Doctrine\Common\Collections\Collection;
6 use MailPoetVendor\Doctrine\Common\Collections\Criteria;
7 use MailPoetVendor\Doctrine\Deprecations\Deprecation;
8 use MailPoetVendor\Doctrine\ORM\Cache\CollectionCacheKey;
9 use MailPoetVendor\Doctrine\ORM\Cache\CollectionHydrator;
10 use MailPoetVendor\Doctrine\ORM\Cache\EntityCacheKey;
11 use MailPoetVendor\Doctrine\ORM\Cache\Logging\CacheLogger;
12 use MailPoetVendor\Doctrine\ORM\Cache\Persister\Entity\CachedEntityPersister;
13 use MailPoetVendor\Doctrine\ORM\Cache\Region;
14 use MailPoetVendor\Doctrine\ORM\EntityManagerInterface;
15 use MailPoetVendor\Doctrine\ORM\Mapping\ClassMetadata;
16 use MailPoetVendor\Doctrine\ORM\Mapping\ClassMetadataFactory;
17 use MailPoetVendor\Doctrine\ORM\PersistentCollection;
18 use MailPoetVendor\Doctrine\ORM\Persisters\Collection\CollectionPersister;
19 use MailPoetVendor\Doctrine\ORM\Proxy\DefaultProxyClassNameResolver;
20 use MailPoetVendor\Doctrine\ORM\Query\FilterCollection;
21 use MailPoetVendor\Doctrine\ORM\UnitOfWork;
22 use function array_values;
23 use function assert;
24 use function count;
25 abstract class AbstractCollectionPersister implements CachedCollectionPersister
26 {
27 protected $uow;
28 protected $metadataFactory;
29 protected $persister;
30 protected $sourceEntity;
31 protected $targetEntity;
32 protected $association;
33 protected $queuedCache = [];
34 protected $region;
35 protected $regionName;
36 protected $filters;
37 protected $hydrator;
38 protected $cacheLogger;
39 public function __construct(CollectionPersister $persister, Region $region, EntityManagerInterface $em, array $association)
40 {
41 $configuration = $em->getConfiguration();
42 $cacheConfig = $configuration->getSecondLevelCacheConfiguration();
43 $cacheFactory = $cacheConfig->getCacheFactory();
44 $this->region = $region;
45 $this->persister = $persister;
46 $this->association = $association;
47 $this->filters = $em->getFilters();
48 $this->regionName = $region->getName();
49 $this->uow = $em->getUnitOfWork();
50 $this->metadataFactory = $em->getMetadataFactory();
51 $this->cacheLogger = $cacheConfig->getCacheLogger();
52 $this->hydrator = $cacheFactory->buildCollectionHydrator($em, $association);
53 $this->sourceEntity = $em->getClassMetadata($association['sourceEntity']);
54 $this->targetEntity = $em->getClassMetadata($association['targetEntity']);
55 }
56 public function getCacheRegion()
57 {
58 return $this->region;
59 }
60 public function getSourceEntityMetadata()
61 {
62 return $this->sourceEntity;
63 }
64 public function getTargetEntityMetadata()
65 {
66 return $this->targetEntity;
67 }
68 public function loadCollectionCache(PersistentCollection $collection, CollectionCacheKey $key)
69 {
70 $cache = $this->region->get($key);
71 if ($cache === null) {
72 return null;
73 }
74 return $this->hydrator->loadCacheEntry($this->sourceEntity, $key, $cache, $collection);
75 }
76 public function storeCollectionCache(CollectionCacheKey $key, $elements)
77 {
78 $associationMapping = $this->sourceEntity->associationMappings[$key->association];
79 $targetPersister = $this->uow->getEntityPersister($this->targetEntity->rootEntityName);
80 assert($targetPersister instanceof CachedEntityPersister);
81 $targetRegion = $targetPersister->getCacheRegion();
82 $targetHydrator = $targetPersister->getEntityHydrator();
83 // Only preserve ordering if association configured it
84 if (!(isset($associationMapping['indexBy']) && $associationMapping['indexBy'])) {
85 // Elements may be an array or a Collection
86 $elements = array_values($elements instanceof Collection ? $elements->getValues() : $elements);
87 }
88 $entry = $this->hydrator->buildCacheEntry($this->targetEntity, $key, $elements);
89 foreach ($entry->identifiers as $index => $entityKey) {
90 if ($targetRegion->contains($entityKey)) {
91 continue;
92 }
93 $class = $this->targetEntity;
94 $className = DefaultProxyClassNameResolver::getClass($elements[$index]);
95 if ($className !== $this->targetEntity->name) {
96 $class = $this->metadataFactory->getMetadataFor($className);
97 }
98 $entity = $elements[$index];
99 $entityEntry = $targetHydrator->buildCacheEntry($class, $entityKey, $entity);
100 $targetRegion->put($entityKey, $entityEntry);
101 }
102 $cached = $this->region->put($key, $entry);
103 if ($this->cacheLogger && $cached) {
104 $this->cacheLogger->collectionCachePut($this->regionName, $key);
105 }
106 }
107 public function contains(PersistentCollection $collection, $element)
108 {
109 return $this->persister->contains($collection, $element);
110 }
111 public function containsKey(PersistentCollection $collection, $key)
112 {
113 return $this->persister->containsKey($collection, $key);
114 }
115 public function count(PersistentCollection $collection)
116 {
117 $ownerId = $this->uow->getEntityIdentifier($collection->getOwner());
118 $key = new CollectionCacheKey($this->sourceEntity->rootEntityName, $this->association['fieldName'], $ownerId, $this->filters->getHash());
119 $entry = $this->region->get($key);
120 if ($entry !== null) {
121 return count($entry->identifiers);
122 }
123 return $this->persister->count($collection);
124 }
125 public function get(PersistentCollection $collection, $index)
126 {
127 return $this->persister->get($collection, $index);
128 }
129 public function slice(PersistentCollection $collection, $offset, $length = null)
130 {
131 return $this->persister->slice($collection, $offset, $length);
132 }
133 public function loadCriteria(PersistentCollection $collection, Criteria $criteria)
134 {
135 return $this->persister->loadCriteria($collection, $criteria);
136 }
137 protected function evictCollectionCache(PersistentCollection $collection)
138 {
139 Deprecation::trigger('doctrine/orm', 'https://github.com/doctrine/orm/pull/9512', 'The method %s() is deprecated and will be removed without replacement.');
140 $key = new CollectionCacheKey($this->sourceEntity->rootEntityName, $this->association['fieldName'], $this->uow->getEntityIdentifier($collection->getOwner()), $this->filters->getHash());
141 $this->region->evict($key);
142 if ($this->cacheLogger) {
143 $this->cacheLogger->collectionCachePut($this->regionName, $key);
144 }
145 }
146 protected function evictElementCache($targetEntity, $element)
147 {
148 Deprecation::trigger('doctrine/orm', 'https://github.com/doctrine/orm/pull/9512', 'The method %s() is deprecated and will be removed without replacement.');
149 $targetPersister = $this->uow->getEntityPersister($targetEntity);
150 assert($targetPersister instanceof CachedEntityPersister);
151 $targetRegion = $targetPersister->getCacheRegion();
152 $key = new EntityCacheKey($targetEntity, $this->uow->getEntityIdentifier($element));
153 $targetRegion->evict($key);
154 if ($this->cacheLogger) {
155 $this->cacheLogger->entityCachePut($targetRegion->getName(), $key);
156 }
157 }
158 }
159