<?php
namespace App\EventSubscriber;
use App\Event\AppEvents;
use App\Event\Municipality\MunicipalityEvent;
use Doctrine\ORM\EntityManagerInterface;
use App\Entity\CustomField;
use App\Entity\Municipality;
use App\Entity\MunicipalityFormCustomField;
use App\ValueObject\FormTypes;
use Symfony\Component\EventDispatcher\EventSubscriberInterface;
/**
* Class MunicipalityListener
*/
class MunicipalitySubscriber implements EventSubscriberInterface
{
/**
* @var EntityManagerInterface
*/
private $em;
/**
* MunicipalityListener constructor.
*
* @param EntityManagerInterface $em
*/
public function __construct(EntityManagerInterface $em)
{
$this->em = $em;
}
/**
* {@inheritdoc}
*/
public static function getSubscribedEvents()
{
return [
AppEvents::MUNICIPALITY_CREATED => 'generateDefaultFormFields',
];
}
/**
* Generate default form items for each form.
* @param MunicipalityEvent $event
*/
public function generateDefaultFormFields($event)
{
$em = $this->em;
/** @var Municipality $municipality */
$municipality = $event->getMunicipality();
foreach (FormTypes::getConstants() as $type) {
$defaultFields = $this->em->getRepository(CustomField::class)->findDefaultFields($type);
$pos = 1;
foreach ($defaultFields as $customField) {
/** @var CustomField $customField */
$formField = new MunicipalityFormCustomField($type, $municipality, $pos);
$formField->setCustomField($customField);
$pos++;
$em->persist($formField);
}
}
$this->em->flush();
}
}