‪TYPO3CMS  ‪main
FileReference.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 
23 
36 {
44 
50  protected ‪$originalFile;
51 
59  protected ‪$mergedProperties = [];
60 
70  public function ‪__construct(array $fileReferenceData, $factory = null)
71  {
72  $this->propertiesOfFileReference = $fileReferenceData;
73  if (!$fileReferenceData['uid_local']) {
74  throw new \InvalidArgumentException('Incorrect reference to original file given for FileReference.', 1300098528);
75  }
76  $this->‪originalFile = $this->‪getFileObject((int)$fileReferenceData['uid_local'], $factory);
77  }
78 
83  private function ‪getFileObject(int $uidLocal, ‪ResourceFactory $factory = null): ‪FileInterface
84  {
85  if ($factory === null) {
86  $factory = GeneralUtility::makeInstance(ResourceFactory::class);
87  }
88  return $factory->getFileObject($uidLocal);
89  }
90 
91  /*******************************
92  * VARIOUS FILE PROPERTY GETTERS
93  *******************************/
99  public function ‪hasProperty(string $key): bool
100  {
101  return array_key_exists($key, $this->‪getProperties());
102  }
103 
110  public function ‪getProperty(string $key): mixed
111  {
112  if (!$this->‪hasProperty($key)) {
113  throw new \InvalidArgumentException('Property "' . $key . '" was not found in file reference or original file.', 1314226805);
114  }
115  $properties = $this->‪getProperties();
116  return $properties[$key];
117  }
118 
126  public function ‪getReferenceProperty($key)
127  {
128  if (!array_key_exists($key, $this->propertiesOfFileReference)) {
129  throw new \InvalidArgumentException('Property "' . $key . '" of file reference was not found.', 1360684914);
130  }
131  return $this->propertiesOfFileReference[$key];
132  }
133 
139  public function ‪getProperties()
140  {
141  if (empty($this->mergedProperties)) {
142  $this->mergedProperties = ‪$this->propertiesOfFileReference;
143  ArrayUtility::mergeRecursiveWithOverrule(
144  $this->mergedProperties,
146  true,
147  true,
148  false
149  );
150  array_walk($this->mergedProperties, [$this, 'restoreNonNullValuesCallback']);
151  }
152 
154  }
155 
162  protected function ‪restoreNonNullValuesCallback(&$value, $key)
163  {
164  if (array_key_exists($key, $this->propertiesOfFileReference) && $this->propertiesOfFileReference[$key] !== null) {
165  $value = $this->propertiesOfFileReference[$key];
166  }
167  }
168 
174  public function ‪getReferenceProperties()
175  {
177  }
178 
179  public function ‪getName(): string
180  {
181  return $this->‪originalFile->‪getName();
182  }
183 
191  public function ‪getTitle()
192  {
193  return (string)$this->‪getProperty('title');
194  }
195 
203  public function ‪getAlternative()
204  {
205  return (string)$this->‪getProperty('alternative');
206  }
207 
215  public function ‪getDescription()
216  {
217  return (string)$this->‪getProperty('description');
218  }
219 
227  public function ‪getLink()
228  {
229  return $this->propertiesOfFileReference['link'];
230  }
231 
237  public function ‪getUid()
238  {
239  return (int)$this->propertiesOfFileReference['uid'];
240  }
241 
245  public function ‪getSize(): int
246  {
247  return $this->‪originalFile->getSize();
248  }
249 
255  public function ‪getSha1(): string
256  {
257  return $this->‪originalFile->‪getSha1();
258  }
259 
265  public function ‪getExtension(): string
266  {
267  return $this->‪originalFile->‪getExtension();
268  }
269 
273  public function ‪getNameWithoutExtension(): string
274  {
276  }
277 
283  public function ‪getMimeType(): string
284  {
285  return $this->‪originalFile->‪getMimeType();
286  }
287 
291  public function ‪getModificationTime(): int
292  {
293  return (int)$this->‪originalFile->‪getModificationTime();
294  }
295 
299  public function ‪getCreationTime(): int
300  {
301  return (int)$this->‪originalFile->‪getCreationTime();
302  }
303 
309  public function ‪getType()
310  {
311  return (int)$this->‪originalFile->‪getType();
312  }
313 
319  public function ‪isMissing()
320  {
321  return (bool)$this->‪originalFile->‪getProperty('missing');
322  }
323 
324  /******************
325  * CONTENTS RELATED
326  ******************/
330  public function ‪getContents(): string
331  {
332  return $this->‪originalFile->‪getContents();
333  }
334 
341  public function ‪setContents(string $contents): self
342  {
343  $this->‪originalFile->‪setContents($contents);
344  return $this;
345  }
346 
347  /****************************************
348  * STORAGE AND MANAGEMENT RELATED METHODS
349  ****************************************/
353  public function ‪getStorage(): ResourceStorage
354  {
355  return $this->‪originalFile->‪getStorage();
356  }
357 
363  public function ‪getIdentifier(): string
364  {
365  return $this->‪originalFile->‪getIdentifier();
366  }
367 
373  public function ‪getCombinedIdentifier()
374  {
375  return $this->‪originalFile->‪getCombinedIdentifier();
376  }
377 
384  public function delete(): bool
385  {
386  // @todo Implement this function. This should only delete the
387  // FileReference (sys_file_reference) record, not the file itself.
388  throw new \BadMethodCallException('Function not implemented FileReference::delete().', 1333754461);
389  //return $this->fileRepository->removeUsageRecord($this);
390  }
391 
399  public function ‪rename(string $newName, $conflictMode = ‪DuplicationBehavior::RENAME): FileInterface
400  {
401  // @todo Implement this function. This should only rename the
402  // FileReference (sys_file_reference) record, not the file itself.
403  throw new \BadMethodCallException('Function not implemented FileReference::rename().', 1333754473);
404  //return $this->fileRepository->renameUsageRecord($this, $newName);
405  }
406 
407  /*****************
408  * SPECIAL METHODS
409  *****************/
418  public function ‪getPublicUrl(): ?string
419  {
420  return $this->‪originalFile->‪getPublicUrl();
421  }
422 
429  public function ‪isIndexed(): bool
430  {
431  return true;
432  }
433 
442  public function ‪getForLocalProcessing(bool $writable = true): string
443  {
444  return $this->‪originalFile->‪getForLocalProcessing($writable);
445  }
446 
453  public function toArray(): array
454  {
455  $array = array_merge($this->‪originalFile->toArray(), $this->propertiesOfFileReference);
456  return $array;
457  }
458 
464  public function getOriginalFile()
465  {
466  return ‪$this->originalFile;
467  }
468 
472  public function ‪getHashedIdentifier(): string
473  {
474  return $this->‪getStorage()->hashFileIdentifier($this->‪getIdentifier());
475  }
476 
477  public function ‪getParentFolder(): ‪FolderInterface
478  {
479  return $this->‪originalFile->‪getParentFolder();
480  }
481 
488  public function ‪__sleep(): array
489  {
490  $keys = get_object_vars($this);
491  unset($keys['originalFile'], $keys['mergedProperties']);
492  return array_keys($keys);
493  }
494 
495  public function ‪__wakeup(): void
496  {
497  $factory = GeneralUtility::makeInstance(ResourceFactory::class);
498  $this->‪originalFile = $this->‪getFileObject(
499  (int)$this->propertiesOfFileReference['uid_local'],
500  $factory
501  );
502  }
503 }
‪TYPO3\CMS\Core\Resource\FileReference\getAlternative
‪string getAlternative()
Definition: FileReference.php:200
‪TYPO3\CMS\Core\Resource\FileReference\getIdentifier
‪non empty string getIdentifier()
Definition: FileReference.php:360
‪TYPO3\CMS\Core\Resource\FileReference\getProperty
‪getProperty(string $key)
Definition: FileReference.php:107
‪TYPO3\CMS\Core\Resource\FileReference\getSha1
‪non empty string getSha1()
Definition: FileReference.php:252
‪TYPO3\CMS\Core\Resource\AbstractFile\getType
‪int getType()
Definition: AbstractFile.php:281
‪TYPO3\CMS\Core\Resource\FileReference\setContents
‪$this setContents(string $contents)
Definition: FileReference.php:338
‪TYPO3\CMS\Core\Resource\FileReference\$mergedProperties
‪array $mergedProperties
Definition: FileReference.php:56
‪TYPO3\CMS\Core\Resource\FileReference\$propertiesOfFileReference
‪array $propertiesOfFileReference
Definition: FileReference.php:42
‪TYPO3\CMS\Core\Resource\FileReference\originalFile
‪array< non-empty-string, function toArray():array { $array=array_merge( $this->originalFile->toArray(), $this->propertiesOfFileReference);return $array;} public File function getOriginalFile() { return $this-> originalFile
Definition: FileReference.php:463
‪TYPO3\CMS\Core\Resource\AbstractFile\getForLocalProcessing
‪non empty string getForLocalProcessing(bool $writable=true)
Definition: AbstractFile.php:576
‪TYPO3\CMS\Core\Resource\FileInterface
Definition: FileInterface.php:26
‪TYPO3\CMS\Core\Resource\FileReference\getNameWithoutExtension
‪getNameWithoutExtension()
Definition: FileReference.php:270
‪TYPO3\CMS\Core\Resource\AbstractFile\getParentFolder
‪getParentFolder()
Definition: AbstractFile.php:594
‪TYPO3\CMS\Core\Resource\File\getContents
‪getContents()
Definition: File.php:104
‪TYPO3\CMS\Core\Resource\FileReference\getDescription
‪string getDescription()
Definition: FileReference.php:212
‪TYPO3\CMS\Core\Resource\FileReference
Definition: FileReference.php:36
‪TYPO3\CMS\Core\Resource\FileReference\isMissing
‪bool isMissing()
Definition: FileReference.php:316
‪TYPO3\CMS\Core\Resource\AbstractFile\getExtension
‪getExtension()
Definition: AbstractFile.php:243
‪TYPO3\CMS\Core\Resource\AbstractFile\getName
‪getName()
Definition: AbstractFile.php:157
‪TYPO3\CMS\Core\Resource\FileReference\getForLocalProcessing
‪non empty string getForLocalProcessing(bool $writable=true)
Definition: FileReference.php:439
‪TYPO3\CMS\Core\Resource\FileReference\__sleep
‪string[] __sleep()
Definition: FileReference.php:485
‪TYPO3\CMS\Core\Resource\FileReference\getExtension
‪string getExtension()
Definition: FileReference.php:262
‪TYPO3\CMS\Core\Resource\FileReference\getPublicUrl
‪non empty string null getPublicUrl()
Definition: FileReference.php:415
‪TYPO3\CMS\Core\Resource\File\getProperty
‪getProperty(string $key)
Definition: File.php:62
‪TYPO3\CMS\Core\Resource\FileReference\getProperties
‪array getProperties()
Definition: FileReference.php:136
‪TYPO3\CMS\Core\Resource\FileReference\isIndexed
‪isIndexed()
Definition: FileReference.php:426
‪TYPO3\CMS\Core\Resource\FileReference\getMimeType
‪non empty string getMimeType()
Definition: FileReference.php:280
‪TYPO3\CMS\Core\Resource\FileReference\getContents
‪getContents()
Definition: FileReference.php:327
‪TYPO3\CMS\Core\Resource\FileReference\getLink
‪string getLink()
Definition: FileReference.php:224
‪TYPO3\CMS\Core\Resource\FileReference\getUid
‪int getUid()
Definition: FileReference.php:234
‪TYPO3\CMS\Core\Resource\File\getPublicUrl
‪getPublicUrl()
Definition: File.php:301
‪TYPO3\CMS\Core\Resource\File\getSha1
‪non empty string getSha1()
Definition: File.php:114
‪TYPO3\CMS\Core\Resource\FileReference\getType
‪int getType()
Definition: FileReference.php:306
‪TYPO3\CMS\Core\Resource\AbstractFile\getStorage
‪int< 0, getSize():int { if( $this->deleted) { throw new \RuntimeException( 'File has been deleted.', 1329821480);} if(empty( $this->properties[ 'size'])) { $fileInfo=$this-> getStorage() -> getFileInfoByIdentifier($this->getIdentifier(), ['size'])
‪TYPO3\CMS\Core\Resource\ResourceFactory
Definition: ResourceFactory.php:41
‪TYPO3\CMS\Core\Resource\DuplicationBehavior\RENAME
‪const RENAME
Definition: DuplicationBehavior.php:33
‪TYPO3\CMS\Core\Resource\Enum\DuplicationBehavior
‪DuplicationBehavior
Definition: DuplicationBehavior.php:28
‪TYPO3\CMS\Core\Resource\AbstractFile\getMimeType
‪non empty string getMimeType()
Definition: AbstractFile.php:257
‪TYPO3\CMS\Core\Resource\FileReference\getParentFolder
‪getParentFolder()
Definition: FileReference.php:474
‪TYPO3\CMS\Core\Resource\FileReference\getTitle
‪string getTitle()
Definition: FileReference.php:188
‪TYPO3\CMS\Core\Resource\File\getCombinedIdentifier
‪array< non-empty-string, toArray():array { $array=['id'=> $this getCombinedIdentifier()
‪TYPO3\CMS\Core\Resource\File\getProperties
‪getProperties()
Definition: File.php:87
‪TYPO3\CMS\Core\Resource\FileReference\getReferenceProperties
‪array getReferenceProperties()
Definition: FileReference.php:171
‪TYPO3\CMS\Core\Resource\FileReference\__wakeup
‪__wakeup()
Definition: FileReference.php:492
‪TYPO3\CMS\Core\Resource\AbstractFile\getCreationTime
‪getCreationTime()
Definition: AbstractFile.php:219
‪TYPO3\CMS\Core\Resource
Definition: generateMimeTypes.php:52
‪TYPO3\CMS\Core\Resource\FileReference\getSize
‪int< 0, getSize():int { return $this-> originalFile getSize()
‪TYPO3\CMS\Core\Resource\FileReference\getCreationTime
‪getCreationTime()
Definition: FileReference.php:296
‪TYPO3\CMS\Core\Resource\FileReference\getReferenceProperty
‪mixed getReferenceProperty($key)
Definition: FileReference.php:123
‪TYPO3\CMS\Core\Resource\FileReference\getHashedIdentifier
‪non empty string getHashedIdentifier()
Definition: FileReference.php:469
‪TYPO3\CMS\Core\Resource\FileReference\restoreNonNullValuesCallback
‪restoreNonNullValuesCallback(&$value, $key)
Definition: FileReference.php:159
‪TYPO3\CMS\Core\Resource\FileReference\__construct
‪__construct(array $fileReferenceData, $factory=null)
Definition: FileReference.php:67
‪TYPO3\CMS\Core\Resource\ResourceStorage
Definition: ResourceStorage.php:128
‪TYPO3\CMS\Core\Resource\File\setContents
‪$this setContents(string $contents)
Definition: File.php:127
‪TYPO3\CMS\Core\Utility\ArrayUtility
Definition: ArrayUtility.php:26
‪TYPO3\CMS\Core\Resource\AbstractFile\getNameWithoutExtension
‪getNameWithoutExtension()
Definition: AbstractFile.php:167
‪TYPO3\CMS\Core\Resource\FileReference\getName
‪getName()
Definition: FileReference.php:176
‪TYPO3\CMS\Core\Resource\FileReference\getFileObject
‪getFileObject(int $uidLocal, ResourceFactory $factory=null)
Definition: FileReference.php:80
‪TYPO3\CMS\Core\Resource\FolderInterface
Definition: FolderInterface.php:24
‪TYPO3\CMS\Core\Utility\GeneralUtility
Definition: GeneralUtility.php:51
‪TYPO3\CMS\Core\Resource\AbstractFile\getModificationTime
‪getModificationTime()
Definition: AbstractFile.php:232
‪TYPO3\CMS\Core\Resource\FileReference\getStorage
‪getStorage()
Definition: FileReference.php:350
‪TYPO3\CMS\Core\Resource\FileReference\getCombinedIdentifier
‪string getCombinedIdentifier()
Definition: FileReference.php:370
‪TYPO3\CMS\Core\Resource\AbstractFile\getIdentifier
‪getIdentifier()
Definition: AbstractFile.php:144
‪TYPO3\CMS\Core\Resource\FileReference\$originalFile
‪FileInterface $originalFile
Definition: FileReference.php:48
‪TYPO3\CMS\Core\Resource\FileReference\rename
‪rename(string $newName, $conflictMode=DuplicationBehavior::RENAME)
Definition: FileReference.php:396
‪TYPO3\CMS\Core\Resource\FileReference\hasProperty
‪hasProperty(string $key)
Definition: FileReference.php:96
‪TYPO3\CMS\Core\Resource\FileReference\getModificationTime
‪getModificationTime()
Definition: FileReference.php:288