%PDF- %PDF-
| Direktori : /home/bitrix/www/bitrix/modules/sender/lib/integration/messageservice/sms/ |
| Current File : /home/bitrix/www/bitrix/modules/sender/lib/integration/messageservice/sms/transportsms.php |
<?php
/**
* Bitrix Framework
* @package bitrix
* @subpackage sender
* @copyright 2001-2012 Bitrix
*/
namespace Bitrix\Sender\Integration\MessageService\Sms;
use Bitrix\Main\Web\HttpClient;
use Bitrix\Main\Localization\Loc;
use Bitrix\Sender\Transport;
use Bitrix\Sender\Message;
use Bitrix\Sender\Recipient;
Loc::loadMessages(__FILE__);
/**
* Class TransportSms
* @package Bitrix\Sender\Integration\MessageService\Sms
*/
class TransportSms implements Transport\iBase, Transport\iLimitation
{
const CODE = self::CODE_SMS;
/** @var Message\Configuration $configuration Configuration. */
protected $configuration;
/** @var Transport\CountLimiter[] $limiters Limiters. */
protected $limiters;
/** @var HttpClient $httpClient Http client. */
protected $httpClient = array();
public function __construct()
{
$this->configuration = new Message\Configuration();
}
public function getName()
{
return Loc::getMessage('SENDER_INTEGRATION_SMS_TRANSPORT_NAME');
}
public function getCode()
{
return self::CODE;
}
/**
* Get supported recipient types.
*
* @return integer[]
*/
public function getSupportedRecipientTypes()
{
return array(Recipient\Type::PHONE);
}
public function loadConfiguration()
{
return $this->configuration;
}
public function saveConfiguration(Message\Configuration $configuration)
{
$this->configuration = $configuration;
}
public function start()
{
$clientOptions = array(
'waitResponse' => false,
'socketTimeout' => 5,
);
$this->httpClient = new HttpClient($clientOptions);
$this->httpClient->setTimeout(5);
}
public function send(Message\Adapter $message)
{
$sender = $message->getConfiguration()->get('SENDER');
list($senderId, $from) = explode(':', $sender);
$authorId = $message->getConfiguration()->get('LETTER_CREATED_BY_ID');
$text = $message->getConfiguration()->get('MESSAGE_TEXT');
$text = $message->replaceFields($text);
$to = $message->getTo();
return Service::send($senderId, $from, $to, $text, $authorId);
}
public function end()
{
}
/**
* Get limiters.
*
* @param Message\iBase $message Message.
* @return Transport\iLimiter[]
*/
public function getLimiters(Message\iBase $message = null)
{
if (!empty($this->limiters))
{
return $this->limiters;
}
/** @var MessageSms $message */
$smsSender = null;
if ($message)
{
if ($message instanceof Message\Adapter)
{
$smsSender = $message->getConfiguration()->getOption('SENDER')->getValue();
}
else
{
$smsSender = $message->getSmsSender();
}
}
$this->limiters = [];
$limitList = Service::getDailyLimits();
$senderNames = Service::getSenderNames();
foreach ($limitList as $limitSender => $limitData)
{
if ($smsSender && $smsSender !== $limitSender)
{
continue;
}
if (empty($limitData['limit']))
{
continue;
}
$this->limiters[] = Transport\CountLimiter::create()
->withName('sms_per_day_' . $limitSender)
->withCaption($senderNames[$limitSender])
->withLimit($limitData['limit'])
->withCurrent(
function () use ($limitSender)
{
$limitList = Service::getDailyLimits();
if (!isset($limitList[$limitSender]))
{
return 0;
}
if (!isset($limitList[$limitSender]['current']))
{
return 0;
}
return $limitList[$limitSender]['current'];
}
)
->withUnit("1 " . Transport\iLimiter::DAYS)
->setParameter('setupUri', Service::getLimitsUrl());
}
return $this->limiters;
}
}