[TASK] Add validation for name option in FontAwesomeProvider
[Packages/TYPO3.CMS.git] / typo3 / sysext / core / Classes / Imaging / IconProvider / FontawesomeIconProvider.php
1 <?php
2 namespace TYPO3\CMS\Core\Imaging\IconProvider;
3
4 /*
5 * This file is part of the TYPO3 CMS project.
6 *
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.
10 *
11 * For the full copyright and license information, please read the
12 * LICENSE.txt file that was distributed with this source code.
13 *
14 * The TYPO3 project - inspiring people to share!
15 */
16
17 use TYPO3\CMS\Core\Imaging\Icon;
18 use TYPO3\CMS\Core\Imaging\IconProviderInterface;
19
20 /**
21 * Class FontawesomeIconProvider
22 */
23 class FontawesomeIconProvider implements IconProviderInterface {
24
25 /**
26 * @param Icon $icon
27 * @param array $options
28 */
29 public function prepareIconMarkup(Icon $icon, array $options = array()) {
30 $icon->setMarkup($this->generateMarkup($icon, $options));
31 }
32
33 /**
34 * @param Icon $icon
35 * @param array $options
36 *
37 * @throws \InvalidArgumentException
38 * @return string
39 */
40 protected function generateMarkup(Icon $icon, array $options) {
41 if (empty($options['name'])) {
42 throw new \InvalidArgumentException('The option "name" is required and must not be empty', 1440754978);
43 }
44 if (preg_match('/^[a-zA-Z0-9\\-]+$/', $options['name']) !== 1) {
45 throw new \InvalidArgumentException('The option "name" must only contain characters a-z, A-Z, 0-9 or -', 1440754979);
46 }
47 $additionalClasses = (!empty($options['additionalClasses'])) ? ' ' . $options['additionalClasses'] : '';
48 return '<span class="icon-unify"><i class="fa fa-' . htmlspecialchars($options['name']) . htmlspecialchars($additionalClasses) . '"></i></span>';
49 }
50 }