Skip to content

Commit 51fe3b0

Browse files
committed
First version
1 parent bfaef14 commit 51fe3b0

13 files changed

Lines changed: 304 additions & 126 deletions

File tree

Config/config.php

Lines changed: 36 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -16,15 +16,48 @@
1616
'version' => '1.0.0',
1717
'services' => [
1818
'events' => [
19-
19+
'mautic.sqlConditions.campaign.condition.subscriber' => [
20+
'class' => \MauticPlugin\MauticSqlConditionsBundle\EventListener\CampaignConditionSubscriber::class,
21+
'arguments' => [
22+
'mautic.sqlConditions.executioner',
23+
],
24+
],
2025
],
2126
'forms' => [
27+
'mautic.sqlConditions.form.campaign.type' => [
28+
'class' => \MauticPlugin\MauticSqlConditionsBundle\Form\Type\SqlListType::class,
29+
'arguments' => [
30+
'mautic.sqlConditions.model.sqlConditions',
31+
],
32+
],
2233
],
2334
'command' => [
2435

2536
],
2637
'other' => [
27-
38+
'mautic.sqlConditions.executioner' => [
39+
'class' => \MauticPlugin\MauticSqlConditionsBundle\Executioner\SqlExecutioner::class,
40+
'arguments' => [
41+
'mautic.sqlConditions.executioner.condition.details',
42+
'mautic.sqlConditions.executioner.query.builder',
43+
],
44+
],
45+
'mautic.sqlConditions.executioner.condition.details' => [
46+
'class' => \MauticPlugin\MauticSqlConditionsBundle\Executioner\SqlConditionDetails::class,
47+
'arguments'=>[
48+
'mautic.sqlConditions.model.sqlConditions'
49+
]
50+
],
51+
'mautic.sqlConditions.executioner.params' => [
52+
'class' => \MauticPlugin\MauticSqlConditionsBundle\Executioner\Params\Params::class,
53+
],
54+
'mautic.sqlConditions.executioner.query.builder' => [
55+
'class' => \MauticPlugin\MauticSqlConditionsBundle\Executioner\QueryBuilder::class,
56+
'arguments'=>[
57+
'doctrine.orm.entity_manager',
58+
'mautic.sqlConditions.executioner.params'
59+
]
60+
],
2861
],
2962

3063
'helpers' => [],
@@ -56,8 +89,8 @@
5689
'items' => [
5790
'mautic.sqlConditions' => [
5891
'route' => 'mautic_sqlConditions_index',
59-
'parent' => 'mautic.campaign.menu.index',
6092
'priority' => 70,
93+
'iconClass' => 'fa fa-database',
6194
'checks' => [
6295
'integration' => [
6396
'SqlConditions' => [

EventListener/CampaignConditionSubscriber.php

Lines changed: 25 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -14,6 +14,8 @@
1414
use Mautic\CampaignBundle\CampaignEvents;
1515
use Mautic\CampaignBundle\Event\CampaignBuilderEvent;
1616
use Mautic\CampaignBundle\Event\ConditionEvent;
17+
use MauticPlugin\MauticSqlConditionsBundle\Executioner\SqlExecutioner;
18+
use MauticPlugin\MauticSqlConditionsBundle\Form\Type\SqlConditionsCampaignType;
1719
use MauticPlugin\MauticSqlConditionsBundle\SqlConditionsEvents;
1820
use Symfony\Component\EventDispatcher\EventSubscriberInterface;
1921

@@ -22,6 +24,22 @@
2224
*/
2325
class CampaignConditionSubscriber implements EventSubscriberInterface
2426
{
27+
28+
/**
29+
* @var SqlExecutioner
30+
*/
31+
private $sqlExecutioner;
32+
33+
/**
34+
* CampaignConditionSubscriber constructor.
35+
*
36+
* @param SqlExecutioner $sqlExecutioner
37+
*/
38+
public function __construct(SqlExecutioner $sqlExecutioner)
39+
{
40+
$this->sqlExecutioner = $sqlExecutioner;
41+
}
42+
2543
/**
2644
* @return array
2745
*/
@@ -43,6 +61,8 @@ public function onCampaignBuild(CampaignBuilderEvent $event)
4361
[
4462
'label' => 'mautic.sqlConditions',
4563
'eventName' => SqlConditionsEvents::ON_CAMPAIGN_CONDITION_TRIGGER,
64+
'formType' => SqlConditionsCampaignType::class,
65+
4666
]
4767
);
4868
}
@@ -52,5 +72,10 @@ public function onCampaignBuild(CampaignBuilderEvent $event)
5272
*/
5373
public function onCampaignTriggerCondition(ConditionEvent $event)
5474
{
75+
if ($this->sqlExecutioner->execute($event)) {
76+
$event->pass();
77+
}else{
78+
$event->fail();
79+
}
5580
}
5681
}

Executioner/Params/Params.php

Lines changed: 60 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,60 @@
1+
<?php
2+
3+
/*
4+
* @copyright 2019 Mautic Contributors. All rights reserved
5+
* @author Mautic
6+
*
7+
* @link http://mautic.org
8+
*
9+
* @license GNU/GPLv3 http://www.gnu.org/licenses/gpl-3.0.html
10+
*/
11+
12+
namespace MauticPlugin\MauticSqlConditionsBundle\Executioner\Params;
13+
14+
use MauticPlugin\MauticSqlConditionsBundle\Executioner\SqlConditionDetails;
15+
16+
class Params
17+
{
18+
/**
19+
* @var SqlConditionDetails
20+
*/
21+
private $sqlConditionDetails;
22+
23+
/**
24+
* @param SqlConditionDetails $sqlConditionDetails
25+
*
26+
* @return array
27+
* @throws \Exception
28+
*/
29+
public function parseParamsFromSqlQuery(SqlConditionDetails $sqlConditionDetails)
30+
{
31+
$this->sqlConditionDetails = $sqlConditionDetails;
32+
$sqlQuery = $this->sqlConditionDetails->getSqlQuery();
33+
$params = [];
34+
35+
foreach ($this->getAllParams() as $key => $value) {
36+
if (strpos($sqlQuery, $key) !== false) {
37+
$params[$key] = $value;
38+
}
39+
}
40+
41+
return $params;
42+
43+
}
44+
45+
/**
46+
* @return array
47+
* @throws \Exception
48+
*/
49+
private function getAllParams()
50+
{
51+
52+
$params = [];
53+
$params[':contactId'] = $this->sqlConditionDetails->getConditionEvent()->getLead()->getId();
54+
$params[':campaignId'] = $this->sqlConditionDetails->getConditionEvent()->getLogEntry()->getCampaign()->getId();
55+
$params[':eventId'] = $this->sqlConditionDetails->getConditionEvent()->getEvent()['id'];
56+
$params[':rotation'] = $this->sqlConditionDetails->getConditionEvent()->getLogEntry()->getRotation();
57+
58+
return $params;
59+
}
60+
}

Executioner/Parser/Parser.php

Lines changed: 0 additions & 19 deletions
This file was deleted.

Executioner/QueryBuilder.php

Lines changed: 26 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -9,10 +9,11 @@
99
* @license GNU/GPLv3 http://www.gnu.org/licenses/gpl-3.0.html
1010
*/
1111

12-
namespace MauticPlugin\MauticSqlConditionsBundle\SqlExecutioner;
12+
namespace MauticPlugin\MauticSqlConditionsBundle\Executioner;
1313

1414
use Doctrine\DBAL\Connections\MasterSlaveConnection;
1515
use Doctrine\ORM\EntityManager;
16+
use MauticPlugin\MauticSqlConditionsBundle\Executioner\Params\Params;
1617

1718
class QueryBuilder
1819
{
@@ -26,14 +27,21 @@ class QueryBuilder
2627
*/
2728
private $connection;
2829

30+
/**
31+
* @var Params
32+
*/
33+
private $params;
34+
2935
/**
3036
* SqlExecutioner constructor.
3137
*
32-
* @param SqlConditionDetails $sqlConditionDetails
38+
* @param EntityManager $entityManager
39+
* @param Params $params
3340
*/
34-
public function __construct(EntityManager $entityManager)
41+
public function __construct(EntityManager $entityManager, Params $params)
3542
{
3643
$this->entityManager = $entityManager;
44+
$this->params = $params;
3745

3846
/** @var Connection $connection */
3947
$this->connection = $this->entityManager->getConnection();
@@ -42,13 +50,22 @@ public function __construct(EntityManager $entityManager)
4250
}
4351
}
4452

45-
public function getQuery()
53+
/**
54+
* @param SqlConditionDetails $sqlConditionDetails
55+
*
56+
* @return \Doctrine\DBAL\Driver\Statement
57+
* @throws \Doctrine\DBAL\DBALException
58+
*/
59+
public function runQuery(SqlConditionDetails $sqlConditionDetails)
4660
{
47-
//getdetail
48-
// getParams
49-
$this->connection->executeQuery($query, $params);
50-
$queryBuilder = new QueryBuilder($this->connection);
61+
$sqlQuery = $sqlConditionDetails->getSqlQuery();
62+
if (!$sqlQuery) {
63+
return false;
64+
}
65+
66+
$params = $this->params->parseParamsFromSqlQuery($sqlConditionDetails);
67+
return $this->connection->executeQuery($sqlQuery, $params)->fetchAll();
5168
}
5269

5370

54-
}
71+
};

Executioner/SqlConditionDetails.php

Lines changed: 3 additions & 47 deletions
Original file line numberDiff line numberDiff line change
@@ -9,7 +9,7 @@
99
* @license GNU/GPLv3 http://www.gnu.org/licenses/gpl-3.0.html
1010
*/
1111

12-
namespace MauticPlugin\MauticSqlConditionsBundle\SqlExecutioner;
12+
namespace MauticPlugin\MauticSqlConditionsBundle\Executioner;
1313

1414
use Mautic\CampaignBundle\Event\ConditionEvent;
1515
use MauticPlugin\MauticSqlConditionsBundle\Model\SqlConditionsModel;
@@ -64,57 +64,13 @@ public function getConditionEvent()
6464
*/
6565
public function getSqlQuery()
6666
{
67-
$sqlConditionId = $this->getConditionEvent()->getEventConfig()['sql'];
67+
$sqlConditionId = $this->getConditionEvent()->getConfig()['sql'];
6868
$entity = $this->sqlConditionsModel->getEntity($sqlConditionId);
6969

70-
if ($entity) {
70+
if ($entity && $entity->isPublished()) {
7171
return $entity->getSqlQuery();
7272
}
7373

7474
}
7575

76-
/**
77-
* @return int
78-
* @throws \Exception
79-
*/
80-
public function getContactId()
81-
{
82-
return $this->getConditionEvent()->getLead()->getId();
83-
}
84-
85-
/**
86-
* @return int
87-
* @throws \Exception
88-
*/
89-
public function getCampaignId()
90-
{
91-
return $this->getConditionEvent()->getLogEntry()->getCampaign()->getId();
92-
}
93-
94-
/**
95-
* @return int
96-
* @throws \Exception
97-
*/
98-
public function getEventId()
99-
{
100-
return $this->getConditionEvent()->getEvent()['id'];
101-
}
102-
103-
/**
104-
* @return int
105-
* @throws \Exception
106-
*/
107-
public function getRotation()
108-
{
109-
return $this->getConditionEvent()->getLogEntry()->getRotation();
110-
}
111-
112-
/**
113-
* @return string
114-
*/
115-
public function getPrefix()
116-
{
117-
return MAUTIC_TABLE_PREFIX;
118-
}
119-
12076
}

Executioner/SqlExecutioner.php

Lines changed: 20 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -9,7 +9,9 @@
99
* @license GNU/GPLv3 http://www.gnu.org/licenses/gpl-3.0.html
1010
*/
1111

12-
namespace MauticPlugin\MauticSqlConditionsBundle\SqlExecutioner;
12+
namespace MauticPlugin\MauticSqlConditionsBundle\Executioner;
13+
14+
use Mautic\CampaignBundle\Event\ConditionEvent;
1315

1416
class SqlExecutioner
1517
{
@@ -18,18 +20,33 @@ class SqlExecutioner
1820
*/
1921
private $sqlConditionDetails;
2022

23+
/**
24+
* @var QueryBuilder
25+
*/
26+
private $queryBuilder;
27+
2128
/**
2229
* SqlExecutioner constructor.
2330
*
2431
* @param SqlConditionDetails $sqlConditionDetails
32+
* @param QueryBuilder $queryBuilder
2533
*/
26-
public function __construct(SqlConditionDetails $sqlConditionDetails)
34+
public function __construct(SqlConditionDetails $sqlConditionDetails, QueryBuilder $queryBuilder)
2735
{
2836
$this->sqlConditionDetails = $sqlConditionDetails;
37+
$this->queryBuilder = $queryBuilder;
2938
}
3039

31-
public function runQuery()
40+
/**
41+
* @param ConditionEvent $conditionEvent
42+
*
43+
* @return bool
44+
* @throws \Doctrine\DBAL\DBALException
45+
*/
46+
public function execute(ConditionEvent $conditionEvent)
3247
{
48+
$this->sqlConditionDetails->setConditionEvent($conditionEvent);
49+
return $this->queryBuilder->runQuery($this->sqlConditionDetails);
3350

3451
}
3552

Executioner/Token/AbstractToken.php

Lines changed: 0 additions & 19 deletions
This file was deleted.

0 commit comments

Comments
 (0)