Bug(バグ) #2366
Minoru Takai さんが約13年前に更新
h3. Overview (現象) 新規にOpenPNE3.4をインストールし、/messageに遷移すると以下のようなFatal errorが発生する。 /message/sendListなどでも同様のエラーが発生する。 Fatal error: Call to undefined function op_link_to_member() in /home/user/sns/34x.example.jp/plugins/opMessagePlugin/apps/pc_frontend/modules/message/templates/listSuccess.php on line 135 ※原因がplugin側にあるという確証を得る調査はまだ行われていないため、このチケットの作成プロジェクトに誤りがあった場合、作成すべきプロジェクトに変更して下さい。 h3. 再現バージョン * OpenPNE3.4.16 h3. 再現ブランチ * remotes/origin/stable-3.4.x h3. 再現手順 1. 新規にOpenPNE3.4を設置する(この際使用するbranchはremotes/origin/stable-3.4.x) 2. OpenPNE君で(/message)に遷移する h3. Causes (原因) op_link_to_member() は #840 によって追加されたヘルパー関数だが、 #840 の対応内容の事情により 3.4 向けのバックポートは行なわれていなかった。 バグが発生した原因を記入 つまり 3.4 系ではこの関数は使えないことになる。しかし、コア側とバージョンが対応しないプラグインにおいて op_link_to_member() を使っている箇所があり、今回の問題が生じている。 発覚しているのは opMessagePlugin であり、このプラグインで op_link_to_member() を使ったのは 0.9.2 からであるらしい。 opMessagePlugin-0.9.2 がバンドルされているのは OpenPNE-3.4.15, OpenPNE-3.6beta12 からである。 h3. Way to fix (修正内容) 考えられる修正方針を示しておきます。思いついたものを示しているだけで、これに限るわけではありません。 * opMessagePlugin-0.9.2 では op_link_to_member() が定義されていることを前提とすることを許し、 ** (1) OpenPNE-3.4.15 以降では opMessagePlugin-0.9.1 以前をバンドルするようにする ** (2) OpenPNE-3.4.15 以降で、 op_link_to_member() を定義する(関数を定義するだけで、 #840 で定義された関数と同等の処理を実装する必要はない) * OpenPNE-3.4 系では op_link_to_member() が定義されていないことを前提とし、 ** (3) OpenPNE-3.4.15 以降では opMessagePlugin-0.9.1 以前をバンドルするようにする ** (4) opMessagePlugin-0.9.2 で op_link_to_member() が定義されているかどうかを確認した上でコールするようにする *** コールしている箇所が少なければ (4) を採用してもよいかもしれませんが、コア側で定義されているかどうかを多くの箇所で気にする必要があるのであれば (5) の方が適切でしょう。 ** (5) opMessagePlugin-0.9.2 で op_link_to_member() が定義されていなければその関数を定義する(関数の実装は #840 と同等の処理である必要はありません:未定義の関数が呼ばれることを避けるだけで十分です) <pre> // PHP では以下のようなことが可能です function op_link_to_member() { return 'defined in core'; } if (!function_exists('op_link_to_member')) { function op_link_to_member() { return 'defined in opMessagePlugin'; } } var_dump(op_link_to_member()); </pre> ※ 「OpenPNE-3.4.15 以降で」や「opMessagePlugin-0.9.2 で」と書いていますが、これらのバージョンは既にリリースされているため、これに後続するバージョンで対応する必要があります。 修正内容を記入