Steps to reproduce:
1. Log in to the Admin.
2. To edit an existing product go to CATALOG > Products > Edit or to create a new product go to CATALOG > Products > Edit > Add Product .
3. Click the Images And Videos tab in the Product page.
4. Click Add Video and add a Vimeo video's URL.
5. Expected result: The new video is found and saved.
Actuals result: Error: "Video not Found" is displayed.
SOLUTION FOR M2 CLOUD:
1. Install the latest QPT package:
composer update magento/ece-tools --with-dependencies
2. Add MDVA-35092 to .magento.env.yaml file
Example:
stage: build: QUALITY_PATCHES: - MDVA-35092
SOLUTION 2:
Follow the patch
diff --git a/vendor/magento/module-product-video/etc/csp_whitelist.xml b/vendor/magento/module-product-video/etc/csp_whitelist.xml new file mode 100644 index 00000000000..2e091440330 --- /dev/null +++ b/vendor/magento/module-product-video/etc/csp_whitelist.xml @@ -0,0 +1,31 @@ +<?xml version="1.0" encoding="UTF-8"?> +<!-- +/** + * Copyright © Magento, Inc. All rights reserved. + * See COPYING.txt for license details. + */ +--> +<csp_whitelist xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" + xsi:noNamespaceSchemaLocation="urn:magento:module:Magento_Csp:etc/csp_whitelist.xsd"> + <policies> + <policy id="script-src"> + <values> + <value id="youtube_cdn" type="host">s.ytimg.com</value> + <value id="google_video" type="host">www.googleapis.com</value> + <value id="vimeo" type="host">vimeo.com</value> + <value id="www_vimeo" type="host">www.vimeo.com</value> + <value id="vimeo_cdn" type="host">*.vimeocdn.com</value> + </values> + </policy> + <policy id="img-src"> + <values> + <value id="vimeo_cdn" type="host">*.vimeocdn.com</value> + </values> + </policy> + <policy id="frame-src"> + <values> + <value id="player_vimeo" type="host">player.vimeo.com</value> + </values> + </policy> + </policies> +</csp_whitelist> diff --git a/vendor/magento/module-product-video/view/adminhtml/web/js/get-video-information.js b/vendor/magento/module-product-video/view/adminhtml/web/js/get-video-information.js index 653434f1008..3b166b044e1 100644 --- a/vendor/magento/module-product-video/view/adminhtml/web/js/get-video-information.js +++ b/vendor/magento/module-product-video/view/adminhtml/web/js/get-video-information.js @@ -492,20 +492,20 @@ define([ var tmp, respData; - if (data.length < 1) { + if (!data) { this._onRequestError($.mage.__('Video not found')); return null; } - tmp = data[0]; + tmp = data; respData = { duration: this._formatVimeoDuration(tmp.duration), - channel: tmp['user_name'], - channelId: tmp['user_url'], + channel: tmp['author_name'], + channelId: tmp['author_url'], uploaded: tmp['upload_date'], title: tmp.title, description: tmp.description.replace(/( |<([^>]+)>)/ig, ''), - thumbnail: tmp['thumbnail_large'], + thumbnail: tmp['thumbnail_url'], videoId: videoInfo.id, videoProvider: videoInfo.type }; @@ -534,10 +534,11 @@ define([ ); } else if (type === 'vimeo') { $.ajax({ - url: 'https://www.vimeo.com/api/v2/video/' + id + '.json', + url: 'https://vimeo.com/api/oembed.json', dataType: 'jsonp', data: { - format: 'json' + format: 'json', + url: 'https://vimeo.com/' + id }, timeout: 5000, success: $.proxy(_onVimeoLoaded, self), diff --git a/vendor/magento/framework/File/Uploader.php b/vendor/magento/framework/File/Uploader.php index c0126acf700..69ae2616c2d 100644 --- a/vendor/magento/framework/File/Uploader.php +++ b/vendor/magento/framework/File/Uploader.php @@ -6,7 +6,11 @@ namespace Magento\Framework\File; use Magento\Framework\App\Filesystem\DirectoryList; +use Magento\Framework\App\ObjectManager; use Magento\Framework\Exception\FileSystemException; +use Magento\Framework\Filesystem; +use Magento\Framework\Filesystem\DriverInterface; +use Magento\Framework\Filesystem\DriverPool; use Magento\Framework\Validation\ValidationException; /** @@ -144,15 +148,13 @@ class Uploader /** * Maximum Image Width resolution in pixels. For image resizing on client side - * @deprecated - * @see \Magento\Framework\Image\Adapter\UploadConfigInterface::getMaxWidth() + * @deprecated @see \Magento\Framework\Image\Adapter\UploadConfigInterface::getMaxWidth() */ const MAX_IMAGE_WIDTH = 1920; /** * Maximum Image Height resolution in pixels. For image resizing on client side - * @deprecated - * @see \Magento\Framework\Image\Adapter\UploadConfigInterface::getMaxHeight() + * @deprecated @see \Magento\Framework\Image\Adapter\UploadConfigInterface::getMaxHeight() */ const MAX_IMAGE_HEIGHT = 1200; @@ -169,21 +171,32 @@ class Uploader */ private $directoryList; + /** + * @var DriverPool|null + */ + private $driverPool; + + /** + * @var DriverInterface|null + */ + private $fileDriver; + /** * Init upload * * @param string|array $fileId * @param \Magento\Framework\File\Mime|null $fileMime * @param DirectoryList|null $directoryList + * @param DriverPool|null $driverPool * @throws \DomainException */ public function __construct( $fileId, Mime $fileMime = null, - DirectoryList $directoryList = null + DirectoryList $directoryList = null, + DriverPool $driverPool = null ) { - $this->directoryList= $directoryList ?: \Magento\Framework\App\ObjectManager::getInstance() - ->get(DirectoryList::class); + $this->directoryList= $directoryList ?: ObjectManager::getInstance()->get(DirectoryList::class); $this->_setUploadFileId($fileId); if (!file_exists($this->_file['tmp_name'])) { @@ -192,7 +205,8 @@ class Uploader } else { $this->_fileExists = true; } - $this->fileMime = $fileMime ?: \Magento\Framework\App\ObjectManager::getInstance()->get(Mime::class); + $this->fileMime = $fileMime ?: ObjectManager::getInstance()->get(Mime::class); + $this->driverPool = $driverPool; } /** @@ -230,7 +244,7 @@ class Uploader $this->setAllowCreateFolders(true); $this->_dispretionPath = static::getDispersionPath($fileName); $destinationFile .= $this->_dispretionPath; - $this->_createDestinationFolder($destinationFile); + $this->createDestinationFolder($destinationFile); } if ($this->_allowRenameFiles) { @@ -275,13 +289,11 @@ class Uploader * @return void * @throws FileSystemException */ - private function validateDestination($destinationFolder) + private function validateDestination(string $destinationFolder): void { if ($this->_allowCreateFolders) { - $this->_createDestinationFolder($destinationFolder); - } - - if (!is_writable($destinationFolder)) { + $this->createDestinationFolder($destinationFolder); + } elseif (!$this->getFileDriver()->isWritable($destinationFolder)) { throw new FileSystemException(__('Destination folder is not writable or does not exists.')); } } @@ -655,7 +667,7 @@ class Uploader * @return \Magento\Framework\File\Uploader * @throws FileSystemException */ - private function _createDestinationFolder($destinationFolder) + private function createDestinationFolder(string $destinationFolder) { if (!$destinationFolder) { return $this; @@ -665,11 +677,13 @@ class Uploader $destinationFolder = substr($destinationFolder, 0, -1); } - if (!(@is_dir($destinationFolder) - || @mkdir($destinationFolder, 0777, true) - )) { - throw new FileSystemException(__('Unable to create directory %1.', $destinationFolder)); + if (!$this->getFileDriver()->isDirectory($destinationFolder)) { + $result = $this->getFileDriver()->createDirectory($destinationFolder); + if (!$result) { + throw new FileSystemException(__('Unable to create directory %1.', $destinationFolder)); + } } + return $this; } @@ -681,20 +695,22 @@ class Uploader */ public static function getNewFileName($destinationFile) { + /** @var Filesystem $fileSystem */ + $fileSystem = ObjectManager::getInstance()->get(Filesystem::class); + $local = $fileSystem->getDirectoryRead(DirectoryList::ROOT); + + $fileExists = function ($path) use ($local) { + return $local->isExist($path); + }; + $fileInfo = pathinfo($destinationFile); - if (file_exists($destinationFile)) { - $index = 1; - $baseName = $fileInfo['filename'] . '.' . $fileInfo['extension']; - while (file_exists($fileInfo['dirname'] . '/' . $baseName)) { - $baseName = $fileInfo['filename'] . '_' . $index . '.' . $fileInfo['extension']; - $index++; - } - $destFileName = $baseName; - } else { - return $fileInfo['basename']; + $index = 1; + while ($fileExists($fileInfo['dirname'] . '/' . $fileInfo['basename'])) { + $fileInfo['basename'] = $fileInfo['filename'] . '_' . ($index++); + $fileInfo['basename'] .= isset($fileInfo['extension']) ? '.' . $fileInfo['extension'] : ''; } - return $destFileName; + return $fileInfo['basename']; } /** @@ -732,4 +748,20 @@ class Uploader } return $dispersionPath; } + + /** + * Get driver for file + * + * @deprecated + * @return DriverInterface + */ + private function getFileDriver(): DriverInterface + { + if (!$this->fileDriver) { + $this->driverPool = $this->driverPool ?: ObjectManager::getInstance()->get(DriverPool::class); + $this->fileDriver = $this->driverPool->getDriver(DriverPool::FILE); + } + + return $this->fileDriver; + } } diff --git a/lib/web/fotorama/fotorama.js b/lib/web/fotorama/fotorama.js index ddf5a7f000d..62abff99e3b 100644 --- a/lib/web/fotorama/fotorama.js +++ b/lib/web/fotorama/fotorama.js @@ -858,13 +858,16 @@ fotoramaVersion = '4.6.4'; dataFrame.thumbsReady = true; } else if (video.type === 'vimeo') { $.ajax({ - url: getProtocol() + 'vimeo.com/api/v2/video/' + video.id + '.json', + url: getProtocol() + 'vimeo.com/api/oembed.json', + data: { + url: 'https://vimeo.com/' + video.id + }, dataType: 'jsonp', success: function (json) { dataFrame.thumbsReady = true; updateData(data, { - img: json[0].thumbnail_large, - thumb: json[0].thumbnail_small + img: json[0].thumbnail_url, + thumb: json[0].thumbnail_url }, dataFrame.i, fotorama); } });
No comments:
Post a Comment