attach.inc.php: 添付>[添付ファイル一覧] ページでタイトルがtopicpathにならない

メッセージ

添付>[添付ファイル一覧] ページでタイトルのリンクがtopicpathにならず、普通のリンクになります。

参考:ここの該当ページ
https://pukiwiki.osdn.jp/dev/?plugin=attach&pcmd=list&refer=BugTrack%2F2593

原因

簡単にまとめると、

  1. plugin_attach_action()で返されたページタイトル($retvar['msg'])が"$1"を含んでいると、pukiwiki.php中で"$1"は Backlink ページへのリンクに変換される (1)
  2. Backlink が **/@@/~~ という表記だった場合、ページ受信時に topicpath に変換される
  3. ページ受信後、DOMに <input class="page-name"> が存在しないと Backlink => topicpath の変換がされない (2)
  4. GETで渡されたパラメータ page=** がそのまま <input class="page-name"> に設定される (3)

の前提条件の上で、

  1. $_attach_messages['msg_listpage'] がページタイトルに"$1"を含んでいる (4)
  2. 添付ファイル一覧ページへのリンクのURLがpage=**を含んでいない (5-1, 5-2)

のが原因っぽい感じです。

該当コード

(1) pukiwiki.php L86らへん

$title = htmlsc(strip_bracket($base));
$page  = make_search($base);
if (isset($retvars['msg']) && $retvars['msg'] != '') {
	$title = str_replace('$1', $title, $retvars['msg']);
	$page  = str_replace('$1', $page,  $retvars['msg']);
}

(2) main.js L571らへん

 function makeTopicpathTitle () {
   // :
   // 略
   // :
   var pageNameE = sitePropE.querySelector('.page-name')
   if (!pageNameE || !pageNameE.value) return

(3) html.php L261

	// Page name
	$h_page_name = htmlsc($page);
	$page_name_data = <<<EOS
<input type="hidden" class="page-name" value="$h_page_name" />
EOS;

(4) ja.lng.php L155

$_attach_messages = array(
	// :
	// 略
	// :
	'msg_upload'   => '$1 への添付',
	// :
);

(5-1) attach.inc.php > attach_form()

	$navi = <<<EOD
  <span class="small">
   [<a href="$script?plugin=attach&amp;pcmd=list&amp;refer=$r_page">{$_attach_messages['msg_list']}</a>]
   [<a href="$script?plugin=attach&amp;pcmd=list">{$_attach_messages['msg_listall']}</a>]
  </span><br />
EOD;

(5-2) attach.inc.php > AttachFile::info()

		$retval['body'] = <<< EOD
<p class="small">
 [<a href="$script?plugin=attach&amp;pcmd=list&amp;refer=$r_page">{$_attach_messages['msg_list']}</a>]
 [<a href="$script?plugin=attach&amp;pcmd=list">{$_attach_messages['msg_listall']}</a>]
</p>

修正案

① プラグインの動作を変えないシンプルな修正案

URLのパラメータにpageを追加することでちゃんとtopicpathになります。 ソースコード中で該当のURLを生成している場所は2ヶ所あります。(5-1, 5-2)

ここでもpage指定を追加することでちゃんとtopicpathになることを確認しました。
https://pukiwiki.osdn.jp/dev/?plugin=attach&pcmd=list&refer=BugTrack%2F2593&page=BugTrack%2F2593

処理に手を加えないので安心です。 長いページ名のときにURLが長くなるのでそこはちょっと微妙。

② プラグインの動作を変更して修正する案

attach.inc.php L82あたり

function plugin_attach_action()
{
	global $vars, $_attach_messages;
	// :
	// 略
	// :
	$pcmd  = isset($vars['pcmd'])  ? $vars['pcmd']  : '';
	$refer = isset($vars['refer']) ? $vars['refer'] : '';
	$pass  = isset($vars['pass'])  ? $vars['pass']  : NULL;
	$page  = isset($vars['page'])  ? $vars['page']  : '';
	
	if ($refer === '' && $page !== '') {
		$refer = $page;
+		$vars['refer'] = $page;  // ローカル変数だけでなくvarsにも反映
+	} elseif ($page === '' && $refer !== '') {
+		// refer指定済でpage未指定の場合にも上と同様にパラメータをコピーする
+		$page = $refer;          // 無くても良い(あるとURL手入力などした際に処理の分岐が変わることがある)
+		$vars['page'] = $refer;  // ローカル変数だけでなくvarsにも反映
	}
	// :
	// 略
	// :
}

自前のwikiで試しましたが問題なく動いていました。

referとpageに同時に値が入っていることは考慮していないようです。
関数の引数「$page」にpageを渡したりreferを渡したりしているくらいで、両方同じ値にしてしまっても問題は無いと思います。




トップ   編集 凍結 差分 履歴 添付 複製 名前変更 リロード   新規 一覧 検索 最終更新   ヘルプ   最終更新のRSS
Last-modified: 2023-01-09 (月) 11:06:00
Site admin: PukiWiki Development Team

PukiWiki 1.5.4+ © 2001-2022 PukiWiki Development Team. Powered by PHP 8.2.12. HTML convert time: 0.187 sec.

SourceForge