yetlist プラグインで non_list が反映されない†
- ページ: BugTrack2
- 投稿者: しましま
- 優先順位: 普通
- 状態: 却下
- カテゴリー: プラグイン
- 投稿日: 2006-04-29 (土) 13:21:15
- バージョン: 1.4.6
メッセージ†
yetlist プラグインで non_list が反映されていません.
:RenameLog や RecentDeleted などの管理ファイルを除外しないと,削除や,名前を変更したあとのファイル名も表示されて不便なので,non_list を反映させました.
改造点†
参照元のファイル名が non_list にマッチしたら無視する.
パッチ†
$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;
}
}
コメント†
- non_list関係は再編の途中と伺っていますが,こちらのパッチを採用いただくことをご考慮いただけませんでしょうか? -- しましま
- 上記の流れとは異なりますが、当方ではyetlist.inc.phpを(PKWK_SAFE_MODE)に対応させて使用しています。人に見せるページではないと考えまして*1。 -- hirokasa
- hirokasaさん,お返事ありがとうございます.yetlist を使って,未完成のページをだれかに作成してもらう手がかりにしてもらおうと考えています. -- しましま
- パッチありがとうございます。他にも色々あった直し所も含めて整理しました。yetlistの素直な役目はdangling linkのリストを提供するものなので、情報の公開範囲としては通常のデータと同じと思われます。もちろん好み(やデザイン上の理由)でこれを削除したり、禁止することができます -- henoheno
- cvs:plugin/yetlist.inc.php (r1.24-r1.26)
- henohenoさんありがとうございます.1.24へのパッチを拝見しましたが,こちらはリンク先が $non_list にマッチしたら表示しないようになっていませんでしょうか?私の方はリンク元の方がマッチしたら表示しないパッチです.RecentDeletedなどdanglingになるのが必然のページからのリンクを抑制できなくて困るのですが…… -- しましま
- 1.27に対するパッチを作ってみました. -- しましま
--- 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
- cvs:plugin/yetlist.inc.php (r1.28)
- refer ページの数は予想ができず、またforeach() の中で毎回 if、preg_match('//S')、文字列合成 を実行するのはコスト的に好ましくないため、foreach()の外側でまとめて処理する形にしました。 -- henoheno
$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 に含まれたページからのリンクもうまく抑制されました. -- しましま
- お疲れ様です。コメントありがとうございます。現在の r1.28 では、(特定のページを除いた)あらゆるページに含まれる dangling link が表示される様になっているはずです。「$non_list に合致するページに対する danglink link」 も含みます。この部分がしましまさんの希望とは異なっていますが、この点についてコメントさせていただきます。 -- henoheno
- 単純な話ですが、(特定のページを除いた) ページには、あらゆる dangling link を含めることができ、yetlistはそれを表示します。*2 -- henoheno
- もし 「$non_list に合致する dangling link」 がyetlistにリストアップされることを管理者が望まないなら、管理者は「それぞれのページに実際に記述された、それらのdanglink link」を、yetlistを通して発見し、取り除くべきだと思います。それらをyetlistに表示させない様に修正すべきではありません。そうした場合、それぞれのページにそれら(管理者が不適切と考える)dangling linkが存在し続けるでしょう。 -- henoheno
- というのが、「r1.25で私が加えた $non_list の処理はどう考えてもおかしい」という理由です。 -- henoheno
- 関連? BugTrack2/140 -- teanan
[保留] preを生成するプラグインとWikiName?†
- たぶん、BugTrack2/84にも関連する話題だと思います。
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 クラスに渡しています。
マルチラインを使っていない時は、ブロック型プラグインの引数に含まれているページ名を拾うためにこれでいいのかもしれません。
しかし、マルチラインを使っている場合は、複数行の引数の中身まで拾ってしまうので、実際の表示とは違う内容で記録してしまう可能性が増えてしまいます。
*3 --
- 書き終わってから思ったのですが、memo プラグインの引数(textarea に表示される文章)の中にWikiName 等に見えるものがあった場合はどうなるんだろう? --
- 試してみたところ、yetlist の一覧に含まれていました。 --
- 結論としては、複数行引数かどうかは関係なく、ブロック型プラグインの内容をそのまま使おうとしているのが問題なのだと思われます。複数行引数が使われているときにどう処理するかに関しては、BugTrack2/84 も関係する問題ではありますが。 --