-- HikaShop version -- : 6.4.1
-- Joomla version -- : 6.1.0
-- PHP version -- : 8.5.2
お世話になります。
PHP 8以降の環境において、HikaShopの「撤回通知(ユーザー宛) (withdrawal_user_notification)」のメールプレビュー(および編集画面)を開こうとすると、以下のFatal errorが発生する不具合を見つけましたのでご報告いたします。
【エラー内容】
0 Attempt to assign property "cart" on false
【発生箇所】
ファイル:media/com_hikashop/mail/withdrawal_user_notification.preload.php
16行目付近:
$data->cart = $orderClass->loadFullOrder($data->order->order_id, true, false);
【原因】
管理画面でのプレビュー時、$data オブジェクト(および $data->order や $data->withdrawal)が空の状態で上記の処理が走るため、PHP 8の厳密なルールにより「非オブジェクト(false)へのプロパティ割り当て」としてエラーで停止してしまいます。
【回避策(修正案)】
該当ファイルの先頭付近($data->cart の代入より前)に、以下のようにプレビュー用のダミーオブジェクトを生成するコードを追記したところ、正常にプレビューが表示されるようになりました。
if (!is_object($data)) {
$data = new stdClass();
}
if (!isset($data->order)) {
$data->order = new stdClass();
$data->order->order_id = 0;
}
if (!isset($data->withdrawal)) {
$data->withdrawal = new stdClass();
$data->withdrawal->withdrawal_products = array();
$data->withdrawal->withdrawal_reason = '';
}
$data->cart = $orderClass->loadFullOrder($data->order->order_id, true, false);
if (!is_object($data->cart)) {
$data->cart = new stdClass();
}
if (!isset($data->cart->products)) {
$data->cart->products = array();
}
お手数ですが、開発元への報告および次期バージョンでの修正をご検討いただけますと幸いです。
よろしくお願いいたします。
追記:管理者宛の withdrawal_admin_notification.preload.php でも全く同じ問題が起きることを確認しました。このファイルも同様に修正をよろしくお願いします。