Skip to content
Merged
Show file tree
Hide file tree
Changes from 2 commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
4 changes: 4 additions & 0 deletions CHANGELOG.md
Original file line number Diff line number Diff line change
Expand Up @@ -4,7 +4,11 @@

- Fixed a bug where purchasable cache was not cleared when stock was updated.
- Fixed a PHP error that could occur when sending emails. ([#4017](https://github.com/craftcms/commerce/issues/4017))
<<<<<<< bugfix/send-email-with-current-site-set-to-order-site
- Fixed a bug where order emails weren’t always getting rendered for the correct site.
=======
- Fixed a SQL error that could occur when upgrading to Commerce 5. ([#4044](https://github.com/craftcms/commerce/issues/4044))
>>>>>>> 5.x
## 5.3.13 - 2025-05-21

Expand Down
30 changes: 20 additions & 10 deletions src/services/Emails.php
Original file line number Diff line number Diff line change
Expand Up @@ -547,7 +547,7 @@ public function sendEmail(Email $email, Order $order, ?OrderHistory $orderHistor
}
} catch (\Exception $e) {
Craft::$app->getErrorHandler()->logException($e);

$error = Craft::t('commerce', 'Email template parse error for email “{email}” in “BCC:”. Order: “{order}”. Template error: “{message}” {file}:{line}', [
'email' => $email->name,
'order' => $order->getShortNumber(),
Expand Down Expand Up @@ -577,7 +577,7 @@ public function sendEmail(Email $email, Order $order, ?OrderHistory $orderHistor
}
} catch (\Exception $e) {
Craft::$app->getErrorHandler()->logException($e);

$error = Craft::t('commerce', 'Email template parse error for email “{email}” in “CC:”. Order: “{order}”. Template error: “{message}” {file}:{line}', [
'email' => $email->name,
'order' => $order->getShortNumber(),
Expand All @@ -601,7 +601,7 @@ public function sendEmail(Email $email, Order $order, ?OrderHistory $orderHistor
$newEmail->setReplyTo($view->renderString($email->replyTo, $renderVariables));
} catch (\Exception $e) {
Craft::$app->getErrorHandler()->logException($e);

$error = Craft::t('commerce', 'Email template parse error for email “{email}” in “ReplyTo:”. Order: “{order}”. Template error: “{message}” {file}:{line}', [
'email' => $email->name,
'order' => $order->getShortNumber(),
Expand All @@ -624,7 +624,7 @@ public function sendEmail(Email $email, Order $order, ?OrderHistory $orderHistor
$newEmail->setSubject($view->renderString($email->subject, $renderVariables));
} catch (\Exception $e) {
Craft::$app->getErrorHandler()->logException($e);

$error = Craft::t('commerce', 'Email template parse error for email “{email}” in “Subject:”. Order: “{order}”. Template error: “{message}” {file}:{line}', [
'email' => $email->name,
'order' => $order->getShortNumber(),
Expand All @@ -646,7 +646,7 @@ public function sendEmail(Email $email, Order $order, ?OrderHistory $orderHistor
$templatePath = $view->renderString($email->templatePath, $renderVariables);
} catch (\Exception $e) {
Craft::$app->getErrorHandler()->logException($e);

$error = Craft::t('commerce', 'Email template path parse error for email “{email}” in “Template Path”. Order: “{order}”. Template error: “{message}” {file}:{line}', [
'email' => $email->name,
'order' => $order->getShortNumber(),
Expand Down Expand Up @@ -687,7 +687,7 @@ public function sendEmail(Email $email, Order $order, ?OrderHistory $orderHistor
$plainTextTemplatePath = $view->renderString($email->plainTextTemplatePath, $renderVariables);
} catch (\Exception $e) {
Craft::$app->getErrorHandler()->logException($e);

$error = Craft::t('commerce', 'Email plain text template path parse error for email “{email}” in “Template Path”. Order: “{order}”. Template error: “{message}” {file}:{line}', [
'email' => $email->name,
'order' => $order->getShortNumber(),
Expand Down Expand Up @@ -765,7 +765,7 @@ public function sendEmail(Email $email, Order $order, ?OrderHistory $orderHistor
$newEmail->attach($tempPath, $options);
} catch (\Exception $e) {
Craft::$app->getErrorHandler()->logException($e);

$error = Craft::t('commerce', 'Email PDF generation error for email “{email}”. Order: “{order}”. PDF Template error: “{message}” {file}:{line}', [
'email' => $email->name,
'order' => $order->getShortNumber(),
Expand All @@ -783,13 +783,17 @@ public function sendEmail(Email $email, Order $order, ?OrderHistory $orderHistor
}
}

// Switch to the site the order was placed on
$originalSiteId = Craft::$app->getSites()->getCurrentSite()->id;
Craft::$app->getSites()->setCurrentSite($order->orderSiteId);

// Render HTML body
try {
$body = $view->renderTemplate($templatePath, $renderVariables);
$newEmail->setHtmlBody($body);
} catch (\Exception $e) {
Craft::$app->getErrorHandler()->logException($e);

$error = Craft::t('commerce', 'Email template parse error for email “{email}”. Order: “{order}”. Template error: “{message}” {file}:{line}', [
'email' => $email->name,
'order' => $order->getShortNumber(),
Expand All @@ -799,6 +803,7 @@ public function sendEmail(Email $email, Order $order, ?OrderHistory $orderHistor
]);
Craft::error($error, __METHOD__);

Craft::$app->getSites()->setCurrentSite($originalSiteId);
Locale::switchAppLanguage($originalLanguage, $originalFormattingLanguage->id);
$view->setTemplateMode($oldTemplateMode);
$generalConfig->generateTransformsBeforePageLoad = $generateTransformsBeforePageLoad;
Expand All @@ -813,7 +818,7 @@ public function sendEmail(Email $email, Order $order, ?OrderHistory $orderHistor
$newEmail->setTextBody($plainTextBody);
} catch (\Exception $e) {
Craft::$app->getErrorHandler()->logException($e);

$error = Craft::t('commerce', 'Email plain text template parse error for email “{email}”. Order: “{order}”. Template error: “{message}” {file}:{line}', [
'email' => $email->name,
'order' => $order->getShortNumber(),
Expand All @@ -823,6 +828,7 @@ public function sendEmail(Email $email, Order $order, ?OrderHistory $orderHistor
]);
Craft::error($error, __METHOD__);

Craft::$app->getSites()->setCurrentSite($originalSiteId);
Locale::switchAppLanguage($originalLanguage, $originalFormattingLanguage->id);
$view->setTemplateMode($oldTemplateMode);
$generalConfig->generateTransformsBeforePageLoad = $generateTransformsBeforePageLoad;
Expand Down Expand Up @@ -850,6 +856,7 @@ public function sendEmail(Email $email, Order $order, ?OrderHistory $orderHistor

Craft::info($notice, __METHOD__);

Craft::$app->getSites()->setCurrentSite($originalSiteId);
Locale::switchAppLanguage($originalLanguage, $originalFormattingLanguage->id);
$view->setTemplateMode($oldTemplateMode);
$generalConfig->generateTransformsBeforePageLoad = $generateTransformsBeforePageLoad;
Expand All @@ -869,6 +876,7 @@ public function sendEmail(Email $email, Order $order, ?OrderHistory $orderHistor

Craft::error($error, __METHOD__);

Craft::$app->getSites()->setCurrentSite($originalSiteId);
Locale::switchAppLanguage($originalLanguage, $originalFormattingLanguage->id);
$view->setTemplateMode($oldTemplateMode);
$generalConfig->generateTransformsBeforePageLoad = $generateTransformsBeforePageLoad;
Expand All @@ -877,7 +885,7 @@ public function sendEmail(Email $email, Order $order, ?OrderHistory $orderHistor
}
} catch (\Exception $e) {
Craft::$app->getErrorHandler()->logException($e);

$error = Craft::t('commerce', 'Email “{email}” could not be sent for order “{order}”. Error: {error} {file}:{line}', [
'error' => $e->getMessage(),
'file' => $e->getFile(),
Expand All @@ -888,6 +896,7 @@ public function sendEmail(Email $email, Order $order, ?OrderHistory $orderHistor

Craft::error($error, __METHOD__);

Craft::$app->getSites()->setCurrentSite($originalSiteId);
Locale::switchAppLanguage($originalLanguage, $originalFormattingLanguage->id);
$view->setTemplateMode($oldTemplateMode);
$generalConfig->generateTransformsBeforePageLoad = $generateTransformsBeforePageLoad;
Expand All @@ -906,6 +915,7 @@ public function sendEmail(Email $email, Order $order, ?OrderHistory $orderHistor
]));
}

Craft::$app->getSites()->setCurrentSite($originalSiteId);
Locale::switchAppLanguage($originalLanguage, $originalFormattingLanguage->id);
$view->setTemplateMode($oldTemplateMode);
$generalConfig->generateTransformsBeforePageLoad = $generateTransformsBeforePageLoad;
Expand Down
Loading