ExternalVideoResourceBackend.php 3.63 KB
Newer Older
Ketan's avatar
Ketan committed
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102
<?php
/**
 * Copyright © Magento, Inc. All rights reserved.
 * See COPYING.txt for license details.
 */
namespace Magento\ProductVideo\Model\Plugin;

use Magento\Catalog\Model\ResourceModel\Product\Gallery;
use Magento\Framework\DB\Select;

/**
 * Media Resource decorator
 */
class ExternalVideoResourceBackend
{
    /**
     * @var \Magento\ProductVideo\Model\ResourceModel\Video
     */
    protected $videoResourceModel;

    /**
     * @param \Magento\ProductVideo\Model\ResourceModel\Video $videoResourceModel
     */
    public function __construct(\Magento\ProductVideo\Model\ResourceModel\Video $videoResourceModel)
    {
        $this->videoResourceModel = $videoResourceModel;
    }

    /**
     * Plugin for after duplicate action
     *
     * @param Gallery $originalResourceModel
     * @param array $valueIdMap
     * @return array
     *
     * @SuppressWarnings(PHPMD.UnusedFormalParameter)
     */
    public function afterDuplicate(Gallery $originalResourceModel, array $valueIdMap)
    {
        $mediaGalleryEntitiesData = $this->videoResourceModel->loadByIds(array_keys($valueIdMap));
        foreach ($mediaGalleryEntitiesData as $row) {
            $row['value_id'] = $valueIdMap[$row['value_id']];
            $this->videoResourceModel->insertOnDuplicate($row);
        }

        return $valueIdMap;
    }

    /**
     * Plugin for after create batch base select action
     *
     * @param Gallery $originalResourceModel
     * @param Select $select
     * @return Select
     */
    public function afterCreateBatchBaseSelect(Gallery $originalResourceModel, Select $select)
    {
        $select = $select->joinLeft(
            ['value_video' => $originalResourceModel->getTable('catalog_product_entity_media_gallery_value_video')],
            implode(
                ' AND ',
                [
                    'value.value_id = value_video.value_id',
                    'value.store_id = value_video.store_id',
                ]
            ),
            []
        )->joinLeft(
            [
                'default_value_video' => $originalResourceModel->getTable(
                    'catalog_product_entity_media_gallery_value_video'
                )
            ],
            implode(
                ' AND ',
                [
                    'default_value.value_id = default_value_video.value_id',
                    'default_value.store_id = default_value_video.store_id',
                ]
            ),
            []
        )->columns([
            'video_provider' => $originalResourceModel->getConnection()
                ->getIfNullSql('`value_video`.`provider`', '`default_value_video`.`provider`'),
            'video_url' => $originalResourceModel->getConnection()
                ->getIfNullSql('`value_video`.`url`', '`default_value_video`.`url`'),
            'video_title' => $originalResourceModel->getConnection()
                ->getIfNullSql('`value_video`.`title`', '`default_value_video`.`title`'),
            'video_description' => $originalResourceModel->getConnection()
                ->getIfNullSql('`value_video`.`description`', '`default_value_video`.`description`'),
            'video_metadata' => $originalResourceModel->getConnection()
                ->getIfNullSql('`value_video`.`metadata`', '`default_value_video`.`metadata`'),
            'video_provider_default' => 'default_value_video.provider',
            'video_url_default' => 'default_value_video.url',
            'video_title_default' => 'default_value_video.title',
            'video_description_default' => 'default_value_video.description',
            'video_metadata_default' => 'default_value_video.metadata',
        ]);

        return $select;
    }
}