Spaces:
No application file
No application file
namespace Mautic\CoreBundle\Twig\Helper; | |
use Mautic\CoreBundle\CoreEvents; | |
use Mautic\CoreBundle\Event\CustomContentEvent; | |
use Symfony\Component\EventDispatcher\EventDispatcherInterface; | |
use Twig\Environment; | |
final class ContentHelper | |
{ | |
public function __construct( | |
private Environment $twig, | |
private EventDispatcherInterface $dispatcher | |
) { | |
} | |
/** | |
* Dispatch an event to collect custom content. | |
* | |
* @param string|null $context Context of the content requested for the viewName | |
* @param array<string,string> $vars twig vars | |
* @param string|null $viewName The main identifier for the content requested. Will be etracted from $vars if get_ | |
*defined | |
*/ | |
public function getCustomContent($context = null, array $vars = [], $viewName = null): string | |
{ | |
if (null === $viewName && isset($vars['mauticTemplate'])) { | |
$viewName = $vars['mauticTemplate']; | |
} | |
/** @var CustomContentEvent $event */ | |
$event = $this->dispatcher->dispatch( | |
new CustomContentEvent($viewName, $context, $vars), | |
CoreEvents::VIEW_INJECT_CUSTOM_CONTENT | |
); | |
$content = $event->getContent(); | |
if ($templatProps = $event->getTemplates()) { | |
foreach ($templatProps as $props) { | |
$content[] = $this->twig->render($props['template'], array_merge($vars, $props['vars'])); | |
} | |
} | |
return implode("\n\n", $content); | |
} | |
/** | |
* Replaces HTML script tags with non HTML tags so the JS inside them won't execute and will be readable. | |
* | |
* @param string $html | |
*/ | |
public function showScriptTags($html): string | |
{ | |
$tagsToShow = ['script', 'style']; | |
foreach ($tagsToShow as $tag) { | |
$html = preg_replace('/<'.$tag.'(.*?)>(.*?)<\/'.$tag.'>/s', '['.$tag.'$1]$2[/'.$tag.']', $html); | |
} | |
return $html; | |
} | |
public function getName(): string | |
{ | |
return 'content'; | |
} | |
} | |