mirror of
https://gitlab.com/Chill-Projet/chill-bundles.git
synced 2025-06-07 18:44:08 +00:00
Remove legacy ShortMessage components and integrate Notifier
Replaced outdated ShortMessage functionalities with Symfony's Notifier component for handling SMS messages. Deprecated legacy `ShortMessage` components and introduced a transition layer for existing OVH configurations. Updated dependencies and environment setup to support the new implementation.
This commit is contained in:
parent
b02820407c
commit
5e3a1eb2ab
4
.env
4
.env
@ -88,3 +88,7 @@ REDIS_HOST=redis
|
|||||||
REDIS_PORT=6379
|
REDIS_PORT=6379
|
||||||
REDIS_URL=redis://${REDIS_HOST}:${REDIS_PORT}
|
REDIS_URL=redis://${REDIS_HOST}:${REDIS_PORT}
|
||||||
###< chill-project/chill-bundles ###
|
###< chill-project/chill-bundles ###
|
||||||
|
|
||||||
|
###> symfony/ovh-cloud-notifier ###
|
||||||
|
# OVHCLOUD_DSN=ovhcloud://APPLICATION_KEY:APPLICATION_SECRET@default?consumer_key=CONSUMER_KEY&service_name=SERVICE_NAME
|
||||||
|
###< symfony/ovh-cloud-notifier ###
|
||||||
|
@ -60,6 +60,7 @@
|
|||||||
"symfony/monolog-bundle": "^3.5",
|
"symfony/monolog-bundle": "^3.5",
|
||||||
"symfony/notifier": "^5.4",
|
"symfony/notifier": "^5.4",
|
||||||
"symfony/options-resolver": "^5.4",
|
"symfony/options-resolver": "^5.4",
|
||||||
|
"symfony/ovh-cloud-notifier": "^5.4",
|
||||||
"symfony/process": "^5.4",
|
"symfony/process": "^5.4",
|
||||||
"symfony/property-access": "^5.4",
|
"symfony/property-access": "^5.4",
|
||||||
"symfony/property-info": "^5.4",
|
"symfony/property-info": "^5.4",
|
||||||
|
@ -2,7 +2,7 @@ framework:
|
|||||||
notifier:
|
notifier:
|
||||||
texter_transports:
|
texter_transports:
|
||||||
#ovhcloud: '%env(OVHCLOUD_DSN)%'
|
#ovhcloud: '%env(OVHCLOUD_DSN)%'
|
||||||
ovhcloud: '%env(SHORT_MESSAGE_DSN)%'
|
#ovhcloud: '%env(SHORT_MESSAGE_DSN)%'
|
||||||
channel_policy:
|
channel_policy:
|
||||||
# use chat/slack, chat/telegram, sms/twilio or sms/nexmo
|
# use chat/slack, chat/telegram, sms/twilio or sms/nexmo
|
||||||
urgent: ['email']
|
urgent: ['email']
|
||||||
|
@ -20,6 +20,10 @@ return static function (RectorConfig $rectorConfig): void {
|
|||||||
__DIR__ . '/src',
|
__DIR__ . '/src',
|
||||||
]);
|
]);
|
||||||
|
|
||||||
|
$rectorConfig->skip([
|
||||||
|
\Rector\Php55\Rector\String_\StringClassNameToClassConstantRector::class => __DIR__ . 'src/Bundle/ChillMainBundle/Service/Notifier/LegacyOvhCloudFactory.php'
|
||||||
|
]);
|
||||||
|
|
||||||
$rectorConfig->symfonyContainerXml(__DIR__ . '/var/cache/dev/test/App_KernelTestDebugContainer.xml ');
|
$rectorConfig->symfonyContainerXml(__DIR__ . '/var/cache/dev/test/App_KernelTestDebugContainer.xml ');
|
||||||
$rectorConfig->symfonyContainerPhp(__DIR__ . '/tests/symfony-container.php');
|
$rectorConfig->symfonyContainerPhp(__DIR__ . '/tests/symfony-container.php');
|
||||||
|
|
||||||
|
@ -18,7 +18,6 @@ use Chill\MainBundle\DependencyInjection\CompilerPass\ExportsCompilerPass;
|
|||||||
use Chill\MainBundle\DependencyInjection\CompilerPass\MenuCompilerPass;
|
use Chill\MainBundle\DependencyInjection\CompilerPass\MenuCompilerPass;
|
||||||
use Chill\MainBundle\DependencyInjection\CompilerPass\NotificationCounterCompilerPass;
|
use Chill\MainBundle\DependencyInjection\CompilerPass\NotificationCounterCompilerPass;
|
||||||
use Chill\MainBundle\DependencyInjection\CompilerPass\SearchableServicesCompilerPass;
|
use Chill\MainBundle\DependencyInjection\CompilerPass\SearchableServicesCompilerPass;
|
||||||
use Chill\MainBundle\DependencyInjection\CompilerPass\ShortMessageCompilerPass;
|
|
||||||
use Chill\MainBundle\DependencyInjection\CompilerPass\TimelineCompilerClass;
|
use Chill\MainBundle\DependencyInjection\CompilerPass\TimelineCompilerClass;
|
||||||
use Chill\MainBundle\DependencyInjection\CompilerPass\WidgetsCompilerPass;
|
use Chill\MainBundle\DependencyInjection\CompilerPass\WidgetsCompilerPass;
|
||||||
use Chill\MainBundle\DependencyInjection\ConfigConsistencyCompilerPass;
|
use Chill\MainBundle\DependencyInjection\ConfigConsistencyCompilerPass;
|
||||||
@ -73,6 +72,5 @@ class ChillMainBundle extends Bundle
|
|||||||
$container->addCompilerPass(new MenuCompilerPass(), \Symfony\Component\DependencyInjection\Compiler\PassConfig::TYPE_BEFORE_OPTIMIZATION, 0);
|
$container->addCompilerPass(new MenuCompilerPass(), \Symfony\Component\DependencyInjection\Compiler\PassConfig::TYPE_BEFORE_OPTIMIZATION, 0);
|
||||||
$container->addCompilerPass(new ACLFlagsCompilerPass(), \Symfony\Component\DependencyInjection\Compiler\PassConfig::TYPE_BEFORE_OPTIMIZATION, 0);
|
$container->addCompilerPass(new ACLFlagsCompilerPass(), \Symfony\Component\DependencyInjection\Compiler\PassConfig::TYPE_BEFORE_OPTIMIZATION, 0);
|
||||||
$container->addCompilerPass(new CRUDControllerCompilerPass(), \Symfony\Component\DependencyInjection\Compiler\PassConfig::TYPE_BEFORE_OPTIMIZATION, 0);
|
$container->addCompilerPass(new CRUDControllerCompilerPass(), \Symfony\Component\DependencyInjection\Compiler\PassConfig::TYPE_BEFORE_OPTIMIZATION, 0);
|
||||||
$container->addCompilerPass(new ShortMessageCompilerPass(), \Symfony\Component\DependencyInjection\Compiler\PassConfig::TYPE_BEFORE_OPTIMIZATION, 0);
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -234,6 +234,8 @@ class ChillMainExtension extends Extension implements
|
|||||||
|
|
||||||
public function prepend(ContainerBuilder $container)
|
public function prepend(ContainerBuilder $container)
|
||||||
{
|
{
|
||||||
|
$this->prependNotifierTexterWithLegacyData($container);
|
||||||
|
|
||||||
// add installation_name and date_format to globals
|
// add installation_name and date_format to globals
|
||||||
$chillMainConfig = $container->getExtensionConfig($this->getAlias());
|
$chillMainConfig = $container->getExtensionConfig($this->getAlias());
|
||||||
$config = $this->processConfiguration($this
|
$config = $this->processConfiguration($this
|
||||||
@ -357,6 +359,44 @@ class ChillMainExtension extends Extension implements
|
|||||||
// Note: the controller are loaded inside compiler pass
|
// Note: the controller are loaded inside compiler pass
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* This method prepend framework configuration with legacy configuration from "ovhCloudTransporter".
|
||||||
|
*
|
||||||
|
* It can be safely removed when the option chill_main.short_message.dsn will be removed.
|
||||||
|
*/
|
||||||
|
private function prependNotifierTexterWithLegacyData(ContainerBuilder $container): void
|
||||||
|
{
|
||||||
|
$configs = $container->getExtensionConfig('chill_main');
|
||||||
|
$notifierSet = false;
|
||||||
|
foreach (array_reverse($configs) as $config) {
|
||||||
|
if (!array_key_exists('short_messages', $config)) {
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (array_key_exists('dsn', $config['short_messages'])) {
|
||||||
|
$container->prependExtensionConfig('framework', [
|
||||||
|
'notifier' => [
|
||||||
|
'texter_transports' => [
|
||||||
|
'ovh_legacy' => $config['short_messages']['dsn'],
|
||||||
|
],
|
||||||
|
],
|
||||||
|
]);
|
||||||
|
$notifierSet = true;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
if (!$notifierSet) {
|
||||||
|
$container->prependExtensionConfig('framework', [
|
||||||
|
'notifier' => [
|
||||||
|
'texter_transports' => [
|
||||||
|
'dummy' => 'null://null',
|
||||||
|
],
|
||||||
|
],
|
||||||
|
]);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
protected function prependCruds(ContainerBuilder $container)
|
protected function prependCruds(ContainerBuilder $container)
|
||||||
{
|
{
|
||||||
$container->prependExtensionConfig('chill_main', [
|
$container->prependExtensionConfig('chill_main', [
|
||||||
|
@ -1,92 +0,0 @@
|
|||||||
<?php
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Chill is a software for social workers.
|
|
||||||
*
|
|
||||||
* For the full copyright and license information, please view
|
|
||||||
* the LICENSE file that was distributed with this source code.
|
|
||||||
*/
|
|
||||||
|
|
||||||
declare(strict_types=1);
|
|
||||||
|
|
||||||
/*
|
|
||||||
* Chill is a software for social workers
|
|
||||||
*
|
|
||||||
* For the full copyright and license information, please view
|
|
||||||
* the LICENSE file that was distributed with this source code.
|
|
||||||
*/
|
|
||||||
|
|
||||||
namespace Chill\MainBundle\DependencyInjection\CompilerPass;
|
|
||||||
|
|
||||||
use Chill\MainBundle\Service\ShortMessage\NullShortMessageSender;
|
|
||||||
use Chill\MainBundle\Service\ShortMessage\ShortMessageTransporter;
|
|
||||||
use Chill\MainBundle\Service\ShortMessageOvh\OvhShortMessageSender;
|
|
||||||
use libphonenumber\PhoneNumberUtil;
|
|
||||||
use Psr\Log\LoggerInterface;
|
|
||||||
use Symfony\Component\DependencyInjection\Compiler\CompilerPassInterface;
|
|
||||||
use Symfony\Component\DependencyInjection\ContainerBuilder;
|
|
||||||
use Symfony\Component\DependencyInjection\Definition;
|
|
||||||
use Symfony\Component\DependencyInjection\Exception\RuntimeException;
|
|
||||||
use Symfony\Component\DependencyInjection\Reference;
|
|
||||||
|
|
||||||
class ShortMessageCompilerPass implements CompilerPassInterface
|
|
||||||
{
|
|
||||||
public function process(ContainerBuilder $container)
|
|
||||||
{
|
|
||||||
return;
|
|
||||||
$config = $container->resolveEnvPlaceholders($container->getParameter('chill_main.short_messages'), true);
|
|
||||||
// weird fix for special characters
|
|
||||||
$config['dsn'] = str_replace(['%%'], ['%'], (string) $config['dsn']);
|
|
||||||
$dsn = parse_url($config['dsn']);
|
|
||||||
parse_str($dsn['query'] ?? '', $dsn['queries']);
|
|
||||||
|
|
||||||
if ('null' === $dsn['scheme'] || false === $config['enabled']) {
|
|
||||||
$defaultTransporter = new Reference(NullShortMessageSender::class);
|
|
||||||
} elseif ('ovh' === $dsn['scheme']) {
|
|
||||||
if (!class_exists('\\'.\Ovh\Api::class)) {
|
|
||||||
throw new RuntimeException('Class \Ovh\Api not found');
|
|
||||||
}
|
|
||||||
|
|
||||||
foreach (['user', 'host', 'pass'] as $component) {
|
|
||||||
if (!\array_key_exists($component, $dsn)) {
|
|
||||||
throw new RuntimeException(sprintf('The component %s does not exist in dsn. Please provide a dsn like ovh://applicationKey:applicationSecret@endpoint?consumerKey=xxxx&sender=yyyy&service_name=zzzz', $component));
|
|
||||||
}
|
|
||||||
|
|
||||||
$container->setParameter('chill_main.short_messages.ovh_config_'.$component, $dsn[$component]);
|
|
||||||
}
|
|
||||||
|
|
||||||
foreach (['consumer_key', 'sender', 'service_name'] as $param) {
|
|
||||||
if (!\array_key_exists($param, $dsn['queries'])) {
|
|
||||||
throw new RuntimeException(sprintf('The parameter %s does not exist in dsn. Please provide a dsn like ovh://applicationKey:applicationSecret@endpoint?consumerKey=xxxx&sender=yyyy&service_name=zzzz', $param));
|
|
||||||
}
|
|
||||||
$container->setParameter('chill_main.short_messages.ovh_config_'.$param, $dsn['queries'][$param]);
|
|
||||||
}
|
|
||||||
|
|
||||||
$ovh = new Definition();
|
|
||||||
$ovh
|
|
||||||
->setClass('\\'.\Ovh\Api::class)
|
|
||||||
->setArgument(0, $dsn['user'])
|
|
||||||
->setArgument(1, $dsn['pass'])
|
|
||||||
->setArgument(2, $dsn['host'])
|
|
||||||
->setArgument(3, $dsn['queries']['consumer_key']);
|
|
||||||
$container->setDefinition(\Ovh\Api::class, $ovh);
|
|
||||||
|
|
||||||
$ovhSender = new Definition();
|
|
||||||
$ovhSender
|
|
||||||
->setClass(OvhShortMessageSender::class)
|
|
||||||
->setArgument(0, new Reference(\Ovh\Api::class))
|
|
||||||
->setArgument(1, $dsn['queries']['service_name'])
|
|
||||||
->setArgument(2, $dsn['queries']['sender'])
|
|
||||||
->setArgument(3, new Reference(LoggerInterface::class))
|
|
||||||
->setArgument(4, new Reference(PhoneNumberUtil::class));
|
|
||||||
$container->setDefinition(OvhShortMessageSender::class, $ovhSender);
|
|
||||||
|
|
||||||
$defaultTransporter = new Reference(OvhShortMessageSender::class);
|
|
||||||
} else {
|
|
||||||
throw new RuntimeException(sprintf('Cannot find a sender for this dsn: %s', $config['dsn']));
|
|
||||||
}
|
|
||||||
|
|
||||||
$container->getDefinition(ShortMessageTransporter::class)
|
|
||||||
->setArgument(0, $defaultTransporter);
|
|
||||||
}
|
|
||||||
}
|
|
@ -123,6 +123,7 @@ class Configuration implements ConfigurationInterface
|
|||||||
->end()
|
->end()
|
||||||
->end()
|
->end()
|
||||||
->arrayNode('short_messages')
|
->arrayNode('short_messages')
|
||||||
|
->setDeprecated('chill-project/chill-bundles', '3.7.0', 'Since 3.7.0, Chill use the Notifier component to send message. Configure the notifier instead. In the meantime, the previous available OVH configuration will be append to the notifier component.')
|
||||||
->canBeEnabled()
|
->canBeEnabled()
|
||||||
->children()
|
->children()
|
||||||
->scalarNode('dsn')->cannotBeEmpty()->defaultValue('null://null')
|
->scalarNode('dsn')->cannotBeEmpty()->defaultValue('null://null')
|
||||||
|
@ -0,0 +1,54 @@
|
|||||||
|
<?php
|
||||||
|
|
||||||
|
declare(strict_types=1);
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Chill is a software for social workers
|
||||||
|
*
|
||||||
|
* For the full copyright and license information, please view
|
||||||
|
* the LICENSE file that was distributed with this source code.
|
||||||
|
*/
|
||||||
|
|
||||||
|
namespace Chill\MainBundle\Service\Notifier;
|
||||||
|
|
||||||
|
use Symfony\Component\Notifier\Exception\UnsupportedSchemeException;
|
||||||
|
use Symfony\Component\Notifier\Transport\AbstractTransportFactory;
|
||||||
|
use Symfony\Component\Notifier\Transport\Dsn;
|
||||||
|
use Symfony\Component\Notifier\Transport\TransportInterface;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* This is a legacy ovh cloud provider, to provide the regular OvhCloudTransporter from the previous configuration.
|
||||||
|
*
|
||||||
|
* This is only for transition purpose from the previous ovh dsn, which was existing in chill.
|
||||||
|
*/
|
||||||
|
class LegacyOvhCloudFactory extends AbstractTransportFactory
|
||||||
|
{
|
||||||
|
protected function getSupportedSchemes(): array
|
||||||
|
{
|
||||||
|
return ['ovh'];
|
||||||
|
}
|
||||||
|
|
||||||
|
public function create(Dsn $dsn): TransportInterface
|
||||||
|
{
|
||||||
|
$scheme = $dsn->getScheme();
|
||||||
|
|
||||||
|
if ('ovh' !== $scheme) {
|
||||||
|
throw new UnsupportedSchemeException($dsn, 'ovh', $this->getSupportedSchemes());
|
||||||
|
}
|
||||||
|
|
||||||
|
if (!class_exists($class = '\Symfony\Component\Notifier\Bridge\OvhCloud\OvhCloudTransport')) {
|
||||||
|
throw new \RuntimeException(sprintf('The class %s is missing, please add the dependency with "composer require symfony/ovh-cloud-notifier".', $class));
|
||||||
|
}
|
||||||
|
|
||||||
|
$applicationKey = $this->getUser($dsn);
|
||||||
|
$applicationSecret = $this->getPassword($dsn);
|
||||||
|
$consumerKey = $dsn->getRequiredOption('consumer_key');
|
||||||
|
$serviceName = $dsn->getRequiredOption('service_name');
|
||||||
|
$sender = $dsn->getOption('sender');
|
||||||
|
$host = null;
|
||||||
|
$port = $dsn->getPort();
|
||||||
|
|
||||||
|
return (new $class($applicationKey, $applicationSecret, $consumerKey, $serviceName, $this->client, $this->dispatcher))
|
||||||
|
->setHost($host)->setPort($port)->setSender($sender);
|
||||||
|
}
|
||||||
|
}
|
@ -1,24 +0,0 @@
|
|||||||
<?php
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Chill is a software for social workers.
|
|
||||||
*
|
|
||||||
* For the full copyright and license information, please view
|
|
||||||
* the LICENSE file that was distributed with this source code.
|
|
||||||
*/
|
|
||||||
|
|
||||||
declare(strict_types=1);
|
|
||||||
|
|
||||||
/*
|
|
||||||
* Chill is a software for social workers
|
|
||||||
*
|
|
||||||
* For the full copyright and license information, please view
|
|
||||||
* the LICENSE file that was distributed with this source code.
|
|
||||||
*/
|
|
||||||
|
|
||||||
namespace Chill\MainBundle\Service\ShortMessage;
|
|
||||||
|
|
||||||
class NullShortMessageSender implements ShortMessageSenderInterface
|
|
||||||
{
|
|
||||||
public function send(ShortMessage $shortMessage): void {}
|
|
||||||
}
|
|
@ -20,6 +20,8 @@ namespace Chill\MainBundle\Service\ShortMessage;
|
|||||||
|
|
||||||
use libphonenumber\PhoneNumber;
|
use libphonenumber\PhoneNumber;
|
||||||
|
|
||||||
|
trigger_deprecation('chill-project/chill-bundles', '3.7', 'Short Messages are deprecated, use SmsMessage and Notifier component instead');
|
||||||
|
|
||||||
class ShortMessage
|
class ShortMessage
|
||||||
{
|
{
|
||||||
final public const PRIORITY_LOW = 'low';
|
final public const PRIORITY_LOW = 'low';
|
||||||
|
@ -18,17 +18,33 @@ declare(strict_types=1);
|
|||||||
|
|
||||||
namespace Chill\MainBundle\Service\ShortMessage;
|
namespace Chill\MainBundle\Service\ShortMessage;
|
||||||
|
|
||||||
|
use libphonenumber\PhoneNumberFormat;
|
||||||
|
use libphonenumber\PhoneNumberUtil;
|
||||||
use Symfony\Component\Messenger\Handler\MessageHandlerInterface;
|
use Symfony\Component\Messenger\Handler\MessageHandlerInterface;
|
||||||
|
use Symfony\Component\Notifier\Message\SmsMessage;
|
||||||
|
use Symfony\Component\Notifier\TexterInterface;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @AsMessageHandler
|
* @AsMessageHandler
|
||||||
*/
|
*/
|
||||||
class ShortMessageHandler implements MessageHandlerInterface
|
class ShortMessageHandler implements MessageHandlerInterface
|
||||||
{
|
{
|
||||||
public function __construct(private readonly ShortMessageTransporterInterface $messageTransporter) {}
|
private readonly PhoneNumberUtil $phoneNumberUtil;
|
||||||
|
|
||||||
|
public function __construct(private readonly TexterInterface $texter)
|
||||||
|
{
|
||||||
|
$this->phoneNumberUtil = PhoneNumberUtil::getInstance();
|
||||||
|
}
|
||||||
|
|
||||||
public function __invoke(ShortMessage $message): void
|
public function __invoke(ShortMessage $message): void
|
||||||
{
|
{
|
||||||
$this->messageTransporter->send($message);
|
trigger_deprecation('Chill-project/chill-bundles', '3.7.0', 'Send message using Notifier component');
|
||||||
|
|
||||||
|
$this->texter->send(
|
||||||
|
new SmsMessage(
|
||||||
|
$this->phoneNumberUtil->format($message->getPhoneNumber(), PhoneNumberFormat::E164),
|
||||||
|
$message->getContent(),
|
||||||
|
),
|
||||||
|
);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -1,24 +0,0 @@
|
|||||||
<?php
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Chill is a software for social workers.
|
|
||||||
*
|
|
||||||
* For the full copyright and license information, please view
|
|
||||||
* the LICENSE file that was distributed with this source code.
|
|
||||||
*/
|
|
||||||
|
|
||||||
declare(strict_types=1);
|
|
||||||
|
|
||||||
/*
|
|
||||||
* Chill is a software for social workers
|
|
||||||
*
|
|
||||||
* For the full copyright and license information, please view
|
|
||||||
* the LICENSE file that was distributed with this source code.
|
|
||||||
*/
|
|
||||||
|
|
||||||
namespace Chill\MainBundle\Service\ShortMessage;
|
|
||||||
|
|
||||||
interface ShortMessageSenderInterface
|
|
||||||
{
|
|
||||||
public function send(ShortMessage $shortMessage): void;
|
|
||||||
}
|
|
@ -1,29 +0,0 @@
|
|||||||
<?php
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Chill is a software for social workers.
|
|
||||||
*
|
|
||||||
* For the full copyright and license information, please view
|
|
||||||
* the LICENSE file that was distributed with this source code.
|
|
||||||
*/
|
|
||||||
|
|
||||||
declare(strict_types=1);
|
|
||||||
|
|
||||||
/*
|
|
||||||
* Chill is a software for social workers
|
|
||||||
*
|
|
||||||
* For the full copyright and license information, please view
|
|
||||||
* the LICENSE file that was distributed with this source code.
|
|
||||||
*/
|
|
||||||
|
|
||||||
namespace Chill\MainBundle\Service\ShortMessage;
|
|
||||||
|
|
||||||
class ShortMessageTransporter implements ShortMessageTransporterInterface
|
|
||||||
{
|
|
||||||
public function __construct(private readonly ShortMessageSenderInterface $sender) {}
|
|
||||||
|
|
||||||
public function send(ShortMessage $shortMessage): void
|
|
||||||
{
|
|
||||||
$this->sender->send($shortMessage);
|
|
||||||
}
|
|
||||||
}
|
|
@ -1,24 +0,0 @@
|
|||||||
<?php
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Chill is a software for social workers.
|
|
||||||
*
|
|
||||||
* For the full copyright and license information, please view
|
|
||||||
* the LICENSE file that was distributed with this source code.
|
|
||||||
*/
|
|
||||||
|
|
||||||
declare(strict_types=1);
|
|
||||||
|
|
||||||
/*
|
|
||||||
* Chill is a software for social workers
|
|
||||||
*
|
|
||||||
* For the full copyright and license information, please view
|
|
||||||
* the LICENSE file that was distributed with this source code.
|
|
||||||
*/
|
|
||||||
|
|
||||||
namespace Chill\MainBundle\Service\ShortMessage;
|
|
||||||
|
|
||||||
interface ShortMessageTransporterInterface
|
|
||||||
{
|
|
||||||
public function send(ShortMessage $shortMessage);
|
|
||||||
}
|
|
@ -1,65 +0,0 @@
|
|||||||
<?php
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Chill is a software for social workers.
|
|
||||||
*
|
|
||||||
* For the full copyright and license information, please view
|
|
||||||
* the LICENSE file that was distributed with this source code.
|
|
||||||
*/
|
|
||||||
|
|
||||||
declare(strict_types=1);
|
|
||||||
|
|
||||||
/*
|
|
||||||
* Chill is a software for social workers
|
|
||||||
*
|
|
||||||
* For the full copyright and license information, please view
|
|
||||||
* the LICENSE file that was distributed with this source code.
|
|
||||||
*/
|
|
||||||
|
|
||||||
namespace Chill\MainBundle\Service\ShortMessageOvh;
|
|
||||||
|
|
||||||
use Chill\MainBundle\Service\ShortMessage\ShortMessage;
|
|
||||||
use Chill\MainBundle\Service\ShortMessage\ShortMessageSenderInterface;
|
|
||||||
use libphonenumber\PhoneNumberFormat;
|
|
||||||
use libphonenumber\PhoneNumberUtil;
|
|
||||||
use Ovh\Api;
|
|
||||||
use Psr\Log\LoggerInterface;
|
|
||||||
|
|
||||||
class OvhShortMessageSender implements ShortMessageSenderInterface
|
|
||||||
{
|
|
||||||
public function __construct(
|
|
||||||
private readonly Api $api,
|
|
||||||
// for DI, must remains as first argument
|
|
||||||
private readonly string $serviceName,
|
|
||||||
// for di, must remains as second argument
|
|
||||||
private readonly string $sender,
|
|
||||||
// for DI, must remains as third argument
|
|
||||||
private readonly LoggerInterface $logger,
|
|
||||||
private readonly PhoneNumberUtil $phoneNumberUtil,
|
|
||||||
) {}
|
|
||||||
|
|
||||||
public function send(ShortMessage $shortMessage): void
|
|
||||||
{
|
|
||||||
$receiver = $this->phoneNumberUtil->format($shortMessage->getPhoneNumber(), PhoneNumberFormat::E164);
|
|
||||||
|
|
||||||
$response = $this->api->post(
|
|
||||||
strtr('/sms/{serviceName}/jobs', ['{serviceName}' => $this->serviceName]),
|
|
||||||
[
|
|
||||||
'message' => $shortMessage->getContent(),
|
|
||||||
'receivers' => [$receiver],
|
|
||||||
'sender' => $this->sender,
|
|
||||||
'noStopClause' => true,
|
|
||||||
'coding' => '7bit',
|
|
||||||
'charset' => 'UTF-8',
|
|
||||||
'priority' => $shortMessage->getPriority(),
|
|
||||||
]
|
|
||||||
);
|
|
||||||
|
|
||||||
$improved = array_merge([
|
|
||||||
'validReceiversI' => implode(',', $response['validReceivers']),
|
|
||||||
'idsI' => implode(',', $response['ids']),
|
|
||||||
], $response);
|
|
||||||
|
|
||||||
$this->logger->warning('[sms] a sms was sent', $improved);
|
|
||||||
}
|
|
||||||
}
|
|
@ -308,6 +308,15 @@
|
|||||||
"config/packages/notifier.yaml"
|
"config/packages/notifier.yaml"
|
||||||
]
|
]
|
||||||
},
|
},
|
||||||
|
"symfony/ovh-cloud-notifier": {
|
||||||
|
"version": "5.4",
|
||||||
|
"recipe": {
|
||||||
|
"repo": "github.com/symfony/recipes",
|
||||||
|
"branch": "main",
|
||||||
|
"version": "5.1",
|
||||||
|
"ref": "fe2e382c22d60eae9ad54cb22862b1c15291fdf8"
|
||||||
|
}
|
||||||
|
},
|
||||||
"symfony/phpunit-bridge": {
|
"symfony/phpunit-bridge": {
|
||||||
"version": "7.1",
|
"version": "7.1",
|
||||||
"recipe": {
|
"recipe": {
|
||||||
|
Loading…
x
Reference in New Issue
Block a user