%PDF- %PDF-
Direktori : /home/bitrix/www/bitrix/modules/messageservice/lib/sender/ |
Current File : //home/bitrix/www/bitrix/modules/messageservice/lib/sender/smsmanager.php |
<?php namespace Bitrix\MessageService\Sender; use Bitrix\Main; use Bitrix\MessageService\Internal\Entity\MessageTable; use Bitrix\MessageService\Message; use Bitrix\MessageService\MessageType; class SmsManager { private static $senders; /** * @return Base[] List of senders. */ public static function getSenders() { if (self::$senders === null) { self::$senders = array(); if (Sms\SmsRu::isSupported()) { self::$senders[] = new Sms\SmsRu(); } if (Sms\Twilio::isSupported()) { self::$senders[] = new Sms\Twilio(); } if (Sms\Rest::isSupported()) { self::$senders[] = new Sms\Rest(); } } return self::$senders; } /** * @return array Simple list of senders, array(id => name) */ public static function getSenderSelectList() { $select = array(); foreach (static::getSenders() as $sender) { $select[$sender->getId()] = $sender->getName(); } return $select; } /** * @return array Sender list information. */ public static function getSenderInfoList() { $info = array(); foreach (static::getSenders() as $sender) { $info[] = array( 'id' => $sender->getId(), 'type' => $sender->getType(), 'name' => $sender->getName(), 'shortName' => $sender->getShortName(), 'canUse' => $sender->canUse() ); } return $info; } /** * @param $id * @return Base|null Sender instance. */ public static function getSenderById($id) { foreach (static::getSenders() as $sender) { if ($sender->getId() === $id) { return $sender; } } return null; } /** * Get default SMS sender. * @return Base */ public static function getDefaultSender() { $senders = static::getSenders(); return $senders[0]; } /** * @return bool Can use SMS transport. */ public static function canUse() { return static::getUsableSender() !== null; } /** * @return string Manage url */ public static function getManageUrl() { /** @var BaseConfigurable $defaultProvider */ $defaultProvider = static::getDefaultSender(); return $defaultProvider instanceof BaseConfigurable ? $defaultProvider->getManageUrl() : ''; } /** * Get first Sender which is ready to use it. * @return Base|null Sender instance. */ public static function getUsableSender() { foreach (static::getSenders() as $sender) { if ($sender->canUse()) { return $sender; } } return null; } /** * @param array $messageFields * @param Base|null $sender * @return Message * @throws Main\ArgumentTypeException */ public static function createMessage(array $messageFields, Base $sender = null) { if (!$sender && !isset($messageFields['SENDER_ID'])) { $sender = static::getUsableSender(); } if (isset($messageFields['MESSAGE_TO'])) { $normalizedTo = \NormalizePhone($messageFields['MESSAGE_TO']); if ($normalizedTo) { $messageFields['MESSAGE_TO'] = '+'.$normalizedTo; } } $message = Message::createFromFields($messageFields, $sender); $message->setType(MessageType::SMS); return $message; } /** * @param array $messageFields * @param Base|null $sender * @return Main\Entity\AddResult * @throws Main\ArgumentTypeException */ public static function sendMessage(array $messageFields, Base $sender = null) { $message = static::createMessage($messageFields, $sender); if (!$message->getFrom()) { /** @var BaseConfigurable $sender */ $sender = $message->getSender(); if ($sender && $sender->isConfigurable()) { $message->setFrom($sender->getDefaultFrom()); } } return $message->send(); } public static function getMessageStatus($messageId) { $message = MessageTable::getById($messageId)->fetch(); if (!$message) { $result = new Result\MessageStatus(); $result->setId($messageId); $result->addError(new Main\Error('Message not found')); return $result; } /** @var BaseConfigurable $sender */ $sender = static::getSenderById($message['SENDER_ID']); if (!$sender || !$sender->isConfigurable()) { $result = new Result\MessageStatus(); $result->setId($messageId); $result->addError(new Main\Error('Incorrect sender id.')); return $result; } return $sender->getMessageStatus($message); } }