|
- <?php
-
- namespace Lc\SovBundle\Notification;
-
- use Lc\SovBundle\Component\StringComponent;
- use Symfony\Component\DependencyInjection\ParameterBag\ParameterBagInterface;
- use Symfony\Contracts\HttpClient\HttpClientInterface;
- use Twig\Environment;
-
- class SmsFactorNotification
- {
- const TO_USER = 'to-user';
- const CONTENT_MESSAGE = 'content-message';
- const CONTENT_TEMPLATE = 'content-template';
- const CONTENT_DATA = 'content-data';
-
- protected HttpClientInterface $client;
- protected ParameterBagInterface $parameterBag;
- protected MailMailjetNotification $mailMailjetNotification;
- protected StringComponent $stringComponent;
- protected Environment $templating;
-
- public function __construct(
- HttpClientInterface $client,
- ParameterBagInterface $parameterBag,
- MailMailjetNotification $mailMailjetNotification,
- StringComponent $stringComponent,
- Environment $templating
- )
- {
- $this->client = $client;
- $this->parameterBag = $parameterBag;
- $this->mailMailjetNotification = $mailMailjetNotification;
- $this->stringComponent = $stringComponent;
- $this->templating = $templating;
- }
-
- public function send($params = [])
- {
- $user = isset($params[self::TO_USER]) ? $params[self::TO_USER] : null;
-
- if ($user) {
- $phone = $this->stringComponent->formatPhoneNumber($user->getPhone());
-
- $message = '';
- if (isset($params[self::CONTENT_MESSAGE])) {
- $message = $params[self::CONTENT_MESSAGE];
- } elseif (isset($params[self::CONTENT_TEMPLATE])) {
- $template = $params[self::CONTENT_TEMPLATE];
- $paramsTemplate = [];
- if (isset($params[self::CONTENT_DATA]) && is_array($params[self::CONTENT_DATA])) {
- $paramsTemplate = $params[self::CONTENT_DATA];
- }
- $message = $this->templating->render($template, $paramsTemplate);
- }
-
- if ($this->parameterBag->get('mailjet.dev.redirect.active') == 1) {
- $this->mailMailjetNotification->send([
- MailMailjetNotification::SUBJECT => 'Notification par SMS à ' . $phone,
- MailMailjetNotification::TO_EMAIL => $user->getEmail(),
- MailMailjetNotification::CONTENT_TEMPLATE => 'mail/notification',
- MailMailjetNotification::CONTENT_DATA => [
- 'message' => $message
- ],
- ]);
-
- return true;
- } else {
- $token = $this->parameterBag->get('smsfactor.token');
- $from = $this->parameterBag->get('smsfactor.from');
-
- if ($token && strlen($token) > 0) {
-
- $response = $this->client->request(
- 'GET',
- 'https://api.smsfactor.com/send',
- [
- 'headers' => [
- 'Authorization' => 'Bearer ' . $token,
- 'Content-Type' => 'application/json; charset=utf-8',
- 'Accept' => 'application/json'
- ],
- 'query' => [
- 'sender' => $from,
- 'to' => $phone,
- 'text' => $message,
- ],
- ]
- );
-
- return $response;
- } else {
- throw new \ErrorException('Le token SMS SmsFactor n\'est pas défini.');
- }
- }
- }
-
- return false;
- }
-
- }
|