Esempio n. 1
0
 /**
  * Resolves the passed images array for the current variant.
  * An image can be assigned to a variant over a media id of an existing article image
  * or over the link property which can contain a image link.
  * This image will be added automatically to the article.
  *
  * @param $data
  * @param ArticleModel $article
  * @param Detail $variant
  * @return mixed
  * @throws \Shopware\Components\Api\Exception\CustomValidationException
  */
 protected function prepareImageAssociation($data, ArticleModel $article, Detail $variant)
 {
     if (empty($data['images'])) {
         if ($variant->getImages()->count() > 0) {
             /**@var $image Image*/
             foreach ($variant->getImages() as $image) {
                 $mapping = $this->getVariantMappingOfImage($image, $variant);
                 if ($mapping) {
                     $this->getManager()->remove($mapping);
                 }
             }
         }
         return $data;
     }
     $images = $this->checkDataReplacement($variant->getImages(), $data, 'images', true);
     foreach ($data['images'] as $imageData) {
         //check if a media id was passed.
         if (isset($imageData['mediaId'])) {
             //first check if the media object is already assigned to the article
             $image = $this->getAvailableMediaImage($article->getImages(), $imageData['mediaId']);
             //media image isn't assigned to the article?
             if (!$image) {
                 //find the media object and convert it to an article image.
                 /**@var $media MediaModel*/
                 $media = $this->getManager()->find('Shopware\\Models\\Media\\Media', (int) $imageData['mediaId']);
                 if (!$media) {
                     throw new ApiException\CustomValidationException(sprintf('Media by id %s not found', (int) $imageData['mediaId']));
                 }
                 $image = $this->getArticleResource()->createNewArticleImage($article, $media);
             }
         } elseif (isset($imageData['link'])) {
             //check if an url passed and upload the passed image url and create a new article image.
             $media = $this->getMediaResource()->internalCreateMediaByFileLink($imageData['link']);
             $image = $this->getArticleResource()->createNewArticleImage($article, $media);
         } else {
             throw new ApiException\CustomValidationException("One of the passed variant images doesn't contains a mediaId or link property!");
         }
         $variantImage = $this->createVariantImage($image, $variant);
         $this->createImageMappingForOptions($variant->getConfiguratorOptions(), $image);
         $images->add($variantImage);
     }
     $data['images'] = $images;
     $variant->setImages($images);
     return $data;
 }
 /**
  * {@inheritDoc}
  */
 public function getImages()
 {
     $this->__initializer__ && $this->__initializer__->__invoke($this, 'getImages', array());
     return parent::getImages();
 }
Esempio n. 3
0
 /**
  * Checks if the passed article image is already created
  * as variant image.
  *
  * @param Detail $variant
  * @param Image $image
  * @return bool
  */
 protected function isVariantImageExist(Detail $variant, Image $image)
 {
     /**@var $variantImage Image */
     foreach ($variant->getImages() as $variantImage) {
         if ($variantImage->getParent()->getId() == $image->getId()) {
             return true;
         }
     }
     return false;
 }