ページを更新するプラグインが大文字で記述されると更新が空振りする†
- ページ: BugTrack
- 投稿者: にぶんのに
- 優先順位: 低
- 状態: 保留
- カテゴリー: プラグイン
- 投稿日: 2004-09-24 (金) 01:08:06
- バージョン: 1.4
メッセージ†
from official:質問箱/99
ページを更新用のフォームを提供するブロック型プラグインを大文字で記述した場合、登録した内容がページに反映されず、"ページが更新しました"と表示される。
※ たとえば #article ではなく、#ARTICLE と書くと発生する
該当の現象が発生するプラグインは、artice, memo, comment, insert, paint, pcomment, vote が見つかっている。
原因はプラグイン内のロジックでプラグインが大文字で記述されるケースを想定していないため。
ページを更新するプラグインでは、ページ内に同一プラグインが複数設置された場合に正しい位置を更新できるよう、更新時にページを再読み込みして、プラグインの記述箇所を探し出す。このとき、小文字で記述されている事を前提としているため、大文字で記述されていると、記述箇所の探索に失敗して更新が空振りする事が原因と思われる。
なお、PukiWiki1.3.8では大文字で記述する事を許さないため、1.4への移行時に、大文字での記述を許可するよう仕様が変更されたと思われる。
- 対象はプラグインの一覧から怪しそうな奴をピックアップして挙げただけなので、他にも類似があるかもしれません。原因への言及は類推を多く含みます。 -- にぶんのに
- BugTrack/268 --
- 対象となる標準プラグインと問題の行はarticle(107行目)、comment(73行目)、insert(36行目)、memo(29行目)、paint(246行目)、pcomment(360行目)、vote(21行目)です。 -- Ratbeta
- メッセージの方の現象が発生するプラグインに paint,pcomment が抜けていたので追記しました。
- 修正にはi修飾子を付加するだけでよさそうです。 -- Ratbeta
- また、edit(49,86行目)、template(22行目)、tracker(88行目)で判定漏れが発生するようです。私にはこの判定自体意味があるのか分かりませんけど…。 -- Ratbeta
- freezeに関しては凍結判定用のis_freezeが小文字での記述しか許しておらず、freezeのconvertでも処理は行っていないため、この3つに関しては結果オーライになっている模様です。
放置してもOKと思いますが、記述/対応方法を揃えるという方向性もあると思います -- にぶんのに
- 蛇足ながらedit、template、trackerの処理について説明すると、凍結されたページ=#freezeが記述されたページなので、editのロジックはfreezeのアクションプラグイン経由で記述されるべき#freezeが、編集時に記述されないため。template、trackerのロジックはいたずら防止の為凍結されたページをテンプレートにする際、凍結されっぱなしだと使えないので、それを解除するロジックですね。 -- にぶんのに
- お疲れ様です :) 少なくともGETおよびPOSTで入力されるプラグインの名前については、小文字でないと受け付けない仕様になっています。init.phpでそのようにフィルタを追加しましたし、元を正せば実際のプラグインファイルが小文字で統一されており、さらに遡ると「タイピングのしやすさ」などからそのようにしたいというような欲求がきっとあるのでしょう。 -- henoheno
- ということで、小文字決め打ち(というより、プラグイン名はユニークなidとして使われているので、決められたとおりに固定)としないと困ってしまうのですが、その前になぜ大文字で書きたかったかをお聞きしてみたいところです -- henoheno
plugin.php
$name = strtolower($name); // 大文字と小文字を区別しないファイルシステム対策
- 原因のひとつはplugin.phpの上記のあたりではないかと思います -- henoheno
- もう一つは、レンダリングエンジンのどこかで #MEMO と #memo を同一視している(プラグインだと認識しているが、小文字かどうかといったチェックをしていない)部分だと思います。うーんこちらは直すのは難しいかな? (^^; -- henoheno
- 大文字を小文字にして保存するように対策した方が簡単ではないでしょうか。全てを大文字/小文字対応するのは、ちと手間がかかるかと・・・ -- teanan
- BugTrack/705 --
- すいません、想像力が無い人なので「大文字を小文字にして保存」の部分のイメージをもう少し教えて下さい (^^; -- henoheno
- いつも舌足らずですみません (^^; 例えば、page_writeで #HogeHoge を #hogehogeに変換して保存しては、ということです。 -- teanan
- フォローありがとうございます (^^; まさに書き込む部分に特化した話ということで了解しました。 -- henoheno