[FEATURE] Add new ViewHelper for record icons 12/48512/5
authorFrank Naegler <frank.naegler@typo3.org>
Wed, 8 Jun 2016 15:52:36 +0000 (17:52 +0200)
committerWouter Wolters <typo3@wouterwolters.nl>
Wed, 8 Jun 2016 19:09:50 +0000 (21:09 +0200)
Resolves: #76531
Releases: master
Change-Id: I8b06a9e0d9ca5ae6e741a043eaca40405ed2ff5d
Reviewed-on: https://review.typo3.org/48512
Reviewed-by: Christian Kuhn <lolli@schwarzbu.ch>
Tested-by: Christian Kuhn <lolli@schwarzbu.ch>
Reviewed-by: Jan Helke <typo3@helke.de>
Tested-by: Jan Helke <typo3@helke.de>
Reviewed-by: Susanne Moog <typo3@susannemoog.de>
Tested-by: Susanne Moog <typo3@susannemoog.de>
Reviewed-by: Wouter Wolters <typo3@wouterwolters.nl>
Tested-by: Wouter Wolters <typo3@wouterwolters.nl>
typo3/sysext/core/Classes/ViewHelpers/IconForRecordViewHelper.php [new file with mode: 0644]
typo3/sysext/core/Documentation/Changelog/master/Feature-76531-AddIconForRecordViewHelper.rst [new file with mode: 0644]
typo3/sysext/core/Tests/Unit/ViewHelpers/IconForRecordViewHelperTest.php [new file with mode: 0644]

