* yetlist プラグインで non_list が反映されない [#pe34d5b6]

- ページ: [[BugTrack2]]
- 投稿者: [[しましま]]
- 優先順位: 普通
- 状態: 着手
- 状態: 却下
- カテゴリー: プラグイン
- 投稿日: 2006-04-29 (土) 13:21:15
- バージョン: 1.4.6

#contents

** メッセージ [#fecc6034]
yetlist プラグインで non_list が反映されていません.
:RenameLog や RecentDeleted などの管理ファイルを除外しないと,削除や,名前を変更したあとのファイル名も表示されて不便なので,non_list を反映させました.

** 改造点 [#oa4324ab]
*** 改造点 [#oa4324ab]

参照元のファイル名が non_list にマッチしたら無視する.

** パッチ [#d97f0842]
*** パッチ [#d97f0842]

 $Id: yetlist.inc.php,v 1.23 2005/06/18 10:44:00 teanan Exp $
に対するパッチ

 --- yetlist.inc.php.orig	2006-04-29 03:31:19.000000000 +0900
 +++ yetlist.inc.php	2006-04-29 12:56:56.000000000 +0900
 @@ -6,19 +6,21 @@
 
 function plugin_yetlist_action()
 {
 -	global $script;
 +	global $script, $non_list;
 	global $_title_yetlist, $_err_notexist;
 
 	$retval = array(
 		'msg' => $_title_yetlist,
 		'body' => ''
 	);
 +	$non_list_pattern = '/' . $non_list . '/';
 
 	$refer = array();
 	$pages = array_diff(get_existpages(CACHE_DIR, '.ref'), get_existpages());
 	foreach ($pages as $page) {
 		foreach (file(CACHE_DIR . encode($page) . '.ref') as $line) {
 			list($_page) = explode("\t", rtrim($line));
 +			if (preg_match($non_list_pattern, $_page)) continue;
 			$refer[$page][] = $_page;
 		}
 	}

--------
***コメント [#c7e11be9]
- non_list関係は再編の途中と伺っていますが,こちらのパッチを採用いただくことをご考慮いただけませんでしょうか? -- [[しましま]] &new{2006-05-03 (水) 09:04:55};
- 上記の流れとは異なりますが、当方ではyetlist.inc.phpを(PKWK_SAFE_MODE)に対応させて使用しています。人に見せるページではないと考えまして((人それぞれでしょうが))。 -- [[hirokasa]] &new{2006-05-03 (水) 09:27:25};
- hirokasaさん,お返事ありがとうございます.yetlist を使って,未完成のページをだれかに作成してもらう手がかりにしてもらおうと考えています. -- [[しましま]] &new{2006-05-03 (水) 19:41:57};
- パッチありがとうございます。他にも色々あった直し所も含めて整理しました。yetlistの素直な役目はdangling linkのリストを提供するものなので、情報の公開範囲としては通常のデータと同じと思われます。もちろん好み(やデザイン上の理由)でこれを削除したり、禁止することができます -- [[henoheno]] &new{2006-05-05 (金) 12:17:49};
-- [[cvs:plugin/yetlist.inc.php]] (r1.24-r1.26)
--- henohenoさんありがとうございます.1.24へのパッチを拝見しましたが,こちらはリンク先が $non_list にマッチしたら表示しないようになっていませんでしょうか?私の方はリンク元の方がマッチしたら表示しないパッチです.RecentDeletedなどdanglingになるのが必然のページからのリンクを抑制できなくて困るのですが…… -- [[しましま]] &new{2006-05-05 (金) 15:11:58};
--- 1.27に対するパッチを作ってみました. -- [[しましま]] &new{2006-05-05 (金) 15:49:40};
 --- yetlist.inc.php.orig	2006-05-05 15:16:28.000000000 +0900
 +++ yetlist.inc.php	2006-05-05 15:19:25.000000000 +0900
 @@ -29,6 +29,7 @@
 		$refer = array();
 		foreach (file(CACHE_DIR . $file) as $line) {
 			list($_page) = explode("\t", rtrim($line));
 +			if (preg_match('/' . $non_list . '/S', $_page)) continue;
 			$refer[] = $_page;
 		}
 		if (! empty($refer)) {
- 度々ご確認いただきありがとうございます。私の方でも誤解しておりました。また、[[しましま]]さんのニーズは二つあるようで、$non_listだけでなくRecentDeletedも除外対象に含まれるという事を理解しました。RecentDeletedに含まれているdangling linkは明らかにyetlistに含まれるべきではありません。$non_listについては$non_listの意図からすると含まれるべきではありません。しかしRecentDeletedを$non_listに加えるかどうかはサイト管理者のデザイン次第ですので、それぞれを明確に除外する形で盛り込みました。r1.25で私が加えた $non_list の処理はどう考えてもおかしいので、取り除きました。 -- [[henoheno]] &new{2006-05-07 (日) 13:05:09};
-- [[cvs:plugin/yetlist.inc.php]] (r1.28)
-- refer ページの数は予想ができず、またforeach() の中で毎回 if、preg_match('//S')、文字列合成 を実行するのはコスト的に好ましくないため、foreach()の外側でまとめて処理する形にしました。 -- [[henoheno]] &new{2006-05-07 (日) 13:08:43};
    $refer = array();
    foreach (file(CACHE_DIR . $file) as $line) {
            list($_page) = explode("\t", rtrim($line));
            $refer[] = $_page;
    }
  + // Diff
  + $refer = array_diff($refer, preg_grep($refer_regex, $refer));
--- henohenoさんありがとうございます.私の文章に曖昧な点がありご面倒をおかけしました.私の意図は,non_list に含まれるページへのリンクもページからのリンクも表示されないべき,ということでした.RecentDeleted は,non_list中のページから参照されているページが見えていると不都合な場合の具体例のつもりでした.henohenoさんの言われるように,この点は管理者次第です.私の方では,RecentDeletedを一覧に含めないポリシーにして回避しようとしましたが,yetlistでは反映されていなかったので,こちらのBugTrackを作らせていただきました.~
1.28 を試したところ,意図したとおり non_list に含まれたページからのリンクもうまく抑制されました. -- [[しましま]] &new{2006-05-07 (日) 15:46:29};
- お疲れ様です。コメントありがとうございます。現在の r1.28 では、(特定のページを除いた)あらゆるページに含まれる dangling link が表示される様になっているはずです。「$non_list に合致するページに対する danglink link」 も含みます。この部分が[[しましま]]さんの希望とは異なっていますが、この点についてコメントさせていただきます。 -- [[henoheno]] &new{2006-05-07 (日) 23:02:58};
-- 単純な話ですが、(特定のページを除いた) ページには、あらゆる dangling link を含めることができ、yetlistはそれを表示します。((記述された dangling link は全て(普通は)オープンなものです。オープンでないならば、それは閲覧認証などをyetlistに盛り込むような話題になるでしょう。今回の話とは別の話です)) -- [[henoheno]] &new{2006-05-07 (日) 23:09:11};
-- もし 「$non_list に合致する dangling link」 がyetlistにリストアップされることを管理者が望まないなら、管理者は「それぞれのページに実際に記述された、それらのdanglink link」を、yetlistを通して発見し、取り除くべきだと思います。それらをyetlistに表示させない様に修正すべきではありません。そうした場合、それぞれのページにそれら(管理者が不適切と考える)dangling linkが存在し続けるでしょう。 -- [[henoheno]] &new{2006-05-07 (日) 23:11:18};
-- というのが、「r1.25で私が加えた $non_list の処理はどう考えてもおかしい」という理由です。 -- [[henoheno]] &new{2006-05-07 (日) 23:15:02};
- 関連? [[BugTrack2/140]] -- [[teanan]] &new{2006-05-08 (月) 09:47:56};

#comment
//#comment

** preを生成するプラグインとWikiName? [#i7180c61]
** [保留] preを生成するプラグインとWikiName? [#i7180c61]
- "WikiName" のように大文字で始まる単語を二つ以上連結したものは(自動的に)ページ名として扱われます。そのページが存在していない場合は Dangling link が表示されます。 &br; [[official:自作プラグイン/codehighlight.inc.php]]や[[official:自作プラグイン/pre.inc.php]]のように<pre> </pre>を生成するpluginにて、"WikiName"はそのページが存在していない場合でも Dangling linkを表示いたしません。 &br; しかしyetlistには拾い上げられます。 -- [[hirokasa]] &new{2006-05-05 (金) 13:44:53};
-- こんにちは。yetlistのアイデアは *.ref ファイルを素早く参照して一覧を表示する部分にあるので、仮にそれが本当なら、どうしてそれが *.ref ファイルに記録されるのかという所を確認する話になると思われます。 -- [[henoheno]] &new{2006-05-05 (金) 14:35:36};

- たぶん、[[BugTrack2/84]]にも関連する話題だと思います。&br;
lib/link.php の次の関数が、*.rel や*.ref を生成するときに使われています。
 function & links_get_objects($page, $refresh = FALSE)
 {
 	static $obj;
 
 	if (! isset($obj) || $refresh)
 		$obj = & new InlineConverter(NULL, array('note'));
 
 	$result = $obj->get_objects(join('', preg_grep('/^(?!\/\/|\s)./', get_source($page))), $page);
 	return $result;
 }
links_get_objects 関数はwikiテキストからhtmlに変換した時にリンクに変化しない、コメントと整形済みテキストの行を除外して、InlineConverter クラスに渡しています。
マルチラインを使っていない時は、ブロック型プラグインの引数に含まれているページ名を拾うためにこれでいいのかもしれません。
しかし、マルチラインを使っている場合は、複数行の引数の中身まで拾ってしまうので、実際の表示とは違う内容で記録してしまう可能性が増えてしまいます。
((WikiName だけでなく、BracketName %%やAutoLink%%((yetlist に関して言えば、存在しているページへの自動リンクである、AutoLink は関係ないです。リンクが表示されていないのにrelated に載ってしまう、という可能性はあるかもしれませんが)) 等でも、誤認する可能性があると思われる)) --  &new{2008-02-22 (金) 21:57:58};
-- 書き終わってから思ったのですが、memo プラグインの引数(textarea に表示される文章)の中にWikiName 等に見えるものがあった場合はどうなるんだろう? --  &new{2008-02-22 (金) 22:02:32};
-- 試してみたところ、yetlist の一覧に含まれていました。 --  &new{2008-02-22 (金) 22:07:25};
- 結論としては、複数行引数かどうかは関係なく、ブロック型プラグインの内容をそのまま使おうとしているのが問題なのだと思われます。複数行引数が使われているときにどう処理するかに関しては、[[BugTrack2/84]] も関係する問題ではありますが。 --  &new{2008-02-22 (金) 22:43:47};

#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.064 sec.

OSDN