/**
  * @param MediaBackendModel $mediaBackendModel
  * @param Product $product
  * @return Product
  */
 public function afterAfterSave(MediaBackendModel $mediaBackendModel, Product $product)
 {
     $mediaCollection = $this->getMediaEntriesDataCollection($product, $mediaBackendModel->getAttribute());
     if (!empty($mediaCollection)) {
         $videoDataCollection = $this->collectVideoData($mediaCollection);
         $this->saveVideoData($videoDataCollection, $product->getStoreId());
         $this->saveAdditionalStoreData($videoDataCollection);
     }
     return $product;
 }
 /**
  * @dataProvider validateDataProvider
  * @param bool $value
  */
 public function testValidate($value)
 {
     $attributeCode = 'attr_code';
     $attribute = $this->getMock('Magento\\Eav\\Model\\Entity\\Attribute', ['getAttributeCode', 'getIsRequired', 'isValueEmpty', 'getIsUnique', 'getEntityType', '__wakeup'], [], '', false);
     $attributeEntity = $this->getMock('\\Magento\\Framework\\Model\\ModelResource\\AbstractResourceAbstractEntity', ['checkAttributeUniqueValue']);
     $attribute->expects($this->any())->method('getAttributeCode')->will($this->returnValue($attributeCode));
     $attribute->expects($this->any())->method('getIsRequired')->will($this->returnValue(true));
     $attribute->expects($this->any())->method('isValueEmpty')->will($this->returnValue($value));
     $attribute->expects($this->any())->method('getIsUnique')->will($this->returnValue(true));
     $attribute->expects($this->any())->method('getEntityType')->will($this->returnValue($attributeEntity));
     $attributeEntity->expects($this->any())->method('checkAttributeUniqueValue')->will($this->returnValue(true));
     $this->model->setAttribute($attribute);
     $this->dataObject->setData(['attr_code' => 'attribute data']);
     $this->assertEquals(!$value, $this->model->validate($this->dataObject));
 }
Exemple #3
0
 public function testAfterSaveDeleteFiles()
 {
     $storeId = 1;
     $storeIds = ['store_1' => 1, 'store_2' => 2];
     $attributeCode = 'test_code';
     $toDelete = [1];
     $mediaPath = 'catalog/media';
     $filePathToRemove = $mediaPath . '/file/path';
     $attributeValue = ['images' => [['removed' => true, 'value_id' => 1, 'file' => 'file/path'], ['removed' => false, 'value_id' => 1, 'file' => 'file/path2']]];
     $assignedImages = [['filepath' => 'path_to_image']];
     $attributeMock = $this->getMockBuilder('Magento\\Eav\\Model\\Entity\\Attribute')->disableOriginalConstructor()->getMock();
     $attributeMock->expects($this->once())->method('getAttributeCode')->will($this->returnValue($attributeCode));
     $this->dataObject->expects($this->once())->method('getIsDuplicate')->will($this->returnValue(false));
     $this->dataObject->expects($this->once())->method('isLockedAttribute')->will($this->returnValue(false));
     $this->dataObject->setData($attributeCode, $attributeValue);
     $this->dataObject->setId(1);
     $this->dataObject->setStoreId($storeId);
     $this->dataObject->setStoreIds($storeIds);
     $productMock = $this->getMockBuilder('Magento\\Catalog\\Model\\Product')->disableOriginalConstructor()->setMethods(['getAssignedImages', '__wakeup'])->getMock();
     $productMock->expects($this->any())->method('getAssignedImages')->will($this->returnValue($assignedImages));
     $this->productFactory->expects($this->once())->method('create')->will($this->returnValue($productMock));
     $this->resourceModel->expects($this->once())->method('deleteGallery')->with($toDelete);
     $this->mediaConfig->expects($this->once())->method('getBaseMediaPath')->will($this->returnValue($mediaPath));
     $this->mediaDirectory->expects($this->once())->method('delete')->with($filePathToRemove);
     $this->model->setAttribute($attributeMock);
     $this->assertNull($this->model->afterSave($this->dataObject));
 }
 /**
  * Duplicate images for variations
  *
  * @param array $productsData
  *
  * @return array
  * @SuppressWarnings(PHPMD.CyclomaticComplexity)
  */
 public function duplicateImagesForVariations($productsData)
 {
     $imagesForCopy = [];
     foreach ($productsData as $variationId => $simpleProductData) {
         if (!isset($simpleProductData['media_gallery']['images'])) {
             continue;
         }
         foreach ($simpleProductData['media_gallery']['images'] as $imageId => $image) {
             $image['variation_id'] = $variationId;
             if (isset($imagesForCopy[$imageId][0])) {
                 // skip duplicate image for first product
                 unset($imagesForCopy[$imageId][0]);
             }
             $imagesForCopy[$imageId][] = $image;
         }
     }
     foreach ($imagesForCopy as $imageId => $variationImages) {
         foreach ($variationImages as $image) {
             $file = $image['file'];
             $variationId = $image['variation_id'];
             $newFile = $this->media->duplicateImageFromTmp($file);
             $productsData[$variationId]['media_gallery']['images'][$imageId]['file'] = $newFile;
             foreach (['small_image', 'thumbnail', 'image'] as $imageType) {
                 if (isset($productsData[$variationId][$imageType]) && $productsData[$variationId][$imageType] == $file) {
                     $productsData[$variationId][$imageType] = $newFile;
                 }
             }
         }
     }
     return $productsData;
 }
 /**
  * Duplicate images for variations
  *
  * @param array $productsData
  *
  * @return array
  * @SuppressWarnings(PHPMD.CyclomaticComplexity)
  */
 public function duplicateImagesForVariations($productsData)
 {
     $imagesForCopy = [];
     foreach ($productsData as $variationId => $simpleProductData) {
         if (!isset($simpleProductData['media_gallery']['images'])) {
             continue;
         }
         foreach ($simpleProductData['media_gallery']['images'] as $imageId => $image) {
             $image['variation_id'] = $variationId;
             if (isset($imagesForCopy[$imageId][0])) {
                 // skip duplicate image for first product
                 unset($imagesForCopy[$imageId][0]);
             }
             $imagesForCopy[$imageId][] = $image;
         }
     }
     foreach ($imagesForCopy as $imageId => $variationImages) {
         foreach ($variationImages as $image) {
             $file = $image['file'];
             $variationId = $image['variation_id'];
             $newFile = $this->media->duplicateImageFromTmp($file);
             $productsData[$variationId]['media_gallery']['images'][$imageId]['file'] = $newFile;
             foreach ($this->variationMediaAttributes->getMediaAttributes() as $attribute) {
                 if (isset($productsData[$variationId][$attribute->getAttributeCode()]) && $productsData[$variationId][$attribute->getAttributeCode()] == $file) {
                     $productsData[$variationId][$attribute->getAttributeCode()] = $newFile;
                 }
             }
         }
     }
     return $productsData;
 }
 /**
  * {@inheritdoc}
  */
 public function afterSave($object)
 {
     $pluginInfo = $this->pluginList->getNext($this->subjectType, 'afterSave');
     if (!$pluginInfo) {
         return parent::afterSave($object);
     } else {
         return $this->___callPlugins('afterSave', func_get_args(), $pluginInfo);
     }
 }
 public function testSetMediaAttribute()
 {
     /** @var $product \Magento\Catalog\Model\Product */
     $product = \Magento\TestFramework\Helper\Bootstrap::getObjectManager()->create('Magento\\Catalog\\Model\\Product');
     $this->_model->setMediaAttribute($product, 'image', 'test1');
     $this->assertEquals('test1', $product->getData('image'));
     $this->_model->setMediaAttribute($product, ['non-exist-image-attribute', 'small_image'], 'test');
     $this->assertNull($product->getData('non-exist-image-attribute'));
     $this->assertEquals('test', $product->getData('small_image'));
 }
 public function testSetMediaAttribute()
 {
     /** @var $product \Magento\Catalog\Model\Product */
     $product = \Magento\TestFramework\Helper\Bootstrap::getObjectManager()->create('Magento\\Catalog\\Model\\Product');
     $product->setMediaAttributes(['test_media1', 'test_media2', 'test_media3']);
     $this->_model->setMediaAttribute($product, 'test_media1', 'test1');
     $this->assertEquals('test1', $product->getData('test_media1'));
     $this->_model->setMediaAttribute($product, ['test_media2', 'test_media3'], 'test');
     $this->assertEquals('test', $product->getData('test_media2'));
     $this->assertEquals('test', $product->getData('test_media3'));
 }
