-
Notifications
You must be signed in to change notification settings - Fork 99
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
PHP8 対応漏れ?「受注管理>受注登録」画面でシステムエラー #829、Warning 回避 #836
base: master
Are you sure you want to change the base?
Conversation
Codecov ReportAttention: Patch coverage is
Additional details and impacted files@@ Coverage Diff @@
## master #836 +/- ##
==========================================
- Coverage 55.63% 55.61% -0.02%
==========================================
Files 75 75
Lines 8917 8920 +3
==========================================
Hits 4961 4961
- Misses 3956 3959 +3
Flags with carried forward coverage won't be shown. Click here to find out more. ☔ View full report in Codecov by Sentry. |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
LGTM
PHP8 Warning 回避 (b366a0f) [/manager/order/edit.php] Fatal error(E_ERROR): Uncaught TypeError: Unsupported operand types: int + string in data/class/pages/admin/order/LC_Page_Admin_Order_Edit.php:1212 |
すみません、今試してみましたところ、 具体的には、 その場合のエラーログは、 |
こちらは別途 issues で対応したほうが良いですかね? |
すみません、「数量欄のみ改善されていない」の間違いでした。 別途 issues でOKです。 |
@bbkids 不具合報告ありがとうございます。 |
setProductsQuantity() 内のエラーを回避するため、lfCheckError() の事前呼び出しを徹底した。
まずは、#836 (comment) への対応です。 lfCheckError() の前に setProductsQuantity() が呼ばれていたり、 setProductsQuantity() の前に lfCheckError() を呼び、エラーがあったら switch を break するよう調整しています。 変更箇所が多いですが、十分にデバッグできていないため、一旦別ブランチに push すると思います。 【追記】 |
- 新規登録時に point (受注前ポイント) が空文字のため、生じるエラーを回避した。SC_FormParam を初期化。 - 上記の他にも SC_FormParam の初期化が不適当と思われる箇所を調整した。
この修正以降、 public function changeShipmentProducts(); の中の以下の箇所で、エラー落ちします。
Fatal error(E_ERROR): Cannot assign an empty string to a string offset が出ます。 |
$arrShipmentProducts[]を辿ってみましたところ、
changeShipmentProducts()の中で値をセットする直前に、配列として初期化したところエラー落ち解消されました。 【追記】 |
f0ecec3 では不十分で、```$objFormParam->getValue('point')``` が ```""``` となり、```TypeError: Unsupported operand types: string - string``` を生じるケースがあった。
- 演算子の空文字の扱いが厄介なので null とする。 - SC_FormParam::getValue() が多次元配列の1次要素の一部を空文字で返してエラーとなるのを回避した。 - SC_FormParam::getValue() で定義されていないキーを指定した場合に例外を補足する。暗黙的に空文字を返して、後続の処理でエラーとなるのを防ぐ意図。
- 演算子の空文字の扱いが厄介なので null とする。 - SC_FormParam の order_id が配列となり、Smarty h 修飾子がエラーとなるのを回避した。 - shipment_classcategory_name1, shipment_classcategory_name2 の処理が抜けていた箇所を補った。
@bbkids ご報告ありがとうございます。 当プルリクをドラフトに変更して、もう少しじっくりと調整しようかと思います。併せて、seasoft-829-2 ブランチに push していた内容を、プルリク対象ブランチに push し直す予定です。 この画面は、PHPエラー以外の既存バグも多々あると思うので、どこで切りをつけるか難しくなりそうです。 |
本件、再開しようと思いますが、経緯が分からなくなってしまいました。 特に https://github.com/seasoftjapan/eccube-2_13/tree/seasoft-829-2 (8fac1d1) の役割を思い出せず、一旦黙殺する予定です。 まずは、https://github.com/seasoftjapan/eccube-2_13/tree/seasoft-829 (a23d6b7) に、#836 (comment) で報告いただきました配列要素の初期化漏れを改修しようと思います。 |
https://github.com/seasoftjapan/eccube-2_13/tree/seasoft-829-2 の内容は、本件 PR のブランチにチェリーピックしてありました。(fe9bdf7) |
data/class/pages/admin/order/LC_Page_Admin_Order_Edit.php の 625行目
この修正を入れると、商品削除できなくなりませんか? |
No description provided.