Initial commit: CloudOps infrastructure platform
This commit is contained in:
@@ -0,0 +1,134 @@
|
||||
<?php
|
||||
|
||||
namespace Mautic\SmsBundle\Sms;
|
||||
|
||||
use Mautic\LeadBundle\Entity\Lead;
|
||||
use Mautic\PluginBundle\Helper\IntegrationHelper;
|
||||
use Mautic\SmsBundle\Entity\Stat;
|
||||
use Mautic\SmsBundle\Exception\PrimaryTransportNotEnabledException;
|
||||
|
||||
class TransportChain
|
||||
{
|
||||
/**
|
||||
* @var TransportInterface[]
|
||||
*/
|
||||
private array $transports;
|
||||
|
||||
/**
|
||||
* @param string $primaryTransport
|
||||
*/
|
||||
public function __construct(
|
||||
private $primaryTransport,
|
||||
private IntegrationHelper $integrationHelper,
|
||||
) {
|
||||
$this->transports = [];
|
||||
}
|
||||
|
||||
/**
|
||||
* @param string $alias
|
||||
* @param string $translatableAlias
|
||||
* @param string $integrationAlias
|
||||
*
|
||||
* @return $this
|
||||
*/
|
||||
public function addTransport($alias, TransportInterface $transport, $translatableAlias, $integrationAlias)
|
||||
{
|
||||
$this->transports[$alias]['alias'] = $translatableAlias;
|
||||
$this->transports[$alias]['integrationAlias'] = $integrationAlias;
|
||||
$this->transports[$alias]['service'] = $transport;
|
||||
|
||||
return $this;
|
||||
}
|
||||
|
||||
/**
|
||||
* Return the transport defined in parameters.
|
||||
*
|
||||
* @return TransportInterface
|
||||
*
|
||||
* @throws PrimaryTransportNotEnabledException
|
||||
*/
|
||||
public function getPrimaryTransport()
|
||||
{
|
||||
$enabled = $this->getEnabledTransports();
|
||||
|
||||
// If there no primary transport selected and there is just one available we will use it as primary
|
||||
if (1 === count($enabled)) {
|
||||
return array_shift($enabled);
|
||||
}
|
||||
|
||||
if (0 === count($enabled)) {
|
||||
throw new PrimaryTransportNotEnabledException('Primary SMS transport is not enabled');
|
||||
}
|
||||
|
||||
if (!array_key_exists($this->primaryTransport, $enabled)) {
|
||||
throw new PrimaryTransportNotEnabledException('Primary SMS transport is not enabled. '.$this->primaryTransport);
|
||||
}
|
||||
|
||||
return $enabled[$this->primaryTransport];
|
||||
}
|
||||
|
||||
/**
|
||||
* @param string $content
|
||||
*
|
||||
* @return mixed
|
||||
*
|
||||
* @throws \Exception
|
||||
*/
|
||||
public function sendSms(Lead $lead, $content, ?Stat $stat = null)
|
||||
{
|
||||
return $this->getPrimaryTransport()->sendSms($lead, $content, $stat);
|
||||
}
|
||||
|
||||
/**
|
||||
* Get all transports registered in service container.
|
||||
*
|
||||
* @return TransportInterface[]
|
||||
*/
|
||||
public function getTransports()
|
||||
{
|
||||
return $this->transports;
|
||||
}
|
||||
|
||||
/**
|
||||
* @param string $transport
|
||||
*
|
||||
* @return TransportInterface
|
||||
*
|
||||
* @throws PrimaryTransportNotEnabledException
|
||||
*/
|
||||
public function getTransport($transport)
|
||||
{
|
||||
$enabled = $this->getEnabledTransports();
|
||||
|
||||
if (!array_key_exists($transport, $enabled)) {
|
||||
throw new PrimaryTransportNotEnabledException($transport.' SMS transport is not enabled or does not exist');
|
||||
}
|
||||
|
||||
return $enabled[$transport];
|
||||
}
|
||||
|
||||
/**
|
||||
* Get published transports.
|
||||
*
|
||||
* @return TransportInterface[]
|
||||
*/
|
||||
public function getEnabledTransports(): array
|
||||
{
|
||||
$enabled = [];
|
||||
foreach ($this->transports as $alias => $transport) {
|
||||
if (!isset($transport['published'])) {
|
||||
$integration = $this->integrationHelper->getIntegrationObject($transport['integrationAlias']);
|
||||
if (!$integration) {
|
||||
continue;
|
||||
}
|
||||
$transport['published'] = $integration->getIntegrationSettings()->getIsPublished();
|
||||
$this->transports[$alias] = $transport;
|
||||
}
|
||||
if ($transport['published']) {
|
||||
$enabled[$alias] = $transport['service'];
|
||||
}
|
||||
}
|
||||
|
||||
return $enabled;
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,15 @@
|
||||
<?php
|
||||
|
||||
namespace Mautic\SmsBundle\Sms;
|
||||
|
||||
use Mautic\LeadBundle\Entity\Lead;
|
||||
|
||||
interface TransportInterface
|
||||
{
|
||||
/**
|
||||
* @param string $content
|
||||
*
|
||||
* @return bool
|
||||
*/
|
||||
public function sendSms(Lead $lead, $content);
|
||||
}
|
||||
Reference in New Issue
Block a user