$vars['refer'] を修正するプラグインで $base が空になる

  • 元タイトル: template プラグイン使用時の挙動について
  • ページ: BugTrack2
  • 投稿者: 名無しさん
  • 優先順位: 普通
  • 状態: 完了
  • カテゴリー: 本体バグ
  • 投稿日: 2007-04-03 (火) 23:54:10
  • バージョン: 1.4.8_alpha

修正

  • cvs:lib/pukiwiki.php (r1.19)
    • cvs:lib/pukiwiki.php r1.12 - 1.18 にかけて、templateやattachといったプラグインで、ページ名が(プラグイン作成時の)意図通り表示されなくなっていた。

メッセージ

official:WebTrack/63

上の内容の概要

ページ下にある複製アイコンからtemplate プラグインを呼び出し、作成ボタンを押すと、
編集画面のページ上部に表示される現在のページ名が、「コピー元のページ名 の編集」と表示されてしまう。(実際は問題ないのだが、戸惑う)

?plugin=template&refer=FrontPage
"FrontPage をテンプレートにして作成"

ここで「作成」ボタンを押すと
"FrontPage の編集"
と表示されてしまうが、期待されるのは例えば
"FrontPage/複製 の編集"

上の件について自力で調べた結果「lib のpukiwiki.php」に原因があるようです。
pukiwiki.php,v 1.13 で変更された「$base」関連の変更が原因のようです。
v 1.17 に以下のように追加して、個人でテストしたところ正しく表示されるようになりました。

// $Id: pukiwiki.php,v 1.17 2007/02/11 05:53:30 henoheno Exp $
(中略)
// Plugin execution
if ($plugin != '') {
  if (! exist_plugin_action($plugin)) {
    $msg = 'plugin=' . htmlspecialchars($plugin) . ' is not implemented.';
    $retvars = array('msg'=>$msg,'body'=>$msg);
    $base    = & $defaultpage;
  } else {
    $retvars = do_plugin_action($plugin);
    if ($retvars === FALSE) exit; // Done
    //分岐を追加
    if (! isset($vars['cmd'])) {
      $base  = isset($vars['refer']) ? $vars['refer'] : '';
    }
  }
}
(以降、略)

