*yetlistが、BracketNameをWikiNameとして表示してしまう -ページ: BugTrack -投稿者: [[ぱんだ]] -優先順位: 普通 -状態: 完了 -カテゴリー: プラグインバグ -投稿日: 2002-07-25 (木) 12:45:00 -バージョン: **メッセージ ブラケットの中身がWikiNameとして通用してしまうときに、ブラケットをはずしたページが未作成として表示されてしまいます。 ***例 -http://pukiwiki.org/?plugin=yetlistで、[[BugTrack/107]]から参照した[[FrontPage]]や[[BugTrack]]がFrontPage,BugTrackとして表示されています。 ***原因 -なぜかstrip_bracketしたページを後からBracketでwrapしなおすようになっているため。 ***修正案 -ついでに、未作成ページが複数ページから参照されているときに、参照もとのページを全て列挙するように((そうするための仕掛けはしてあったんだけど、動いてなかったみたい))してあります。 -さらに、BracketNameの変換部にバグ発見。[[ほげ>[[BugTrack/107]]]]のような場合におかしくなるのを修理しました。(57~58行目) -diffが必要以上に大きくなることを避けるために、一部インデントを調整していないところがあります。(54~98行目) --- yetlist.inc.php Thu Jul 25 13:35:34 2002 +++ yetlist.new.php Thu Jul 25 14:32:38 2002 @@ -45,14 +45,18 @@ )/ex","check_link('$1','$name')",$line); } - foreach($_gwbn as $tmp) + foreach($_gwbn as $wbn => $refs_arr) { - $wbn = $tmp["name"]; - $name = $tmp["refer"]; - + + foreach (array_unique($refs_arr) as $name) + { + if(preg_match("/^[^>]+>([^\]]+)/",$wbn,$match)) { $wbn = $match[1]; + //閉じブラケットの補充。/^\[\[/でも必要十分だが念のため + if(preg_match("/^\[\[[^\]]+$/",$wbn)) + $wbn = "$wbn]]"; if(!preg_match("/($WikiName)|($BracketName)/",$wbn)) $wbn = "[[$wbn]]"; } @@ -91,21 +95,21 @@ if(!is_page($wbn)) { - $lists[strip_bracket($wbn)] = strip_bracket($wbn); - $refer[strip_bracket($wbn)][$name] = $name; + $refer[$wbn][] = $name; + } + + $wbn = $keep; //ひー ^^;) } } - ksort($lists); - foreach($lists as $wbn) + ksort($refer); + foreach($refer as $wbn => $refs_arr) { - $url = $wbn; - if(!preg_match("/($WikiName)|($BracketName)/",$url)) - $url = "[[$url]]"; - $url = rawurlencode($url); + $url = rawurlencode($wbn); + $name = strip_bracket($wbn); $link_ref = ""; - foreach($refer[$wbn] as $refs) + foreach(array_unique($refs_arr) as $refs) { $ref = strip_bracket($refs); $refurl = rawurlencode($refs); @@ -114,7 +118,7 @@ } $link_ref = trim($link_ref); - $ret["body"] .= "<li><a href=\"$script?cmd=edit&page=$url&refer=$refurl\">$wbn</a> <em>($link_ref)</em></li>\n"; + $ret["body"] .= "<li><a href=\"$script?cmd=edit&page=$url&refer=$refurl\">$name</a> <em>($link_ref)</em></li>\n"; } @@ -155,8 +159,7 @@ } else if(preg_match("/^($BracketName)|($WikiName)$/",$name)) { - $_gwbn[$name]["name"] = $name; - $_gwbn[$name]["refer"] = $refer; + $_gwbn[$name][] = $refer; return; } else ---- -PukiWikiと[[PukiWiki]]が区別されるという仕様がこういうところにも影響してるんですねぇ。 -- [[reimy]] SIZE(10){2002-07-25 (木) 15:03:58} -このパッチ適用してテストしている時に気がつきました。BracketName内に'があると動かなくないですか?preg_replaceの問題ですね。 -- [[ゆう]] SIZE(10){2002-07-26 (金) 00:35:33} -こんな感じでしょうか :) 外からくる$nameを展開せず、$nameのままevalしてもらうようにしてみました。 -- [[ぱんだ]] SIZE(10){2002-07-26 (金) 10:33:54} --- yetlist.inc.php Thu Jul 25 13:35:34 2002 +++ yetlist.new.php Thu Jul 25 14:32:38 2002 @@ -45,1 +45,1 @@ - )/ex","check_link('$1','$name')",$line); + )/ex","check_link('$1',\$name)",$line); -$1も\$1にしたほうがいいかな? -- [[ゆう]] SIZE(10){2002-07-26 (金) 10:45:14} -$1の中身はpreg_replaceが適切にエスケープしてくれてるはず…なんですが。 -- [[ぱんだ]] SIZE(10){2002-07-26 (金) 10:54:53} -了解です。あとついでにglobal変数をなくすように修正します。 -- [[ゆう]] SIZE(10){2002-07-26 (金) 11:34:25} -修正完了しました。[[cvs:plugin/yetlist.inc.php]] -- [[ゆう]] SIZE(10){2002-07-29 (月) 10:46:42} -WikiNameとBracketNameの仕様は変更できないでしょうか? 同名のページが紛らわしくて・・・。 -- [[baniko]] SIZE(10){2002-11-08 (金) 14:32:55} --たとえば、WikiNameとして通用するBracketNameをWikiNameとして扱う、とかですか?んー。できなくはないですが、修正量が多そう。 -- [[ぱんだ]] SIZE(10){2002-11-08 (金) 15:36:11} --そうですね。ソース見てみますが大変そうでし・・・。Wikiのメリットが生きていないのではと思うので、とりあえず要望します。 -- [[baniko]] SIZE(10){2002-11-08 (金) 15:55:41} #comment