Website : rimsha.abasa.com
backdoor
Home
Console
Upload
information
Create File
Create Folder
About
Tools
:
/
var
/
www
/
app
/
upgrade
/
plugins
/
GrapesJsBuilderBundle
/
Controller
/
Filename :
GrapesJsController.php
back
Copy
<?php declare(strict_types=1); namespace MauticPlugin\GrapesJsBuilderBundle\Controller; use Mautic\CoreBundle\Controller\CommonController; use Mautic\CoreBundle\Helper\EmojiHelper; use Mautic\CoreBundle\Helper\InputHelper; use Mautic\CoreBundle\Helper\ThemeHelper; use Mautic\EmailBundle\Entity\Email; use Mautic\PageBundle\Entity\Page; use Psr\Log\LoggerInterface; use Symfony\Component\HttpFoundation\Request; use Symfony\Component\HttpFoundation\Response; class GrapesJsController extends CommonController { public const OBJECT_TYPE = ['email', 'page']; /** * Activate the custom builder. * * @param string $objectType * @param int $objectId * * @return Response */ public function builderAction( Request $request, LoggerInterface $mauticLogger, ThemeHelper $themeHelper, $objectType, $objectId, ) { if (!in_array($objectType, self::OBJECT_TYPE)) { throw new \Exception('Object not authorized to load custom builder', Response::HTTP_CONFLICT); } /** @var \Mautic\EmailBundle\Model\EmailModel|\Mautic\PageBundle\Model\PageModel $model */ $model = $this->getModel($objectType); $aclToCheck = 'email:emails:'; if ('page' === $objectType) { $aclToCheck = 'page:pages:'; } // permission check if (str_contains((string) $objectId, 'new')) { $isNew = true; if (!$this->security->isGranted($aclToCheck.'create')) { return $this->accessDenied(); } /** @var Email|Page $entity */ $entity = $model->getEntity(); $entity->setSessionId($objectId); } else { /** @var Email|Page $entity */ $entity = $model->getEntity($objectId); $isNew = false; if (null == $entity || !$this->security->hasEntityAccess( $aclToCheck.'viewown', $aclToCheck.'viewother', $entity->getCreatedBy() ) ) { return $this->accessDenied(); } } $type = 'html'; $template = InputHelper::clean($request->query->get('template')); if (!$template) { $mauticLogger->warning('Grapesjs: no template in query'); return $this->json(false); } $templateName = '@themes/'.$template.'/html/'.$objectType; $content = $entity->getContent(); // Check for MJML template // @deprecated - use mjml directly in email.html.twig if ($logicalName = $this->checkForMjmlTemplate($templateName.'.mjml.twig')) { $type = 'mjml'; } else { $logicalName = $themeHelper->checkForTwigTemplate($templateName.'.html.twig'); } // Replace short codes to emoji $content = array_map(fn ($text) => EmojiHelper::toEmoji($text, 'short'), $content); $renderedTemplate = $this->renderView( $logicalName, [ 'isNew' => $isNew, 'content' => $content, $objectType => $entity, 'template' => $template, 'basePath' => $request->getBasePath(), ] ); if (str_contains($renderedTemplate, '<mjml>')) { $type = 'mjml'; } $renderedTemplateHtml = ('html' === $type) ? $renderedTemplate : ''; $renderedTemplateMjml = ('mjml' === $type) ? $renderedTemplate : ''; return $this->render( '@GrapesJsBuilder/Builder/template.html.twig', [ 'templateHtml' => $renderedTemplateHtml, 'templateMjml' => $renderedTemplateMjml, ] ); } /** * @deprecated deprecated since version 5.0 - use mjml directly in email.html.twig */ private function checkForMjmlTemplate($template) { $twig = $this->container->get('twig'); if ($twig->getLoader()->exists($template)) { return $template; } return null; } }