以前のもの(pukiwiki.php,v 1.11)を参考に差し込んであるだけなので、もう少しうまい方法があるかもしれません。
詳しい理由まではわかりませんが、v 1.17 ではプラグインからのパラメータをうまく得られていないのかもしれません。
次の安定版までには修正していただけるよう、よろしくお願いします。


  • コメントありがとうございます。現状このページをパッと見た限りでは、(コードのどこが原因で)何故おかしくなるのか、何がおかしいのか、対処が正しいのか(別の副作用が無いのか等)が今ひとつ判断できておりません。もし何か他に情報があれば追記いただければ幸いです。最終的に、それら客観的な事実がこのページにまとめられ、後でこれをチェックした人がすぐに再確認(証明)ができるようになるのがベストです。 -- henoheno 2007-04-04 (水) 22:46:52
  • templateプラグインが表示するフォームの refer の値がそのまま表示されているような予感 -- henoheno 2007-04-04 (水) 23:01:53
  • 手元の(cvs版の)コードに上のif文を追加した状態では、動作に変化が見られておりません。もう少し観察した結果、templateプラグインが自分で対処すべきものだと判断できるならば、templateプラグインの方に修正を加えるかもしれませんし、他のプラグインも影響を受ける一般的な問題なのだとしたら、lib/pukiwiki.phpを直すべき、という流れになるでしょう。 -- henoheno 2007-04-04 (水) 23:06:31
  • 多分、同類であろうプラグインを見つけたので追加報告です。
    添付(attach)の画面を開くとページ名が表示されずに、「への添付」とだけ表示されます。
    templateの件とあわせて対応の検討をお願いします。 -- 2007-04-14 (土) 02:22:53
    ?plugin=attach&pcmd=upload&page=FrontPage
    "への添付"
    と表示されるが、期待されるのは
    "FrontPage への添付"
  • もう1つ追加です。mapプラグインで引数を指定しなかった場合、ページ名が表示されません。referを指定すると普通に表示されるのですが。 -- 2007-04-14 (土) 15:36:36
    ?cmd=map
    "Relation map, from"
    と表示されるが、期待されるのは
    "Relation map, from FrontPage"
  • 情報ありがとうございます。期待されている状態と、そうでない現状が明確でありませんでしたので、ひとまず情報を追加しました。mapについては1.4.7でも発生しているため、別件のようです。 -- henoheno 2007-04-15 (日) 10:28:59
  • 時期からざっくりと特定しました。きっかけになった修正は cvs:lib/pukiwiki.php r1.12 の以下です。(1.13ではありません) -- henoheno 2007-04-15 (日) 12:56:21
    -		if ($is_cmd) {
    -			$base = isset($vars['page'])  ? $vars['page']  : '';
    -		} else {
    -			$base = isset($vars['refer']) ? $vars['refer'] : '';
    -		}
    +		$base = $is_cmd ? $page : $refer;
    • template, attachともに、$vars['refer'] を、今回のトリックのために編集していました。しかし r1.12 以降それを無視する様になってしまったため、今回の症状が発生しました。 -- henoheno 2007-04-15 (日) 21:08:06
    • 他にも同様のケースがあるかもしれないので、ここの部分は以前の通りに戻すとともに、$varsが編集される事を明確に考慮すべく、コメントを追加しました。 -- henoheno 2007-04-15 (日) 21:33:01
    • cvs:lib/pukiwiki.php (r1.19)
  • mapプラグインも同様です。 ?cmd=map では表示されませんが、 ?plugin=map では表示されます。 -- henoheno 2007-04-15 (日) 21:45:00
  • 対応ありがとうございます。「?cmd」と「?plugin」の違いですか・・・。そういえば自分がテストしたのは、スキンに埋め込まれているものと、ヘルプの記述のコピーだけでした(つまり、全パターンではない)。
    pukiwiki.php (r1.19) で試しましたが上にあるとおり、templateやmapプラグインを「?cmd」で呼び出すと、うまくいかないようです。「?plugin」ではきちんと表示されるようになってましたけど。
    最後に、まだ状態を「完了」にしないほうがいいですか?「?cmd」の修正が別件になるのなら、「完了」にしておきますけど。 -- 2007-04-17 (火) 23:03:20
  • 逆のパターンを見つけました。
    ?plugin=unfreeze&page=SandBox
    "の凍結解除"
    と表示されるが、期待されるのは
    "SandBox の凍結解除"
    普通なら、スキンに埋め込んである「?cmd」の方を使うので、問題はない気もしますが。 -- 2007-04-19 (木) 03:03:06
    • というか、「?cmd」だと「&page」の内容を、「?plugin」だと「&refer」の内容をタイトルに出力するのが基本なので、プラグインの対応状況によっては、うまくいかないのでしょうね。
      templateプラグインの場合*1、「&page」と「&refer」に違うページを指定(仮に、&page=A&refer=B とする)すると、「?cmd」だとタイトルに「A」が、「?plugin」だとタイトルに「B」が出力されます。
      今は、「&page」と「&refer」を同時に指定する必要のあるプラグインがない*2ので、現段階では特に問題にはなっていません。本当は、「?cmd」、「?plugin」どちらで呼び出しても、同じルールでタイトルを表示したほうがいいのでしょうけど。
      逃げの一手 (とりあえず、表示させるだけ) でいいのなら、
      	if ($is_cmd) {
      		$base = isset($vars['page'])  ? $vars['page']  : isset($vars['refer']) ? $vars['refer'] : '';
      	} else {
      		$base = isset($vars['refer']) ? $vars['refer'] : isset($vars['page'])  ? $vars['page']  : '';
      	}
      みたいに、pageが無ければrefer(と、その逆)でもいいかもしれませんけど。 -- 2007-04-26 (木) 19:44:38

*1 あくまで、今あるものでテストできるように、例題をあげただけです。本来はreferしか使ってはいけないはずです。
*2 一応、newpageプラグインがありますが、$1を使ってページ名をタイトルに出力してい事と、pageを入力すると編集画面に飛ぶので、除外

トップ   編集 凍結 差分 バックアップ 添付 複製 名前変更 リロード   新規 一覧 検索 最終更新   ヘルプ   最終更新のRSS
Last-modified: 2007-04-26 (木) 19:44:39
Site admin: PukiWiki Development Team

PukiWiki 1.5.2+ © 2001-2019 PukiWiki Development Team. Powered by PHP 5.6.40-0+deb8u8. HTML convert time: 0.237 sec.

OSDN