With help of AI I managed to find the problem.
The completeTextFormFields() method, which handles billing/shipping address variable replacement, is not called in two places:
administrator/components/com_phocacart/libraries/phocacart/text/text.php → prepareReplaceText() method — affects Info view
administrator/components/com_phocacart/libraries/src/Mail/MailHelper.php → renderOrderBody() method — affects email
In the PDF pipeline, address variables are replaced correctly because
completeTextFormFields() is called before QR code generation.
Fixes I have applied:
Fix for text.php — after completeText() call in the QR code section:
Code: Select all
if (isset($bas['b']) && isset($bas['s'])) {
$pdf_invoice_qr_code_translated = PhocacartText::completeTextFormFields(
$pdf_invoice_qr_code_translated, $bas['b'], $bas['s']
);
}
Fix for MailHelper.php — in renderOrderBody():
Code: Select all
$basB = is_array($displayData['bas']['b']) ? $displayData['bas']['b'] : (array)$displayData['bas']['b'];
$basS = is_array($displayData['bas']['s']) ? $displayData['bas']['s'] : (array)$displayData['bas']['s'];
$qrCodeString = \PhocacartText::completeTextFormFields($qrCodeString, $basB, $basS);