Skip to content

Commit face5dc

Browse files
author
Franck Allimant
committed
Proper message handling for SMS generation
1 parent 8aebedb commit face5dc

File tree

2 files changed

+33
-24
lines changed

2 files changed

+33
-24
lines changed

Config/module.xml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -7,7 +7,7 @@
77
<descriptive locale="fr_FR">
88
<title>Retrait sur place</title>
99
</descriptive>
10-
<version>2.1.2</version>
10+
<version>2.1.3</version>
1111
<author>
1212
<name>Thelia</name>
1313
<email>info@thelia.net</email>

EventListeners/NotificationListener.php

Lines changed: 32 additions & 23 deletions
Original file line numberDiff line numberDiff line change
@@ -17,49 +17,40 @@
1717
use libphonenumber\PhoneNumberFormat;
1818
use libphonenumber\PhoneNumberUtil;
1919
use LocalPickup\LocalPickup;
20-
use OpenApi\Events\DeliveryModuleOptionEvent;
21-
use OpenApi\Events\OpenApiEvents;
22-
use OpenApi\Model\Api\DeliveryModuleOption;
23-
use OpenApi\Model\Api\ModelFactory;
2420
use Propel\Runtime\Exception\PropelException;
2521
use SmartyException;
2622
use Symfony\Component\EventDispatcher\EventSubscriberInterface;
27-
use Symfony\Component\HttpFoundation\RequestStack;
2823
use Symfony\Component\Notifier\Exception\TransportExceptionInterface;
2924
use Symfony\Component\Notifier\Message\SmsMessage;
3025
use Symfony\Component\Notifier\TexterInterface;
3126
use Thelia\Core\Event\Order\OrderEvent;
3227
use Thelia\Core\Event\TheliaEvents;
3328
use Thelia\Core\Template\ParserInterface;
34-
use Thelia\Core\Template\TemplateHelperInterface;
3529
use Thelia\Exception\TheliaProcessException;
3630
use Thelia\Log\Tlog;
3731
use Thelia\Mailer\MailerFactory;
3832
use Thelia\Model\CountryQuery;
3933
use Thelia\Model\MessageQuery;
40-
use Thelia\Model\ModuleQuery;
4134
use Thelia\Model\Order;
4235
use Thelia\Model\OrderStatus;
4336

44-
class NotificationListener implements EventSubscriberInterface
37+
readonly class NotificationListener implements EventSubscriberInterface
4538
{
4639
/**
4740
* APIListener constructor.
4841
*/
4942
public function __construct(
50-
private MailerFactory $mailer,
51-
private ?TexterInterface $texter,
52-
private ParserInterface $parser,
53-
private TemplateHelperInterface $templateHelper
54-
)
55-
{
56-
$this->mailer = $mailer;
43+
private MailerFactory $mailer,
44+
private ?TexterInterface $texter,
45+
private ParserInterface $parser,
46+
) {
5747
}
5848

5949
/**
50+
* @param OrderEvent $orderEvent
51+
* @return void
6052
* @throws PropelException
6153
* @throws TransportExceptionInterface
62-
* @throws SmartyException
6354
*/
6455
public function orderStatusChange(OrderEvent $orderEvent): void
6556
{
@@ -79,12 +70,22 @@ public function orderStatusChange(OrderEvent $orderEvent): void
7970
}
8071
}
8172

73+
/**
74+
* @param Order $order
75+
* @return bool
76+
* @throws PropelException
77+
*/
8278
private function isEligibleForLocalPickupNotification(Order $order): bool
8379
{
8480
return $order->getDeliveryModuleId() === LocalPickup::getModuleId()
8581
&& $order->getOrderStatus()->getCode() === OrderStatus::CODE_SENT;
8682
}
8783

84+
/**
85+
* @param Order $order
86+
* @return void
87+
* @throws PropelException
88+
*/
8889
private function sendLocalPickupEmail(Order $order): void
8990
{
9091
$this->mailer->sendEmailToCustomer(
@@ -103,8 +104,12 @@ private function sendLocalPickupEmail(Order $order): void
103104
}
104105

105106
/**
106-
* @throws PropelException|TransportExceptionInterface
107+
* @param Order $order
108+
* @return void
109+
* @throws NumberParseException
110+
* @throws PropelException
107111
* @throws SmartyException
112+
* @throws TransportExceptionInterface
108113
*/
109114
private function sendSmsIfNeeded(Order $order): void
110115
{
@@ -118,20 +123,24 @@ private function sendSmsIfNeeded(Order $order): void
118123

119124
$langCode = $this->getOrderLangCode($order);
120125
$internationalNumber = $this->internationalizePhoneNumber($numberToUse, $langCode);
126+
121127
$message = MessageQuery::create()
122128
->filterByName(LocalPickup::SMS_CUSTOM_LOCAL_PICKUP)
123129
->findOne();
130+
124131
if (!$message) {
125132
throw new TheliaProcessException('Message ' . LocalPickup::SMS_CUSTOM_LOCAL_PICKUP . ' not found.');
126133
}
127-
$this->parser->setTemplateDefinition(
128-
$this->templateHelper->getActiveMailTemplate(),
129-
true
130-
);
134+
135+
$message->setLocale($order->getLang()->getLocale());
136+
137+
$this->parser->assign('order_id', $order->getId());
138+
131139
$sms = new SmsMessage(
132140
$internationalNumber,
133-
$this->parser->render($message->getHtmlTemplateFileName(), ['order_id' => $order->getId()])
141+
$message->getTextMessageBody($this->parser)
134142
);
143+
135144
$this->texter->send($sms);
136145
}
137146

@@ -175,7 +184,7 @@ private function getOrderLangCode(Order $order): string
175184
return $country ? $country->getIsoalpha2() : 'FR';
176185
}
177186

178-
public static function getSubscribedEvents()
187+
public static function getSubscribedEvents(): array
179188
{
180189
return [
181190
TheliaEvents::ORDER_UPDATE_STATUS => ['orderStatusChange', 99]

0 commit comments

Comments
 (0)