Skip to content

Commit

Permalink
Moved customHTML input to use the email/page builders to allow drag a…
Browse files Browse the repository at this point in the history
…nd drop token use. (Fixes mautic#99). New feature where you can start to type { and the first part of the token to pull in an inline dropdown of available tokens or {@ and the first part of the token label (such as landing page titles, etc) to do the same based on label.  New feature to auto convert email HTML into plain text (fixes mautic#424). Simplified duplicate builder code across bundles.
  • Loading branch information
alanhartless committed May 24, 2015
1 parent 661f22b commit 5ac67e5
Show file tree
Hide file tree
Showing 74 changed files with 3,822 additions and 1,471 deletions.
4 changes: 2 additions & 2 deletions Gruntfile.js
Original file line number Diff line number Diff line change
Expand Up @@ -23,15 +23,15 @@ module.exports = function (grunt) {
// Watches files for changes and runs tasks based on the changed files
watch: {
less: {
files: ['<%= mautic.bundleAssets %>/**/*.less'],
files: ['<%= mautic.bundleAssets %>/**/*.less', '<%= mautic.bundleAssets %>/../builder/*.less'],
tasks: ['less']
}
},

// Compiles less files in bundle's Assets/css root and single level directory to CSS
less: {
files: {
src: ['<%= mautic.bundleAssets %>/*.less', '<%= mautic.bundleAssets %>/*/*.less'],
src: ['<%= mautic.bundleAssets %>/*.less', '<%= mautic.bundleAssets %>/*/*.less', '<%= mautic.bundleAssets %>/../builder/*.less'],
expand: true,
rename: function (dest, src) {
return dest + src.replace('.less', '.css')
Expand Down
6 changes: 3 additions & 3 deletions app/bundles/AssetBundle/Controller/AssetController.php
Original file line number Diff line number Diff line change
Expand Up @@ -64,7 +64,7 @@ public function indexAction ($page = 1)

if (!$permissions['asset:assets:viewother']) {
$filter['force'][] =
array('column' => 'p.createdBy', 'expr' => 'eq', 'value' => $this->factory->getUser());
array('column' => 'p.createdBy', 'expr' => 'eq', 'value' => $this->factory->getUser()->getId());
}

$orderBy = $this->factory->getSession()->get('mautic.asset.orderby', 'a.title');
Expand Down Expand Up @@ -258,7 +258,7 @@ public function newAction ()

/** @var \Mautic\AssetBundle\Entity\Asset $entity */
$entity = $model->getEntity();
$entity->setMaxSize($model->convertSizeToBytes($this->factory->getParameter('max_size') . 'M')); // convert from MB to B
$entity->setMaxSize($model->convertSizeToBytes($this->factory->getParameter('max_size') . 'M')); // convert from MB to B
$method = $this->request->getMethod();
$session = $this->factory->getSession();

Expand Down Expand Up @@ -394,7 +394,7 @@ public function editAction ($objectId, $ignorePost = false)

/** @var \Mautic\AssetBundle\Entity\Asset $entity */
$entity = $model->getEntity($objectId);
$entity->setMaxSize($model->convertSizeToBytes($this->factory->getParameter('max_size') . 'M')); // convert from MB to B
$entity->setMaxSize($model->convertSizeToBytes($this->factory->getParameter('max_size') . 'M')); // convert from MB to B
$session = $this->factory->getSession();
$page = $this->factory->getSession()->get('mautic.asset.page', 1);
$method = $this->request->getMethod();
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -9,31 +9,18 @@

namespace Mautic\AssetBundle\Controller\SubscribedEvents;

use Mautic\CoreBundle\Controller\FormController;
use Mautic\AssetBundle\Helper\BuilderTokenHelper;
use Symfony\Component\HttpFoundation\JsonResponse;

/**
* Class BuilderTokenController
*/
class BuilderTokenController extends FormController
class BuilderTokenController extends \Mautic\CoreBundle\Controller\SubscribedEvents\BuilderTokenController
{
/**
* @param int $page
*
* @return JsonResponse
*/
public function indexAction($page = 1)
protected function getViewPermissionBase()
{
$tokenHelper = new BuilderTokenHelper($this->factory);

$dataArray = array(
'newContent' => $tokenHelper->getTokenContent($page),
'mauticContent' => 'builder'
);
return 'asset:assets';
}

$response = new JsonResponse($dataArray);
$response->headers->set('Content-Length', strlen($response->getContent()));
return $response;
protected function getModelName()
{
return 'asset';
}
}
77 changes: 51 additions & 26 deletions app/bundles/AssetBundle/EventListener/BuilderSubscriber.php
Original file line number Diff line number Diff line change
Expand Up @@ -9,12 +9,11 @@

namespace Mautic\AssetBundle\EventListener;

use Mautic\CoreBundle\Event\BuilderEvent;
use Mautic\CoreBundle\EventListener\CommonSubscriber;
use Mautic\CoreBundle\Helper\BuilderTokenHelper;
use Mautic\EmailBundle\EmailEvents;
use Mautic\EmailBundle\Event\EmailBuilderEvent;
use Mautic\EmailBundle\Event\EmailSendEvent;
use Mautic\AssetBundle\Helper\BuilderTokenHelper;
use Mautic\PageBundle\Event\PageBuilderEvent;
use Mautic\PageBundle\Event\PageDisplayEvent;
use Mautic\PageBundle\PageEvents;

Expand All @@ -26,66 +25,92 @@
class BuilderSubscriber extends CommonSubscriber
{

private $assetToken = '{assetlink=(.*?)}';

/**
* @return array
*/
static public function getSubscribedEvents ()
static public function getSubscribedEvents()
{
return array(
EmailEvents::EMAIL_ON_BUILD => array('onEmailBuild', 0),
EmailEvents::EMAIL_ON_BUILD => array('onBuilderBuild', 0),
EmailEvents::EMAIL_ON_SEND => array('onEmailGenerate', 0),
EmailEvents::EMAIL_ON_DISPLAY => array('onEmailGenerate', 0),
PageEvents::PAGE_ON_BUILD => array('onPageBuild', 0),
PageEvents::PAGE_ON_BUILD => array('onBuilderBuild', 0),
PageEvents::PAGE_ON_DISPLAY => array('onPageDisplay', 0)
);
}

public function onEmailBuild (EmailBuilderEvent $event)
/**
* @param BuilderEvent $event
*/
public function onBuilderBuild(BuilderEvent $event)
{
$this->addTokens($event);
}
if ($event->tokenSectionsRequested()) {
$this->addTokenSections($event);
}

public function onPageBuild (PageBuilderEvent $event)
{
$this->addTokens($event);
}
if ($event->tokensRequested($this->assetToken)) {
$tokenHelper = new BuilderTokenHelper($this->factory, 'asset');

private function addTokens ($event)
{
//add email tokens
$tokenHelper = new BuilderTokenHelper($this->factory);
$event->addTokenSection('asset.emailtokens', 'mautic.asset.assets', $tokenHelper->getTokenContent(), -255);
$event->addTokensFromHelper($tokenHelper, $this->assetToken, 'title');
}
}

public function onEmailGenerate (EmailSendEvent $event)
/**
* @param EmailSendEvent $event
*/
public function onEmailGenerate(EmailSendEvent $event)
{
$lead = $event->getLead();
$leadId = ($lead !== null) ? $lead['id'] : null;
$email = $event->getEmail();
$tokens = $this->generateTokens($event, $leadId, $event->getSource(), ($email === null) ? null : $email->getId());
$tokens = $this->generateTokensFromContent($event, $leadId, $event->getSource(), ($email === null) ? null : $email->getId());
$event->addTokens($tokens);
}

public function onPageDisplay (PageDisplayEvent $event)
/**
* @param PageDisplayEvent $event
*/
public function onPageDisplay(PageDisplayEvent $event)
{
$page = $event->getPage();
$leadId = ($this->factory->getSecurity()->isAnonymous()) ? $this->factory->getModel('lead')->getCurrentLead()->getId() : null;
$tokens = $this->generateTokens($event, $leadId, array('page', $page->getId()));
$tokens = $this->generateTokensFromContent($event, $leadId, array('page', $page->getId()));

$content = $event->getContent();
if (!empty($tokens)) {
$content = str_ireplace(array_keys($tokens), $tokens, $content);
}
$event->setContent($content);
}

/**
* @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);
}

private function generateTokens ($event, $leadId, $source = array(), $emailId = null)
/**
* @param $event
* @param $leadId
* @param array $source
* @param null $emailId
*
* @return array
*/
private function generateTokensFromContent($event, $leadId, $source = array(), $emailId = null)
{
$content = $event->getContent();
$pagelinkRegex = '/{assetlink=(.*?)}/';
$pagelinkRegex = '/' . $this->assetToken . '/';

/** @var \Mautic\AssetBundle\Model\AssetModel $model */
$model = $this->factory->getModel('asset');
$clickthrough = array('source' => $source);
$model = $this->factory->getModel('asset');
$clickthrough = array('source' => $source);

if ($leadId !== null) {
$clickthrough['lead'] = $leadId;
Expand Down
16 changes: 9 additions & 7 deletions app/bundles/AssetBundle/EventListener/EmailSubscriber.php
Original file line number Diff line number Diff line change
Expand Up @@ -35,12 +35,14 @@ static public function getSubscribedEvents ()
*/
public function onEmailBuild (EmailBuilderEvent $event)
{
//add AB Test Winner Criteria
$formSubmissions = array(
'group' => 'mautic.asset.abtest.criteria',
'label' => 'mautic.asset.abtest.criteria.downloads',
'callback' => '\Mautic\AssetBundle\Helper\AbTestHelper::determineDownloadWinner'
);
$event->addAbTestWinnerCriteria('asset.downloads', $formSubmissions);
if ($event->abTestWinnerCriteriaRequested()) {
//add AB Test Winner Criteria
$formSubmissions = array(
'group' => 'mautic.asset.abtest.criteria',
'label' => 'mautic.asset.abtest.criteria.downloads',
'callback' => '\Mautic\AssetBundle\Helper\AbTestHelper::determineDownloadWinner'
);
$event->addAbTestWinnerCriteria('asset.downloads', $formSubmissions);
}
}
}
16 changes: 9 additions & 7 deletions app/bundles/AssetBundle/EventListener/PageSubscriber.php
Original file line number Diff line number Diff line change
Expand Up @@ -36,12 +36,14 @@ static public function getSubscribedEvents ()
*/
public function onPageBuild (PageBuilderEvent $event)
{
//add AB Test Winner Criteria
$assetDownloads = array(
'group' => 'mautic.asset.abtest.criteria',
'label' => 'mautic.asset.abtest.criteria.downloads',
'callback' => '\Mautic\AssetBundle\Helper\AbTestHelper::determineDownloadWinner'
);
$event->addAbTestWinnerCriteria('asset.downloads', $assetDownloads);
if ($event->abTestWinnerCriteriaRequested()) {
//add AB Test Winner Criteria
$assetDownloads = array(
'group' => 'mautic.asset.abtest.criteria',
'label' => 'mautic.asset.abtest.criteria.downloads',
'callback' => '\Mautic\AssetBundle\Helper\AbTestHelper::determineDownloadWinner'
);
$event->addAbTestWinnerCriteria('asset.downloads', $assetDownloads);
}
}
}
87 changes: 0 additions & 87 deletions app/bundles/AssetBundle/Helper/BuilderTokenHelper.php

This file was deleted.

Original file line number Diff line number Diff line change
Expand Up @@ -12,7 +12,7 @@
<div class="input-group ma-5">
<input type="search" class="form-control" id="assetBuilderTokenSearch" name="search" placeholder="<?php echo $view['translator']->trans('mautic.core.search.placeholder'); ?>" value="<?php echo $searchValue; ?>" autocomplete="off" data-toggle="livesearch" data-target="#assetBuilderTokens" data-action="<?php echo $view['router']->generate('mautic_asset_buildertoken_index', array('page' => $page)); ?>" />
<div class="input-group-btn">
<button type="button" class="btn btn-default btn-search btn-filter btn-nospin" data-livesearch-parent="assetBuilderTokenSearch">
<button type="button" class="btn btn-default btn-search btn-filter" data-livesearch-parent="assetBuilderTokenSearch">
<i class="fa <?php echo $searchBtnClass; ?> fa-fw"></i>
</button>
</div>
Expand Down
Loading

0 comments on commit 5ac67e5

Please sign in to comment.