<?php
declare(strict_types=1);
namespace App\EventListener;
use Sylius\Component\Core\Model\ImagesAwareInterface;
use Sylius\Component\Core\Uploader\ImageUploaderInterface;
use Symfony\Component\EventDispatcher\GenericEvent;
use Webmozart\Assert\Assert;
class ProductImagesUploadListener
{
/** @var ImageUploaderInterface */
private $uploader;
public function __construct(ImageUploaderInterface $uploader)
{
$this->uploader = $uploader;
}
public function uploadImages(GenericEvent $event): void
{
$subject = $event->getSubject();
if (count($subject->getProductAttributes()) > 0) {
foreach ($subject->getProductAttributes() as $productAttribute) {
if (count($productAttribute->getProductAttributeItems()) > 0) {
foreach ($productAttribute->getProductAttributeItems() as $productAttributeItem) {
Assert::isInstanceOf($productAttributeItem, ImagesAwareInterface::class);
$this->uploadSubjectImages($productAttributeItem);
}
}
}
}
}
private function uploadSubjectImages(ImagesAwareInterface $subject): void
{
$images = $subject->getImages();
foreach ($images as $image) {
if ($image->hasFile()) {
$this->uploader->upload($image);
}
// Upload failed? Let's remove that image.
if (null === $image->getPath()) {
$images->removeElement($image);
}
}
}
}