From d3a449fff77cd442c8998986f68d903264a15bb0 Mon Sep 17 00:00:00 2001 From: Benni Mack <benni@typo3.org> Date: Tue, 16 Feb 2016 14:35:44 +0100 Subject: [PATCH] [BUGFIX] Allow OnlineMedia Renderers to override via Fluid When using the Online Media (Youtube / Vimeo) then the autoplay option is always taken from the FileReference, overriding the option that might be set via Fluid. A check if the option hasn't been set yet makes the overriding order clearer. Resolves: #73484 Releases: master, 7.6 Change-Id: I3fb57c88383445062f5beabd8d8287ff772974d3 Reviewed-on: https://review.typo3.org/46712 Reviewed-by: Daniel Gorges <daniel.gorges@b13.de> Tested-by: Daniel Gorges <daniel.gorges@b13.de> Reviewed-by: Wouter Wolters <typo3@wouterwolters.nl> Tested-by: Wouter Wolters <typo3@wouterwolters.nl> --- .../Resource/Rendering/VimeoRenderer.php | 3 ++- .../Resource/Rendering/YouTubeRenderer.php | 3 ++- .../Resource/Rendering/VimeoRendererTest.php | 20 ++++++++++++++++++ .../Rendering/YouTubeRendererTest.php | 21 +++++++++++++++++++ 4 files changed, 45 insertions(+), 2 deletions(-) diff --git a/typo3/sysext/core/Classes/Resource/Rendering/VimeoRenderer.php b/typo3/sysext/core/Classes/Resource/Rendering/VimeoRenderer.php index 59756903482a..f013f1e2c0ee 100644 --- a/typo3/sysext/core/Classes/Resource/Rendering/VimeoRenderer.php +++ b/typo3/sysext/core/Classes/Resource/Rendering/VimeoRenderer.php @@ -89,7 +89,8 @@ class VimeoRenderer implements FileRendererInterface */ public function render(FileInterface $file, $width, $height, array $options = null, $usedPathsRelativeToCurrentScript = false) { - if ($file instanceof FileReference) { + // Check for an autoplay option at the file reference itself, if not overriden yet. + if (!isset($options['autoplay']) && $file instanceof FileReference) { $autoplay = $file->getProperty('autoplay'); if ($autoplay !== null) { $options['autoplay'] = $autoplay; diff --git a/typo3/sysext/core/Classes/Resource/Rendering/YouTubeRenderer.php b/typo3/sysext/core/Classes/Resource/Rendering/YouTubeRenderer.php index 0282ab0f54b3..a4dfb1eb00bd 100644 --- a/typo3/sysext/core/Classes/Resource/Rendering/YouTubeRenderer.php +++ b/typo3/sysext/core/Classes/Resource/Rendering/YouTubeRenderer.php @@ -89,7 +89,8 @@ class YouTubeRenderer implements FileRendererInterface */ public function render(FileInterface $file, $width, $height, array $options = null, $usedPathsRelativeToCurrentScript = false) { - if ($file instanceof FileReference) { + // Check for an autoplay option at the file reference itself, if not overriden yet. + if (!isset($options['autoplay']) && $file instanceof FileReference) { $autoplay = $file->getProperty('autoplay'); if ($autoplay !== null) { $options['autoplay'] = $autoplay; diff --git a/typo3/sysext/core/Tests/Unit/Resource/Rendering/VimeoRendererTest.php b/typo3/sysext/core/Tests/Unit/Resource/Rendering/VimeoRendererTest.php index 350f6ea5575f..88210241a284 100644 --- a/typo3/sysext/core/Tests/Unit/Resource/Rendering/VimeoRendererTest.php +++ b/typo3/sysext/core/Tests/Unit/Resource/Rendering/VimeoRendererTest.php @@ -15,6 +15,7 @@ namespace TYPO3\CMS\Core\Tests\Unit\Resource\Rendering; */ use TYPO3\CMS\Core\Resource\File; +use TYPO3\CMS\Core\Resource\FileReference; use TYPO3\CMS\Core\Resource\OnlineMedia\Helpers\VimeoHelper; use TYPO3\CMS\Core\Resource\Rendering\VimeoRenderer; use TYPO3\CMS\Core\Tests\UnitTestCase; @@ -123,6 +124,25 @@ class VimeoRendererTest extends UnitTestCase ); } + /** + * @test + */ + public function renderOutputWithAutoplayFromReferenceIsCorrect() + { + /** @var File|\PHPUnit_Framework_MockObject_MockObject $fileResourceMock */ + $fileResourceMock = $this->getMock(File::class, array(), array(), '', false); + + /** @var FileReference|\PHPUnit_Framework_MockObject_MockObject $fileResourceMock */ + $fileReferenceMock = $this->getMock(FileReference::class, array(), array(), '', false); + $fileReferenceMock->expects($this->any())->method('getProperty')->will($this->returnValue(1)); + $fileReferenceMock->expects($this->any())->method('getOriginalFile')->willReturn($fileResourceMock); + + $this->assertSame( + '<iframe src="//player.vimeo.com/video/7331?autoplay=1&title=0&byline=0&portrait=0" allowfullscreen width="300" height="200"></iframe>', + $this->subject->render($fileReferenceMock, '300m', '200') + ); + } + /** * @test */ diff --git a/typo3/sysext/core/Tests/Unit/Resource/Rendering/YouTubeRendererTest.php b/typo3/sysext/core/Tests/Unit/Resource/Rendering/YouTubeRendererTest.php index 40895d786cbb..78fe780b30cf 100644 --- a/typo3/sysext/core/Tests/Unit/Resource/Rendering/YouTubeRendererTest.php +++ b/typo3/sysext/core/Tests/Unit/Resource/Rendering/YouTubeRendererTest.php @@ -15,6 +15,7 @@ namespace TYPO3\CMS\Core\Tests\Unit\Resource\Rendering; */ use TYPO3\CMS\Core\Resource\File; +use TYPO3\CMS\Core\Resource\FileReference; use TYPO3\CMS\Core\Resource\OnlineMedia\Helpers\YouTubeHelper; use TYPO3\CMS\Core\Resource\Rendering\YouTubeRenderer; use TYPO3\CMS\Core\Tests\UnitTestCase; @@ -126,6 +127,26 @@ class YouTubeRendererTest extends UnitTestCase ); } + /** + * @test + */ + public function renderOutputWithAutoplayFromFileReferenceIsCorrect() + { + /** @var File|\PHPUnit_Framework_MockObject_MockObject $fileResourceMock */ + $fileResourceMock = $this->getMock(File::class, array(), array(), '', false); + + /** @var FileReference|\PHPUnit_Framework_MockObject_MockObject $fileResourceMock */ + $fileReferenceMock = $this->getMock(FileReference::class, array(), array(), '', false); + $fileReferenceMock->expects($this->any())->method('getProperty')->will($this->returnValue(1)); + $fileReferenceMock->expects($this->any())->method('getOriginalFile')->willReturn($fileResourceMock); + + + $this->assertSame( + '<iframe src="//www.youtube.com/embed/7331?autohide=1&controls=2&autoplay=1&enablejsapi=1&origin=test.server.org&showinfo=0" allowfullscreen width="300" height="200"></iframe>', + $this->subject->render($fileReferenceMock, '300m', '200') + ); + } + /** * @test */ -- GitLab