<?php declare(strict_types=1);
namespace MoorlFormsClassic\Core\Subscriber;
use MoorlForms\Core\Content\Form\FormCollection;
use MoorlForms\Core\Event\SubmitFormSuccessEvent;
use MoorlForms\Core\Service\FbService;
use MoorlForms\MoorlForms;
use MoorlFormsClassic\Core\Content\History\HistoryDefinition;
use Shopware\Core\Framework\Uuid\Uuid;
use Symfony\Component\EventDispatcher\EventSubscriberInterface;
class SubmitFormSubscriber implements EventSubscriberInterface
{
private FbService $fbService;
public function __construct(FbService $fbService)
{
$this->fbService = $fbService;
}
public static function getSubscribedEvents(): array
{
return [
SubmitFormSuccessEvent::class => 'onSubmitFormSuccessEvent',
];
}
public function onSubmitFormSuccessEvent(SubmitFormSuccessEvent $event): void
{
$salesChannelContext = $event->getSalesChannelContext();
$form = $event->getForm();
if (!in_array('write-history', $form->getActions())) {
return;
}
$request = $event->getRequest();
$entity = $this->fbService->getEntityFromRequest($request);
$historyId = Uuid::randomHex();
$data = [
'id' => $historyId,
'formId' => $form->getId(),
'salesChannelId' => $salesChannelContext->getSalesChannelId(),
'languageId' => $salesChannelContext->getLanguageId(),
'name' => $entity && method_exists($entity, 'getName') ? $entity->getName() : null,
'request' => $request->request->all(),
'entityName' => $request->request->get(MoorlForms::ENTITY_NAME_KEY),
'entityId' => $request->request->get(MoorlForms::ENTITY_ID_KEY),
'payload' => null,
'media' => $form->getDataStruct()->getAttachmentMediaIds()
];
$form->setHistoryId($historyId);
$this->fbService->upsertEntity(
new FormCollection([$form]),
$salesChannelContext,
null,
HistoryDefinition::ENTITY_NAME,
$data
);
if (!in_array('print-view', $form->getActions())) {
$form->setHistoryId(null);
}
}
}