[TASK] Call explicit render() on icon objects
[Packages/TYPO3.CMS.git] / typo3 / sysext / fluid / Classes / ViewHelpers / Be / Buttons / IconViewHelper.php
1 <?php
2 namespace TYPO3\CMS\Fluid\ViewHelpers\Be\Buttons;
3
4 /* *
5 * This script is backported from the TYPO3 Flow package "TYPO3.Fluid". *
6 * *
7 * It is free software; you can redistribute it and/or modify it under *
8 * the terms of the GNU Lesser General Public License, either version 3 *
9 * of the License, or (at your option) any later version. *
10 * *
11 * *
12 * This script is distributed in the hope that it will be useful, but *
13 * WITHOUT ANY WARRANTY; without even the implied warranty of MERCHAN- *
14 * TABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser *
15 * General Public License for more details. *
16 * *
17 * You should have received a copy of the GNU Lesser General Public *
18 * License along with the script. *
19 * If not, see http://www.gnu.org/licenses/lgpl.html *
20 * *
21 * The TYPO3 project - inspiring people to share! *
22 * */
23
24 use TYPO3\CMS\Core\Imaging\Icon;
25 use TYPO3\CMS\Core\Imaging\IconFactory;
26 use TYPO3\CMS\Core\Utility\GeneralUtility;
27 use TYPO3\CMS\Fluid\Core\Rendering\RenderingContextInterface;
28 use TYPO3\CMS\Fluid\Core\ViewHelper\Facets\CompilableInterface;
29 use TYPO3\CMS\Fluid\ViewHelpers\Be\AbstractBackendViewHelper;
30
31 /**
32 * View helper which returns a button icon
33 *
34 * = Examples =
35 *
36 * <code title="Default">
37 * <f:be.buttons.icon uri="{f:uri.action()}" />
38 * </code>
39 * <output>
40 * An icon button as known from the TYPO3 backend, skinned and linked with the default action of the current controller.
41 * Note: By default the "close" icon is used as image
42 * </output>
43 *
44 * <code title="Default">
45 * <f:be.buttons.icon uri="{f:uri.action(action:'new')}" icon="actions-document-new" title="Create new Foo" />
46 * </code>
47 *
48 * <code title="Default">
49 * <f:be.buttons.icon icon="actions-document-new" title="Create new Foo" />
50 * </code>
51 * <output>
52 * Here the "actions-document-new" icon is returned, but without link.
53 * </output>
54 * @deprecated since TYPO3 CMS 7, will be removed in TYPO3 CMS 8, use \TYPO3\CMS\Core\ViewHelpers\IconViewHelper instead
55 */
56 class IconViewHelper extends AbstractBackendViewHelper implements CompilableInterface {
57
58 /**
59 * Renders a linked icon as known from the TYPO3 backend.
60 *
61 * If the URI is left empty, the icon is rendered without link.
62 *
63 * @param string $uri The target URI for the link. If you want to execute JavaScript here, prefix the URI with
64 * "javascript:". Leave empty to render just an icon.
65 * @param string $icon Icon to be used.
66 * @param string $title Title attribute of the icon construct
67 * @param array $additionalAttributes Additional tag attributes. They will be added directly to the resulting HTML tag.
68 *
69 * @return string The rendered icon with or without link
70 * @deprecated since TYPO3 CMS 7, will be removed in TYPO3 CMS 8, use \TYPO3\CMS\Core\ViewHelpers\IconViewHelper instead
71 */
72 public function render($uri = '', $icon = 'actions-document-close', $title = '', $additionalAttributes = array()) {
73 return static::renderStatic(
74 array(
75 'uri' => $uri,
76 'icon' => $icon,
77 'title' => $title,
78 'additionalAttributes' => $additionalAttributes
79 ),
80 $this->buildRenderChildrenClosure(),
81 $this->renderingContext
82 );
83 }
84
85 /**
86 * @param array $arguments
87 * @param callable $renderChildrenClosure
88 * @param RenderingContextInterface $renderingContext
89 * @return string
90 * @deprecated since TYPO3 CMS 7, will be removed in TYPO3 CMS 8, use \TYPO3\CMS\Core\ViewHelpers\IconViewHelper instead
91 */
92 static public function renderStatic(array $arguments, \Closure $renderChildrenClosure, RenderingContextInterface $renderingContext) {
93 GeneralUtility::logDeprecatedFunction();
94 $uri = $arguments['uri'];
95 $icon = $arguments['icon'];
96 $title = $arguments['title'];
97 $additionalAttributes = $arguments['additionalAttributes'];
98 $additionalTagAttributes = '';
99 $iconFactory = GeneralUtility::makeInstance(IconFactory::class);
100 $icon = '<span title="' . htmlspecialchars($title) . '">' . $iconFactory->getIcon($icon, Icon::SIZE_SMALL)->render() . '</span>';
101 if (empty($uri)) {
102 return $icon;
103 }
104
105 if ($additionalAttributes) {
106 foreach ($additionalAttributes as $argumentKey => $argumentValue) {
107 $additionalTagAttributes .= ' ' . $argumentKey . '="' . htmlspecialchars($argumentValue) . '"';
108 }
109 }
110 return '<a href="' . $uri . '"' . $additionalTagAttributes . '>' . $icon . '</a>';
111 }
112
113 }