‪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  && $this->backendUser->checkLanguageAccess(0);
242  }
243 
244  protected function ‪canBeRenamed(): bool
245  {
246  return $this->record->checkActionPermission('rename');
247  }
248 
249  protected function ‪canBeDeleted(): bool
250  {
251  return $this->record->checkActionPermission('delete');
252  }
253 
254  protected function ‪canShowInfo(): bool
255  {
256  return $this->‪isFile();
257  }
258 
259  protected function ‪canCreateNew(): bool
260  {
261  return $this->‪isFolder() && $this->record->checkActionPermission('write');
262  }
263 
267  protected function ‪canCreateNewFilemount(): bool
268  {
269  return $this->‪isFolder() && $this->record->checkActionPermission('read') && $this->backendUser->isAdmin();
270  }
271 
272  protected function ‪canBeCopied(): bool
273  {
274  return $this->record->checkActionPermission('read') && $this->record->checkActionPermission('copy') && !$this->‪isRecordInClipboard('copy');
275  }
276 
277  protected function ‪canBeCut(): bool
278  {
279  return $this->record->checkActionPermission('move') && !$this->‪isRecordInClipboard('cut');
280  }
281 
282  protected function ‪canBePastedInto(): bool
283  {
284  $elArr = $this->clipboard->elFromTable('_FILE');
285  if (empty($elArr)) {
286  return false;
287  }
288  $selItem = reset($elArr);
289  $fileOrFolderInClipBoard = GeneralUtility::makeInstance(ResourceFactory::class)->retrieveFileOrFolderObject($selItem);
290 
291  return $this->‪isFolder()
292  && $this->record->checkActionPermission('write')
293  && (
294  !$fileOrFolderInClipBoard instanceof ‪Folder
295  || !$fileOrFolderInClipBoard->‪getStorage()->isWithinFolder($fileOrFolderInClipBoard, $this->record)
296  )
297  && $this->‪isFoldersAreInTheSameRoot($fileOrFolderInClipBoard);
298  }
299 
300  protected function ‪canBeDownloaded(): bool
301  {
302  if (!$this->record->checkActionPermission('read')) {
303  // Early return if no read access
304  return false;
305  }
306 
307  $fileDownloadConfiguration = (array)($this->backendUser->getTSConfig()['options.']['file_list.']['fileDownload.'] ?? []);
308  if (!($fileDownloadConfiguration['enabled'] ?? true)) {
309  // File download is disabled
310  return false;
311  }
312 
313  if ($fileDownloadConfiguration === [] || $this->‪isFolder()) {
314  // In case no configuration exists, or we deal with a folder, download is allowed at this point
315  return true;
316  }
317 
318  // Initialize file extension filter
319  $filter = GeneralUtility::makeInstance(FileExtensionFilter::class);
320  $filter->setAllowedFileExtensions(
321  ‪GeneralUtility::trimExplode(',', (string)($fileDownloadConfiguration['allowedFileExtensions'] ?? ''), true)
322  );
323  $filter->setDisallowedFileExtensions(
324  ‪GeneralUtility::trimExplode(',', (string)($fileDownloadConfiguration['disallowedFileExtensions'] ?? ''), true)
325  );
326  return $filter->isAllowed($this->record->getExtension());
327  }
328 
329  protected function ‪isOnlineMedia(): bool
330  {
331  return $this->‪isFile()
332  && GeneralUtility::makeInstance(OnlineMediaHelperRegistry::class)->hasOnlineMediaHelper($this->record->getExtension());
333  }
334 
341  protected function ‪isFoldersAreInTheSameRoot($fileOrFolderInClipBoard): bool
342  {
343  return (!$fileOrFolderInClipBoard instanceof ‪Folder)
344  || (
345  $this->record->getStorage()->getRootLevelFolder()->getCombinedIdentifier()
346  == $fileOrFolderInClipBoard->getStorage()->getRootLevelFolder()->getCombinedIdentifier()
347  );
348  }
349 
355  protected function ‪isRecordInClipboard(string $mode = ''): bool
356  {
357  if ($mode !== '' && !$this->record->checkActionPermission($mode)) {
358  return false;
359  }
360  $isSelected = '';
361  // Pseudo table name for use in the clipboard.
362  ‪$table = '_FILE';
363  ‪$uid = md5($this->record->getCombinedIdentifier());
364  if ($this->clipboard->current === 'normal') {
365  $isSelected = $this->clipboard->isSelected(‪$table, ‪$uid);
366  }
367  return $mode === '' ? !empty($isSelected) : $isSelected === $mode;
368  }
369 
370  protected function ‪isStorageRoot(): bool
371  {
372  return $this->record->getIdentifier() === $this->record->getStorage()->getRootLevelFolder()->getIdentifier();
373  }
374 
375  protected function ‪isFile(): bool
376  {
377  return $this->record instanceof ‪File;
378  }
379 
380  protected function ‪isFolder(): bool
381  {
382  return $this->record instanceof ‪Folder;
383  }
384 
385  protected function ‪getAdditionalAttributes(string $itemName): array
386  {
387  $attributes = [
388  'data-callback-module' => '@typo3/filelist/context-menu-actions',
389  ];
390  if ($itemName === 'delete' && $this->backendUser->jsConfirmation(‪JsConfirmation::DELETE)) {
391  $title = $this->languageService->sL('LLL:EXT:core/Resources/Private/Language/locallang_core.xlf:cm.delete');
392  if ($this->‪isFolder()) {
393  $attributes += [
394  'data-button-close-text' => $this->languageService->sL('LLL:EXT:backend/Resources/Private/Language/locallang_alt_doc.xlf:buttons.confirm.delete_folder.no'),
395  'data-button-ok-text' => $this->languageService->sL('LLL:EXT:backend/Resources/Private/Language/locallang_alt_doc.xlf:buttons.confirm.delete_folder.yes'),
396  ];
397  }
398  if ($this->‪isFile()) {
399  $attributes += [
400  'data-button-close-text' => $this->languageService->sL('LLL:EXT:backend/Resources/Private/Language/locallang_alt_doc.xlf:buttons.confirm.delete_file.no'),
401  'data-button-ok-text' => $this->languageService->sL('LLL:EXT:backend/Resources/Private/Language/locallang_alt_doc.xlf:buttons.confirm.delete_file.yes'),
402  ];
403  }
404  $recordInfo = ‪GeneralUtility::fixed_lgd_cs($this->record->getName(), (int)($this->backendUser->uc['titleLen'] ?? 0));
405  if ($this->‪isFolder()) {
406  if ($this->backendUser->shallDisplayDebugInformation()) {
407  $recordInfo .= ' [' . $this->record->getIdentifier() . ']';
408  }
409  $confirmMessage = sprintf(
410  $this->languageService->sL('LLL:EXT:core/Resources/Private/Language/locallang_core.xlf:mess.delete'),
411  trim($recordInfo)
412  ) . BackendUtility::referenceCount(
413  '_FILE',
414  $this->record->getIdentifier(),
415  LF . $this->languageService->sL('LLL:EXT:core/Resources/Private/Language/locallang_core.xlf:labels.referencesToFolder')
416  );
417  } else {
418  if ($this->backendUser->shallDisplayDebugInformation()) {
419  $recordInfo .= ' [sys_file:' . $this->record->getUid() . ']';
420  }
421  $confirmMessage = sprintf(
422  $this->languageService->sL('LLL:EXT:core/Resources/Private/Language/locallang_core.xlf:mess.delete'),
423  trim($recordInfo)
424  ) . BackendUtility::referenceCount(
425  'sys_file',
426  (string)$this->record->getUid(),
427  LF . $this->languageService->sL('LLL:EXT:core/Resources/Private/Language/locallang_core.xlf:labels.referencesToFile')
428  );
429  }
430  $attributes += [
431  'data-title' => $title,
432  'data-message' => $confirmMessage,
433  ];
434  }
435  if ($itemName === 'new' && $this->‪isFolder()) {
436  $attributes += [
437  'data-identifier' => $this->record->getCombinedIdentifier(),
438  'data-mode' => ‪CreateFolderBrowser::IDENTIFIER,
439  ];
440  }
441  if ($itemName === 'pasteInto' && $this->backendUser->jsConfirmation(‪JsConfirmation::COPY_MOVE_PASTE)) {
442  $elArr = $this->clipboard->elFromTable('_FILE');
443  $selItem = reset($elArr);
444  $fileOrFolderInClipBoard = GeneralUtility::makeInstance(ResourceFactory::class)->retrieveFileOrFolderObject($selItem);
445 
446  $title = $this->languageService->sL('LLL:EXT:core/Resources/Private/Language/locallang_mod_web_list.xlf:clip_paste');
447 
448  $confirmMessage = sprintf(
449  $this->languageService->sL('LLL:EXT:core/Resources/Private/Language/locallang_core.xlf:mess.'
450  . ($this->clipboard->currentMode() === 'copy' ? 'copy' : 'move') . '_into'),
451  $fileOrFolderInClipBoard->getName(),
452  $this->record->getName()
453  );
454  $closeText = $this->languageService->sL('LLL:EXT:core/Resources/Private/Language/locallang_mod_web_list.xlf:button.cancel');
455  $okLabel = $this->clipboard->currentMode() === 'copy' ? 'copy' : 'pasteinto';
456  $okText = $this->languageService->sL('LLL:EXT:core/Resources/Private/Language/locallang_core.xlf:cm.' . $okLabel);
457  $attributes += [
458  'data-title' => $title,
459  'data-message' => $confirmMessage,
460  'data-button-close-text' => $closeText,
461  'data-button-ok-text' => $okText,
462  ];
463  }
464  if ($itemName === 'downloadFile') {
465  $attributes += [
466  'data-url' => (string)$this->record->getPublicUrl(),
467  'data-name' => $this->record->getName(),
468  ];
469  }
470 
471  // Resource Settings
472  $attributes['data-filecontext-type'] = $this->record instanceof File ? 'file' : 'folder';
473  $attributes['data-filecontext-identifier'] = $this->‪getIdentifier();
474  $attributes['data-filecontext-name'] = $this->record->getName();
475  $attributes['data-filecontext-uid'] = $this->record instanceof File ? $this->record->getUid() : '';
476  $attributes['data-filecontext-meta-uid'] = $this->record instanceof File ? $this->record->getMetaData()->offsetGet('uid') : '';
477 
478  // Add action url for file operations
479  $uriBuilder = GeneralUtility::makeInstance(UriBuilder::class);
480  switch ($itemName) {
481  case 'downloadFolder':
482  $attributes['data-action-url'] = (string)$uriBuilder->buildUriFromRoute('file_download');
483  break;
484  case 'edit':
485  $attributes['data-action-url'] = (string)$uriBuilder->buildUriFromRoute('file_edit');
486  break;
487  case 'upload':
488  $attributes['data-action-url'] = (string)$uriBuilder->buildUriFromRoute('file_upload');
489  break;
490  case 'new':
491  $attributes['data-action-url'] = (string)$uriBuilder->buildUriFromRoute('wizard_element_browser');
492  break;
493  case 'newFile':
494  $attributes['data-action-url'] = (string)$uriBuilder->buildUriFromRoute('file_create');
495  break;
496  case 'updateOnlineMedia':
497  $attributes['data-action-url'] = (string)$uriBuilder->buildUriFromRoute('file_update_online_media');
498  break;
499  }
500 
501  return $attributes;
502  }
503 
504  protected function ‪getIdentifier(): string
505  {
506  return $this->record->getCombinedIdentifier();
507  }
508 }
‪TYPO3\CMS\Filelist\ContextMenu\ItemProviders\FileProvider\isFolder
‪isFolder()
Definition: FileProvider.php:378
‪TYPO3\CMS\Filelist\ContextMenu\ItemProviders\FileProvider\isFoldersAreInTheSameRoot
‪isFoldersAreInTheSameRoot($fileOrFolderInClipBoard)
Definition: FileProvider.php:339
‪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:270
‪TYPO3\CMS\Filelist\ContextMenu\ItemProviders\FileProvider\isFile
‪isFile()
Definition: FileProvider.php:373
‪TYPO3\CMS\Filelist\ContextMenu\ItemProviders\FileProvider\canHandle
‪canHandle()
Definition: FileProvider.php:138
‪TYPO3\CMS\Filelist\ContextMenu\ItemProviders\FileProvider\canBePastedInto
‪canBePastedInto()
Definition: FileProvider.php:280
‪TYPO3\CMS\Filelist\ContextMenu\ItemProviders\FileProvider\isOnlineMedia
‪isOnlineMedia()
Definition: FileProvider.php:327
‪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:252
‪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:368
‪TYPO3\CMS\Filelist\ContextMenu\ItemProviders\FileProvider\canCreateNewFilemount
‪canCreateNewFilemount()
Definition: FileProvider.php:265
‪TYPO3\CMS\Filelist\ContextMenu\ItemProviders\FileProvider\canCreateNew
‪canCreateNew()
Definition: FileProvider.php:257
‪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:298
‪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:275
‪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:353
‪TYPO3\CMS\Webhooks\Message\$uid
‪identifier readonly int $uid
Definition: PageModificationMessage.php:35
‪TYPO3\CMS\Filelist\ContextMenu\ItemProviders\FileProvider\getIdentifier
‪getIdentifier()
Definition: FileProvider.php:502
‪TYPO3\CMS\Filelist\ContextMenu\ItemProviders\FileProvider\getAdditionalAttributes
‪getAdditionalAttributes(string $itemName)
Definition: FileProvider.php:383
‪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:822
‪TYPO3\CMS\Filelist\ContextMenu\ItemProviders\FileProvider\canBeDeleted
‪canBeDeleted()
Definition: FileProvider.php:247
‪TYPO3\CMS\Filelist\ContextMenu\ItemProviders\FileProvider\canBeRenamed
‪canBeRenamed()
Definition: FileProvider.php:242