/** * 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(); }
/** * 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; }