<?php
namespace App\EventListener;
use Doctrine\ORM\Event\LifecycleEventArgs;
use Vich\UploaderBundle\Templating\Helper\UploaderHelper;
use App\Entity\Utils\IUploadableImage;
use Vich\UploaderBundle\Event\Event as VichEvent;
use App\Service\Image\ImageManager;
use App\Service\Utils\DataMapping;
class UploadableImageListener
{
private $uploaderHelper;
private $imageManager;
private $dataMapping;
public function __construct(
UploaderHelper $uploaderHelper,
ImageManager $imageManager,
DataMapping $dataMapping
) {
$this->uploaderHelper = $uploaderHelper;
$this->imageManager = $imageManager;
$this->dataMapping = $dataMapping;
}
public function prePersist(LifecycleEventArgs $args)
{
$this->persistUrl($args);
}
public function preUpdate(LifecycleEventArgs $args)
{
$this->persistUrl($args);
}
private function persistUrl(LifecycleEventArgs $args)
{
$this->setImageUrl($args);
$this->setPictoUrl($args);
}
private function setImageUrl(LifecycleEventArgs $args)
{
$entity = $args->getObject();
if ($entity instanceof IUploadableImage && property_exists($entity, 'imageName')) {
$path = $this->uploaderHelper->asset($entity, 'imageFile');
$entity->setImageUrl($path);
}
}
private function setPictoUrl(LifecycleEventArgs $args)
{
$entity = $args->getObject();
if ($entity instanceof IUploadableImage && property_exists($entity, 'pictoName')) {
$path = $this->uploaderHelper->asset($entity, 'pictoFile');
$entity->setPictoUrl($path);
}
}
public function onVichuploaderPostupload(VichEvent $event)
{
$object = $event->getObject();
$mapping = $event->getMapping();
if (!$object instanceof IUploadableImage) {
return;
}
$fileFromMapping = $this->dataMapping->getFullPathFile($object, $mapping);
$this->imageManager->convertImage($fileFromMapping);
}
}