‪TYPO3CMS  10.4
AbstractProvider.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 
26 
31 {
32 
38  protected ‪$languageService;
39 
43  protected ‪$backendUser;
44 
48  protected ‪$clipboard;
49 
55  protected ‪$itemsConfiguration = [];
56 
62  protected ‪$disabledItems = [];
63 
69  protected ‪$table = '';
70 
74  protected ‪$identifier = '';
75 
81  protected ‪$context = '';
82 
91  public function ‪__construct(string ‪$table, string ‪$identifier, string ‪$context = '')
92  {
93  $this->table = ‪$table;
94  $this->identifier = ‪$identifier;
95  $this->context = ‪$context;
96  $this->languageService = ‪$GLOBALS['LANG'];
97  $this->backendUser = ‪$GLOBALS['BE_USER'];
98  }
99 
103  protected function ‪initialize()
104  {
105  $this->‪initClipboard();
106  $this->‪initDisabledItems();
107  }
108 
115  public function ‪getPriority(): int
116  {
117  return 100;
118  }
119 
125  public function ‪canHandle(): bool
126  {
127  return false;
128  }
129 
133  protected function ‪initClipboard()
134  {
135  ‪$clipboard = GeneralUtility::makeInstance(Clipboard::class);
137  // This locks the clipboard to the Normal for this request.
139  // This removes all no longer existing elements
141  // This stores the changed clipboard data
143  $this->clipboard = ‪$clipboard;
144  }
145 
150  protected function ‪initDisabledItems()
151  {
152  if ($this->context) {
153  $tsConfigValue = $this->backendUser->getTSConfig()['options.']['contextMenu.']['table.'][$this->table . '.'][$this->context . '.']['disableItems'] ?? '';
154  } else {
155  $tsConfigValue = $this->backendUser->getTSConfig()['options.']['contextMenu.']['table.'][$this->table . '.']['disableItems'] ?? '';
156  }
157  $this->disabledItems = ‪GeneralUtility::trimExplode(',', $tsConfigValue, true);
158  }
159 
166  public function ‪addItems(array $items): array
167  {
168  $this->‪initialize();
169  $items += $this->‪prepareItems($this->itemsConfiguration);
170  return $items;
171  }
172 
179  protected function ‪prepareItems(array ‪$itemsConfiguration): array
180  {
181  $iconFactory = GeneralUtility::makeInstance(IconFactory::class);
182  $items = [];
183  foreach (‪$itemsConfiguration as $name => $configuration) {
184  $type = !empty($configuration['type']) ? $configuration['type'] : 'item';
185  if ($this->‪canRender($name, $type)) {
186  $items[$name] = [
187  'type' => $type,
188  'label' => !empty($configuration['label']) ? htmlspecialchars($this->languageService->sL($configuration['label'])) : '',
189  'icon' => !empty($configuration['iconIdentifier']) ? $iconFactory->getIcon($configuration['iconIdentifier'], ‪Icon::SIZE_SMALL)->render() : '',
190  'additionalAttributes' => $this->‪getAdditionalAttributes($name),
191  'callbackAction' => !empty($configuration['callbackAction']) ? $configuration['callbackAction'] : ''
192  ];
193  if ($type === 'submenu') {
194  $items[$name]['childItems'] = $this->‪prepareItems($configuration['childItems']);
195  }
196  }
197  }
198  return $items;
199  }
200 
208  protected function ‪getAdditionalAttributes(string $itemName): array
209  {
210  return [];
211  }
212 
220  protected function ‪canRender(string $itemName, string $type): bool
221  {
222  return true;
223  }
224 
230  protected function ‪getIdentifier(): string
231  {
232  return '';
233  }
234 }
‪TYPO3\CMS\Core\Imaging\Icon\SIZE_SMALL
‪const SIZE_SMALL
Definition: Icon.php:30
‪TYPO3\CMS\Backend\ContextMenu\ItemProviders\AbstractProvider\addItems
‪array addItems(array $items)
Definition: AbstractProvider.php:158
‪TYPO3\CMS\Backend\Clipboard\Clipboard
Definition: Clipboard.php:43
‪TYPO3\CMS\Core\Imaging\Icon
Definition: Icon.php:26
‪TYPO3\CMS\Backend\ContextMenu\ItemProviders\AbstractProvider\$languageService
‪LanguageService $languageService
Definition: AbstractProvider.php:37
‪TYPO3\CMS\Backend\ContextMenu\ItemProviders\AbstractProvider\$disabledItems
‪array $disabledItems
Definition: AbstractProvider.php:57
‪TYPO3\CMS\Backend\Clipboard\Clipboard\lockToNormal
‪lockToNormal()
Definition: Clipboard.php:135
‪TYPO3\CMS\Backend\ContextMenu\ItemProviders\AbstractProvider\__construct
‪__construct(string $table, string $identifier, string $context='')
Definition: AbstractProvider.php:83
‪TYPO3\CMS\Backend\ContextMenu\ItemProviders\AbstractProvider\$table
‪string $table
Definition: AbstractProvider.php:63
‪TYPO3\CMS\Backend\ContextMenu\ItemProviders\AbstractProvider\initialize
‪initialize()
Definition: AbstractProvider.php:95
‪TYPO3\CMS\Core\Imaging\IconFactory
Definition: IconFactory.php:33
‪TYPO3\CMS\Backend\ContextMenu\ItemProviders\AbstractProvider\prepareItems
‪array prepareItems(array $itemsConfiguration)
Definition: AbstractProvider.php:171
‪TYPO3\CMS\Backend\ContextMenu\ItemProviders\AbstractProvider
Definition: AbstractProvider.php:31
‪TYPO3\CMS\Backend\Clipboard\Clipboard\initializeClipboard
‪initializeClipboard()
Definition: Clipboard.php:115
‪TYPO3\CMS\Backend\ContextMenu\ItemProviders\AbstractProvider\$itemsConfiguration
‪array $itemsConfiguration
Definition: AbstractProvider.php:51
‪TYPO3\CMS\Backend\ContextMenu\ItemProviders\AbstractProvider\canRender
‪bool canRender(string $itemName, string $type)
Definition: AbstractProvider.php:212
‪TYPO3\CMS\Backend\ContextMenu\ItemProviders\ProviderInterface
Definition: ProviderInterface.php:24
‪TYPO3\CMS\Backend\ContextMenu\ItemProviders\AbstractProvider\$context
‪string $context
Definition: AbstractProvider.php:73
‪TYPO3\CMS\Backend\ContextMenu\ItemProviders\AbstractProvider\getIdentifier
‪string getIdentifier()
Definition: AbstractProvider.php:222
‪TYPO3\CMS\Backend\ContextMenu\ItemProviders\AbstractProvider\getAdditionalAttributes
‪array getAdditionalAttributes(string $itemName)
Definition: AbstractProvider.php:200
‪TYPO3\CMS\Core\Authentication\BackendUserAuthentication
Definition: BackendUserAuthentication.php:62
‪TYPO3\CMS\Backend\Clipboard\Clipboard\endClipboard
‪endClipboard()
Definition: Clipboard.php:212
‪TYPO3\CMS\Core\Utility\GeneralUtility\trimExplode
‪static string[] trimExplode($delim, $string, $removeEmptyValues=false, $limit=0)
Definition: GeneralUtility.php:1059
‪$GLOBALS
‪$GLOBALS['TYPO3_CONF_VARS']['EXTCONF']['adminpanel']['modules']
Definition: ext_localconf.php:5
‪TYPO3\CMS\Backend\ContextMenu\ItemProviders\AbstractProvider\getPriority
‪int getPriority()
Definition: AbstractProvider.php:107
‪TYPO3\CMS\Backend\Clipboard\Clipboard\cleanCurrent
‪cleanCurrent()
Definition: Clipboard.php:820
‪TYPO3\CMS\Backend\ContextMenu\ItemProviders\AbstractProvider\canHandle
‪bool canHandle()
Definition: AbstractProvider.php:117
‪TYPO3\CMS\Backend\ContextMenu\ItemProviders\AbstractProvider\$identifier
‪string $identifier
Definition: AbstractProvider.php:67
‪TYPO3\CMS\Core\Localization\LanguageService
Definition: LanguageService.php:42
‪TYPO3\CMS\Backend\ContextMenu\ItemProviders\AbstractProvider\$backendUser
‪BackendUserAuthentication $backendUser
Definition: AbstractProvider.php:41
‪TYPO3\CMS\Core\Utility\GeneralUtility
Definition: GeneralUtility.php:46
‪TYPO3\CMS\Backend\ContextMenu\ItemProviders\AbstractProvider\initClipboard
‪initClipboard()
Definition: AbstractProvider.php:125
‪TYPO3\CMS\Backend\ContextMenu\ItemProviders
Definition: AbstractProvider.php:18
‪TYPO3\CMS\Backend\ContextMenu\ItemProviders\AbstractProvider\$clipboard
‪TYPO3 CMS Backend Clipboard Clipboard $clipboard
Definition: AbstractProvider.php:45
‪TYPO3\CMS\Backend\ContextMenu\ItemProviders\AbstractProvider\initDisabledItems
‪initDisabledItems()
Definition: AbstractProvider.php:142