<?php
namespace App\Subscriber\Media;
use App\Dictionary\MemberMediaFolder;
use App\Event\Media\MemberMediaUploadEvent;
use App\Service\Media\MemberMediaService;
use Symfony\Component\EventDispatcher\EventSubscriberInterface;
/**
* Class MemberMediaUploadSubscriber.
*/
class MemberMediaUploadSubscriber implements EventSubscriberInterface
{
/**
* @var MemberMediaService
*/
protected $service;
/**
* MemberMediaUploadSubscriber constructor.
*/
public function __construct(MemberMediaService $service)
{
$this->service = $service;
}
public static function getSubscribedEvents(): array
{
return [
MemberMediaUploadEvent::class => [
['onMediaUploadCreateFiles', 0],
['onMediaUploadCopyToMemberFolder', 1],
],
];
}
/**
* @throws \Doctrine\ORM\ORMException
* @throws \Doctrine\ORM\OptimisticLockException
*/
public function onMediaUploadCreateFiles(MemberMediaUploadEvent $event)
{
$media = $event->getMemberMedia();
$file = $event->getFile();
$this->service->recalculateImportHash($media, $file);
// move file
$storage = $this->service->getStorage()->getMembermediaStorage();
$storage->write($media->getRelativePath(), file_get_contents($file->getRealPath()));
$filters = MemberMediaFolder::getDefaultFiltersForFolderName($event->getFolder());
$this->service->regenerateLiipCacheFiles($media, $filters);
}
/**
* @throws \Doctrine\ORM\ORMException
* @throws \Doctrine\ORM\OptimisticLockException
*/
public function onMediaUploadCopyToMemberFolder(MemberMediaUploadEvent $event)
{
$media = $event->getMemberMedia();
$member = $media->getMember();
$this->service->copyToMemberFolder($media, $member, $event->getFolder());
}
}