‪TYPO3CMS  ‪main
PersistenceManager.php
Go to the documentation of this file.
1 <?php
2 
3 declare(strict_types=1);
4 
5 /*
6  * This file is part of the TYPO3 CMS project.
7  *
8  * It is free software; you can redistribute it and/or modify it under
9  * the terms of the GNU General Public License, either version 2
10  * of the License, or any later version.
11  *
12  * For the full copyright and license information, please read the
13  * LICENSE.txt file that was distributed with this source code.
14  *
15  * The TYPO3 project - inspiring people to share!
16  */
17 
19 
25 
30 {
31  protected array ‪$newObjects = [];
38 
44  public function ‪__construct(
48  ) {
49  $this->queryFactory = ‪$queryFactory;
50  $this->backend = ‪$backend;
51  $this->persistenceSession = ‪$persistenceSession;
52 
53  $this->addedObjects = new ‪ObjectStorage();
54  $this->removedObjects = new ‪ObjectStorage();
55  $this->changedObjects = new ‪ObjectStorage();
56  }
57 
64  public function ‪registerRepositoryClassName(string $className): void {}
65 
69  public function ‪getObjectCountByQuery(‪QueryInterface $query): int
70  {
71  return $this->backend->getObjectCountByQuery($query);
72  }
73 
77  public function ‪getObjectDataByQuery(‪QueryInterface $query): array
78  {
79  return $this->backend->getObjectDataByQuery($query);
80  }
81 
92  public function ‪getIdentifierByObject(object $object): ?string
93  {
94  return $this->backend->getIdentifierByObject($object);
95  }
96 
104  public function ‪getObjectByIdentifier(string|int ‪$identifier, ?string $objectType = null, bool $useLazyLoading = false): ?object
105  {
106  if (isset($this->newObjects[‪$identifier])) {
107  return $this->newObjects[‪$identifier];
108  }
109  if ($this->persistenceSession->hasIdentifier((string)‪$identifier, $objectType)) {
110  return $this->persistenceSession->getObjectByIdentifier((string)‪$identifier, $objectType);
111  }
112  return $this->backend->getObjectByIdentifier((string)‪$identifier, $objectType);
113  }
114 
119  public function ‪persistAll(): void
120  {
121  // hand in only aggregate roots, leaving handling of subobjects to
122  // the underlying storage layer
123  // reconstituted entities must be fetched from the session and checked
124  // for changes by the underlying backend as well!
125  $this->backend->setAggregateRootObjects($this->addedObjects);
126  $this->backend->setChangedEntities($this->changedObjects);
127  $this->backend->setDeletedEntities($this->removedObjects);
128  $this->backend->commit();
129 
130  $this->addedObjects = new ‪ObjectStorage();
131  $this->removedObjects = new ‪ObjectStorage();
132  $this->changedObjects = new ‪ObjectStorage();
133  }
134 
144  public function ‪createQueryForType(string $type): ‪QueryInterface
145  {
146  return $this->queryFactory->create($type);
147  }
148 
154  public function ‪add(object $object): void
155  {
156  $this->addedObjects->attach($object);
157  $this->removedObjects->detach($object);
158  }
159 
165  public function remove(object $object): void
166  {
167  if ($this->addedObjects->contains($object)) {
168  $this->addedObjects->detach($object);
169  } else {
170  $this->removedObjects->attach($object);
171  }
172  }
173 
180  public function ‪update(object $object): void
181  {
182  if ($this->‪isNewObject($object)) {
183  throw new ‪UnknownObjectException('The object of type "' . get_class($object) . '" given to update must be persisted already, but is new.', 1249479819);
184  }
185  $this->changedObjects->attach($object);
186  }
187 
192  public function ‪initializeObject(): void
193  {
194  $this->backend->setPersistenceManager($this);
195  }
196 
206  public function ‪clearState(): void
207  {
208  $this->newObjects = [];
209  $this->addedObjects = new ‪ObjectStorage();
210  $this->removedObjects = new ‪ObjectStorage();
211  $this->changedObjects = new ‪ObjectStorage();
212  $this->persistenceSession->destroy();
213  }
214 
221  public function ‪isNewObject(object $object): bool
222  {
223  return $this->persistenceSession->hasObject($object) === false;
224  }
225 
239  public function ‪registerNewObject(object $object): void
240  {
241  ‪$identifier = $this->‪getIdentifierByObject($object);
242  $this->newObjects[‪$identifier] = $object;
243  }
244 
253  public function ‪tearDown(): void
254  {
255  if (method_exists($this->backend, 'tearDown')) {
256  $this->backend->tearDown();
257  }
258  }
259 }
‪TYPO3\CMS\Extbase\Persistence\Generic\PersistenceManager\initializeObject
‪initializeObject()
Definition: PersistenceManager.php:192
‪TYPO3\CMS\Extbase\Persistence\Generic\PersistenceManager\add
‪add(object $object)
Definition: PersistenceManager.php:154
‪TYPO3\CMS\Extbase\Persistence\Generic\PersistenceManager\update
‪update(object $object)
Definition: PersistenceManager.php:180
‪TYPO3\CMS\Extbase\Persistence\Generic\PersistenceManager\isNewObject
‪bool isNewObject(object $object)
Definition: PersistenceManager.php:221
‪TYPO3\CMS\Extbase\Persistence\PersistenceManagerInterface
Definition: PersistenceManagerInterface.php:24
‪TYPO3\CMS\Extbase\Persistence\Generic\PersistenceManager\$changedObjects
‪ObjectStorage $changedObjects
Definition: PersistenceManager.php:32
‪TYPO3\CMS\Extbase\Persistence\Generic\PersistenceManager\$persistenceSession
‪Session $persistenceSession
Definition: PersistenceManager.php:37
‪TYPO3\CMS\Extbase\Persistence\Generic\PersistenceManager\getObjectByIdentifier
‪object null getObjectByIdentifier(string|int $identifier, ?string $objectType=null, bool $useLazyLoading=false)
Definition: PersistenceManager.php:104
‪TYPO3\CMS\Extbase\Persistence\QueryInterface
Definition: QueryInterface.php:30
‪TYPO3\CMS\Extbase\Persistence\Generic\PersistenceManager\__construct
‪__construct(QueryFactoryInterface $queryFactory, BackendInterface $backend, Session $persistenceSession)
Definition: PersistenceManager.php:44
‪TYPO3\CMS\Extbase\Persistence\Generic\PersistenceManager\clearState
‪clearState()
Definition: PersistenceManager.php:206
‪TYPO3\CMS\Extbase\Persistence\Generic\PersistenceManager\registerRepositoryClassName
‪registerRepositoryClassName(string $className)
Definition: PersistenceManager.php:64
‪TYPO3\CMS\Extbase\Persistence\Generic\PersistenceManager\getObjectCountByQuery
‪getObjectCountByQuery(QueryInterface $query)
Definition: PersistenceManager.php:69
‪TYPO3\CMS\Extbase\Persistence\Generic\PersistenceManager\$backend
‪BackendInterface $backend
Definition: PersistenceManager.php:36
‪TYPO3\CMS\Extbase\Persistence\Generic\PersistenceManager\registerNewObject
‪registerNewObject(object $object)
Definition: PersistenceManager.php:239
‪TYPO3\CMS\Extbase\Persistence\ObjectStorage
Definition: ObjectStorage.php:34
‪TYPO3\CMS\Extbase\Persistence\Generic\PersistenceManager\$queryFactory
‪QueryFactoryInterface $queryFactory
Definition: PersistenceManager.php:35
‪TYPO3\CMS\Extbase\Persistence\Generic\PersistenceManager\$addedObjects
‪ObjectStorage $addedObjects
Definition: PersistenceManager.php:33
‪TYPO3\CMS\Extbase\Persistence\Generic\BackendInterface
Definition: BackendInterface.php:26
‪TYPO3\CMS\Extbase\Persistence\Generic\QueryFactoryInterface
Definition: QueryFactoryInterface.php:22
‪TYPO3\CMS\Extbase\Persistence\Generic\PersistenceManager
Definition: PersistenceManager.php:30
‪TYPO3\CMS\Extbase\Persistence\Generic\PersistenceManager\getObjectDataByQuery
‪getObjectDataByQuery(QueryInterface $query)
Definition: PersistenceManager.php:77
‪TYPO3\CMS\Extbase\Persistence\Generic\Session
Definition: Session.php:27
‪TYPO3\CMS\Extbase\Persistence\Generic
Definition: Backend.php:18
‪TYPO3\CMS\Extbase\Persistence\Generic\PersistenceManager\persistAll
‪persistAll()
Definition: PersistenceManager.php:119
‪TYPO3\CMS\Extbase\Persistence\Exception\UnknownObjectException
Definition: UnknownObjectException.php:25
‪TYPO3\CMS\Extbase\Persistence\Generic\PersistenceManager\tearDown
‪tearDown()
Definition: PersistenceManager.php:253
‪TYPO3\CMS\Core\SingletonInterface
Definition: SingletonInterface.php:22
‪TYPO3\CMS\Extbase\Persistence\Generic\PersistenceManager\$removedObjects
‪ObjectStorage $removedObjects
Definition: PersistenceManager.php:34
‪TYPO3\CMS\Extbase\Persistence\Generic\PersistenceManager\getIdentifierByObject
‪string null getIdentifierByObject(object $object)
Definition: PersistenceManager.php:92
‪TYPO3\CMS\Extbase\Persistence\Generic\PersistenceManager\$newObjects
‪array $newObjects
Definition: PersistenceManager.php:31
‪TYPO3\CMS\Webhooks\Message\$identifier
‪identifier readonly string $identifier
Definition: FileAddedMessage.php:37
‪TYPO3\CMS\Extbase\Persistence\Generic\PersistenceManager\createQueryForType
‪QueryInterface< T > createQueryForType(string $type)
Definition: PersistenceManager.php:144