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

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

** 修正 [#u6e2a871]



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

** メッセージ [#r6b67a74]
[[official:WebTrack/63>http://pukiwiki.sourceforge.jp/?WebTrack%2F63]]
:上の内容の概要|
>>ページ下にある複製アイコンからtemplate プラグインを呼び出し、作成ボタンを押すと、~
編集画面のページ上部に表示される現在のページ名が、「&color(Navy){''コピー元のページ名''}; の編集」と表示されてしまう。(実際は問題ないのだが、戸惑う)

 ?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]] &new{2007-04-04 (水) 22:46:52};
- templateプラグインが表示するフォームの refer の値がそのまま表示されているような予感 -- [[henoheno]] &new{2007-04-04 (水) 23:01:53};
- 手元の(cvs版の)コードに上のif文を追加した状態では、動作に変化が見られておりません。もう少し観察した結果、templateプラグインが自分で対処すべきものだと判断できるならば、templateプラグインの方に修正を加えるかもしれませんし、他のプラグインも影響を受ける一般的な問題なのだとしたら、lib/pukiwiki.phpを直すべき、という流れになるでしょう。 -- [[henoheno]] &new{2007-04-04 (水) 23:06:31};
- 多分、同類であろうプラグインを見つけたので追加報告です。&br;添付(attach)の画面を開くとページ名が表示されずに、「への添付」とだけ表示されます。&br;templateの件とあわせて対応の検討をお願いします。 --  &new{2007-04-14 (土) 02:22:53};
 ?plugin=attach&pcmd=upload&page=FrontPage
 "への添付"
 と表示されるが、期待されるのは
 "FrontPage への添付"
- もう1つ追加です。mapプラグインで引数を指定しなかった場合、ページ名が表示されません。referを指定すると普通に表示されるのですが。 --  &new{2007-04-14 (土) 15:36:36};
 ?cmd=map
 "Relation map, from"
 と表示されるが、期待されるのは
 "Relation map, from FrontPage"
- 情報ありがとうございます。期待されている状態と、そうでない現状が明確でありませんでしたので、ひとまず情報を追加しました。mapについては1.4.7でも発生しているため、別件のようです。 -- [[henoheno]] &new{2007-04-15 (日) 10:28:59};


- 時期からざっくりと特定しました。きっかけになった修正は [[cvs:lib/pukiwiki.php]] r1.12 の以下です。(1.13ではありません) -- [[henoheno]] &new{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]] &new{2007-04-15 (日) 21:08:06};
-- 他にも同様のケースがあるかもしれないので、ここの部分は以前の通りに戻すとともに、$varsが編集される事を明確に考慮すべく、コメントを追加しました。 -- [[henoheno]] &new{2007-04-15 (日) 21:33:01};
-- [[cvs:lib/pukiwiki.php]] (r1.19)
- mapプラグインも同様です。 ?cmd=map では表示されませんが、 ?plugin=map では表示されます。 -- [[henoheno]] &new{2007-04-15 (日) 21:45:00};
- 対応ありがとうございます。「?cmd」と「?plugin」の違いですか・・・。そういえば自分がテストしたのは、スキンに埋め込まれているものと、ヘルプの記述のコピーだけでした(つまり、全パターンではない)。&br;pukiwiki.php (r1.19) で試しましたが上にあるとおり、templateやmapプラグインを「?cmd」で呼び出すと、うまくいかないようです。「?plugin」ではきちんと表示されるようになってましたけど。&br;最後に、まだ状態を「完了」にしないほうがいいですか?「?cmd」の修正が別件になるのなら、「完了」にしておきますけど。 --  &new{2007-04-17 (火) 23:03:20};
-逆のパターンを見つけました。
 ?plugin=unfreeze&page=SandBox
 "の凍結解除"
 と表示されるが、期待されるのは
 "SandBox の凍結解除"
普通なら、スキンに埋め込んである「?cmd」の方を使うので、問題はない気もしますが。 --  &new{2007-04-19 (木) 03:03:06};
-- というか、「?cmd」だと「&page」の内容を、「?plugin」だと「&refer」の内容をタイトルに出力するのが基本なので、プラグインの対応状況によっては、うまくいかないのでしょうね。&br;templateプラグインの場合((あくまで、今あるものでテストできるように、例題をあげただけです。本来はreferしか使ってはいけないはずです。))、「&page」と「&refer」に違うページを指定(仮に、&page=A&refer=B とする)すると、「?cmd」だとタイトルに「A」が、「?plugin」だとタイトルに「B」が出力されます。&br;今は、「&page」と「&refer」を同時に指定する必要のあるプラグインがない((一応、newpageプラグインがありますが、$1を使ってページ名をタイトルに出力してい事と、pageを入力すると編集画面に飛ぶので、除外))ので、現段階では特に問題にはなっていません。本当は、「?cmd」、「?plugin」どちらで呼び出しても、同じルールでタイトルを表示したほうがいいのでしょうけど。&br;逃げの一手 (とりあえず、表示させるだけ) でいいのなら、
 	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(と、その逆)でもいいかもしれませんけど。 --  &new{2007-04-26 (木) 19:44:38};

#comment
//#comment

トップ   編集 差分 バックアップ 添付 複製 名前変更 リロード   新規 一覧 検索 最終更新   ヘルプ   最終更新のRSS
Site admin: PukiWiki Development Team

PukiWiki 1.5.3+ © 2001-2020 PukiWiki Development Team. Powered by PHP 5.6.40-0+deb8u12. HTML convert time: 0.093 sec.

OSDN