/** * Get image types data * * @return array */ public function getImageTypes() { $imageTypes = []; foreach ($this->catalogProductMediaConfig->getMediaAttributeCodes() as $attributeCode) { /* @var $attribute Attribute */ $imageTypes[$attributeCode] = ['code' => $attributeCode, 'value' => '', 'label' => $attributeCode, 'scope' => '', 'name' => $attributeCode]; } return $imageTypes; }
/** * Retrieve assoc array that contains media attribute values of the product * * @return array */ public function getMediaAttributeValues() { $mediaAttributeCodes = $this->_catalogProductMediaConfig->getMediaAttributeCodes(); $mediaAttributeValues = []; foreach ($mediaAttributeCodes as $attributeCode) { $mediaAttributeValues[$attributeCode] = $this->getData($attributeCode); } return $mediaAttributeValues; }
/** * @param string $entityType * @param object $product * @param array $arguments * @return object * @throws \Magento\Framework\Exception\LocalizedException * @SuppressWarnings(PHPMD.UnusedFormalParameter) * @SuppressWarnings(PHPMD.NPathComplexity) * @SuppressWarnings(PHPMD.CyclomaticComplexity) */ public function execute($entityType, $product, $arguments = []) { $attrCode = $this->getAttribute()->getAttributeCode(); $value = $product->getData($attrCode); if (!is_array($value) || !isset($value['images'])) { return $product; } if (!is_array($value['images']) && strlen($value['images']) > 0) { $value['images'] = $this->jsonHelper->jsonDecode($value['images']); } if (!is_array($value['images'])) { $value['images'] = []; } $clearImages = []; $newImages = []; $existImages = []; if ($product->getIsDuplicate() != true) { foreach ($value['images'] as &$image) { if (!empty($image['removed'])) { $clearImages[] = $image['file']; } elseif (empty($image['value_id'])) { $newFile = $this->moveImageFromTmp($image['file']); $image['new_file'] = $newFile; $newImages[$image['file']] = $image; $image['file'] = $newFile; } else { $existImages[$image['file']] = $image; } } } else { // For duplicating we need copy original images. $duplicate = []; foreach ($value['images'] as &$image) { if (empty($image['value_id']) || !empty($image['removed'])) { continue; } $duplicate[$image['value_id']] = $this->copyImage($image['file']); $image['new_file'] = $duplicate[$image['value_id']]; $newImages[$image['file']] = $image; } $value['duplicate'] = $duplicate; } /* @var $mediaAttribute \Magento\Catalog\Api\Data\ProductAttributeInterface */ foreach ($this->mediaConfig->getMediaAttributeCodes() as $mediaAttrCode) { $attrData = $product->getData($mediaAttrCode); if (in_array($attrData, $clearImages)) { $product->setData($mediaAttrCode, 'no_selection'); } if (in_array($attrData, array_keys($newImages))) { $product->setData($mediaAttrCode, $newImages[$attrData]['new_file']); $product->setData($mediaAttrCode . '_label', $newImages[$attrData]['label']); } if (in_array($attrData, array_keys($existImages))) { $product->setData($mediaAttrCode . '_label', $existImages[$attrData]['label']); } $product->addAttributeUpdate($mediaAttrCode, $product->getData($mediaAttrCode), $product->getStoreId()); } $product->setData($attrCode, $value); if ($product->getIsDuplicate() == true) { $this->duplicate($product); return $product; } if (!is_array($value) || !isset($value['images']) || $product->isLockedAttribute($attrCode)) { return $product; } $this->processDeletedImages($product, $value['images']); $this->processNewAndExistingImages($product, $value['images']); $product->setData($attrCode, $value); return $product; }
/** * get media attribute codes * @return array */ public function getMediaAttributeCodes() { return $this->mediaConfig->getMediaAttributeCodes(); }