ExternalVideoResourceBackend.php 3.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102
  1. <?php
  2. /**
  3. * Copyright © Magento, Inc. All rights reserved.
  4. * See COPYING.txt for license details.
  5. */
  6. namespace Magento\ProductVideo\Model\Plugin;
  7. use Magento\Catalog\Model\ResourceModel\Product\Gallery;
  8. use Magento\Framework\DB\Select;
  9. /**
  10. * Media Resource decorator
  11. */
  12. class ExternalVideoResourceBackend
  13. {
  14. /**
  15. * @var \Magento\ProductVideo\Model\ResourceModel\Video
  16. */
  17. protected $videoResourceModel;
  18. /**
  19. * @param \Magento\ProductVideo\Model\ResourceModel\Video $videoResourceModel
  20. */
  21. public function __construct(\Magento\ProductVideo\Model\ResourceModel\Video $videoResourceModel)
  22. {
  23. $this->videoResourceModel = $videoResourceModel;
  24. }
  25. /**
  26. * Plugin for after duplicate action
  27. *
  28. * @param Gallery $originalResourceModel
  29. * @param array $valueIdMap
  30. * @return array
  31. *
  32. * @SuppressWarnings(PHPMD.UnusedFormalParameter)
  33. */
  34. public function afterDuplicate(Gallery $originalResourceModel, array $valueIdMap)
  35. {
  36. $mediaGalleryEntitiesData = $this->videoResourceModel->loadByIds(array_keys($valueIdMap));
  37. foreach ($mediaGalleryEntitiesData as $row) {
  38. $row['value_id'] = $valueIdMap[$row['value_id']];
  39. $this->videoResourceModel->insertOnDuplicate($row);
  40. }
  41. return $valueIdMap;
  42. }
  43. /**
  44. * Plugin for after create batch base select action
  45. *
  46. * @param Gallery $originalResourceModel
  47. * @param Select $select
  48. * @return Select
  49. */
  50. public function afterCreateBatchBaseSelect(Gallery $originalResourceModel, Select $select)
  51. {
  52. $select = $select->joinLeft(
  53. ['value_video' => $originalResourceModel->getTable('catalog_product_entity_media_gallery_value_video')],
  54. implode(
  55. ' AND ',
  56. [
  57. 'value.value_id = value_video.value_id',
  58. 'value.store_id = value_video.store_id',
  59. ]
  60. ),
  61. []
  62. )->joinLeft(
  63. [
  64. 'default_value_video' => $originalResourceModel->getTable(
  65. 'catalog_product_entity_media_gallery_value_video'
  66. )
  67. ],
  68. implode(
  69. ' AND ',
  70. [
  71. 'default_value.value_id = default_value_video.value_id',
  72. 'default_value.store_id = default_value_video.store_id',
  73. ]
  74. ),
  75. []
  76. )->columns([
  77. 'video_provider' => $originalResourceModel->getConnection()
  78. ->getIfNullSql('`value_video`.`provider`', '`default_value_video`.`provider`'),
  79. 'video_url' => $originalResourceModel->getConnection()
  80. ->getIfNullSql('`value_video`.`url`', '`default_value_video`.`url`'),
  81. 'video_title' => $originalResourceModel->getConnection()
  82. ->getIfNullSql('`value_video`.`title`', '`default_value_video`.`title`'),
  83. 'video_description' => $originalResourceModel->getConnection()
  84. ->getIfNullSql('`value_video`.`description`', '`default_value_video`.`description`'),
  85. 'video_metadata' => $originalResourceModel->getConnection()
  86. ->getIfNullSql('`value_video`.`metadata`', '`default_value_video`.`metadata`'),
  87. 'video_provider_default' => 'default_value_video.provider',
  88. 'video_url_default' => 'default_value_video.url',
  89. 'video_title_default' => 'default_value_video.title',
  90. 'video_description_default' => 'default_value_video.description',
  91. 'video_metadata_default' => 'default_value_video.metadata',
  92. ]);
  93. return $select;
  94. }
  95. }