Spaces:
No application file
No application file
declare(strict_types=1); | |
namespace MauticPlugin\GrapesJsBuilderBundle\EventSubscriber; | |
use Mautic\CoreBundle\CoreEvents; | |
use Mautic\CoreBundle\Event\CustomContentEvent; | |
use Mautic\EmailBundle\Entity\Email; | |
use MauticPlugin\GrapesJsBuilderBundle\Entity\GrapesJsBuilder; | |
use MauticPlugin\GrapesJsBuilderBundle\Integration\Config; | |
use MauticPlugin\GrapesJsBuilderBundle\Model\GrapesJsBuilderModel; | |
use Symfony\Component\EventDispatcher\EventSubscriberInterface; | |
use Symfony\Component\HttpFoundation\RequestStack; | |
use Symfony\Component\Routing\RouterInterface; | |
use Twig\Environment; | |
class InjectCustomContentSubscriber implements EventSubscriberInterface | |
{ | |
public function __construct( | |
private Config $config, | |
private GrapesJsBuilderModel $grapesJsBuilderModel, | |
private Environment $twig, | |
private RequestStack $requestStack, | |
private RouterInterface $router | |
) { | |
} | |
public static function getSubscribedEvents(): array | |
{ | |
return [ | |
CoreEvents::VIEW_INJECT_CUSTOM_CONTENT => ['injectViewCustomContent', 0], | |
]; | |
} | |
public function injectViewCustomContent(CustomContentEvent $customContentEvent): void | |
{ | |
if (!$this->config->isPublished()) { | |
return; | |
} | |
$passParams = []; | |
$parameters = $customContentEvent->getVars(); | |
if ('email.settings.advanced' === $customContentEvent->getContext()) { | |
// Inject MJML form within mail page | |
if (empty($parameters['email']) || !$parameters['email'] instanceof Email) { | |
return; | |
} | |
$passParams = ['customMjml' => '']; | |
if ($this->requestStack->getCurrentRequest()->request->has('grapesjsbuilder')) { | |
$data = $this->requestStack->getCurrentRequest()->get('grapesjsbuilder', ''); | |
if (isset($data['customMjml'])) { | |
$passParams['customMjml'] = $data['customMjml']; | |
} | |
} | |
$grapesJsBuilder = $this->grapesJsBuilderModel->getRepository()->findOneBy(['email' => $parameters['email']]); | |
if ('POST' !== $this->requestStack->getCurrentRequest()->getMethod()) { | |
if (!$grapesJsBuilder instanceof GrapesJsBuilder && $parameters['email']->getIsClone()) { | |
$grapesJsBuilder = $this->grapesJsBuilderModel->getGrapesJsFromEmailId( | |
$parameters['email']->getClonedId() | |
); | |
} | |
if ($grapesJsBuilder instanceof GrapesJsBuilder) { | |
$passParams['customMjml'] = $grapesJsBuilder->getCustomMjml(); | |
} | |
} | |
$content = $this->twig->render( | |
'@GrapesJsBuilder/Setting/fields.html.twig', | |
$passParams | |
); | |
$customContentEvent->addContent($content); | |
} elseif ('page.header.left' === $customContentEvent->getContext()) { | |
// Inject fileManager URL | |
$passParams['dataAssets'] = $this->router->generate('grapesjsbuilder_assets', [], \Symfony\Component\Routing\Generator\UrlGeneratorInterface::ABSOLUTE_URL); | |
$passParams['dataUpload'] = $this->router->generate('grapesjsbuilder_upload', [], \Symfony\Component\Routing\Generator\UrlGeneratorInterface::ABSOLUTE_URL); | |
$passParams['dataDelete'] = $this->router->generate('grapesjsbuilder_delete', [], \Symfony\Component\Routing\Generator\UrlGeneratorInterface::ABSOLUTE_URL); | |
$content = $this->twig->render( | |
'@GrapesJsBuilder/Setting/vars.html.twig', | |
$passParams | |
); | |
$customContentEvent->addContent($content); | |
} | |
} | |
} | |