Example #1
0
 /**
  * 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;
 }
Example #2
0
 /**
  * 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;
 }
Example #3
0
 /**
  * @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;
 }
Example #4
0
 /**
  * get media attribute codes
  * @return array
  */
 public function getMediaAttributeCodes()
 {
     return $this->mediaConfig->getMediaAttributeCodes();
 }