예제 #1
0
 /**
  * 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;
 }
예제 #3
0
 /**
  * @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);
     }
 }
예제 #4
0
 /**
  * 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);
     }
 }
예제 #5
0
 /**
  * @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);
 }
예제 #6
0
 /**
  * @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);
 }
예제 #7
0
 /**
  * @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);
 }
예제 #8
0
 /**
  * @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);
 }
예제 #9
0
        <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">
예제 #10
0
 /**
  * @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);
     }
 }
예제 #11
0
 /**
  * @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]]);
 }
예제 #12
0
 /**
  * @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()])]]);
 }
예제 #13
0
 * @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 
    }
    ?>
예제 #14
0
 /**
  * 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()));
 }
예제 #15
0
파일: list.html.php 프로젝트: Yame-/mautic
 * @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>
예제 #16
0
 /**
  * @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)));
 }
예제 #17
0
 /**
  * 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()])]]);
 }
예제 #18
0
 /**
  * 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);
 }
예제 #19
0
 /**
  * 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()));
 }