<?php
namespace App\EventSubscriber;
use App\Entity\ElTask;
use App\Entity\Upload;
use App\Service\EsUpload;
use App\Entity\ElTaskChapter;
use App\Event\ElTaskPreUpdateEvent;
use App\Event\ElTaskPrePersistEvent;
use App\Entity\ElTaskChapterTranslation;
use Doctrine\ORM\EntityManagerInterface;
use Symfony\Component\EventDispatcher\EventSubscriberInterface;
class ElTaskSubscriber implements EventSubscriberInterface
{
private $_em;
private $esUpload;
public function __construct(EntityManagerInterface $_em, EsUpload $esUpload)
{
$this->_em = $_em;
$this->esUpload = $esUpload;
}
public static function getSubscribedEvents()
{
return [
ElTaskPrePersistEvent::NAME => 'onPrePersist',
ElTaskPreUpdateEvent::NAME => 'onPreUpdate',
];
}
public function onPrePersist(ElTaskPrePersistEvent $event)
{
$object = $event->getObject();
if ($object->getTaskType() === ElTask::TASKTYPE_SESSION) {
$session = $object->getSession();
if (!$session) {
return;
}
$object->setBulletPoints($session->getBulletPoints());
$chapters = $session->getSessionChapters();
foreach ($chapters as $ch) {
$nc = new ElTaskChapter();
$nc->setStartTime($ch->getStartTime());
$nc->setOrd($ch->getOrd());
$nc->setContainer($ch->getContainer());
$trs = $ch->getTranslations();
foreach ($trs as $t) {
$nt = new ElTaskChapterTranslation();
$nt->setName($t->getName());
$nt->setLocale($t->getLocale());
$nt->setTranslatable($nc);
$this->_em->persist($nt);
}
if ($ch->getImageName()) {
$this->esUpload->setContainer($ch->getContainer());
$path = $this->esUpload->resolvePath($ch->getImageName(), Upload::FILETYPE_SESSION_CHAPTER_POSTER);
$this->esUpload->setContainer($ch->getContainer());
$newFileName = $this->esUpload->copyBucket(
$ch->getImageName(),
Upload::FILETYPE_ELTASK_CHAPTER_POSTER,
$path
);
$nc->setImageName($newFileName);
}
$object->addElTaskChapter($nc);
$this->_em->persist($nc);
}
}
}
public function onPreUpdate(ElTaskPreUpdateEvent $event)
{
$object = $event->getObject();
$level = $object->getTaskLevel();
switch($level) {
case ElTask::TASKLEVEL_LESSION:
$object->setElLessionTopic(null);
break;
case ElTask::TASKLEVEL_COURSE:
$object->setElLessionTopic(null);
$object->setElLession(null);
break;
}
}
}