撤回通知(ユーザー宛)プレビュー画面でのFatal errorの報告 (PHP 8環境)

  • Posts: 37
  • Thank you received: 5
  • Hikashop Business
5 hours 20 minutes ago #371804

-- 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 でも全く同じ問題が起きることを確認しました。このファイルも同様に修正をよろしくお願いします。

Last edit: 5 hours 9 minutes ago by Alouette00.

Please Log in or Create an account to join the conversation.

Time to create page: 0.044 seconds
Powered by Kunena Forum