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&amp;title=0&amp;byline=0&amp;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&amp;controls=2&amp;autoplay=1&amp;enablejsapi=1&amp;origin=test.server.org&amp;showinfo=0" allowfullscreen width="300" height="200"></iframe>',
+            $this->subject->render($fileReferenceMock, '300m', '200')
+        );
+    }
+
     /**
      * @test
      */
-- 
GitLab