mirror of
https://gitlab.com/Chill-Projet/chill-bundles.git
synced 2025-08-21 23:23:51 +00:00
send message from cli through ovh if configured
This commit is contained in:
@@ -1,5 +1,14 @@
|
||||
<?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);
|
||||
|
||||
namespace Chill\CalendarBundle\Command;
|
||||
|
||||
use Chill\CalendarBundle\Entity\Calendar;
|
||||
@@ -7,48 +16,44 @@ use Chill\CalendarBundle\Service\ShortMessageNotification\ShortMessageForCalenda
|
||||
use Chill\MainBundle\Entity\User;
|
||||
use Chill\MainBundle\Phonenumber\PhoneNumberHelperInterface;
|
||||
use Chill\MainBundle\Repository\UserRepositoryInterface;
|
||||
use Chill\MainBundle\Service\ShortMessage\ShortMessage;
|
||||
use Chill\MainBundle\Service\ShortMessage\ShortMessageSenderInterface;
|
||||
use Chill\MainBundle\Service\ShortMessage\ShortMessageTransporterInterface;
|
||||
use Chill\PersonBundle\Entity\Person;
|
||||
use Chill\PersonBundle\Repository\PersonRepository;
|
||||
use DateInterval;
|
||||
use DateTimeImmutable;
|
||||
use libphonenumber\PhoneNumber;
|
||||
use libphonenumber\PhoneNumberFormat;
|
||||
use libphonenumber\PhoneNumberType;
|
||||
use libphonenumber\PhoneNumberUtil;
|
||||
use libphonenumber\ValidationResult;
|
||||
use Symfony\Component\Console\Command\Command;
|
||||
use Symfony\Component\Console\Helper\QuestionHelper;
|
||||
use Symfony\Component\Console\Input\InputInterface;
|
||||
use Symfony\Component\Console\Output\OutputInterface;
|
||||
use Symfony\Component\Console\Question\ConfirmationQuestion;
|
||||
use Symfony\Component\Console\Question\Question;
|
||||
use UnexpectedValueException;
|
||||
use function count;
|
||||
|
||||
class SendTestShortMessageOnCalendarCommand extends Command
|
||||
{
|
||||
private PersonRepository $personRepository;
|
||||
private ShortMessageForCalendarBuilderInterface $messageForCalendarBuilder;
|
||||
|
||||
private PhoneNumberUtil $phoneNumberUtil;
|
||||
private PersonRepository $personRepository;
|
||||
|
||||
private PhoneNumberHelperInterface $phoneNumberHelper;
|
||||
|
||||
private ShortMessageForCalendarBuilderInterface $messageForCalendarBuilder;
|
||||
private PhoneNumberUtil $phoneNumberUtil;
|
||||
|
||||
private ShortMessageSenderInterface $messageSender;
|
||||
private ShortMessageTransporterInterface $transporter;
|
||||
|
||||
private UserRepositoryInterface $userRepository;
|
||||
|
||||
/**
|
||||
* @param PersonRepository $personRepository
|
||||
* @param PhoneNumberUtil $phoneNumberUtil
|
||||
* @param PhoneNumberHelperInterface $phoneNumberHelper
|
||||
* @param ShortMessageForCalendarBuilderInterface $messageForCalendarBuilder
|
||||
* @param ShortMessageSenderInterface $messageSender
|
||||
*/
|
||||
public function __construct(
|
||||
PersonRepository $personRepository,
|
||||
PhoneNumberUtil $phoneNumberUtil,
|
||||
PhoneNumberHelperInterface $phoneNumberHelper,
|
||||
ShortMessageForCalendarBuilderInterface $messageForCalendarBuilder,
|
||||
ShortMessageSenderInterface $messageSender,
|
||||
ShortMessageTransporterInterface $transporter,
|
||||
UserRepositoryInterface $userRepository
|
||||
) {
|
||||
parent::__construct();
|
||||
@@ -57,11 +62,10 @@ class SendTestShortMessageOnCalendarCommand extends Command
|
||||
$this->phoneNumberUtil = $phoneNumberUtil;
|
||||
$this->phoneNumberHelper = $phoneNumberHelper;
|
||||
$this->messageForCalendarBuilder = $messageForCalendarBuilder;
|
||||
$this->messageSender = $messageSender;
|
||||
$this->transporter = $transporter;
|
||||
$this->userRepository = $userRepository;
|
||||
}
|
||||
|
||||
|
||||
public function getName()
|
||||
{
|
||||
return 'chill:calendar:test-send-short-message';
|
||||
@@ -81,41 +85,41 @@ class SendTestShortMessageOnCalendarCommand extends Command
|
||||
$helper = $this->getHelper('question');
|
||||
|
||||
// start date
|
||||
$question = new Question("When will start the appointment ? (default: \"1 hour\") ", '1 hour');
|
||||
$startDate = new \DateTimeImmutable($helper->ask($input, $output, $question));
|
||||
$question = new Question('When will start the appointment ? (default: "1 hour") ', '1 hour');
|
||||
$startDate = new DateTimeImmutable($helper->ask($input, $output, $question));
|
||||
|
||||
if (false === $startDate) {
|
||||
throw new \UnexpectedValueException("could not create a date with this date and time");
|
||||
throw new UnexpectedValueException('could not create a date with this date and time');
|
||||
}
|
||||
|
||||
$calendar->setStartDate($startDate);
|
||||
|
||||
// end date
|
||||
$question = new Question("How long will last the appointment ? (default: \"PT30M\") ", 'PT30M');
|
||||
$interval = new \DateInterval($helper->ask($input, $output, $question));
|
||||
$question = new Question('How long will last the appointment ? (default: "PT30M") ', 'PT30M');
|
||||
$interval = new DateInterval($helper->ask($input, $output, $question));
|
||||
|
||||
if (false === $interval) {
|
||||
throw new \UnexpectedValueException("could not create the interval");
|
||||
throw new UnexpectedValueException('could not create the interval');
|
||||
}
|
||||
|
||||
$calendar->setEndDate($calendar->getStartDate()->add($interval));
|
||||
|
||||
// a person
|
||||
$question = new Question("Who will participate ? Give an id for a person. ");
|
||||
$question = new Question('Who will participate ? Give an id for a person. ');
|
||||
$question
|
||||
->setValidator(function ($answer): Person {
|
||||
if (!is_numeric($answer)) {
|
||||
throw new \UnexpectedValueException('the answer must be numeric');
|
||||
throw new UnexpectedValueException('the answer must be numeric');
|
||||
}
|
||||
|
||||
if (0 >= (int) $answer) {
|
||||
throw new \UnexpectedValueException('the answer must be greater than zero');
|
||||
throw new UnexpectedValueException('the answer must be greater than zero');
|
||||
}
|
||||
|
||||
$person = $this->personRepository->find((int) $answer);
|
||||
|
||||
if (null === $person) {
|
||||
throw new \UnexpectedValueException("The person is not found");
|
||||
throw new UnexpectedValueException('The person is not found');
|
||||
}
|
||||
|
||||
return $person;
|
||||
@@ -124,23 +128,22 @@ class SendTestShortMessageOnCalendarCommand extends Command
|
||||
$person = $helper->ask($input, $output, $question);
|
||||
$calendar->addPerson($person);
|
||||
|
||||
|
||||
// a main user
|
||||
$question = new Question("Who will be the main user ? Give an id for a user. ");
|
||||
$question = new Question('Who will be the main user ? Give an id for a user. ');
|
||||
$question
|
||||
->setValidator(function ($answer): User {
|
||||
if (!is_numeric($answer)) {
|
||||
throw new \UnexpectedValueException('the answer must be numeric');
|
||||
throw new UnexpectedValueException('the answer must be numeric');
|
||||
}
|
||||
|
||||
if (0 >= (int) $answer) {
|
||||
throw new \UnexpectedValueException('the answer must be greater than zero');
|
||||
throw new UnexpectedValueException('the answer must be greater than zero');
|
||||
}
|
||||
|
||||
$user = $this->userRepository->find((int) $answer);
|
||||
|
||||
if (null === $user) {
|
||||
throw new \UnexpectedValueException("The user is not found");
|
||||
throw new UnexpectedValueException('The user is not found');
|
||||
}
|
||||
|
||||
return $user;
|
||||
@@ -150,21 +153,22 @@ class SendTestShortMessageOnCalendarCommand extends Command
|
||||
$calendar->setMainUser($user);
|
||||
|
||||
// phonenumber
|
||||
$question = new Question("To which number are we going to send this fake message ?",
|
||||
null !== $person->getMobilenumber() ?
|
||||
$this->phoneNumberHelper->format($person->getMobilenumber()):
|
||||
null
|
||||
$phonenumberFormatted = null !== $person->getMobilenumber() ?
|
||||
$this->phoneNumberUtil->format($person->getMobilenumber(), PhoneNumberFormat::E164) : '';
|
||||
$question = new Question(
|
||||
sprintf('To which number are we going to send this fake message ? (default to: %s)', $phonenumberFormatted),
|
||||
$phonenumberFormatted
|
||||
);
|
||||
|
||||
$question->setNormalizer(function ($answer): PhoneNumber {
|
||||
if (null === $answer) {
|
||||
throw new \UnexpectedValueException("The person is not found");
|
||||
throw new UnexpectedValueException('The person is not found');
|
||||
}
|
||||
|
||||
$phone = $this->phoneNumberUtil->parse($answer, 'BE');
|
||||
|
||||
if (!$this->phoneNumberUtil->isPossibleNumberForType($phone, PhoneNumberType::MOBILE)) {
|
||||
throw new \UnexpectedValueException("Phone number si not a mobile");
|
||||
throw new UnexpectedValueException('Phone number si not a mobile');
|
||||
}
|
||||
|
||||
return $phone;
|
||||
@@ -172,6 +176,9 @@ class SendTestShortMessageOnCalendarCommand extends Command
|
||||
|
||||
$phone = $helper->ask($input, $output, $question);
|
||||
|
||||
$question = new ConfirmationQuestion('really send the message to the phone ?');
|
||||
$reallySend = (bool) $helper->ask($input, $output, $question);
|
||||
|
||||
$messages = $this->messageForCalendarBuilder->buildMessageForCalendar($calendar);
|
||||
|
||||
if (0 === count($messages)) {
|
||||
@@ -179,10 +186,13 @@ class SendTestShortMessageOnCalendarCommand extends Command
|
||||
}
|
||||
|
||||
foreach ($messages as $key => $message) {
|
||||
$output->writeln("The short message for SMS ${key} will be: ");
|
||||
$output->writeln("The short message for SMS {$key} will be: ");
|
||||
$output->writeln($message->getContent());
|
||||
$message->setPhoneNumber($phone);
|
||||
$this->messageSender->send($message);
|
||||
|
||||
if ($reallySend) {
|
||||
$this->transporter->send($message);
|
||||
}
|
||||
}
|
||||
|
||||
return 0;
|
||||
|
Reference in New Issue
Block a user