2 namespace TYPO3\CMS\Core\Imaging
;
5 * This file is part of the TYPO3 CMS project.
7 * It is free software; you can redistribute it and/or modify it under
8 * the terms of the GNU General Public License, either version 2
9 * of the License, or any later version.
11 * For the full copyright and license information, please read the
12 * LICENSE.txt file that was distributed with this source code.
14 * The TYPO3 project - inspiring people to share!
17 use TYPO3\CMS\Core\Exception
;
18 use TYPO3\CMS\Core\Imaging\IconProvider\BitmapIconProvider
;
19 use TYPO3\CMS\Core\Imaging\IconProvider\FontawesomeIconProvider
;
20 use TYPO3\CMS\Core\Imaging\IconProvider\SvgIconProvider
;
23 * Class IconRegistry, which makes it possible to register custom icons
24 * from within an extension.
26 class IconRegistry
implements \TYPO3\CMS\Core\SingletonInterface
{
33 protected $icons = array(
34 // Default icon, fallback
35 'default-not-found' => array(
36 'provider' => FontawesomeIconProvider
::class,
38 'name' => 'times-circle',
43 'apps-toolbar-menu-cache' => array(
44 'provider' => FontawesomeIconProvider
::class,
49 'apps-toolbar-menu-shortcut' => array(
50 'provider' => FontawesomeIconProvider
::class,
55 'actions-document-close' => array(
56 'provider' => FontawesomeIconProvider
::class,
61 'actions-actions-document-duplicates-select' => array(
62 'provider' => BitmapIconProvider
::class,
64 'source' => 'EXT:t3skin/images/icons/actions/document-duplicates-select.png',
67 'actions-document-edit-access' => array(
68 'provider' => FontawesomeIconProvider
::class,
73 'actions-document-export-t3d' => array(
74 'provider' => FontawesomeIconProvider
::class,
79 'actions-document-history-open' => array(
80 'provider' => FontawesomeIconProvider
::class,
85 'actions-document-info' => array(
86 'provider' => FontawesomeIconProvider
::class,
88 'name' => 'info-circle',
91 'actions-document-import-t3d' => array(
92 'provider' => FontawesomeIconProvider
::class,
97 'actions-document-localize' => array(
98 'provider' => BitmapIconProvider
::class,
100 'source' => 'EXT:t3skin/images/icons/actions/document-localize.png',
103 'actions-document-move' => array(
104 'provider' => FontawesomeIconProvider
::class,
109 'actions-document-new' => array(
110 'provider' => FontawesomeIconProvider
::class,
112 'name' => 'plus-square',
115 'actions-document-open' => array(
116 'provider' => FontawesomeIconProvider
::class,
121 'actions-document-paste-after' => array(
122 'provider' => FontawesomeIconProvider
::class,
124 'name' => 'clipboard',
127 'actions-document-select' => array(
128 'provider' => FontawesomeIconProvider
::class,
130 'name' => 'check-square-o',
133 'actions-document-paste-into' => array(
134 'provider' => FontawesomeIconProvider
::class,
136 'name' => 'clipboard',
139 'actions-document-save' => array(
140 'provider' => BitmapIconProvider
::class,
142 'source' => 'EXT:t3skin/images/icons/actions/document-save.png'
145 'actions-document-save-close' => array(
146 'provider' => BitmapIconProvider
::class,
148 'source' => 'EXT:t3skin/images/icons/actions/document-save-close.png'
151 'actions-document-synchronize' => array(
152 'provider' => BitmapIconProvider
::class,
154 'source' => 'EXT:t3skin/images/icons/actions/document-synchronize.png'
157 'actions-document-view' => array(
158 'provider' => FontawesomeIconProvider
::class,
163 'actions-edit-copy' => array(
164 'provider' => FontawesomeIconProvider
::class,
169 'actions-edit-copy-release' => array(
170 'provider' => FontawesomeIconProvider
::class,
175 'actions-edit-cut' => array(
176 'provider' => FontawesomeIconProvider
::class,
178 'name' => 'scissors',
181 'actions-edit-cut-release' => array(
182 'provider' => FontawesomeIconProvider
::class,
184 'name' => 'scissors',
187 'actions-edit-download' => array(
188 'provider' => FontawesomeIconProvider
::class,
190 'name' => 'download',
193 'actions-edit-delete' => array(
194 'provider' => FontawesomeIconProvider
::class,
199 'actions-edit-localize-status-low' => array(
200 'provider' => BitmapIconProvider
::class,
202 'source' => 'EXT:t3skin/images/icons/actions/edit-localize-status-low.png',
205 'actions-edit-localize-status-high' => array(
206 'provider' => BitmapIconProvider
::class,
208 'source' => 'EXT:t3skin/images/icons/actions/edit-localize-status-high.png',
211 'actions-edit-merge-localization' => array(
212 'provider' => BitmapIconProvider
::class,
214 'source' => 'EXT:t3skin/images/icons/actions/edit-merge-localization.png',
217 'actions-edit-pick-date' => array(
218 'provider' => FontawesomeIconProvider
::class,
220 'name' => 'calendar',
223 'actions-edit-rename' => array(
224 'provider' => FontawesomeIconProvider
::class,
226 'name' => 'quote-right',
229 'actions-edit-hide' => array(
230 'provider' => FontawesomeIconProvider
::class,
232 'name' => 'toggle-on',
235 'actions-edit-replace' => array(
236 'provider' => FontawesomeIconProvider
::class,
241 'actions-edit-restore' => array(
242 'provider' => BitmapIconProvider
::class,
244 'source' => 'EXT:t3skin/images/icons/actions/edit-restore.png',
247 'actions-edit-undo' => array(
248 'provider' => FontawesomeIconProvider
::class,
253 'actions-edit-unhide' => array(
254 'provider' => FontawesomeIconProvider
::class,
256 'name' => 'toggle-off',
259 'actions-edit-upload' => array(
260 'provider' => FontawesomeIconProvider
::class,
265 'actions-insert-record' => array(
266 'provider' => BitmapIconProvider
::class,
268 'source' => 'EXT:t3skin/images/icons/actions/insert-record.png',
271 'actions-insert-reference' => array(
272 'provider' => BitmapIconProvider
::class,
274 'source' => 'EXT:t3skin/images/icons/actions/insert-reference.png',
277 'actions-markstate' => array(
278 'provider' => FontawesomeIconProvider
::class,
280 'name' => 'square-o',
283 'actions-page-open' => array(
284 'provider' => FontawesomeIconProvider
::class,
286 'name' => 'pencil-square-o',
289 'actions-system-cache-clear-impact-low' => array(
290 'provider' => SvgIconProvider
::class,
292 'source' => 'EXT:backend/Resources/Public/Icons/Action/actions-system-cache-clear-impact-low.svg',
295 'actions-system-cache-clear-impact-medium' => array(
296 'provider' => SvgIconProvider
::class,
298 'source' => 'EXT:backend/Resources/Public/Icons/Action/actions-system-cache-clear-impact-medium.svg',
301 'actions-system-cache-clear-impact-high' => array(
302 'provider' => SvgIconProvider
::class,
304 'source' => 'EXT:backend/Resources/Public/Icons/Action/actions-system-cache-clear-impact-high.svg',
307 'actions-system-extension-configure' => array(
308 'provider' => FontawesomeIconProvider
::class,
313 'actions-system-extension-download' => array(
314 'provider' => FontawesomeIconProvider
::class,
316 'name' => 'download',
319 'actions-system-extension-install' => array(
320 'provider' => FontawesomeIconProvider
::class,
322 'name' => 'plus-circle',
325 'actions-system-extension-import' => array(
326 'provider' => FontawesomeIconProvider
::class,
328 'name' => 'cloud-download',
331 'actions-system-extension-uninstall' => array(
332 'provider' => FontawesomeIconProvider
::class,
334 'name' => 'minus-square',
337 'actions-system-extension-sqldump' => array(
338 'provider' => FontawesomeIconProvider
::class,
340 'name' => 'database',
343 'actions-system-extension-update' => array(
344 'provider' => FontawesomeIconProvider
::class,
349 'actions-system-list-open' => array(
350 'provider' => FontawesomeIconProvider
::class,
352 'name' => 'list-alt',
355 'actions-version-open' => array(
356 'provider' => FontawesomeIconProvider
::class,
361 'actions-system-refresh' => array(
362 'provider' => FontawesomeIconProvider
::class,
367 'actions-version-swap-version' => array(
368 'provider' => FontawesomeIconProvider
::class,
370 'name' => 'exchange',
373 'actions-unmarkstate' => array(
374 'provider' => FontawesomeIconProvider
::class,
376 'name' => 'check-square-o',
379 'actions-view-go-back' => array(
380 'provider' => FontawesomeIconProvider
::class,
382 'name' => 'angle-double-left',
385 'actions-view-go-up' => array(
386 'provider' => FontawesomeIconProvider
::class,
388 'name' => 'level-up',
391 'actions-view-paging-first' => array(
392 'provider' => FontawesomeIconProvider
::class,
394 'name' => 'step-backward',
397 'actions-view-paging-last' => array(
398 'provider' => FontawesomeIconProvider
::class,
400 'name' => 'step-forward',
403 'actions-view-paging-previous' => array(
404 'provider' => FontawesomeIconProvider
::class,
406 'name' => 'arrow-left',
409 'actions-view-paging-next' => array(
410 'provider' => FontawesomeIconProvider
::class,
412 'name' => 'arrow-right',
417 'status-status-current' => array(
418 'provider' => FontawesomeIconProvider
::class,
420 'name' => 'caret-right',
425 'overlay-read-only' => array(
426 'provider' => FontawesomeIconProvider
::class,
428 'name' => 'times-circle',
436 protected $defaultIconIdentifier = 'default-not-found';
439 * @param string $identifier
443 public function isRegistered($identifier) {
444 return !empty($this->icons
[$identifier]);
450 public function getDefaultIconIdentifier() {
451 return $this->defaultIconIdentifier
;
455 * Registers an icon to be available inside the Icon Factory
457 * @param string $identifier
458 * @param string $iconProviderClassName
459 * @param array $options
461 * @throws \InvalidArgumentException
463 public function registerIcon($identifier, $iconProviderClassName, array $options = array()) {
464 if (!in_array(IconProviderInterface
::class, class_implements($iconProviderClassName), TRUE)) {
465 throw new \
InvalidArgumentException('An IconProvider must implement ' . IconProviderInterface
::class, 1437425803);
467 $this->icons
[$identifier] = array(
468 'provider' => $iconProviderClassName,
469 'options' => $options
474 * Fetches the configuration provided by registerIcon()
476 * @param string $identifier the icon identifier
480 public function getIconConfigurationByIdentifier($identifier) {
481 if (!$this->isRegistered($identifier)) {
482 throw new Exception('Icon with identifier "' . $identifier . '" is not registered"', 1437425804);
484 return $this->icons
[$identifier];
491 public function getAllRegisteredIconIdentifiers() {
492 return array_keys($this->icons
);