yetlistが、BracketNameをWikiNameとして表示してしまう

  • ページ: BugTrack
  • 投稿者: ぱんだ
  • 優先順位: 普通
  • 状態: 完了
  • カテゴリー: プラグインバグ
  • 投稿日: 2002-07-25 (木) 12:45:00
  • バージョン:

メッセージ

ブラケットの中身がWikiNameとして通用してしまうときに、ブラケットをはずしたページが未作成として表示されてしまいます。

原因

  • なぜかstrip_bracketしたページを後からBracketでwrapしなおすようになっているため。

修正案

  • ついでに、未作成ページが複数ページから参照されているときに、参照もとのページを全て列挙するように*1してあります。
  • さらに、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&amp;page=$url&amp;refer=$refurl\">$wbn</a> <em>($link_ref)</em></li>\n";
+		$ret["body"] .= "<li><a href=\"$script?cmd=edit&amp;page=$url&amp;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 2002-07-25 (木) 15:03:58
  • このパッチ適用してテストしている時に気がつきました。BracketName内に'があると動かなくないですか?preg_replaceの問題ですね。 -- ゆう 2002-07-26 (金) 00:35:33
  • こんな感じでしょうか :) 外からくる$nameを展開せず、$nameのままevalしてもらうようにしてみました。 -- ぱんだ 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にしたほうがいいかな? -- ゆう 2002-07-26 (金) 10:45:14
  • $1の中身はpreg_replaceが適切にエスケープしてくれてるはず…なんですが。 -- ぱんだ 2002-07-26 (金) 10:54:53
  • 了解です。あとついでにglobal変数をなくすように修正します。 -- ゆう 2002-07-26 (金) 11:34:25
  • 修正完了しました。cvs:plugin/yetlist.inc.php -- ゆう 2002-07-29 (月) 10:46:42
  • WikiNameとBracketNameの仕様は変更できないでしょうか? 同名のページが紛らわしくて・・・。 -- baniko 2002-11-08 (金) 14:32:55
    • たとえば、WikiNameとして通用するBracketNameをWikiNameとして扱う、とかですか?んー。できなくはないですが、修正量が多そう。 -- ぱんだ 2002-11-08 (金) 15:36:11
    • そうですね。ソース見てみますが大変そうでし・・・。Wikiのメリットが生きていないのではと思うので、とりあえず要望します。 -- baniko 2002-11-08 (金) 15:55:41
    • PukiWiki/1.4/NoBracketName -- 2009-08-25 (火) 12:54:58

*1 そうするための仕掛けはしてあったんだけど、動いてなかったみたい

トップ   編集 凍結 差分 バックアップ 添付 複製 名前変更 リロード   新規 一覧 検索 最終更新   ヘルプ   最終更新のRSS
Last-modified: 2009-08-25 (火) 12:50:05
Site admin: PukiWiki Development Team

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

OSDN