‪TYPO3CMS  ‪main
FileProvider.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 use TYPO3\CMS\Backend\Utility\BackendUtility;
32 
37 {
41  protected ‪$record;
42 
46  protected ‪$itemsConfiguration = [
47  'edit' => [
48  'label' => 'LLL:EXT:core/Resources/Private/Language/locallang_core.xlf:cm.editcontent',
49  'iconIdentifier' => 'actions-page-open',
50  'callbackAction' => 'editFile',
51  ],
52  'editMetadata' => [
53  'label' => 'LLL:EXT:core/Resources/Private/Language/locallang_core.xlf:cm.editMetadata',
54  'iconIdentifier' => 'actions-open',
55  'callbackAction' => 'editMetadata',
56  ],
57  'rename' => [
58  'label' => 'LLL:EXT:core/Resources/Private/Language/locallang_core.xlf:cm.rename',
59  'iconIdentifier' => 'actions-edit-rename',
60  'callbackAction' => 'renameFile',
61  ],
62  'upload' => [
63  'label' => 'LLL:EXT:core/Resources/Private/Language/locallang_core.xlf:cm.upload',
64  'iconIdentifier' => 'actions-edit-upload',
65  'callbackAction' => 'uploadFile',
66  ],
67  'new' => [
68  'label' => 'LLL:EXT:filelist/Resources/Private/Language/locallang.xlf:actions.create_folder',
69  'iconIdentifier' => 'actions-folder-add',
70  'callbackAction' => 'createFolder',
71  ],
72  'newFile' => [
73  'label' => 'LLL:EXT:filelist/Resources/Private/Language/locallang.xlf:actions.create_file',
74  'iconIdentifier' => 'actions-file-add',
75  'callbackAction' => 'createFile',
76  ],
77  'downloadFile' => [
78  'label' => 'LLL:EXT:filelist/Resources/Private/Language/locallang.xlf:download',
79  'iconIdentifier' => 'actions-download',
80  'callbackAction' => 'downloadFile',
81  ],
82  'downloadFolder' => [
83  'label' => 'LLL:EXT:filelist/Resources/Private/Language/locallang.xlf:download',
84  'iconIdentifier' => 'actions-download',
85  'callbackAction' => 'downloadFolder',
86  ],
87  'newFileMount' => [
88  'label' => 'LLL:EXT:core/Resources/Private/Language/locallang_core.xlf:cm.newFilemount',
89  'iconIdentifier' => 'mimetypes-x-sys_filemounts',
90  'callbackAction' => 'createFilemount',
91  ],
92  'info' => [
93  'label' => 'LLL:EXT:core/Resources/Private/Language/locallang_core.xlf:cm.info',
94  'iconIdentifier' => 'actions-document-info',
95  'callbackAction' => 'openInfoPopUp',
96  ],
97  'updateOnlineMedia' => [
98  'label' => 'LLL:EXT:filelist/Resources/Private/Language/locallang_mod_file_list.xlf:reloadMetadata',
99  'iconIdentifier' => 'actions-refresh',
100  'callbackAction' => 'updateOnlineMedia',
101  ],
102  'divider' => [
103  'type' => 'divider',
104  ],
105  'copy' => [
106  'label' => 'LLL:EXT:core/Resources/Private/Language/locallang_core.xlf:cm.copy',
107  'iconIdentifier' => 'actions-edit-copy',
108  'callbackAction' => 'copyFile',
109  ],
110  'copyRelease' => [
111  'label' => 'LLL:EXT:core/Resources/Private/Language/locallang_core.xlf:cm.copy',
112  'iconIdentifier' => 'actions-edit-copy-release',
113  'callbackAction' => 'copyReleaseFile',
114  ],
115  'cut' => [
116  'label' => 'LLL:EXT:core/Resources/Private/Language/locallang_core.xlf:cm.cut',
117  'iconIdentifier' => 'actions-edit-cut',
118  'callbackAction' => 'cutFile',
119  ],
120  'cutRelease' => [
121  'label' => 'LLL:EXT:core/Resources/Private/Language/locallang_core.xlf:cm.cutrelease',
122  'iconIdentifier' => 'actions-edit-cut-release',
123  'callbackAction' => 'cutReleaseFile',
124  ],
125  'pasteInto' => [
126  'label' => 'LLL:EXT:core/Resources/Private/Language/locallang_core.xlf:cm.pasteinto',
127  'iconIdentifier' => 'actions-document-paste-into',
128  'callbackAction' => 'pasteFileInto',
129  ],
130  'divider2' => [
131  'type' => 'divider',
132  ],
133  'delete' => [
134  'label' => 'LLL:EXT:core/Resources/Private/Language/locallang_core.xlf:cm.delete',
135  'iconIdentifier' => 'actions-edit-delete',
136  'callbackAction' => 'deleteFile',
137  ],
138  ];
139 
140  public function ‪canHandle(): bool
141  {
142  return $this->table === 'sys_file';
143  }
144 
148  protected function ‪initialize()
149  {
150  parent::initialize();
151  try {
152  $this->record = GeneralUtility::makeInstance(ResourceFactory::class)->retrieveFileOrFolderObject($this->identifier);
153  } catch (ResourceDoesNotExistException $e) {
154  $this->record = null;
155  }
156  }
157 
161  protected function ‪canRender(string $itemName, string $type): bool
162  {
163  if (in_array($type, ['divider', 'submenu'], true)) {
164  return true;
165  }
166  if (in_array($itemName, $this->disabledItems, true)) {
167  return false;
168  }
169  $canRender = false;
170  switch ($itemName) {
171  //just for files
172  case 'edit':
173  $canRender = $this->‪canBeEdited();
174  break;
175  case 'editMetadata':
176  $canRender = $this->‪canEditMetadata();
177  break;
178  case 'updateOnlineMedia':
179  $canRender = $this->‪isOnlineMedia() && $this->‪canEditMetadata();
180  break;
181  case 'info':
182  $canRender = $this->‪canShowInfo();
183  break;
184 
185  // just for folders
186  case 'new':
187  case 'newFile':
188  case 'upload':
189  $canRender = $this->‪canCreateNew();
190  break;
191  case 'newFileMount':
192  $canRender = $this->‪canCreateNewFilemount();
193  break;
194  case 'pasteInto':
195  $canRender = $this->‪canBePastedInto();
196  break;
197 
198  //for both files and folders
199  case 'rename':
200  $canRender = $this->‪canBeRenamed();
201  break;
202  case 'copy':
203  $canRender = $this->‪canBeCopied();
204  break;
205  case 'copyRelease':
206  $canRender = $this->‪isRecordInClipboard('copy');
207  break;
208  case 'cut':
209  $canRender = $this->‪canBeCut();
210  break;
211  case 'cutRelease':
212  $canRender = $this->‪isRecordInClipboard('cut');
213  break;
214  case 'downloadFile':
215  $canRender = $this->‪isFile() && $this->‪canBeDownloaded();
216  break;
217  case 'downloadFolder':
218  $canRender = $this->‪isFolder() && $this->‪canBeDownloaded();
219  break;
220  case 'delete':
221  $canRender = $this->‪canBeDeleted();
222  break;
223  }
224  return $canRender;
225  }
226 
227  protected function ‪canBeEdited(): bool
228  {
229  return $this->‪isFile()
230  && $this->record->checkActionPermission('write')
231  && $this->record->isTextFile();
232  }
233 
234  protected function ‪canEditMetadata(): bool
235  {
236  return $this->‪isFile()
237  && $this->record->isIndexed()
238  && $this->record->checkActionPermission('editMeta')
239  && $this->record->getMetaData()->offsetExists('uid')
240  && $this->backendUser->check('tables_modify', 'sys_file_metadata');
241  }
242 
243  protected function ‪canBeRenamed(): bool
244  {
245  return $this->record->checkActionPermission('rename');
246  }
247 
248  protected function ‪canBeDeleted(): bool
249  {
250  return $this->record->checkActionPermission('delete');
251  }
252 
253  protected function ‪canShowInfo(): bool
254  {
255  return $this->‪isFile();
256  }
257 
258  protected function ‪canCreateNew(): bool
259  {
260  return $this->‪isFolder() && $this->record->checkActionPermission('write');
261  }
262 
266  protected function ‪canCreateNewFilemount(): bool
267  {
268  return $this->‪isFolder() && $this->record->checkActionPermission('read') && $this->backendUser->isAdmin();
269  }
270 
271  protected function ‪canBeCopied(): bool
272  {
273  return $this->record->checkActionPermission('read') && $this->record->checkActionPermission('copy') && !$this->‪isRecordInClipboard('copy');
274  }
275 
276  protected function ‪canBeCut(): bool
277  {
278  return $this->record->checkActionPermission('move') && !$this->‪isRecordInClipboard('cut');
279  }
280 
281  protected function ‪canBePastedInto(): bool
282  {
283  $elArr = $this->clipboard->elFromTable('_FILE');
284  if (empty($elArr)) {
285  return false;
286  }
287  $selItem = reset($elArr);
288  $fileOrFolderInClipBoard = GeneralUtility::makeInstance(ResourceFactory::class)->retrieveFileOrFolderObject($selItem);
289 
290  return $this->‪isFolder()
291  && $this->record->checkActionPermission('write')
292  && (
293  !$fileOrFolderInClipBoard instanceof ‪Folder
294  || !$fileOrFolderInClipBoard->‪getStorage()->isWithinFolder($fileOrFolderInClipBoard, $this->record)
295  )
296  && $this->‪isFoldersAreInTheSameRoot($fileOrFolderInClipBoard);
297  }
298 
299  protected function ‪canBeDownloaded(): bool
300  {
301  if (!$this->record->checkActionPermission('read')) {
302  // Early return if no read access
303  return false;
304  }
305 
306  $fileDownloadConfiguration = (array)($this->backendUser->getTSConfig()['options.']['file_list.']['fileDownload.'] ?? []);
307  if (!($fileDownloadConfiguration['enabled'] ?? true)) {
308  // File download is disabled
309  return false;
310  }
311 
312  if ($fileDownloadConfiguration === [] || $this->‪isFolder()) {
313  // In case no configuration exists, or we deal with a folder, download is allowed at this point
314  return true;
315  }
316 
317  // Initialize file extension filter
318  $filter = GeneralUtility::makeInstance(FileExtensionFilter::class);
319  $filter->setAllowedFileExtensions(
320  ‪GeneralUtility::trimExplode(',', (string)($fileDownloadConfiguration['allowedFileExtensions'] ?? ''), true)
321  );
322  $filter->setDisallowedFileExtensions(
323  ‪GeneralUtility::trimExplode(',', (string)($fileDownloadConfiguration['disallowedFileExtensions'] ?? ''), true)
324  );
325  return $filter->isAllowed($this->record->getExtension());
326  }
327 
328  protected function ‪isOnlineMedia(): bool
329  {
330  return $this->‪isFile()
331  && GeneralUtility::makeInstance(OnlineMediaHelperRegistry::class)->hasOnlineMediaHelper($this->record->getExtension());
332  }
333 
340  protected function ‪isFoldersAreInTheSameRoot($fileOrFolderInClipBoard): bool
341  {
342  return (!$fileOrFolderInClipBoard instanceof ‪Folder)
343  || (
344  $this->record->getStorage()->getRootLevelFolder()->getCombinedIdentifier()
345  == $fileOrFolderInClipBoard->getStorage()->getRootLevelFolder()->getCombinedIdentifier()
346  );
347  }
348 
354  protected function ‪isRecordInClipboard(string $mode = ''): bool
355  {
356  if ($mode !== '' && !$this->record->checkActionPermission($mode)) {
357  return false;
358  }
359  $isSelected = '';
360  // Pseudo table name for use in the clipboard.
361  ‪$table = '_FILE';
362  ‪$uid = md5($this->record->getCombinedIdentifier());
363  if ($this->clipboard->current === 'normal') {
364  $isSelected = $this->clipboard->isSelected(‪$table, ‪$uid);
365  }
366  return $mode === '' ? !empty($isSelected) : $isSelected === $mode;
367  }
368 
369  protected function ‪isStorageRoot(): bool
370  {
371  return $this->record->getIdentifier() === $this->record->getStorage()->getRootLevelFolder()->getIdentifier();
372  }
373 
374  protected function ‪isFile(): bool
375  {
376  return $this->record instanceof ‪File;
377  }
378 
379  protected function ‪isFolder(): bool
380  {
381  return $this->record instanceof ‪Folder;
382  }
383 
384  protected function ‪getAdditionalAttributes(string $itemName): array
385  {
386  $attributes = [
387  'data-callback-module' => '@typo3/filelist/context-menu-actions',
388  ];
389  if ($itemName === 'delete' && $this->backendUser->jsConfirmation(‪JsConfirmation::DELETE)) {
390  $title = $this->languageService->sL('LLL:EXT:core/Resources/Private/Language/locallang_core.xlf:cm.delete');
391  if ($this->‪isFolder()) {
392  $attributes += [
393  'data-button-close-text' => $this->languageService->sL('LLL:EXT:backend/Resources/Private/Language/locallang_alt_doc.xlf:buttons.confirm.delete_folder.no'),
394  'data-button-ok-text' => $this->languageService->sL('LLL:EXT:backend/Resources/Private/Language/locallang_alt_doc.xlf:buttons.confirm.delete_folder.yes'),
395  ];
396  }
397  if ($this->‪isFile()) {
398  $attributes += [
399  'data-button-close-text' => $this->languageService->sL('LLL:EXT:backend/Resources/Private/Language/locallang_alt_doc.xlf:buttons.confirm.delete_file.no'),
400  'data-button-ok-text' => $this->languageService->sL('LLL:EXT:backend/Resources/Private/Language/locallang_alt_doc.xlf:buttons.confirm.delete_file.yes'),
401  ];
402  }
403  $recordInfo = ‪GeneralUtility::fixed_lgd_cs($this->record->getName(), (int)($this->backendUser->uc['titleLen'] ?? 0));
404  if ($this->‪isFolder()) {
405  if ($this->backendUser->shallDisplayDebugInformation()) {
406  $recordInfo .= ' [' . $this->record->getIdentifier() . ']';
407  }
408  $confirmMessage = sprintf(
409  $this->languageService->sL('LLL:EXT:core/Resources/Private/Language/locallang_core.xlf:mess.delete'),
410  trim($recordInfo)
411  ) . BackendUtility::referenceCount(
412  '_FILE',
413  $this->record->getIdentifier(),
414  LF . $this->languageService->sL('LLL:EXT:core/Resources/Private/Language/locallang_core.xlf:labels.referencesToFolder')
415  );
416  } else {
417  if ($this->backendUser->shallDisplayDebugInformation()) {
418  $recordInfo .= ' [sys_file:' . $this->record->getUid() . ']';
419  }
420  $confirmMessage = sprintf(
421  $this->languageService->sL('LLL:EXT:core/Resources/Private/Language/locallang_core.xlf:mess.delete'),
422  trim($recordInfo)
423  ) . BackendUtility::referenceCount(
424  'sys_file',
425  (string)$this->record->getUid(),
426  LF . $this->languageService->sL('LLL:EXT:core/Resources/Private/Language/locallang_core.xlf:labels.referencesToFile')
427  );
428  }
429  $attributes += [
430  'data-title' => $title,
431  'data-message' => $confirmMessage,
432  ];
433  }
434  if ($itemName === 'new' && $this->‪isFolder()) {
435  $attributes += [
436  'data-identifier' => $this->record->getCombinedIdentifier(),
437  'data-mode' => ‪CreateFolderBrowser::IDENTIFIER,
438  ];
439  }
440  if ($itemName === 'pasteInto' && $this->backendUser->jsConfirmation(‪JsConfirmation::COPY_MOVE_PASTE)) {
441  $elArr = $this->clipboard->elFromTable('_FILE');
442  $selItem = reset($elArr);
443  $fileOrFolderInClipBoard = GeneralUtility::makeInstance(ResourceFactory::class)->retrieveFileOrFolderObject($selItem);
444 
445  $title = $this->languageService->sL('LLL:EXT:core/Resources/Private/Language/locallang_mod_web_list.xlf:clip_paste');
446 
447  $confirmMessage = sprintf(
448  $this->languageService->sL('LLL:EXT:core/Resources/Private/Language/locallang_core.xlf:mess.'
449  . ($this->clipboard->currentMode() === 'copy' ? 'copy' : 'move') . '_into'),
450  $fileOrFolderInClipBoard->getName(),
451  $this->record->getName()
452  );
453  $closeText = $this->languageService->sL('LLL:EXT:core/Resources/Private/Language/locallang_mod_web_list.xlf:button.cancel');
454  $okLabel = $this->clipboard->currentMode() === 'copy' ? 'copy' : 'pasteinto';
455  $okText = $this->languageService->sL('LLL:EXT:core/Resources/Private/Language/locallang_core.xlf:cm.' . $okLabel);
456  $attributes += [
457  'data-title' => $title,
458  'data-message' => $confirmMessage,
459  'data-button-close-text' => $closeText,
460  'data-button-ok-text' => $okText,
461  ];
462  }
463  if ($itemName === 'downloadFile') {
464  $attributes += [
465  'data-url' => (string)$this->record->getPublicUrl(),
466  'data-name' => $this->record->getName(),
467  ];
468  }
469 
470  // Resource Settings
471  $attributes['data-filecontext-type'] = $this->record instanceof File ? 'file' : 'folder';
472  $attributes['data-filecontext-identifier'] = $this->‪getIdentifier();
473  $attributes['data-filecontext-name'] = $this->record->getName();
474  $attributes['data-filecontext-uid'] = $this->record instanceof File ? $this->record->getUid() : '';
475  $attributes['data-filecontext-meta-uid'] = $this->record instanceof File ? $this->record->getMetaData()->offsetGet('uid') : '';
476 
477  // Add action url for file operations
478  $uriBuilder = GeneralUtility::makeInstance(UriBuilder::class);
479  switch ($itemName) {
480  case 'downloadFolder':
481  $attributes['data-action-url'] = (string)$uriBuilder->buildUriFromRoute('file_download');
482  break;
483  case 'edit':
484  $attributes['data-action-url'] = (string)$uriBuilder->buildUriFromRoute('file_edit');
485  break;
486  case 'upload':
487  $attributes['data-action-url'] = (string)$uriBuilder->buildUriFromRoute('file_upload');
488  break;
489  case 'new':
490  $attributes['data-action-url'] = (string)$uriBuilder->buildUriFromRoute('wizard_element_browser');
491  break;
492  case 'newFile':
493  $attributes['data-action-url'] = (string)$uriBuilder->buildUriFromRoute('file_create');
494  break;
495  case 'updateOnlineMedia':
496  $attributes['data-action-url'] = (string)$uriBuilder->buildUriFromRoute('file_update_online_media');
497  break;
498  }
499 
500  return $attributes;
501  }
502 
503  protected function ‪getIdentifier(): string
504  {
505  return $this->record->getCombinedIdentifier();
506  }
507 }
‪TYPO3\CMS\Filelist\ContextMenu\ItemProviders\FileProvider\isFolder
‪isFolder()
Definition: FileProvider.php:377
‪TYPO3\CMS\Filelist\ContextMenu\ItemProviders\FileProvider\isFoldersAreInTheSameRoot
‪isFoldersAreInTheSameRoot($fileOrFolderInClipBoard)
Definition: FileProvider.php:338
‪TYPO3\CMS\Core\Resource\OnlineMedia\Helpers\OnlineMediaHelperRegistry
Definition: OnlineMediaHelperRegistry.php:27
‪TYPO3\CMS\Core\Utility\GeneralUtility\fixed_lgd_cs
‪static string fixed_lgd_cs(string $string, int $chars, string $appendString='...')
Definition: GeneralUtility.php:92
‪TYPO3\CMS\Filelist\ContextMenu\ItemProviders\FileProvider\canBeCopied
‪canBeCopied()
Definition: FileProvider.php:269
‪TYPO3\CMS\Filelist\ContextMenu\ItemProviders\FileProvider\isFile
‪isFile()
Definition: FileProvider.php:372
‪TYPO3\CMS\Filelist\ContextMenu\ItemProviders\FileProvider\canHandle
‪canHandle()
Definition: FileProvider.php:138
‪TYPO3\CMS\Filelist\ContextMenu\ItemProviders\FileProvider\canBePastedInto
‪canBePastedInto()
Definition: FileProvider.php:279
‪TYPO3\CMS\Filelist\ContextMenu\ItemProviders\FileProvider\isOnlineMedia
‪isOnlineMedia()
Definition: FileProvider.php:326
‪TYPO3\CMS\Filelist\ContextMenu\ItemProviders\FileProvider\canEditMetadata
‪canEditMetadata()
Definition: FileProvider.php:232
‪TYPO3\CMS\Core\Authentication\JsConfirmation
Definition: JsConfirmation.php:28
‪TYPO3\CMS\Backend\ContextMenu\ItemProviders\AbstractProvider\$table
‪string $table
Definition: AbstractProvider.php:62
‪TYPO3\CMS\Backend\ContextMenu\ItemProviders\AbstractProvider
Definition: AbstractProvider.php:31
‪TYPO3\CMS\Filelist\ContextMenu\ItemProviders\FileProvider\canShowInfo
‪canShowInfo()
Definition: FileProvider.php:251
‪TYPO3\CMS\Filelist\ContextMenu\ItemProviders\FileProvider\initialize
‪initialize()
Definition: FileProvider.php:146
‪TYPO3\CMS\Filelist\ContextMenu\ItemProviders\FileProvider\canRender
‪canRender(string $itemName, string $type)
Definition: FileProvider.php:159
‪TYPO3\CMS\Filelist\ContextMenu\ItemProviders\FileProvider\isStorageRoot
‪isStorageRoot()
Definition: FileProvider.php:367
‪TYPO3\CMS\Filelist\ContextMenu\ItemProviders\FileProvider\canCreateNewFilemount
‪canCreateNewFilemount()
Definition: FileProvider.php:264
‪TYPO3\CMS\Filelist\ContextMenu\ItemProviders\FileProvider\canCreateNew
‪canCreateNew()
Definition: FileProvider.php:256
‪TYPO3\CMS\Filelist\ContextMenu\ItemProviders
Definition: FileProvider.php:18
‪TYPO3\CMS\Filelist\ContextMenu\ItemProviders\FileProvider
Definition: FileProvider.php:37
‪TYPO3\CMS\Filelist\ContextMenu\ItemProviders\FileProvider\$itemsConfiguration
‪array $itemsConfiguration
Definition: FileProvider.php:44
‪TYPO3\CMS\Backend\Routing\UriBuilder
Definition: UriBuilder.php:44
‪TYPO3\CMS\Filelist\ContextMenu\ItemProviders\FileProvider\canBeDownloaded
‪canBeDownloaded()
Definition: FileProvider.php:297
‪TYPO3\CMS\Core\Resource\Folder
Definition: Folder.php:38
‪TYPO3\CMS\Core\Resource\ResourceFactory
Definition: ResourceFactory.php:42
‪TYPO3\CMS\Core\Resource\Exception\ResourceDoesNotExistException
Definition: ResourceDoesNotExistException.php:23
‪TYPO3\CMS\Core\Resource\File
Definition: File.php:26
‪TYPO3\CMS\Core\Resource\Folder\getStorage
‪getStorage()
Definition: Folder.php:139
‪TYPO3\CMS\Core\Resource\Filter\FileExtensionFilter
Definition: FileExtensionFilter.php:31
‪TYPO3\CMS\Filelist\ElementBrowser\CreateFolderBrowser\IDENTIFIER
‪const IDENTIFIER
Definition: CreateFolderBrowser.php:35
‪TYPO3\CMS\Filelist\ContextMenu\ItemProviders\FileProvider\canBeCut
‪canBeCut()
Definition: FileProvider.php:274
‪TYPO3\CMS\Core\Authentication\JsConfirmation\DELETE
‪const DELETE
Definition: JsConfirmation.php:31
‪TYPO3\CMS\Core\Resource\AbstractFile\getUid
‪return MathUtility::canBeInterpretedAsInteger($size) ?(int) $size int getUid()
Definition: AbstractFile.php:195
‪TYPO3\CMS\Core\Resource\File\getMetaData
‪getMetaData()
Definition: File.php:322
‪TYPO3\CMS\Filelist\ContextMenu\ItemProviders\FileProvider\canBeEdited
‪canBeEdited()
Definition: FileProvider.php:225
‪TYPO3\CMS\Filelist\ContextMenu\ItemProviders\FileProvider\isRecordInClipboard
‪isRecordInClipboard(string $mode='')
Definition: FileProvider.php:352
‪TYPO3\CMS\Webhooks\Message\$uid
‪identifier readonly int $uid
Definition: PageModificationMessage.php:35
‪TYPO3\CMS\Filelist\ContextMenu\ItemProviders\FileProvider\getIdentifier
‪getIdentifier()
Definition: FileProvider.php:501
‪TYPO3\CMS\Filelist\ContextMenu\ItemProviders\FileProvider\getAdditionalAttributes
‪getAdditionalAttributes(string $itemName)
Definition: FileProvider.php:382
‪TYPO3\CMS\Filelist\ContextMenu\ItemProviders\FileProvider\$record
‪File Folder null $record
Definition: FileProvider.php:40
‪TYPO3\CMS\Core\Utility\GeneralUtility
Definition: GeneralUtility.php:52
‪TYPO3\CMS\Filelist\ElementBrowser\CreateFolderBrowser
Definition: CreateFolderBrowser.php:34
‪TYPO3\CMS\Core\Authentication\JsConfirmation\COPY_MOVE_PASTE
‪const COPY_MOVE_PASTE
Definition: JsConfirmation.php:30
‪TYPO3\CMS\Core\Utility\GeneralUtility\trimExplode
‪static list< string > trimExplode(string $delim, string $string, bool $removeEmptyValues=false, int $limit=0)
Definition: GeneralUtility.php:817
‪TYPO3\CMS\Filelist\ContextMenu\ItemProviders\FileProvider\canBeDeleted
‪canBeDeleted()
Definition: FileProvider.php:246
‪TYPO3\CMS\Filelist\ContextMenu\ItemProviders\FileProvider\canBeRenamed
‪canBeRenamed()
Definition: FileProvider.php:241