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

  • Posts: 38
  • Thank you received: 6
  • Hikashop Business
4 days 20 hours 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: 4 days 20 hours ago by Alouette00.

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

  • Posts: 85584
  • Thank you received: 14008
  • MODERATOR
4 days 13 hours ago #371805

Alouette00様

詳細なご報告と修正案をご提供いただき、ありがとうございます。

ご指摘の通り、withdrawal_user_notification.preload.php および withdrawal_admin_notification.preload.php の両方で、PHP 8環境においてプレビュー画面で $data がオブジェクトでない場合にFatal errorが発生する問題を確認いたしました。

修正をHikaShop 6.4.1の最新ビルドに反映いたしましたので、お手数ですが下記の手順をお試しください:

1. My account>My subscriptionsから、HikaShop 6.4.1の最新ビルドを再度ダウンロードしてください
2. ダウンロードしたZIPファイルを、Joomlaの拡張機能マネージャー経由でインストールしてください(同じバージョン番号でも上書きインストール可能です)
3. 「Withdrawal notification (to user)」および「Withdrawal notification (to admin)」のメールテンプレートのプレビュー・編集画面が、Fatal errorなしで表示されることをご確認ください

なお、修正の方針はご提案いただいたものと同じ考え方で、$data、$data->order、$data->withdrawal、$data->cart
の各プロパティに対して安全なデフォルト値を設定するようにしております。HikaShop内の他のpreloadファイル(order_creation_notification.preload.php など)と同様のスタイルで実装いたしました。

ご報告いただき、誠にありがとうございました。問題が解決しない場合は、このスレッドにてお知らせください。

よろしくお願いいたします。

The following user(s) said Thank You: Alouette00

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

  • Posts: 38
  • Thank you received: 6
  • Hikashop Business
4 days 12 hours ago #371808

nicolasさん、
ありがとうございます。最新ビルドを再度ダウンロードで更新、確認しました。

The following user(s) said Thank You: nicolas

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

Time to create page: 0.049 seconds
Powered by Kunena Forum