Exemple #9
0
 /**
  * @dataProvider beforeSaveDataProvider
  * @param array $value
  */
 public function testBeforeSave($value)
 {
     $attributeCode = 'attr_code';
     $attribute = $this->getMock('Magento\\Eav\\Model\\Entity\\Attribute', ['getAttributeCode', 'getIsRequired', 'isValueEmpty', 'getIsUnique', 'getEntityType', '__wakeup'], [], '', false);
     $mediaAttributes = ['image' => $attribute, 'small_image' => $attribute, 'thumbnail' => $attribute];
     $attribute->expects($this->any())->method('getAttributeCode')->will($this->returnValue($attributeCode));
     $this->dataObject->expects($this->any())->method('getIsDuplicate')->will($this->returnValue(false));
     $this->model->setAttribute($attribute);
     $this->dataObject->setData(['attr_code' => ['images' => $value]]);
     $this->dataObject->expects($this->any())->method('getMediaAttributes')->will($this->returnValue($mediaAttributes));
     $this->model->beforeSave($this->dataObject);
     foreach ($this->dataObject['attr_code']['images'] as $imageType => $imageData) {
         if (isset($imageData['new_file'])) {
             $value[$imageType]['file'] = $imageData['file'];
             $value[$imageType]['new_file'] = $imageData['new_file'];
         }
         $this->assertEquals($value[$imageType], $imageData);
     }
 }
Exemple #10
0
 /**
  * Duplicates gallery db values
  *
  * @param \Magento\Catalog\Model\Product\Attribute\Backend\Media $object
  * @param array $newFiles
  * @param int $originalProductId
  * @param int $newProductId
  * @return $this
  */
 public function duplicate($object, $newFiles, $originalProductId, $newProductId)
 {
     $select = $this->_getReadAdapter()->select()->from($this->getMainTable(), array('value_id', 'value'))->where('attribute_id = ?', $object->getAttribute()->getId())->where('entity_id = ?', $originalProductId);
     $valueIdMap = array();
     // Duplicate main entries of gallery
     foreach ($this->_getReadAdapter()->fetchAll($select) as $row) {
         $data = array('attribute_id' => $object->getAttribute()->getId(), 'entity_id' => $newProductId, 'value' => isset($newFiles[$row['value_id']]) ? $newFiles[$row['value_id']] : $row['value']);
         $valueIdMap[$row['value_id']] = $this->insertGallery($data);
     }
     if (count($valueIdMap) == 0) {
         return $this;
     }
     // Duplicate per store gallery values
     $select = $this->_getReadAdapter()->select()->from($this->getTable(self::GALLERY_VALUE_TABLE))->where('value_id IN(?)', array_keys($valueIdMap));
     foreach ($this->_getReadAdapter()->fetchAll($select) as $row) {
         $row['value_id'] = $valueIdMap[$row['value_id']];
         $this->insertGalleryValueInStore($row);
     }
     return $this;
 }