diff --git a/typo3/sysext/core/Classes/ViewHelpers/IconForRecordViewHelper.php b/typo3/sysext/core/Classes/ViewHelpers/IconForRecordViewHelper.php
new file mode 100644 (file)
index 0000000..47f5e1f
--- /dev/null
@@ -0,0 +1,60 @@
+<?php
+namespace TYPO3\CMS\Core\ViewHelpers;
+
+/*
+ * This file is part of the TYPO3 CMS project.
+ *
+ * It is free software; you can redistribute it and/or modify it under
+ * the terms of the GNU General Public License, either version 2
+ * of the License, or any later version.
+ *
+ * For the full copyright and license information, please read the
+ * LICENSE.txt file that was distributed with this source code.
+ *
+ * The TYPO3 project - inspiring people to share!
+ */
+
+use TYPO3\CMS\Core\Imaging\Icon;
+use TYPO3\CMS\Core\Imaging\IconFactory;
+use TYPO3\CMS\Core\Utility\GeneralUtility;
+use TYPO3\CMS\Fluid\Core\ViewHelper\AbstractViewHelper;
+
+/**
+ * Displays icon for record
+ */
+class IconForRecordViewHelper extends AbstractViewHelper
+{
+    /**
+     * View helper returns HTML, thus we need to disable output escaping
+     *
+     * @var bool
+     */
+    protected $escapeOutput = false;
+
+    /**
+     * Initializes the arguments
+     */
+    public function initializeArguments()
+    {
+        $this->registerArgument('table', 'string', 'the table for the record icon', true);
+        $this->registerArgument('row', 'array', 'the record row', true);
+        $this->registerArgument('size', 'string', 'the icon size', false, Icon::SIZE_SMALL);
+        $this->registerArgument('alternativeMarkupIdentifier', 'string', 'alternative markup identifier', false, null);
+    }
+
+    /**
+     * Prints icon html for record icon
+     *
+     * @return string
+     */
+    public function render() : string
+    {
+        $table = $this->arguments['table'];
+        $size = $this->arguments['size'];
+        $row = $this->arguments['row'];
+        $alternativeMarkupIdentifier = $this->arguments['alternativeMarkupIdentifier'];
+        /** @var IconFactory $iconFactory */
+        $iconFactory = GeneralUtility::makeInstance(IconFactory::class);
+        return $iconFactory->getIconForRecord($table, $row, $size)->render($alternativeMarkupIdentifier);
+    }
+}
diff --git a/typo3/sysext/core/Documentation/Changelog/master/Feature-76531-AddIconForRecordViewHelper.rst b/typo3/sysext/core/Documentation/Changelog/master/Feature-76531-AddIconForRecordViewHelper.rst
new file mode 100644 (file)
index 0000000..b9d7091
--- /dev/null
@@ -0,0 +1,11 @@
+=============================================
+Feature: #76531 - Add IconForRecordViewHelper
+=============================================
+
+Description
+===========
+
+A new ViewHelper to render icons for records has been added.
+Now it is possible to to render icons for records in fluid.
+
+``<core:iconForRecord table="tt_content" row="{recordRow}" />``
diff --git a/typo3/sysext/core/Tests/Unit/ViewHelpers/IconForRecordViewHelperTest.php b/typo3/sysext/core/Tests/Unit/ViewHelpers/IconForRecordViewHelperTest.php
new file mode 100644 (file)
index 0000000..963bd01
--- /dev/null
@@ -0,0 +1,80 @@
+<?php
+namespace TYPO3\CMS\Core\Tests\Unit\ViewHelpers;
+
+/*
+ * This file is part of the TYPO3 CMS project.
+ *
+ * It is free software; you can redistribute it and/or modify it under
+ * the terms of the GNU General Public License, either version 2
+ * of the License, or any later version.
+ *
+ * For the full copyright and license information, please read the
+ * LICENSE.txt file that was distributed with this source code.
+ *
+ * The TYPO3 project - inspiring people to share!
+ */
+
+use Prophecy\Argument;
+use Prophecy\Prophecy\ObjectProphecy;
+use TYPO3\CMS\Core\Imaging\Icon;
+use TYPO3\CMS\Core\Imaging\IconFactory;
+use TYPO3\CMS\Core\Utility\GeneralUtility;
+use TYPO3\CMS\Core\ViewHelpers\IconForRecordViewHelper;
+use TYPO3\CMS\Core\ViewHelpers\IconViewHelper;
+use TYPO3\CMS\Fluid\Tests\Unit\ViewHelpers\ViewHelperBaseTestcase;
+use TYPO3Fluid\Fluid\Core\Rendering\RenderingContextInterface;
+
+/**
+ * Test case
+ */
+class IconForRecordViewHelperTest extends ViewHelperBaseTestcase
+{
+    /**
+     * @var Icon|ObjectProphecy
+     */
+    protected $iconProphecy;
+
+    /**
+     * @var IconFactory|ObjectProphecy
+     */
+    protected $iconFactoryProphecy;
+
+    /**
+     * @var IconViewHelper
+     */
+    protected $viewHelper;
+
+    protected function setUp()
+    {
+        parent::setUp();
+        $this->iconProphecy = $this->prophesize(Icon::class);
+        $this->iconProphecy->render(Argument::any())->willReturn('icon html');
+        $this->iconFactoryProphecy = $this->prophesize(IconFactory::class);
+        $this->iconFactoryProphecy->getIconForRecord(Argument::cetera())->willReturn($this->iconProphecy->reveal());
+        GeneralUtility::addInstance(IconFactory::class, $this->iconFactoryProphecy->reveal());
+    }
+
+    /**
+     * @test
+     * @return void
+     */
+    public function renderRendersIconByWayOfTheIconFactoryAccordingToGivenArguments()
+    {
+        $renderingContextProphecy = $this->prophesize(RenderingContextInterface::class);
+
+        $row = ['uid' => 123];
+        $arguments = [
+            'table' => 'tt_content',
+            'row' => $row,
+            'size' => Icon::SIZE_LARGE,
+            'alternativeMarkupIdentifier' => 'inline'
+        ];
+        $iconForRecordViewHelper = new IconForRecordViewHelper();
+        $iconForRecordViewHelper->setRenderingContext($renderingContextProphecy->reveal());
+        $iconForRecordViewHelper->setArguments($arguments);
+        $iconForRecordViewHelper->render();
+
+        $this->iconFactoryProphecy->getIconForRecord('tt_content', $row, Icon::SIZE_LARGE)->shouldHaveBeenCalled();
+        $this->iconProphecy->render('inline')->shouldHaveBeenCalled();
+    }
+}