‪TYPO3CMS  11.5
PersistenceManager.php
Go to the documentation of this file.
1 <?php
2 
3 /*
4  * This file is part of the TYPO3 CMS project.
5  *
6  * It is free software; you can redistribute it and/or modify it under
7  * the terms of the GNU General Public License, either version 2
8  * of the License, or any later version.
9  *
10  * For the full copyright and license information, please read the
11  * LICENSE.txt file that was distributed with this source code.
12  *
13  * The TYPO3 project - inspiring people to share!
14  */
15 
17 
23 
28 {
32  protected ‪$newObjects = [];
33 
37  protected ‪$changedObjects;
38 
42  protected ‪$addedObjects;
43 
47  protected ‪$removedObjects;
48 
52  protected ‪$queryFactory;
53 
57  protected ‪$backend;
58 
62  protected ‪$persistenceSession;
63 
71  public function ‪__construct(
75  ) {
76  $this->queryFactory = ‪$queryFactory;
77  $this->backend = ‪$backend;
78  $this->persistenceSession = ‪$persistenceSession;
79 
80  $this->addedObjects = new ‪ObjectStorage();
81  $this->removedObjects = new ‪ObjectStorage();
82  $this->changedObjects = new ‪ObjectStorage();
83  }
84 
91  public function ‪registerRepositoryClassName($className) {}
92 
99  public function ‪getObjectCountByQuery(‪QueryInterface $query)
100  {
101  return $this->backend->getObjectCountByQuery($query);
102  }
103 
110  public function ‪getObjectDataByQuery(‪QueryInterface $query)
111  {
112  return $this->backend->getObjectDataByQuery($query);
113  }
114 
126  public function ‪getIdentifierByObject($object)
127  {
128  return $this->backend->getIdentifierByObject($object);
129  }
130 
140  public function ‪getObjectByIdentifier($identifier, $objectType = null, $useLazyLoading = false)
141  {
142  if (isset($this->newObjects[$identifier])) {
143  return $this->newObjects[$identifier];
144  }
145  if ($this->persistenceSession->hasIdentifier($identifier, $objectType)) {
146  return $this->persistenceSession->getObjectByIdentifier($identifier, $objectType);
147  }
148  return $this->backend->getObjectByIdentifier($identifier, $objectType);
149  }
150 
155  public function ‪persistAll()
156  {
157  // hand in only aggregate roots, leaving handling of subobjects to
158  // the underlying storage layer
159  // reconstituted entities must be fetched from the session and checked
160  // for changes by the underlying backend as well!
161  $this->backend->setAggregateRootObjects($this->addedObjects);
162  $this->backend->setChangedEntities($this->changedObjects);
163  $this->backend->setDeletedEntities($this->removedObjects);
164  $this->backend->commit();
165 
166  $this->addedObjects = new ‪ObjectStorage();
167  $this->removedObjects = new ‪ObjectStorage();
168  $this->changedObjects = new ‪ObjectStorage();
169  }
170 
178  public function ‪createQueryForType($type)
179  {
180  return $this->queryFactory->create($type);
181  }
182 
188  public function ‪add($object)
189  {
190  $this->addedObjects->attach($object);
191  $this->removedObjects->detach($object);
192  }
193 
199  public function remove($object)
200  {
201  if ($this->addedObjects->contains($object)) {
202  $this->addedObjects->detach($object);
203  } else {
204  $this->removedObjects->attach($object);
205  }
206  }
207 
214  public function ‪update($object)
215  {
216  if ($this->‪isNewObject($object)) {
217  throw new ‪UnknownObjectException('The object of type "' . get_class($object) . '" given to update must be persisted already, but is new.', 1249479819);
218  }
219  $this->changedObjects->attach($object);
220  }
221 
226  public function ‪initializeObject()
227  {
228  $this->backend->setPersistenceManager($this);
229  }
230 
240  public function ‪clearState()
241  {
242  $this->newObjects = [];
243  $this->addedObjects = new ‪ObjectStorage();
244  $this->removedObjects = new ‪ObjectStorage();
245  $this->changedObjects = new ‪ObjectStorage();
246  $this->persistenceSession->destroy();
247  }
248 
255  public function ‪isNewObject($object)
256  {
257  return $this->persistenceSession->hasObject($object) === false;
258  }
259 
272  public function ‪registerNewObject($object)
273  {
274  $identifier = $this->‪getIdentifierByObject($object);
275  $this->newObjects[$identifier] = $object;
276  }
277 
285  public function ‪tearDown(): void
286  {
287  if (method_exists($this->backend, 'tearDown')) {
288  $this->backend->tearDown();
289  }
290  }
291 }
‪TYPO3\CMS\Extbase\Persistence\Generic\PersistenceManager\initializeObject
‪initializeObject()
Definition: PersistenceManager.php:219
‪TYPO3\CMS\Extbase\Persistence\Generic\PersistenceManager\getObjectDataByQuery
‪array getObjectDataByQuery(QueryInterface $query)
Definition: PersistenceManager.php:103
‪TYPO3\CMS\Extbase\Persistence\Generic\PersistenceManager\registerRepositoryClassName
‪registerRepositoryClassName($className)
Definition: PersistenceManager.php:84
‪TYPO3\CMS\Extbase\Persistence\Generic\PersistenceManager\getObjectCountByQuery
‪int getObjectCountByQuery(QueryInterface $query)
Definition: PersistenceManager.php:92
‪TYPO3\CMS\Extbase\Persistence\PersistenceManagerInterface
Definition: PersistenceManagerInterface.php:22
‪TYPO3\CMS\Extbase\Persistence\Generic\PersistenceManager\$changedObjects
‪ObjectStorage $changedObjects
Definition: PersistenceManager.php:35
‪TYPO3\CMS\Extbase\Persistence\Generic\PersistenceManager\registerNewObject
‪registerNewObject($object)
Definition: PersistenceManager.php:265
‪TYPO3\CMS\Extbase\Persistence\QueryInterface
Definition: QueryInterface.php:29
‪TYPO3\CMS\Extbase\Persistence\Generic\PersistenceManager\__construct
‪__construct(QueryFactoryInterface $queryFactory, BackendInterface $backend, Session $persistenceSession)
Definition: PersistenceManager.php:64
‪TYPO3\CMS\Extbase\Persistence\Generic\PersistenceManager\clearState
‪clearState()
Definition: PersistenceManager.php:233
‪TYPO3\CMS\Extbase\Persistence\Generic\PersistenceManager\$queryFactory
‪TYPO3 CMS Extbase Persistence Generic QueryFactoryInterface $queryFactory
Definition: PersistenceManager.php:47
‪TYPO3\CMS\Extbase\Persistence\Generic\PersistenceManager\isNewObject
‪bool isNewObject($object)
Definition: PersistenceManager.php:248
‪TYPO3\CMS\Extbase\Persistence\Generic\PersistenceManager\createQueryForType
‪QueryInterface createQueryForType($type)
Definition: PersistenceManager.php:171
‪TYPO3\CMS\Extbase\Persistence\Generic\PersistenceManager\$persistenceSession
‪TYPO3 CMS Extbase Persistence Generic Session $persistenceSession
Definition: PersistenceManager.php:55
‪TYPO3\CMS\Extbase\Persistence\Generic\PersistenceManager\getObjectByIdentifier
‪object getObjectByIdentifier($identifier, $objectType=null, $useLazyLoading=false)
Definition: PersistenceManager.php:133
‪TYPO3\CMS\Extbase\Persistence\ObjectStorage
Definition: ObjectStorage.php:32
‪TYPO3\CMS\Extbase\Persistence\Generic\PersistenceManager\$addedObjects
‪ObjectStorage $addedObjects
Definition: PersistenceManager.php:39
‪TYPO3\CMS\Extbase\Persistence\Generic\PersistenceManager\update
‪update($object)
Definition: PersistenceManager.php:207
‪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:28
‪TYPO3\CMS\Extbase\Persistence\Generic\Session
Definition: Session.php:27
‪TYPO3\CMS\Extbase\Persistence\Generic\PersistenceManager\$backend
‪TYPO3 CMS Extbase Persistence Generic BackendInterface $backend
Definition: PersistenceManager.php:51
‪TYPO3\CMS\Extbase\Persistence\Generic
Definition: Backend.php:16
‪TYPO3\CMS\Extbase\Persistence\Generic\PersistenceManager\persistAll
‪persistAll()
Definition: PersistenceManager.php:148
‪TYPO3\CMS\Extbase\Persistence\Exception\UnknownObjectException
Definition: UnknownObjectException.php:25
‪TYPO3\CMS\Extbase\Persistence\Generic\PersistenceManager\tearDown
‪tearDown()
Definition: PersistenceManager.php:278
‪TYPO3\CMS\Core\SingletonInterface
Definition: SingletonInterface.php:22
‪TYPO3\CMS\Extbase\Persistence\Generic\PersistenceManager\$removedObjects
‪ObjectStorage $removedObjects
Definition: PersistenceManager.php:43
‪TYPO3\CMS\Extbase\Persistence\Generic\PersistenceManager\$newObjects
‪array $newObjects
Definition: PersistenceManager.php:31
‪TYPO3\CMS\Extbase\Persistence\Generic\PersistenceManager\getIdentifierByObject
‪mixed getIdentifierByObject($object)
Definition: PersistenceManager.php:119
‪TYPO3\CMS\Extbase\Persistence\Generic\PersistenceManager\add
‪add($object)
Definition: PersistenceManager.php:181