Skip to content

Commit

Permalink
Resolving some bugs to use this plugin in new version of mautic
Browse files Browse the repository at this point in the history
  • Loading branch information
Ferreira committed Mar 7, 2017
1 parent 36c3c9e commit c0a07d9
Show file tree
Hide file tree
Showing 11 changed files with 1,061 additions and 105 deletions.
8 changes: 4 additions & 4 deletions Api/SmsInfoBipApi.php
Expand Up @@ -12,19 +12,19 @@
use Mautic\CoreBundle\Factory\MauticFactory;
use Mautic\CoreBundle\Helper\PhoneNumberHelper;
use Mautic\PageBundle\Model\TrackableModel;
use MauticPlugin\InfoBipSmsBundle\Api\AbstractSmsApi;

class SmsInfoBipApi extends AbstractSmsApi
{
private $username;
private $password;

public function __construct(TrackableModel $pageTrackableModel = null, MauticFactory $factory, \Services_Twilio $client = null, PhoneNumberHelper $phoneNumberHelper = null, $sendingPhoneNumber, $username, $password)
public function __construct(TrackableModel $pageTrackableModel = null, MauticFactory $factory, PhoneNumberHelper $phoneNumberHelper = null, $sendingPhoneNumber, $username, $password)
{
$this->client = $client;
parent::__construct($pageTrackableModel);

$this->username = $username;
$this->password = $password;

parent::__construct($pageTrackableModel);
}

public function sendSms($number, $content)
Expand Down
13 changes: 6 additions & 7 deletions Config/config.php
Expand Up @@ -16,11 +16,8 @@
'class' => 'MauticPlugin\InfoBipSmsBundle\EventListener\CampaignSubscriber',
'arguments' => [
'mautic.helper.core_parameters',
'mautic.lead.model.lead',
'mautic.sms.model.sms',
'mautic.sms.api',
'mautic.helper.sms',
],
]
],
'mautic.sms.formbundle.subscriber' => [
'class' => 'MauticPlugin\InfoBipSmsBundle\EventListener\FormSubscriber',
Expand Down Expand Up @@ -77,7 +74,7 @@
],
'helpers' => [
'mautic.helper.sms' => [
'class' => 'Mautic\SmsBundle\Helper\SmsHelper',
'class' => 'MauticPlugin\InfoBipSmsBundle\Helper\SmsHelper',
'arguments' => [
'doctrine.orm.entity_manager',
'mautic.lead.model.lead',
Expand All @@ -95,7 +92,6 @@
'arguments' => [
'mautic.page.model.trackable',
'mautic.factory',
'mautic.twilio.service',
'mautic.helper.phone_number',
'%mautic.sms_sending_phone_number%',
'%mautic.sms_username%',
Expand All @@ -106,9 +102,12 @@
],
'models' => [
'mautic.sms.model.sms' => [
'class' => 'Mautic\SmsBundle\Model\SmsModel',
'class' => 'MauticPlugin\InfoBipSmsBundle\Model\SmsModel',
'arguments' => [
'mautic.page.model.trackable',
'mautic.lead.model.lead',
'mautic.channel.model.queue',
'mautic.sms.api'
],
],
],
Expand Down
110 changes: 18 additions & 92 deletions EventListener/CampaignSubscriber.php
Expand Up @@ -14,15 +14,9 @@
use Mautic\CampaignBundle\CampaignEvents;
use Mautic\CampaignBundle\Event\CampaignBuilderEvent;
use Mautic\CampaignBundle\Event\CampaignExecutionEvent;
use Mautic\CoreBundle\Event\TokenReplacementEvent;
use Mautic\CoreBundle\EventListener\CommonSubscriber;
use Mautic\CoreBundle\Helper\CoreParametersHelper;
use Mautic\LeadBundle\Entity\DoNotContact;
use Mautic\LeadBundle\Model\LeadModel;
use MauticPlugin\InfoBipSmsBundle\Api\AbstractSmsApi;
use Mautic\SmsBundle\Event\SmsSendEvent;
use Mautic\SmsBundle\Helper\SmsHelper;
use Mautic\SmsBundle\Model\SmsModel;
use MauticPlugin\InfoBipSmsBundle\Model\SmsModel;
use Mautic\SmsBundle\SmsEvents;

/**
Expand All @@ -35,47 +29,23 @@ class CampaignSubscriber extends CommonSubscriber
*/
protected $coreParametersHelper;

/**
* @var LeadModel
*/
protected $leadModel;

/**
* @var SmsModel
*/
protected $smsModel;

/**
* @var AbstractSmsApi
*/
protected $smsApi;

/**
* @var smsHelper
*/
protected $smsHelper;

/**
* CampaignSubscriber constructor.
*
* @param CoreParametersHelper $coreParametersHelper
* @param LeadModel $leadModel
* @param SmsModel $smsModel
* @param AbstractSmsApi $smsApi
* @param SmsHelper $smsHelper
*/
public function __construct(
CoreParametersHelper $coreParametersHelper,
LeadModel $leadModel,
SmsModel $smsModel,
AbstractSmsApi $smsApi,
SmsHelper $smsHelper
SmsModel $smsModel
) {
$this->coreParametersHelper = $coreParametersHelper;
$this->leadModel = $leadModel;
$this->smsModel = $smsModel;
$this->smsApi = $smsApi;
$this->smsHelper = $smsHelper;
}

/**
Expand All @@ -98,13 +68,15 @@ public function onCampaignBuild(CampaignBuilderEvent $event)
$event->addAction(
'sms.send_text_sms',
[
'label' => 'mautic.campaign.infobip_sms.send_text_sms',
'label' => 'mautic.campaign.sms.send_text_sms',
'description' => 'mautic.campaign.sms.send_text_sms.tooltip',
'eventName' => SmsEvents::ON_CAMPAIGN_TRIGGER_ACTION,
'formType' => 'smssend_list',
'formTypeOptions' => ['update_select' => 'campaignevent_properties_sms'],
'formTheme' => 'MauticSmsBundle:FormTheme\SmsSendList',
'timelineTemplate' => 'MauticSmsBundle:SubscribedEvents\Timeline:index.html.php',
'channel' => 'sms',
'channelIdField' => 'sms',
]
);
}
Expand All @@ -115,74 +87,28 @@ public function onCampaignBuild(CampaignBuilderEvent $event)
*/
public function onCampaignTriggerAction(CampaignExecutionEvent $event)
{
$lead = $event->getLead();

if ($this->leadModel->isContactable($lead, 'sms') !== DoNotContact::IS_CONTACTABLE) {
return $event->setFailed('mautic.sms.campaign.failed.not_contactable');
}

$leadPhoneNumber = $lead->getFieldValue('mobile');

if (empty($leadPhoneNumber)) {
$leadPhoneNumber = $lead->getFieldValue('phone');
}

if (empty($leadPhoneNumber)) {
return $event->setFailed('mautic.sms.campaign.failed.missing_number');
}

$lead = $event->getLead();
$smsId = (int) $event->getConfig()['sms'];
$sms = $this->smsModel->getEntity($smsId);

if ($sms->getId() !== $smsId) {
if (!$sms) {
return $event->setFailed('mautic.sms.campaign.failed.missing_entity');
}

$smsEvent = new SmsSendEvent($sms->getMessage(), $lead);
$smsEvent->setSmsId($smsId);
$this->dispatcher->dispatch(SmsEvents::SMS_ON_SEND, $smsEvent);

$tokenEvent = $this->dispatcher->dispatch(
SmsEvents::TOKEN_REPLACEMENT,
new TokenReplacementEvent(
$smsEvent->getContent(),
$lead,
['channel' => ['sms', $sms->getId()]]
)
);

$metadata = $this->smsApi->sendSms($leadPhoneNumber, $tokenEvent->getContent());

$defaultFrequencyNumber = $this->coreParametersHelper->getParameter('sms_frequency_number');
$defaultFrequencyTime = $this->coreParametersHelper->getParameter('sms_frequency_time');
$result = $this->smsModel->sendSms($sms, $lead, ['channel' => ['campaign.event', $event->getEvent()['id']]])[$lead->getId()];

/** @var \Mautic\LeadBundle\Entity\FrequencyRuleRepository $frequencyRulesRepo */
$frequencyRulesRepo = $this->leadModel->getFrequencyRuleRepository();

$leadIds = $lead->getId();

$dontSendTo = $frequencyRulesRepo->getAppliedFrequencyRules('sms', $leadIds, $defaultFrequencyNumber, $defaultFrequencyTime);

if (!empty($dontSendTo) and $dontSendTo[0]['lead_id'] != $lead->getId()) {
$metadata = $this->smsApi->sendSms($leadPhoneNumber, $smsEvent->getContent());
}

// If there was a problem sending at this point, it's an API problem and should be requeued
if ($metadata === false) {
if ('Authenticate' === $result['status']) {
// Don't fail the event but reschedule it for later
return $event->setResult(false);
}

$this->smsModel->createStatEntry($sms, $lead);
$this->smsModel->getRepository()->upCount($smsId);
$event->setChannel('sms', $sms->getId());
$event->setResult(
[
'type' => 'mautic.sms.sms',
'status' => 'mautic.sms.timeline.status.delivered',
'id' => $sms->getId(),
'name' => $sms->getName(),
'content' => $tokenEvent->getContent(),
]
);
if (!empty($result['sent'])) {
$event->setChannel('sms', $sms->getId());
$event->setResult($result);
} else {
$result['failed'] = true;
$result['reason'] = $result['status'];
$event->setResult($result);
}
}
}
63 changes: 63 additions & 0 deletions EventListener/ChannelSubscriber.php
@@ -0,0 +1,63 @@
<?php

/*
* @copyright 2016 Mautic Contributors. All rights reserved
* @author Mautic
*
* @link http://mautic.org
*
* @license GNU/GPLv3 http://www.gnu.org/licenses/gpl-3.0.html
*/

namespace Mautic\SmsBundle\EventListener;

use Mautic\ChannelBundle\ChannelEvents;
use Mautic\ChannelBundle\Event\ChannelEvent;
use Mautic\ChannelBundle\Model\MessageModel;
use Mautic\CoreBundle\EventListener\CommonSubscriber;
use Mautic\LeadBundle\Model\LeadModel;
use Mautic\ReportBundle\Model\ReportModel;

/**
* Class ChannelSubscriber.
*/
class ChannelSubscriber extends CommonSubscriber
{
/**
* @return array
*/
public static function getSubscribedEvents()
{
return [
ChannelEvents::ADD_CHANNEL => ['onAddChannel', 90],
];
}

/**
* @param ChannelEvent $event
*/
public function onAddChannel(ChannelEvent $event)
{
if (!empty($this->params['sms_enabled'])) {
$event->addChannel(
'sms',
[
MessageModel::CHANNEL_FEATURE => [
'campaignAction' => 'sms.send_text_sms',
'campaignDecisionsSupported' => [
'page.pagehit',
'asset.download',
'form.submit',
],
'lookupFormType' => 'sms_list',
'repository' => 'MauticSmsBundle:Sms',
],
LeadModel::CHANNEL_FEATURE => [],
ReportModel::CHANNEL_FEATURE => [
'table' => 'sms_messages',
],
]
);
}
}
}
42 changes: 42 additions & 0 deletions EventListener/ConfigSubscriber.php
@@ -0,0 +1,42 @@
<?php

/*
* @copyright 2016 Mautic Contributors. All rights reserved
* @author Mautic
*
* @link http://mautic.org
*
* @license GNU/GPLv3 http://www.gnu.org/licenses/gpl-3.0.html
*/

namespace Mautic\SmsBundle\EventListener;

use Mautic\ConfigBundle\ConfigEvents;
use Mautic\ConfigBundle\Event\ConfigBuilderEvent;
use Mautic\CoreBundle\EventListener\CommonSubscriber;

/**
* Class ConfigSubscriber.
*/
class ConfigSubscriber extends CommonSubscriber
{
/**
* @return array
*/
public static function getSubscribedEvents()
{
return [
ConfigEvents::CONFIG_ON_GENERATE => ['onConfigGenerate', 0],
];
}

public function onConfigGenerate(ConfigBuilderEvent $event)
{
$event->addForm([
'bundle' => 'SmsBundle',
'formAlias' => 'smsconfig',
'formTheme' => 'MauticSmsBundle:FormTheme\Config',
'parameters' => $event->getParametersFromConfig('MauticSmsBundle'),
]);
}
}
4 changes: 2 additions & 2 deletions EventListener/FormSubscriber.php
Expand Up @@ -16,8 +16,8 @@
use Mautic\FormBundle\FormEvents;
use MauticPlugin\InfoBipSmsBundle\Api\AbstractSmsApi;
use Mautic\SmsBundle\Event\SmsSendEvent;
use Mautic\SmsBundle\Helper\SmsHelper;
use Mautic\SmsBundle\Model\SmsModel;
use MauticPlugin\InfoBipSmsBundle\Helper\SmsHelper;
use MauticPlugin\InfoBipSmsBundle\Model\SmsModel;
use Mautic\SmsBundle\SmsEvents;
use Mautic\CoreBundle\Event\TokenReplacementEvent;
use Mautic\LeadBundle\Model\LeadModel;
Expand Down

0 comments on commit c0a07d9

Please sign in to comment.