示例#1
0
 /**
  * @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\\ResourceModel\\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->attributeRepository->expects($this->once())->method('get')->with('media_gallery')->willReturn($attribute);
     $this->dataObject->setData(['attr_code' => 'attribute data']);
     $this->assertEquals(!$value, $this->model->validate($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->mediaGalleryProcessor->duplicateImageFromTmp($file);
             $productsData[$variationId]['media_gallery']['images'][$imageId]['file'] = $newFile;
             foreach ($this->mediaGalleryProcessor->getMediaAttributeCodes() as $attribute) {
                 if (isset($productsData[$variationId][$attribute]) && $productsData[$variationId][$attribute] == $file) {
                     $productsData[$variationId][$attribute] = $newFile;
                 }
             }
         }
     }
     return $productsData;
 }
示例#3
0
 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'));
 }
 public function testSaveExistingWithMediaGalleryEntries()
 {
     //update one entry, delete one entry
     $newEntries = [['id' => 5, "label" => "new_label_text", 'file' => 'filename1', 'position' => 10, 'disabled' => false, 'types' => ['image', 'small_image']]];
     $existingMediaGallery = ['images' => [['value_id' => 5, "label" => "label_text", 'file' => 'filename1', 'position' => 10, 'disabled' => true], ['value_id' => 6, 'file' => 'filename2']]];
     $expectedResult = [['id' => 5, 'value_id' => 5, "label" => "new_label_text", 'file' => 'filename1', 'position' => 10, 'disabled' => false, 'types' => ['image', 'small_image']], ['value_id' => 6, 'file' => 'filename2', 'removed' => true]];
     $this->setupProductMocksForSave();
     //media gallery data
     $this->productData['media_gallery_entries'] = $newEntries;
     $this->extensibleDataObjectConverterMock->expects($this->once())->method('toNestedArray')->will($this->returnValue($this->productData));
     $this->initializedProductMock->setData('media_gallery', $existingMediaGallery);
     $this->initializedProductMock->expects($this->any())->method('getMediaAttributes')->willReturn(["image" => "filename1", "small_image" => "filename2"]);
     $this->mediaGalleryProcessor->expects($this->once())->method('clearMediaAttribute')->with($this->initializedProductMock, ['image', 'small_image']);
     $this->mediaGalleryProcessor->expects($this->once())->method('setMediaAttribute')->with($this->initializedProductMock, ['image', 'small_image'], 'filename1');
     $this->initializedProductMock->expects($this->once())->method('getWebsiteIds')->willReturn([]);
     $this->model->save($this->productMock);
     $this->assertEquals($expectedResult, $this->initializedProductMock->getMediaGallery('images'));
 }
 /**
  * Add image to media gallery
  *
  * @param string        $file              file path of image in file system
  * @param string|array  $mediaAttribute    code of attribute with type 'media_image',
  *                                          leave blank if image should be only in gallery
  * @param boolean       $move              if true, it will move source file
  * @param boolean       $exclude           mark image as disabled in product page view
  * @return \Magento\Catalog\Model\Product
  */
 public function addImageToMediaGallery($file, $mediaAttribute = null, $move = false, $exclude = true)
 {
     if ($this->hasGalleryAttribute()) {
         $this->mediaGalleryProcessor->addImage($this, $file, $mediaAttribute, $move, $exclude);
     }
     return $this;
 }
 /**
  * @param ProductInterface $product
  * @param array $mediaGalleryEntries
  * @return $this
  * @throws InputException
  * @throws StateException
  * @SuppressWarnings(PHPMD.CyclomaticComplexity)
  */
 protected function processMediaGallery(ProductInterface $product, $mediaGalleryEntries)
 {
     $existingMediaGallery = $product->getMediaGallery('images');
     $newEntries = [];
     if (!empty($existingMediaGallery)) {
         $entriesById = [];
         foreach ($mediaGalleryEntries as $entry) {
             if (isset($entry['id'])) {
                 $entry['value_id'] = $entry['id'];
                 $entriesById[$entry['value_id']] = $entry;
             } else {
                 $newEntries[] = $entry;
             }
         }
         foreach ($existingMediaGallery as $key => &$existingEntry) {
             if (isset($entriesById[$existingEntry['value_id']])) {
                 $updatedEntry = $entriesById[$existingEntry['value_id']];
                 $existingMediaGallery[$key] = array_merge($existingEntry, $updatedEntry);
             } else {
                 //set the removed flag
                 $existingEntry['removed'] = true;
             }
         }
         $product->setData('media_gallery', ["images" => $existingMediaGallery]);
     } else {
         $newEntries = $mediaGalleryEntries;
     }
     $this->mediaGalleryProcessor->clearMediaAttribute($product, array_keys($product->getMediaAttributes()));
     $images = $product->getMediaGallery('images');
     if ($images) {
         foreach ($images as $image) {
             if (!isset($image['removed']) && !empty($image['types'])) {
                 $this->mediaGalleryProcessor->setMediaAttribute($product, $image['types'], $image['file']);
             }
         }
     }
     foreach ($newEntries as $newEntry) {
         if (!isset($newEntry['content'])) {
             throw new InputException(__('The image content is not valid.'));
         }
         /** @var ImageContentInterface $contentDataObject */
         $contentDataObject = $this->contentFactory->create()->setName($newEntry['content'][ImageContentInterface::NAME])->setBase64EncodedData($newEntry['content'][ImageContentInterface::BASE64_ENCODED_DATA])->setType($newEntry['content'][ImageContentInterface::TYPE]);
         $newEntry['content'] = $contentDataObject;
         $this->processNewMediaGalleryEntry($product, $newEntry);
     }
     return $this;
 }