‪TYPO3CMS  ‪main
RecordProvider.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;
28 
33 {
39  protected ‪$record = [];
40 
46  protected ‪$pageRecord = [];
47 
53  protected ‪$pagePermissions;
54 
58  protected ‪$itemsConfiguration = [
59  'view' => [
60  'label' => 'LLL:EXT:core/Resources/Private/Language/locallang_core.xlf:cm.view',
61  'iconIdentifier' => 'actions-view',
62  'callbackAction' => 'viewRecord',
63  ],
64  'edit' => [
65  'label' => 'LLL:EXT:core/Resources/Private/Language/locallang_core.xlf:cm.edit',
66  'iconIdentifier' => 'actions-open',
67  'callbackAction' => 'editRecord',
68  ],
69  'new' => [
70  'label' => 'LLL:EXT:core/Resources/Private/Language/locallang_core.xlf:cm.new',
71  'iconIdentifier' => 'actions-plus',
72  'callbackAction' => 'newRecord',
73  ],
74  'info' => [
75  'label' => 'LLL:EXT:core/Resources/Private/Language/locallang_core.xlf:cm.info',
76  'iconIdentifier' => 'actions-document-info',
77  'callbackAction' => 'openInfoPopUp',
78  ],
79  'divider1' => [
80  'type' => 'divider',
81  ],
82  'copy' => [
83  'label' => 'LLL:EXT:core/Resources/Private/Language/locallang_core.xlf:cm.copy',
84  'iconIdentifier' => 'actions-edit-copy',
85  'callbackAction' => 'copy',
86  ],
87  'copyRelease' => [
88  'label' => 'LLL:EXT:core/Resources/Private/Language/locallang_core.xlf:cm.copy',
89  'iconIdentifier' => 'actions-edit-copy-release',
90  'callbackAction' => 'clipboardRelease',
91  ],
92  'cut' => [
93  'label' => 'LLL:EXT:core/Resources/Private/Language/locallang_core.xlf:cm.cut',
94  'iconIdentifier' => 'actions-edit-cut',
95  'callbackAction' => 'cut',
96  ],
97  'cutRelease' => [
98  'label' => 'LLL:EXT:core/Resources/Private/Language/locallang_core.xlf:cm.cutrelease',
99  'iconIdentifier' => 'actions-edit-cut-release',
100  'callbackAction' => 'clipboardRelease',
101  ],
102  'pasteAfter' => [
103  'label' => 'LLL:EXT:core/Resources/Private/Language/locallang_core.xlf:cm.pasteafter',
104  'iconIdentifier' => 'actions-document-paste-after',
105  'callbackAction' => 'pasteAfter',
106  ],
107  'divider2' => [
108  'type' => 'divider',
109  ],
110  'more' => [
111  'type' => 'submenu',
112  'label' => 'LLL:EXT:core/Resources/Private/Language/locallang_core.xlf:cm.more',
113  'iconIdentifier' => '',
114  'callbackAction' => 'openSubmenu',
115  'childItems' => [
116  'newWizard' => [
117  'label' => 'LLL:EXT:core/Resources/Private/Language/locallang_misc.xlf:CM_newWizard',
118  'iconIdentifier' => 'actions-plus',
119  'callbackAction' => 'newContentWizard',
120  ],
121  ],
122  ],
123  'divider3' => [
124  'type' => 'divider',
125  ],
126  'enable' => [
127  'label' => 'LLL:EXT:core/Resources/Private/Language/locallang_common.xlf:enable',
128  'iconIdentifier' => 'actions-edit-unhide',
129  'callbackAction' => 'enableRecord',
130  ],
131  'disable' => [
132  'label' => 'LLL:EXT:core/Resources/Private/Language/locallang_common.xlf:disable',
133  'iconIdentifier' => 'actions-edit-hide',
134  'callbackAction' => 'disableRecord',
135  ],
136  'delete' => [
137  'label' => 'LLL:EXT:core/Resources/Private/Language/locallang_core.xlf:cm.delete',
138  'iconIdentifier' => 'actions-edit-delete',
139  'callbackAction' => 'deleteRecord',
140  ],
141  'history' => [
142  'label' => 'LLL:EXT:core/Resources/Private/Language/locallang_misc.xlf:CM_history',
143  'iconIdentifier' => 'actions-document-history-open',
144  'callbackAction' => 'openHistoryPopUp',
145  ],
146  ];
147 
151  public function ‪canHandle(): bool
152  {
153  if (in_array($this->table, ['sys_file', 'pages'], true)) {
154  return false;
155  }
156  return isset(‪$GLOBALS['TCA'][$this->table]);
157  }
158 
162  protected function ‪initialize()
163  {
164  parent::initialize();
165  $this->record = BackendUtility::getRecordWSOL($this->table, (int)$this->identifier);
166  $this->‪initPermissions();
167  }
168 
172  public function ‪getPriority(): int
173  {
174  return 60;
175  }
176 
180  public function ‪addItems(array $items): array
181  {
182  if (!empty($items)) {
183  return $items;
184  }
185  $this->‪initialize();
186  return $this->‪prepareItems($this->itemsConfiguration);
187  }
188 
192  protected function ‪canRender(string $itemName, string $type): bool
193  {
194  if (in_array($type, ['divider', 'submenu'], true)) {
195  return true;
196  }
197  if (in_array($itemName, $this->disabledItems, true)) {
198  return false;
199  }
200  $canRender = false;
201  switch ($itemName) {
202  case 'view':
203  $canRender = $this->‪canBeViewed();
204  break;
205  case 'edit':
206  $canRender = $this->‪canBeEdited();
207  break;
208  case 'new':
209  $canRender = $this->‪canBeNew();
210  break;
211  case 'newWizard':
212  $canRender = $this->‪canOpenNewCEWizard();
213  break;
214  case 'info':
215  $canRender = $this->‪canShowInfo();
216  break;
217  case 'enable':
218  $canRender = $this->‪canBeEnabled();
219  break;
220  case 'disable':
221  $canRender = $this->‪canBeDisabled();
222  break;
223  case 'delete':
224  $canRender = $this->‪canBeDeleted();
225  break;
226  case 'history':
227  $canRender = $this->‪canShowHistory();
228  break;
229  case 'copy':
230  $canRender = $this->‪canBeCopied();
231  break;
232  case 'copyRelease':
233  $canRender = $this->‪isRecordInClipboard('copy');
234  break;
235  case 'cut':
236  $canRender = $this->‪canBeCut();
237  break;
238  case 'cutRelease':
239  $canRender = $this->‪isRecordInClipboard('cut');
240  break;
241  case 'pasteAfter':
242  $canRender = $this->‪canBePastedAfter();
243  break;
244  }
245  return $canRender;
246  }
247 
251  protected function ‪initPermissions()
252  {
253  $this->pageRecord = BackendUtility::getRecord('pages', $this->record['pid']) ?? [];
254  $this->pagePermissions = new ‪Permission($this->backendUser->calcPerms($this->pageRecord));
255  }
256 
262  protected function ‪hasPagePermission(int $permission): bool
263  {
264  return $this->backendUser->isAdmin() || $this->pagePermissions->isGranted($permission);
265  }
266 
270  protected function ‪getAdditionalAttributes(string $itemName): array
271  {
272  $attributes = [];
273  if ($itemName === 'view') {
274  $attributes += $this->‪getViewAdditionalAttributes();
275  }
276  if ($itemName === 'enable' || $itemName === 'disable') {
277  $attributes += $this->‪getEnableDisableAdditionalAttributes();
278  }
279  if ($itemName === 'newWizard' && $this->table === 'tt_content') {
280  $urlParameters = [
281  'id' => $this->record['pid'],
282  'sys_language_uid' => $this->record[$this->‪getLanguageField()] ?? null,
283  'colPos' => $this->record['colPos'],
284  'uid_pid' => -$this->record['uid'],
285  ];
286  $uriBuilder = GeneralUtility::makeInstance(UriBuilder::class);
287  ‪$url = (string)$uriBuilder->buildUriFromRoute('new_content_element_wizard', $urlParameters);
288  $attributes += [
289  'data-new-wizard-url' => ‪$url,
290  'data-title' => $this->languageService->sL('LLL:EXT:backend/Resources/Private/Language/locallang_layout.xlf:newContentElement'),
291  ];
292  }
293  if ($itemName === 'delete') {
294  $attributes += $this->‪getDeleteAdditionalAttributes();
295  }
296  if ($itemName === 'pasteAfter') {
297  $attributes += $this->‪getPasteAdditionalAttributes('after');
298  }
299  return $attributes;
300  }
301 
305  protected function ‪getViewAdditionalAttributes(): array
306  {
307  $attributes = [];
308  $viewLink = $this->‪getViewLink();
309  if ($viewLink) {
310  $attributes += [
311  'data-preview-url' => $viewLink,
312  ];
313  }
314  return $attributes;
315  }
316 
320  protected function ‪getEnableDisableAdditionalAttributes(): array
321  {
322  return [
323  'data-disable-field' => ‪$GLOBALS['TCA'][‪$this->table]['ctrl']['enablecolumns']['disabled'] ?? '',
324  ];
325  }
326 
332  protected function ‪getPasteAdditionalAttributes(string $type): array
333  {
334  $closeText = $this->languageService->sL('LLL:EXT:core/Resources/Private/Language/locallang_common.xlf:cancel');
335  $okText = $this->languageService->sL('LLL:EXT:core/Resources/Private/Language/locallang_common.xlf:ok');
336  $attributes = [];
337  if ($this->backendUser->jsConfirmation(‪JsConfirmation::COPY_MOVE_PASTE)) {
338  $selItem = $this->clipboard->getSelectedRecord();
339  $title = $this->languageService->sL('LLL:EXT:core/Resources/Private/Language/locallang_mod_web_list.xlf:clip_paste');
340 
341  $confirmMessage = sprintf(
342  $this->languageService->sL('LLL:EXT:core/Resources/Private/Language/locallang_core.xlf:mess.'
343  . ($this->clipboard->currentMode() === 'copy' ? 'copy' : 'move') . '_' . $type),
344  ‪GeneralUtility::fixed_lgd_cs($selItem['_RECORD_TITLE'], (int)$this->backendUser->uc['titleLen']),
345  ‪GeneralUtility::fixed_lgd_cs(BackendUtility::getRecordTitle($this->table, $this->record), (int)$this->backendUser->uc['titleLen'])
346  );
347  $attributes += [
348  'data-title' => $title,
349  'data-message' => $confirmMessage,
350  'data-button-close-text' => $closeText,
351  'data-button-ok-text' => $okText,
352  ];
353  }
354  return $attributes;
355  }
356 
360  protected function ‪getDeleteAdditionalAttributes(): array
361  {
362  $closeText = $this->languageService->sL('LLL:EXT:core/Resources/Private/Language/locallang_common.xlf:cancel');
363  $okText = $this->languageService->sL('LLL:EXT:core/Resources/Private/Language/locallang_mod_web_list.xlf:delete');
364  $attributes = [];
365  if ($this->backendUser->jsConfirmation(‪JsConfirmation::DELETE)) {
366  $title = $this->languageService->sL('LLL:EXT:core/Resources/Private/Language/locallang_core.xlf:mess.delete.title');
367 
368  $recordInfo = ‪GeneralUtility::fixed_lgd_cs(BackendUtility::getRecordTitle($this->table, $this->record), (int)$this->backendUser->uc['titleLen']);
369  if ($this->backendUser->shallDisplayDebugInformation()) {
370  $recordInfo .= ' [' . $this->table . ':' . $this->record['uid'] . ']';
371  }
372  $confirmMessage = sprintf(
373  $this->languageService->sL('LLL:EXT:core/Resources/Private/Language/locallang_core.xlf:mess.delete'),
374  trim($recordInfo)
375  );
376  $confirmMessage .= BackendUtility::referenceCount(
377  $this->table,
378  $this->record['uid'],
379  LF . $this->languageService->sL('LLL:EXT:core/Resources/Private/Language/locallang_core.xlf:labels.referencesToRecord')
380  );
381  $confirmMessage .= BackendUtility::translationCount(
382  $this->table,
383  $this->record['uid'],
384  LF . $this->languageService->sL('LLL:EXT:core/Resources/Private/Language/locallang_core.xlf:labels.translationsOfRecord')
385  );
386 
387  $attributes += [
388  'data-title' => $title,
389  'data-message' => $confirmMessage,
390  'data-button-close-text' => $closeText,
391  'data-button-ok-text' => $okText,
392  ];
393  }
394  return $attributes;
395  }
396 
400  protected function ‪getPreviewPid(): int
401  {
402  return (int)$this->record['pid'];
403  }
404 
408  protected function ‪getViewLink(): string
409  {
410  $anchorSection = '';
411  $language = 0;
412  if ($this->table === 'tt_content') {
413  $anchorSection = '#c' . $this->record['uid'];
414  $language = (int)($this->record[‪$GLOBALS['TCA']['tt_content']['ctrl']['languageField'] ?? null] ?? 0);
415  }
416 
417  return (string)‪PreviewUriBuilder::create($this->‪getPreviewPid())
418  ->withSection($anchorSection)
419  ->withLanguage($language)
420  ->buildUri();
421  }
422 
426  protected function ‪canShowInfo(): bool
427  {
428  return true;
429  }
430 
434  protected function ‪canShowHistory(): bool
435  {
436  $userTsConfig = $this->backendUser->getTSConfig();
437  return (bool)trim($userTsConfig['options.']['showHistory.'][$this->table] ?? $userTsConfig['options.']['showHistory'] ?? '1');
438  }
439 
443  protected function ‪canBeViewed(): bool
444  {
445  return $this->table === 'tt_content'
446  && $this->‪parentPageCanBeViewed()
447  && $this->‪previewLinkCanBeBuild();
448  }
449 
453  protected function ‪canBeEdited(): bool
454  {
455  if (isset(‪$GLOBALS['TCA'][$this->table]['ctrl']['readOnly']) && ‪$GLOBALS['TCA'][$this->table]['ctrl']['readOnly']) {
456  return false;
457  }
458  if ($this->backendUser->isAdmin()) {
459  return true;
460  }
461  if (isset(‪$GLOBALS['TCA'][$this->table]['ctrl']['adminOnly']) && ‪$GLOBALS['TCA'][$this->table]['ctrl']['adminOnly']) {
462  return false;
463  }
464 
465  $access = !$this->‪isRecordLocked()
466  && $this->backendUser->check('tables_modify', $this->table)
468  && $this->backendUser->recordEditAccessInternals($this->table, $this->record);
469  return $access;
470  }
471 
475  protected function ‪canBeNew(): bool
476  {
477  return $this->‪canBeEdited() && !$this->‪isRecordATranslation();
478  }
479 
483  protected function ‪isDeletionDisabledInTS(): bool
484  {
485  return (bool)\trim(
486  $this->backendUser->getTSConfig()['options.']['disableDelete.'][$this->table]
487  ?? $this->backendUser->getTSConfig()['options.']['disableDelete']
488  ?? ''
489  );
490  }
491 
495  protected function ‪canBeDeleted(): bool
496  {
497  return !$this->‪isDeletionDisabledInTS()
498  && !$this->‪isRecordCurrentBackendUser()
499  && $this->‪canBeEdited();
500  }
501 
505  protected function ‪canBeEnabled(): bool
506  {
507  return $this->‪hasDisableColumnWithValue(1) && $this->‪canBeEdited();
508  }
509 
513  protected function ‪canBeDisabled(): bool
514  {
515  return $this->‪hasDisableColumnWithValue(0)
516  && !$this->‪isRecordCurrentBackendUser()
517  && $this->‪canBeEdited();
518  }
519 
523  protected function ‪canOpenNewCEWizard(): bool
524  {
525  return $this->table === 'tt_content' && $this->‪canBeEdited() && !$this->‪isRecordATranslation();
526  }
527 
528  protected function ‪canBeCopied(): bool
529  {
530  return !$this->‪isRecordInClipboard('copy')
531  && !$this->‪isRecordATranslation();
532  }
533 
534  protected function ‪canBeCut(): bool
535  {
536  return !$this->‪isRecordInClipboard('cut')
537  && $this->‪canBeEdited()
538  && !$this->‪isRecordATranslation();
539  }
540 
544  protected function ‪canBePastedAfter(): bool
545  {
546  $clipboardElementCount = count($this->clipboard->elFromTable($this->table));
547 
548  return $clipboardElementCount
549  && $this->backendUser->check('tables_modify', $this->table)
551  }
552 
557  protected function ‪hasDisableColumnWithValue(int $value): bool
558  {
559  if (isset(‪$GLOBALS['TCA'][$this->table]['ctrl']['enablecolumns']['disabled'])) {
560  $hiddenFieldName = ‪$GLOBALS['TCA'][‪$this->table]['ctrl']['enablecolumns']['disabled'];
561  if (
562  $hiddenFieldName !== '' && !empty(‪$GLOBALS['TCA'][$this->table]['columns'][$hiddenFieldName])
563  && (
564  empty(‪$GLOBALS['TCA'][$this->table]['columns'][$hiddenFieldName]['exclude'])
565  || $this->backendUser->check('non_exclude_fields', $this->table . ':' . $hiddenFieldName)
566  )
567  ) {
568  return (int)($this->record[$hiddenFieldName] ?? 0) === (int)$value;
569  }
570  }
571  return false;
572  }
573 
577  protected function ‪isRecordLocked(): bool
578  {
579  return (int)$this->pageRecord['editlock'] === 1
580  || isset(‪$GLOBALS['TCA'][$this->table]['ctrl']['editlock'])
581  && (int)$this->record[‪$GLOBALS['TCA'][$this->table]['ctrl']['editlock']] === 1;
582  }
583 
587  protected function ‪isDeletePlaceholder(): bool
588  {
589  return VersionState::tryFrom($this->record['t3ver_state'] ?? 0) === VersionState::DELETE_PLACEHOLDER;
590  }
591 
597  protected function ‪isRecordInClipboard(string $mode = ''): bool
598  {
599  $isSelected = '';
600  if ($this->clipboard->current === 'normal' && isset($this->record['uid'])) {
601  $isSelected = $this->clipboard->isSelected($this->table, $this->record['uid']);
602  }
603  return $mode === '' ? !empty($isSelected) : $isSelected === $mode;
604  }
605 
609  protected function ‪isRecordATranslation(): bool
610  {
611  return BackendUtility::isTableLocalizable($this->table) && (int)$this->record[‪$GLOBALS['TCA'][$this->table]['ctrl']['transOrigPointerField']] !== 0;
612  }
613 
617  protected function ‪isRecordCurrentBackendUser(): bool
618  {
619  return $this->table === 'be_users' && (int)($this->record['uid'] ?? 0) === $this->backendUser->getUserId();
620  }
621 
625  protected function ‪parentPageCanBeViewed(): bool
626  {
627  if (!isset($this->pageRecord['uid']) || !($this->pageRecord['doktype'] ?? false)) {
628  // In case parent page record is invalid, the element can not be viewed
629  return false;
630  }
631 
632  // Finally, we check whether the parent page has a "no view doktype" assigned
633  return !in_array((int)$this->pageRecord['doktype'], [
636  ], true);
637  }
638 
639  protected function ‪getIdentifier(): string
640  {
641  return $this->record['uid'];
642  }
643 
647  protected function ‪previewLinkCanBeBuild(): bool
648  {
649  return $this->‪getViewLink() !== '';
650  }
651 
655  protected function ‪getLanguageField(): string
656  {
657  return ‪$GLOBALS['TCA'][‪$this->table]['ctrl']['languageField'] ?? '';
658  }
659 }
‪TYPO3\CMS\Backend\ContextMenu\ItemProviders\RecordProvider\$itemsConfiguration
‪array $itemsConfiguration
Definition: RecordProvider.php:54
‪TYPO3\CMS\Backend\ContextMenu\ItemProviders\RecordProvider\hasDisableColumnWithValue
‪hasDisableColumnWithValue(int $value)
Definition: RecordProvider.php:553
‪TYPO3\CMS\Backend\ContextMenu\ItemProviders\RecordProvider\canBePastedAfter
‪canBePastedAfter()
Definition: RecordProvider.php:540
‪TYPO3\CMS\Backend\ContextMenu\ItemProviders\RecordProvider\hasPagePermission
‪hasPagePermission(int $permission)
Definition: RecordProvider.php:258
‪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\Backend\ContextMenu\ItemProviders\RecordProvider\canBeDisabled
‪canBeDisabled()
Definition: RecordProvider.php:509
‪TYPO3\CMS\Backend\ContextMenu\ItemProviders\RecordProvider\getIdentifier
‪getIdentifier()
Definition: RecordProvider.php:635
‪TYPO3\CMS\Core\Versioning\VersionState
‪VersionState
Definition: VersionState.php:22
‪TYPO3\CMS\Backend\ContextMenu\ItemProviders\RecordProvider\getLanguageField
‪getLanguageField()
Definition: RecordProvider.php:651
‪TYPO3\CMS\Backend\ContextMenu\ItemProviders\RecordProvider\isRecordInClipboard
‪isRecordInClipboard(string $mode='')
Definition: RecordProvider.php:593
‪TYPO3\CMS\Backend\ContextMenu\ItemProviders\RecordProvider\addItems
‪addItems(array $items)
Definition: RecordProvider.php:176
‪TYPO3\CMS\Backend\ContextMenu\ItemProviders\RecordProvider\$record
‪array $record
Definition: RecordProvider.php:38
‪TYPO3\CMS\Backend\ContextMenu\ItemProviders\RecordProvider\getViewLink
‪getViewLink()
Definition: RecordProvider.php:404
‪TYPO3\CMS\Backend\ContextMenu\ItemProviders\RecordProvider\canBeEdited
‪canBeEdited()
Definition: RecordProvider.php:449
‪TYPO3\CMS\Backend\ContextMenu\ItemProviders\RecordProvider\isDeletionDisabledInTS
‪isDeletionDisabledInTS()
Definition: RecordProvider.php:479
‪TYPO3\CMS\Backend\ContextMenu\ItemProviders\RecordProvider\canOpenNewCEWizard
‪canOpenNewCEWizard()
Definition: RecordProvider.php:519
‪TYPO3\CMS\Backend\ContextMenu\ItemProviders\AbstractProvider\prepareItems
‪prepareItems(array $itemsConfiguration)
Definition: AbstractProvider.php:156
‪TYPO3\CMS\Backend\ContextMenu\ItemProviders\RecordProvider\getEnableDisableAdditionalAttributes
‪getEnableDisableAdditionalAttributes()
Definition: RecordProvider.php:316
‪TYPO3\CMS\Backend\ContextMenu\ItemProviders\RecordProvider\canBeDeleted
‪canBeDeleted()
Definition: RecordProvider.php:491
‪TYPO3\CMS\Backend\ContextMenu\ItemProviders\RecordProvider\canShowHistory
‪canShowHistory()
Definition: RecordProvider.php:430
‪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\Backend\ContextMenu\ItemProviders\RecordProvider\isRecordATranslation
‪isRecordATranslation()
Definition: RecordProvider.php:605
‪TYPO3\CMS\Backend\ContextMenu\ItemProviders\RecordProvider\canRender
‪canRender(string $itemName, string $type)
Definition: RecordProvider.php:188
‪TYPO3\CMS\Backend\ContextMenu\ItemProviders\RecordProvider\canBeCopied
‪canBeCopied()
Definition: RecordProvider.php:524
‪TYPO3\CMS\Backend\ContextMenu\ItemProviders\RecordProvider\canHandle
‪canHandle()
Definition: RecordProvider.php:147
‪TYPO3\CMS\Backend\ContextMenu\ItemProviders\RecordProvider\parentPageCanBeViewed
‪parentPageCanBeViewed()
Definition: RecordProvider.php:621
‪TYPO3\CMS\Core\Type\Bitmask\Permission
Definition: Permission.php:26
‪TYPO3\CMS\Backend\ContextMenu\ItemProviders\RecordProvider\$pagePermissions
‪Permission $pagePermissions
Definition: RecordProvider.php:50
‪TYPO3\CMS\Backend\ContextMenu\ItemProviders\RecordProvider\getPreviewPid
‪getPreviewPid()
Definition: RecordProvider.php:396
‪TYPO3\CMS\Backend\ContextMenu\ItemProviders\RecordProvider\isDeletePlaceholder
‪isDeletePlaceholder()
Definition: RecordProvider.php:583
‪TYPO3\CMS\Backend\Routing\UriBuilder
Definition: UriBuilder.php:44
‪TYPO3\CMS\Backend\Routing\PreviewUriBuilder\create
‪static static create(int $pageId)
Definition: PreviewUriBuilder.php:65
‪TYPO3\CMS\Backend\ContextMenu\ItemProviders\RecordProvider\getDeleteAdditionalAttributes
‪getDeleteAdditionalAttributes()
Definition: RecordProvider.php:356
‪TYPO3\CMS\Core\Domain\Repository\PageRepository\DOKTYPE_SPACER
‪const DOKTYPE_SPACER
Definition: PageRepository.php:103
‪TYPO3\CMS\Backend\ContextMenu\ItemProviders\RecordProvider\previewLinkCanBeBuild
‪previewLinkCanBeBuild()
Definition: RecordProvider.php:643
‪TYPO3\CMS\Backend\ContextMenu\ItemProviders\RecordProvider\initialize
‪initialize()
Definition: RecordProvider.php:158
‪TYPO3\CMS\Core\Domain\Repository\PageRepository\DOKTYPE_SYSFOLDER
‪const DOKTYPE_SYSFOLDER
Definition: PageRepository.php:104
‪TYPO3\CMS\Backend\ContextMenu\ItemProviders\RecordProvider\isRecordCurrentBackendUser
‪isRecordCurrentBackendUser()
Definition: RecordProvider.php:613
‪TYPO3\CMS\Backend\ContextMenu\ItemProviders\RecordProvider\isRecordLocked
‪isRecordLocked()
Definition: RecordProvider.php:573
‪TYPO3\CMS\Backend\ContextMenu\ItemProviders\RecordProvider\canBeCut
‪canBeCut()
Definition: RecordProvider.php:530
‪TYPO3\CMS\Core\Authentication\JsConfirmation\DELETE
‪const DELETE
Definition: JsConfirmation.php:31
‪TYPO3\CMS\Backend\ContextMenu\ItemProviders\RecordProvider\$pageRecord
‪array $pageRecord
Definition: RecordProvider.php:44
‪TYPO3\CMS\Backend\ContextMenu\ItemProviders\RecordProvider\getPriority
‪getPriority()
Definition: RecordProvider.php:168
‪TYPO3\CMS\Webhooks\Message\$url
‪identifier readonly UriInterface $url
Definition: LoginErrorOccurredMessage.php:36
‪TYPO3\CMS\Core\Type\Bitmask\Permission\CONTENT_EDIT
‪const CONTENT_EDIT
Definition: Permission.php:55
‪TYPO3\CMS\Backend\ContextMenu\ItemProviders\RecordProvider
Definition: RecordProvider.php:33
‪$GLOBALS
‪$GLOBALS['TYPO3_CONF_VARS']['EXTCONF']['adminpanel']['modules']
Definition: ext_localconf.php:25
‪TYPO3\CMS\Backend\Routing\PreviewUriBuilder
Definition: PreviewUriBuilder.php:44
‪TYPO3\CMS\Backend\ContextMenu\ItemProviders\RecordProvider\canBeViewed
‪canBeViewed()
Definition: RecordProvider.php:439
‪TYPO3\CMS\Backend\ContextMenu\ItemProviders\RecordProvider\getAdditionalAttributes
‪getAdditionalAttributes(string $itemName)
Definition: RecordProvider.php:266
‪TYPO3\CMS\Backend\ContextMenu\ItemProviders\RecordProvider\initPermissions
‪initPermissions()
Definition: RecordProvider.php:247
‪TYPO3\CMS\Core\Domain\Repository\PageRepository
Definition: PageRepository.php:69
‪TYPO3\CMS\Backend\ContextMenu\ItemProviders\RecordProvider\canShowInfo
‪canShowInfo()
Definition: RecordProvider.php:422
‪TYPO3\CMS\Core\Utility\GeneralUtility
Definition: GeneralUtility.php:52
‪TYPO3\CMS\Backend\ContextMenu\ItemProviders\RecordProvider\canBeNew
‪canBeNew()
Definition: RecordProvider.php:471
‪TYPO3\CMS\Backend\ContextMenu\ItemProviders\RecordProvider\getViewAdditionalAttributes
‪getViewAdditionalAttributes()
Definition: RecordProvider.php:301
‪TYPO3\CMS\Backend\ContextMenu\ItemProviders
Definition: AbstractProvider.php:18
‪TYPO3\CMS\Backend\ContextMenu\ItemProviders\RecordProvider\getPasteAdditionalAttributes
‪getPasteAdditionalAttributes(string $type)
Definition: RecordProvider.php:328
‪TYPO3\CMS\Backend\ContextMenu\ItemProviders\RecordProvider\canBeEnabled
‪canBeEnabled()
Definition: RecordProvider.php:501
‪TYPO3\CMS\Core\Authentication\JsConfirmation\COPY_MOVE_PASTE
‪const COPY_MOVE_PASTE
Definition: JsConfirmation.php:30