‪TYPO3CMS  11.5
MetaDataAspect.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 
22 
26 class ‪MetaDataAspect implements \ArrayAccess, \Countable, \Iterator
27 {
31  private ‪$file;
32 
36  private ‪$metaData = [];
37 
43  private ‪$loaded = false;
44 
48  private ‪$indexPosition = 0;
49 
55  public function ‪__construct(‪File ‪$file)
56  {
57  $this->file = ‪$file;
58  }
59 
67  public function ‪add(array ‪$metaData): self
68  {
69  $this->loaded = true;
70  $this->metaData = array_merge($this->metaData, ‪$metaData);
71 
72  return $this;
73  }
74 
80  public function get(): array
81  {
82  if (!$this->loaded) {
83  $this->loaded = true;
84  $this->metaData = $this->‪loadFromRepository();
85  }
86  return ‪$this->metaData;
87  }
88 
93  public function ‪offsetExists($offset): bool
94  {
95  return array_key_exists($offset, $this->get());
96  }
97 
103  #[\ReturnTypeWillChange]
104  public function ‪offsetGet($offset)
105  {
106  return $this->get()[$offset] ?? null;
107  }
108 
113  public function ‪offsetSet($offset, $value): void
114  {
115  $this->loaded = true;
116  $this->metaData[$offset] = $value;
117  }
118 
122  public function ‪offsetUnset($offset): void
123  {
124  $this->metaData[$offset] = null;
125  }
126 
130  public function ‪count(): int
131  {
132  return ‪count($this->get());
133  }
134 
138  public function ‪rewind(): void
139  {
140  $this->indexPosition = 0;
141  }
142 
149  #[\ReturnTypeWillChange]
150  public function ‪current()
151  {
152  $key = array_keys($this->metaData)[‪$this->indexPosition];
153  return $this->metaData[$key];
154  }
155 
161  public function ‪key(): string
162  {
163  return array_keys($this->metaData)[‪$this->indexPosition];
164  }
165 
169  public function ‪next(): void
170  {
172  }
173 
177  public function ‪valid(): bool
178  {
179  $key = array_keys($this->metaData)[‪$this->indexPosition] ?? '';
180  return array_key_exists($key, $this->metaData);
181  }
182 
188  public function ‪save(): void
189  {
190  $metaDataInDatabase = $this->‪loadFromRepository();
191  if ($metaDataInDatabase === []) {
192  $this->metaData = $this->‪getMetaDataRepository()->‪createMetaDataRecord($this->file->getUid(), $this->metaData);
193  } else {
194  $this->‪getMetaDataRepository()->‪update($this->file->getUid(), $this->metaData);
195  $this->metaData = array_merge($metaDataInDatabase, $this->metaData);
196  }
197  }
198 
204  public function remove(): void
205  {
206  $this->‪getMetaDataRepository()->‪removeByFileUid($this->file->getUid());
207  $this->metaData = [];
208  }
209 
213  protected function ‪getMetaDataRepository(): ‪MetaDataRepository
214  {
215  return GeneralUtility::makeInstance(MetaDataRepository::class);
216  }
217 
221  protected function ‪loadFromRepository(): array
222  {
223  return $this->‪getMetaDataRepository()->‪findByFileUid((int)$this->file->getUid());
224  }
225 }
‪TYPO3\CMS\Core\Resource\Index\MetaDataRepository
Definition: MetaDataRepository.php:41
‪TYPO3\CMS\Core\Resource\MetaDataAspect\valid
‪bool valid()
Definition: MetaDataAspect.php:173
‪TYPO3\CMS\Core\Resource\MetaDataAspect\offsetExists
‪bool offsetExists($offset)
Definition: MetaDataAspect.php:89
‪TYPO3\CMS\Core\Resource\Index\MetaDataRepository\findByFileUid
‪array findByFileUid($uid)
Definition: MetaDataRepository.php:103
‪TYPO3\CMS\Core\Resource\MetaDataAspect\offsetGet
‪mixed offsetGet($offset)
Definition: MetaDataAspect.php:100
‪TYPO3\CMS\Core\Resource\MetaDataAspect\getMetaDataRepository
‪MetaDataRepository getMetaDataRepository()
Definition: MetaDataAspect.php:209
‪TYPO3\CMS\Core\Resource\MetaDataAspect\count
‪int count()
Definition: MetaDataAspect.php:126
‪TYPO3\CMS\Core\Resource\MetaDataAspect\current
‪mixed current()
Definition: MetaDataAspect.php:146
‪TYPO3\CMS\Core\Resource\MetaDataAspect\save
‪save()
Definition: MetaDataAspect.php:184
‪TYPO3\CMS\Core\Resource\MetaDataAspect\loadFromRepository
‪array loadFromRepository()
Definition: MetaDataAspect.php:217
‪TYPO3\CMS\Core\Resource\Index\MetaDataRepository\removeByFileUid
‪removeByFileUid($fileUid)
Definition: MetaDataRepository.php:208
‪TYPO3\CMS\Core\Resource\MetaDataAspect\__construct
‪__construct(File $file)
Definition: MetaDataAspect.php:51
‪TYPO3\CMS\Core\Resource\MetaDataAspect
Definition: MetaDataAspect.php:27
‪TYPO3\CMS\Core\Resource\MetaDataAspect\add
‪self add(array $metaData)
Definition: MetaDataAspect.php:63
‪TYPO3\CMS\Core\Resource\MetaDataAspect\$loaded
‪bool $loaded
Definition: MetaDataAspect.php:40
‪TYPO3\CMS\Core\Resource\File
Definition: File.php:24
‪TYPO3\CMS\Core\Resource\MetaDataAspect\offsetUnset
‪offsetUnset($offset)
Definition: MetaDataAspect.php:118
‪TYPO3\CMS\Core\Resource\MetaDataAspect\offsetSet
‪offsetSet($offset, $value)
Definition: MetaDataAspect.php:109
‪TYPO3\CMS\Core\Resource
Definition: generateMimeTypes.php:52
‪TYPO3\CMS\Core\Resource\MetaDataAspect\$file
‪File $file
Definition: MetaDataAspect.php:30
‪TYPO3\CMS\Core\Resource\MetaDataAspect\$metaData
‪array $metaData
Definition: MetaDataAspect.php:34
‪TYPO3\CMS\Core\Resource\MetaDataAspect\$indexPosition
‪int $indexPosition
Definition: MetaDataAspect.php:44
‪TYPO3\CMS\Core\Resource\Index\MetaDataRepository\update
‪update($fileUid, array $data)
Definition: MetaDataRepository.php:171
‪TYPO3\CMS\Core\Resource\MetaDataAspect\next
‪next()
Definition: MetaDataAspect.php:165
‪TYPO3\CMS\Core\Utility\GeneralUtility
Definition: GeneralUtility.php:50
‪TYPO3\CMS\Core\Resource\MetaDataAspect\rewind
‪rewind()
Definition: MetaDataAspect.php:134
‪TYPO3\CMS\Core\Resource\MetaDataAspect\key
‪string key()
Definition: MetaDataAspect.php:157
‪TYPO3\CMS\Core\Resource\Index\MetaDataRepository\createMetaDataRecord
‪array createMetaDataRecord($fileUid, array $additionalFields=[])
Definition: MetaDataRepository.php:138