/** * Add forms to available page tokens. * * @param PageBuilderEvent $event */ public function onPageBuild(PageBuilderEvent $event) { $tokenHelper = new BuilderTokenHelper($this->factory, 'focus', $this->model->getPermissionBase(), 'MauticFocusBundle', 'mautic.focus'); if ($event->tokenSectionsRequested()) { $event->addTokenSection('mautic.focustokens', 'mautic.focus.focus_items', $tokenHelper->getTokenContent()); } if ($event->tokensRequested($this->regex)) { $event->addTokensFromHelper($tokenHelper, $this->regex, 'name', 'id', true); } }
/** * @param int $page * * @return JsonResponse */ public function indexAction($page = 1) { $tokenHelper = new BuilderTokenHelper($this->factory, $this->getModelName(), $this->getViewPermissionBase(), $this->getBundleName(), $this->getLangVar()); if ($permissionSet = $this->getPermissionSet()) { $tokenHelper->setPermissionSet($permissionSet); } $arguments = $this->getEntityArguments(); $dataArray = array('newContent' => $tokenHelper->getTokenContent($page, $arguments), 'mauticContent' => 'builder'); $response = new JsonResponse($dataArray); return $response; }
/** * @param EmailBuilderEvent $event */ public function onEmailBuild(EmailBuilderEvent $event) { $tokenHelper = new BuilderTokenHelper($this->factory, 'lead.field', 'lead:fields', 'MauticLeadBundle'); $tokenHelper->setPermissionSet(array('lead:fields:full')); if ($event->tokenSectionsRequested()) { //add email tokens $event->addTokenSection('lead.emailtokens', 'mautic.lead.email.header.index', $tokenHelper->getTokenContent(array('filter' => array('force' => array(array('column' => 'f.isPublished', 'expr' => 'eq', 'value' => true))), 'orderBy' => 'f.label', 'orderByDir' => 'ASC', 'hydration_mode' => 'HYDRATE_ARRAY')), 255); } if ($event->tokensRequested(self::$leadFieldRegex)) { $event->addTokensFromHelper($tokenHelper, self::$leadFieldRegex, 'label', 'alias', true); } }
/** * Add forms to available page tokens * * @param PageBuilderEvent $event */ public function onPageBuild(PageBuilderEvent $event) { $tokenHelper = new BuilderTokenHelper($this->factory, 'form'); if ($event->tokenSectionsRequested()) { $event->addTokenSection('form.pagetokens', 'mautic.form.forms', $tokenHelper->getTokenContent()); } if ($event->abTestWinnerCriteriaRequested()) { //add AB Test Winner Criteria $formSubmissions = array('group' => 'mautic.form.abtest.criteria', 'label' => 'mautic.form.abtest.criteria.submissions', 'callback' => '\\Mautic\\FormBundle\\Helper\\AbTestHelper::determineSubmissionWinner'); $event->addAbTestWinnerCriteria('form.submissions', $formSubmissions); } if ($event->tokensRequested($this->formRegex)) { $event->addTokensFromHelper($tokenHelper, $this->formRegex, 'name', 'id', true); } }
/** * @param Request $request * * @return \Symfony\Component\HttpFoundation\JsonResponse */ protected function getEmailTemplateAction(Request $request) { $data = array('success' => 1, 'body' => '', 'subject' => ''); $emailId = $request->get('template'); /** @var \Mautic\EmailBundle\Model\EmailModel $model */ $model = $this->factory->getModel('email'); /** @var \Mautic\EmailBundle\Entity\Email $email */ $email = $model->getEntity($emailId); if ($email !== null && $this->factory->getSecurity()->hasEntityAccess('email:emails:viewown', 'email:emails:viewother', $email->getCreatedBy())) { $mailer = $this->factory->getMailer(); $mailer->setEmail($email, true, array(), array(), true); $data['body'] = $mailer->getBody(); $data['subject'] = $mailer->getSubject(); // Parse tokens into view data $tokens = $model->getBuilderComponents($email, array('tokens', 'visualTokens')); BuilderTokenHelper::replaceTokensWithVisualPlaceholders($tokens, $data['body']); } return $this->sendJsonResponse($data); }
/** * @param Request $request * * @return \Symfony\Component\HttpFoundation\JsonResponse */ protected function generatePlaintTextAction(Request $request) { $dataArray = array(); $mode = $request->request->get('mode'); $custom = $request->request->get('custom'); $id = $request->request->get('id'); $parser = new PlainTextHelper(array('base_url' => $request->getSchemeAndHttpHost() . $request->getBasePath())); if ($mode == 'custom') { // Convert placeholders into raw tokens BuilderTokenHelper::replaceVisualPlaceholdersWithTokens($custom); $dataArray['text'] = $parser->setHtml($custom)->getText(); } else { $session = $this->factory->getSession(); $contentName = 'mautic.emailbuilder.' . $id . '.content'; $content = $session->get($contentName, array()); if (strpos($id, 'new') === false) { $entity = $this->factory->getModel('email')->getEntity($id); $existingContent = $entity->getContent(); $content = array_merge($existingContent, $content); } // Convert placeholders into raw tokens BuilderTokenHelper::replaceVisualPlaceholdersWithTokens($content); $content = implode("<br /><br />", $content); $dataArray['text'] = $parser->setHtml($content)->getText(); } return $this->sendJsonResponse($dataArray); }
/** * @param $event */ private function addTokenSections($event) { //add email tokens $tokenHelper = new BuilderTokenHelper($this->factory, 'asset'); $event->addTokenSection('asset.emailtokens', 'mautic.asset.assets', $tokenHelper->getTokenContent(), -255); }
/** * @param Request $request * * @return \Symfony\Component\HttpFoundation\JsonResponse */ protected function generatePlaintTextAction(Request $request) { $custom = $request->request->get('custom'); $id = $request->request->get('id'); $parser = new PlainTextHelper(['base_url' => $request->getSchemeAndHttpHost() . $request->getBasePath()]); // Convert placeholders into raw tokens BuilderTokenHelper::replaceVisualPlaceholdersWithTokens($custom); $dataArray = ['text' => $parser->setHtml($custom)->getText()]; return $this->sendJsonResponse($dataArray); }
<div class="col-sm-6"> <a href="#" data-toggle="tooltip" data-token='<a href="%url={unsubscribe_url}%">%text%</a>' data-drop="showBuilderLinkModal" class="btn btn-default btn-block" title="<?php echo $view['translator']->trans('mautic.email.token.unsubscribe_url.descr'); ?> "> <i class="fa fa-link"></i><br /> <?php echo $view['translator']->trans('mautic.email.token.unsubscribe_url'); ?> </a> </div> </div> <div class="row ml-2 mr-2"> <div class="col-sm-6"> <?php $token = $view->escape(BuilderTokenHelper::getVisualTokenHtml('{webview_text}', $view['translator']->trans('mautic.email.token.webview_text'))); ?> <a href="#" data-toggle="tooltip" data-token="<?php echo $token; ?> " class="btn btn-default btn-block" title="<?php echo $view['translator']->trans('mautic.email.token.webview_text.descr'); ?> "> <i class="fa fa-file-text-o"></i><br /> <?php echo $view['translator']->trans('mautic.email.token.webview_text'); ?> </a> </div> <div class="col-sm-6">
/** * @param EmailBuilderEvent $event * * @return void */ public function onEmailBuild(EmailBuilderEvent $event) { $tokenHelper = new BuilderTokenHelper($this->factory, 'page'); if ($event->tokenSectionsRequested()) { $event->addTokenSection('page.emailtokens', 'mautic.page.pages', $tokenHelper->getTokenContent(array('filter' => array('force' => array(array('column' => 'p.variantParent', 'expr' => 'isNull'))))), -254); } if ($event->tokensRequested(array($this->pageTokenRegex))) { $event->addTokensFromHelper($tokenHelper, $this->pageTokenRegex, 'title', 'id', false, true); } }
/** * @param int $objectId * * @return JsonResponse */ public function emailAction($objectId = 0) { $valid = $cancelled = false; /** @var \Mautic\LeadBundle\Model\LeadModel $model */ $model = $this->getModel('lead'); /** @var \Mautic\LeadBundle\Entity\Lead $lead */ $lead = $model->getEntity($objectId); if ($lead === null || !$this->get('mautic.security')->hasEntityAccess('lead:leads:viewown', 'lead:leads:viewother', $lead->getPermissionUser())) { return $this->modalAccessDenied(); } $leadFields = $lead->getProfileFields(); $leadFields['id'] = $lead->getId(); $leadEmail = $leadFields['email']; $leadName = $leadFields['firstname'] . ' ' . $leadFields['lastname']; // Set onwer ID to be the current user ID so it will use his signature $leadFields['owner_id'] = $this->get('mautic.helper.user')->getUser()->getId(); // Check if lead has a bounce status /** @var \Mautic\EmailBundle\Model\EmailModel $emailModel */ $emailModel = $this->getModel('email'); $dnc = $emailModel->getRepository()->checkDoNotEmail($leadEmail); $inList = $this->request->getMethod() == 'GET' ? $this->request->get('list', 0) : $this->request->request->get('lead_quickemail[list]', 0, true); $email = ['list' => $inList]; $action = $this->generateUrl('mautic_contact_action', ['objectAction' => 'email', 'objectId' => $objectId]); $form = $this->get('form.factory')->create('lead_quickemail', $email, ['action' => $action]); if ($this->request->getMethod() == 'POST') { $valid = false; if (!($cancelled = $this->isFormCancelled($form))) { if ($valid = $this->isFormValid($form)) { $email = $form->getData(); $bodyCheck = trim(strip_tags($email['body'])); if (!empty($bodyCheck)) { $mailer = $this->get('mautic.helper.mailer')->getMailer(); // To lead $mailer->addTo($leadEmail, $leadName); // From user $user = $this->get('mautic.helper.user')->getUser(); $mailer->setFrom($email['from'], empty($email['fromname']) ? '' : $email['fromname']); // Set Content BuilderTokenHelper::replaceVisualPlaceholdersWithTokens($email['body']); $mailer->setBody($email['body']); $mailer->parsePlainText($email['body']); // Set lead $mailer->setLead($leadFields); $mailer->setIdHash(); $mailer->setSubject($email['subject']); // Ensure safe emoji for notification $subject = EmojiHelper::toHtml($email['subject']); if ($mailer->send(true, false, false)) { $mailer->createEmailStat(); $this->addFlash('mautic.lead.email.notice.sent', ['%subject%' => $subject, '%email%' => $leadEmail]); } else { $errors = $mailer->getErrors(); // Unset the array of failed email addresses if (isset($errors['failures'])) { unset($errors['failures']); } $form->addError(new FormError($this->get('translator')->trans('mautic.lead.email.error.failed', ['%subject%' => $subject, '%email%' => $leadEmail, '%error%' => is_array($errors) ? implode('<br />', $errors) : $errors], 'flashes'))); $valid = false; } } else { $form['body']->addError(new FormError($this->get('translator')->trans('mautic.lead.email.body.required', [], 'validators'))); $valid = false; } } } } if (empty($leadEmail) || $valid || $cancelled) { if ($inList) { $route = 'mautic_contact_index'; $viewParameters = ['page' => $this->get('session')->get('mautic.lead.page', 1)]; $func = 'index'; } else { $route = 'mautic_contact_action'; $viewParameters = ['objectAction' => 'view', 'objectId' => $objectId]; $func = 'view'; } return $this->postActionRedirect(['returnUrl' => $this->generateUrl($route, $viewParameters), 'viewParameters' => $viewParameters, 'contentTemplate' => 'MauticLeadBundle:Lead:' . $func, 'passthroughVars' => ['mauticContent' => 'lead', 'closeModal' => 1]]); } return $this->ajaxAction(['contentTemplate' => 'MauticLeadBundle:Lead:email.html.php', 'viewParameters' => ['form' => $form->createView(), 'dnc' => $dnc], 'passthroughVars' => ['mauticContent' => 'leadEmail', 'route' => false]]); }
/** * @param $objectId * @param bool $ignorePost * @param bool $forceTypeSelection * * @return array|\Symfony\Component\HttpFoundation\JsonResponse|\Symfony\Component\HttpFoundation\RedirectResponse|Response */ public function editAction($objectId, $ignorePost = false, $forceTypeSelection = false) { /** @var \Mautic\EmailBundle\Model\EmailModel $model */ $model = $this->getModel('email'); $method = $this->request->getMethod(); $entity = $model->getEntity($objectId); $session = $this->get('session'); $page = $this->get('session')->get('mautic.email.page', 1); //set the return URL $returnUrl = $this->generateUrl('mautic_email_index', ['page' => $page]); $postActionVars = ['returnUrl' => $returnUrl, 'viewParameters' => ['page' => $page], 'contentTemplate' => 'MauticEmailBundle:Email:index', 'passthroughVars' => ['activeLink' => 'mautic_email_index', 'mauticContent' => 'email']]; //not found if ($entity === null) { return $this->postActionRedirect(array_merge($postActionVars, ['flashes' => [['type' => 'error', 'msg' => 'mautic.email.error.notfound', 'msgVars' => ['%id%' => $objectId]]]])); } elseif (!$this->get('mautic.security')->hasEntityAccess('email:emails:editown', 'email:emails:editother', $entity->getCreatedBy())) { return $this->accessDenied(); } elseif ($model->isLocked($entity)) { //deny access if the entity is locked return $this->isLocked($postActionVars, $entity, 'email'); } //Create the form $action = $this->generateUrl('mautic_email_action', ['objectAction' => 'edit', 'objectId' => $objectId]); $updateSelect = $method == 'POST' ? $this->request->request->get('emailform[updateSelect]', false, true) : $this->request->get('updateSelect', false); if ($updateSelect) { // Force type to template $entity->setEmailType('template'); } $form = $model->createForm($entity, $this->get('form.factory'), $action, ['update_select' => $updateSelect]); ///Check for a submitted form and process it if (!$ignorePost && $method == 'POST') { $valid = false; if (!($cancelled = $this->isFormCancelled($form))) { if ($valid = $this->isFormValid($form)) { $content = $entity->getCustomHtml(); BuilderTokenHelper::replaceVisualPlaceholdersWithTokens($content); $entity->setCustomHtml($content); //form is valid so process the data $model->saveEntity($entity, $form->get('buttons')->get('save')->isClicked()); $this->addFlash('mautic.core.notice.updated', ['%name%' => $entity->getName(), '%menu_link%' => 'mautic_email_index', '%url%' => $this->generateUrl('mautic_email_action', ['objectAction' => 'edit', 'objectId' => $entity->getId()])], 'warning'); } } else { //clear any modified content $session->remove('mautic.emailbuilder.' . $objectId . '.content'); //unlock the entity $model->unlockEntity($entity); } $template = 'MauticEmailBundle:Email:view'; $passthrough = ['activeLink' => 'mautic_email_index', 'mauticContent' => 'email']; // Check to see if this is a popup if (isset($form['updateSelect'])) { $template = false; $passthrough = array_merge($passthrough, ['updateSelect' => $form['updateSelect']->getData(), 'emailId' => $entity->getId(), 'emailSubject' => $entity->getSubject(), 'emailName' => $entity->getName(), 'emailLang' => $entity->getLanguage()]); } if ($cancelled || $valid && $form->get('buttons')->get('save')->isClicked()) { $viewParameters = ['objectAction' => 'view', 'objectId' => $entity->getId()]; return $this->postActionRedirect(array_merge($postActionVars, ['returnUrl' => $this->generateUrl('mautic_email_action', $viewParameters), 'viewParameters' => $viewParameters, 'contentTemplate' => $template, 'passthroughVars' => $passthrough])); } } else { //lock the entity $model->lockEntity($entity); //clear any modified content $session->remove('mautic.emailbuilder.' . $objectId . '.content'); // Parse tokens into view data $tokens = $model->getBuilderComponents($entity, ['tokens', 'visualTokens', 'tokenSections']); // Set to view content $template = $entity->getTemplate(); if (empty($template)) { $content = $entity->getCustomHtml(); $form['customHtml']->setData($content); } } $assets = $form['assetAttachments']->getData(); $attachmentSize = $this->getModel('asset')->getTotalFilesize($assets); $slotTypes = $model->getBuilderComponents($entity, 'slotTypes'); $sectionForm = $this->get('form.factory')->create('builder_section'); return $this->delegateView(['viewParameters' => ['form' => $this->setFormTheme($form, 'MauticEmailBundle:Email:form.html.php', 'MauticEmailBundle:FormTheme\\Email'), 'isVariant' => $entity->isVariant(true), 'tokens' => !empty($tokens) ? $tokens['tokenSections'] : $model->getBuilderComponents($entity, 'tokenSections'), 'slots' => $this->buildSlotForms($slotTypes), 'themes' => $this->factory->getInstalledThemes('email', true), 'email' => $entity, 'forceTypeSelection' => $forceTypeSelection, 'attachmentSize' => $attachmentSize, 'builderAssets' => trim(preg_replace('/\\s+/', ' ', $this->getAssetsForBuilder())), 'sectionForm' => $sectionForm->createView()], 'contentTemplate' => 'MauticEmailBundle:Email:form.html.php', 'passthroughVars' => ['activeLink' => '#mautic_email_index', 'mauticContent' => 'email', 'updateSelect' => InputHelper::clean($this->request->query->get('updateSelect')), 'route' => $this->generateUrl('mautic_email_action', ['objectAction' => 'edit', 'objectId' => $entity->getId()])]]); }
* @link http://mautic.org * * @license GNU/GPLv3 http://www.gnu.org/licenses/gpl-3.0.html */ if ($tmpl == 'index') { $view->extend('MauticFormBundle:SubscribedEvents\\BuilderToken:index.html.php'); } ?> <div id="formPageTokens"> <?php if (count($items)) { ?> <div class="list-group ma-5"> <?php foreach ($items as $i) { $token = $view->escape(\Mautic\CoreBundle\Helper\BuilderTokenHelper::getVisualTokenHtml('{form=' . $i[0]->getId() . '}', $i[0]->getName())); ?> <a href="#" class="list-group-item" data-token="<?php echo $token; ?> "> <div> <span><i class="fa fa-fw fa-list"></i><?php echo $i[0]->getName(); ?> </span> </div> </a> <?php } ?>
/** * Activate the builder * * @param $objectId * * @return array|\Symfony\Component\HttpFoundation\JsonResponse|\Symfony\Component\HttpFoundation\RedirectResponse|Response * @throws \Exception * @throws \Mautic\CoreBundle\Exception\FileNotFoundException */ public function builderAction($objectId) { /** @var \Mautic\EmailBundle\Model\EmailModel $model */ $model = $this->factory->getModel('email'); //permission check if (strpos($objectId, 'new') !== false) { $isNew = true; if (!$this->factory->getSecurity()->isGranted('email:emails:create')) { return $this->accessDenied(); } $entity = $model->getEntity(); $entity->setSessionId($objectId); } else { $isNew = false; $entity = $model->getEntity($objectId); if ($entity == null || !$this->factory->getSecurity()->hasEntityAccess('email:emails:viewown', 'email:emails:viewother', $entity->getCreatedBy())) { return $this->accessDenied(); } } $template = InputHelper::clean($this->request->query->get('template')); $slots = $this->factory->getTheme($template)->getSlots('email'); //merge any existing changes $newContent = $this->factory->getSession()->get('mautic.emailbuilder.' . $objectId . '.content', array()); $content = $entity->getContent(); $tokens = $model->getBuilderComponents($entity, array('tokens', 'visualTokens')); BuilderTokenHelper::replaceTokensWithVisualPlaceholders($tokens, $content); if (is_array($newContent)) { $content = array_merge($content, $newContent); } // Replace short codes to emoji $content = EmojiHelper::toEmoji($content, 'short'); return $this->render('MauticEmailBundle::builder.html.php', array('isNew' => $isNew, 'slots' => $slots, 'content' => $content, 'email' => $entity, 'template' => $template, 'basePath' => $this->request->getBasePath())); }
* @author Mautic * @link http://mautic.org * @license GNU/GPLv3 http://www.gnu.org/licenses/gpl-3.0.html */ if ($tmpl == 'index') { $view->extend('MauticLeadBundle:SubscribedEvents\\BuilderToken:index.html.php'); } ?> <div id="leadEmailTokens"> <?php if (count($items)) { ?> <div class="list-group"> <?php foreach ($items as $i) { $token = $view->escape(\Mautic\CoreBundle\Helper\BuilderTokenHelper::getVisualTokenHtml('{contactfield=' . $i['alias'] . '}', $i['label'])); ?> <a href="#" class="list-group-item" data-token="<?php echo $token; ?> "> <span><?php echo $i['label']; ?> </span> </a> <?php } ?> </div>
/** * @param int $objectId * * @return JsonResponse */ protected function emailAction($objectId = 0) { $valid = $cancelled = false; /** @var \Mautic\LeadBundle\Model\LeadModel $model */ $model = $this->factory->getModel('lead'); /** @var \Mautic\LeadBundle\Entity\Lead $lead */ $lead = $model->getEntity($objectId); if ($lead === null || !$this->factory->getSecurity()->hasEntityAccess('lead:leads:viewown', 'lead:leads:viewother', $lead->getOwner())) { return $this->modalAccessDenied(); } $leadFields = $model->flattenFields($lead->getFields()); $leadFields['id'] = $lead->getId(); $leadEmail = $leadFields['email']; $leadName = $leadFields['firstname'] . ' ' . $leadFields['lastname']; $inList = $this->request->getMethod() == 'GET' ? $this->request->get('list', 0) : $this->request->request->get('lead_quickemail[list]', 0, true); $email = array('list' => $inList); $action = $this->generateUrl('mautic_lead_action', array('objectAction' => 'email', 'objectId' => $objectId)); $form = $this->get('form.factory')->create('lead_quickemail', $email, array('action' => $action)); if ($this->request->getMethod() == 'POST') { $valid = false; if (!($cancelled = $this->isFormCancelled($form))) { if ($valid = $this->isFormValid($form)) { $email = $form->getData(); $bodyCheck = trim(strip_tags($email['body'])); if (!empty($bodyCheck)) { $mailer = $this->factory->getMailer(); // To lead $mailer->addTo($leadEmail, $leadName); // From user $user = $this->factory->getUser(); $mailer->setFrom($email['from'], strtolower($user->getEmail()) !== strtolower($email['from']) ? null : $user->getFirstName() . ' ' . $user->getLastName()); // Set Content BuilderTokenHelper::replaceVisualPlaceholdersWithTokens($email['body']); $mailer->setBody($email['body']); $mailer->parsePlainText($email['body']); // Set lead $mailer->setLead($leadFields); $mailer->setIdHash(); $mailer->setSubject($email['subject']); if ($error = $mailer->send(true)) { $mailer->createLeadEmailStat(); $this->addFlash('mautic.lead.email.notice.sent', array('%subject%' => $email['subject'], '%email%' => $leadEmail)); } else { $this->addFlash('mautic.lead.email.error.failed', array('%subject%' => $email['subject'], '%email%' => $leadEmail)); } } else { $form['body']->addError(new FormError($this->get('translator')->trans('mautic.lead.email.body.required', array(), 'validators'))); $valid = false; } } } } if (empty($leadEmail) || $valid || $cancelled) { if ($inList) { $route = 'mautic_lead_index'; $viewParameters = array('page' => $this->factory->getSession()->get('mautic.lead.page', 1)); $func = 'index'; } else { $route = 'mautic_lead_action'; $viewParameters = array('objectAction' => 'view', 'objectId' => $objectId); $func = 'view'; } return $this->postActionRedirect(array('returnUrl' => $this->generateUrl($route, $viewParameters), 'viewParameters' => $viewParameters, 'contentTemplate' => 'MauticLeadBundle:Lead:' . $func, 'passthroughVars' => array('mauticContent' => 'lead', 'closeModal' => 1))); } return $this->ajaxAction(array('contentTemplate' => 'MauticLeadBundle:Lead:email.html.php', 'viewParameters' => array('form' => $form->createView()), 'passthroughVars' => array('mauticContent' => 'leadEmail', 'route' => false))); }
/** * Generates edit form and processes post data. * * @param int $objectId * @param bool $ignorePost * * @return JsonResponse|\Symfony\Component\HttpFoundation\Response */ public function editAction($objectId, $ignorePost = false) { /** @var \Mautic\PageBundle\Model\PageModel $model */ $model = $this->getModel('page.page'); $entity = $model->getEntity($objectId); $session = $this->get('session'); $page = $this->get('session')->get('mautic.page.page', 1); //set the return URL $returnUrl = $this->generateUrl('mautic_page_index', ['page' => $page]); $postActionVars = ['returnUrl' => $returnUrl, 'viewParameters' => ['page' => $page], 'contentTemplate' => 'MauticPageBundle:Page:index', 'passthroughVars' => ['activeLink' => 'mautic_page_index', 'mauticContent' => 'page']]; //not found if ($entity === null) { return $this->postActionRedirect(array_merge($postActionVars, ['flashes' => [['type' => 'error', 'msg' => 'mautic.page.error.notfound', 'msgVars' => ['%id%' => $objectId]]]])); } elseif (!$this->get('mautic.security')->hasEntityAccess('page:pages:viewown', 'page:pages:viewother', $entity->getCreatedBy())) { return $this->accessDenied(); } elseif ($model->isLocked($entity)) { //deny access if the entity is locked return $this->isLocked($postActionVars, $entity, 'page.page'); } //Create the form $action = $this->generateUrl('mautic_page_action', ['objectAction' => 'edit', 'objectId' => $objectId]); $form = $model->createForm($entity, $this->get('form.factory'), $action); ///Check for a submitted form and process it if (!$ignorePost && $this->request->getMethod() == 'POST') { $valid = false; if (!($cancelled = $this->isFormCancelled($form))) { if ($valid = $this->isFormValid($form)) { $content = $entity->getCustomHtml(); BuilderTokenHelper::replaceVisualPlaceholdersWithTokens($content); $entity->setCustomHtml($content); //form is valid so process the data $model->saveEntity($entity, $form->get('buttons')->get('save')->isClicked()); $this->addFlash('mautic.core.notice.updated', ['%name%' => $entity->getTitle(), '%menu_link%' => 'mautic_page_index', '%url%' => $this->generateUrl('mautic_page_action', ['objectAction' => 'edit', 'objectId' => $entity->getId()])]); } } else { //clear any modified content $session->remove('mautic.pagebuilder.' . $objectId . '.content'); //unlock the entity $model->unlockEntity($entity); } if ($cancelled || $valid && $form->get('buttons')->get('save')->isClicked()) { $viewParameters = ['objectAction' => 'view', 'objectId' => $entity->getId()]; return $this->postActionRedirect(array_merge($postActionVars, ['returnUrl' => $this->generateUrl('mautic_page_action', $viewParameters), 'viewParameters' => $viewParameters, 'contentTemplate' => 'MauticPageBundle:Page:view'])); } } else { //lock the entity $model->lockEntity($entity); //clear any modified content $session->remove('mautic.pagebuilder.' . $objectId . '.content'); //set the lookup values $parent = $entity->getTranslationParent(); if ($parent && isset($form['translationParent_lookup'])) { $form->get('translationParent_lookup')->setData($parent->getTitle()); } // Parse tokens into view data $tokens = $model->getBuilderComponents($entity, ['tokens', 'visualTokens', 'tokenSections']); // Set to view content $template = $entity->getTemplate(); if (empty($template)) { $content = $entity->getCustomHtml(); $form['customHtml']->setData($content); } } $slotTypes = $model->getBuilderComponents($entity, 'slotTypes'); $sectionForm = $this->get('form.factory')->create('builder_section'); return $this->delegateView(['viewParameters' => ['form' => $this->setFormTheme($form, 'MauticPageBundle:Page:form.html.php', 'MauticPageBundle:FormTheme\\Page'), 'isVariant' => $entity->isVariant(true), 'tokens' => !empty($tokens) ? $tokens['tokenSections'] : $model->getBuilderComponents($entity, 'tokenSections'), 'activePage' => $entity, 'themes' => $this->factory->getInstalledThemes('page', true), 'slots' => $this->buildSlotForms($slotTypes), 'builderAssets' => trim(preg_replace('/\\s+/', ' ', $this->getAssetsForBuilder())), 'sectionForm' => $sectionForm->createView()], 'contentTemplate' => 'MauticPageBundle:Page:form.html.php', 'passthroughVars' => ['activeLink' => '#mautic_page_index', 'mauticContent' => 'page', 'route' => $this->generateUrl('mautic_page_action', ['objectAction' => 'edit', 'objectId' => $entity->getId()])]]); }
/** * Get tokens from a BuilderTokenHelper * * @param BuilderTokenHelper $tokenHelper * @param $tokens * @param $labelColumn * @param $valueColumn * * @return array|void */ public function getTokensFromHelper(BuilderTokenHelper $tokenHelper, $tokens, $labelColumn = 'name', $valueColumn = 'id') { return $tokenHelper->getTokens($tokens, $this->tokenFilterTarget == 'label' ? $this->tokenFilterText : '', $labelColumn, $valueColumn); }
/** * Activate the builder * * @param int $objectId * * @return \Symfony\Component\HttpFoundation\Response */ public function builderAction($objectId) { /** @var \Mautic\PageBundle\Model\PageModel $model */ $model = $this->factory->getModel('page.page'); //permission check if (strpos($objectId, 'new') !== false) { $isNew = true; if (!$this->factory->getSecurity()->isGranted('page:pages:create')) { return $this->accessDenied(); } $entity = $model->getEntity(); $entity->setSessionId($objectId); } else { $isNew = false; $entity = $model->getEntity($objectId); if ($entity == null || !$this->factory->getSecurity()->hasEntityAccess('page:pages:viewown', 'page:pages:viewother', $entity->getCreatedBy())) { return $this->accessDenied(); } } $template = InputHelper::clean($this->request->query->get('template')); $slots = $this->factory->getTheme($template)->getSlots('page'); //merge any existing changes $newContent = $this->factory->getSession()->get('mautic.pagebuilder.' . $objectId . '.content', array()); $content = $entity->getContent(); $tokens = $model->getBuilderComponents($entity, array('tokens', 'visualTokens')); BuilderTokenHelper::replaceTokensWithVisualPlaceholders($tokens, $content); if (is_array($newContent)) { $content = array_merge($content, $newContent); } $this->addAssetsForBuilder(); $this->processSlots($slots, $entity); $logicalName = $this->factory->getHelper('theme')->checkForTwigTemplate(':' . $template . ':page.html.php'); return $this->render($logicalName, array('isNew' => $isNew, 'slots' => $slots, 'formFactory' => $this->get('form.factory'), 'content' => $content, 'page' => $entity, 'template' => $template, 'basePath' => $this->request->getBasePath())); }