trackerプラグインに確認画面を挿入

  • 元タイトル: trackerプラグインに確認画面出力拡張
  • ページ: BugTrack2
  • 投稿者: 三浦克介
  • 優先順位: 低
  • 状態: 保留
  • カテゴリー: 本体新機能
  • 投稿日: 2006-12-18 (月) 19:57:28
  • バージョン:

メッセージ

概要

必要に迫られて、trackerプラグインに、投稿内容の確認をする画面を強制的にはさむことができるように拡張を行いました。通常のWikiサイトでは無用の長物かと思いますが、中には欲しいと思っている人もいるかもしれませんので、公開します。通常仕様は変更しておりませんので、CVS投入しても害は無いと思いますが・・・。

ここ でテスト中です。

注意事項

フィールドタイプがfileの場合は使えません。text, textarea, select については動作確認しましたが、他のフィールドタイプについては、未確認です。

使用方法

  1. :config/plugin/tracker/HOGEHOGE/form において、[_submit] の代わりに [_check] を使用。[_submit] を使えば、従来通り、確認画面を出さずにページ追加を行います。
  2. :config/plugin/tracker/HOGEHOGE/check を作成。以下のような感じで、確認画面に出力する雛形を記述。page と同様なフィールドタグが使えます。[_submit] を入れておくと、そこに「追加」ボタンが出ます。
#freeze
CENTER:下記内容でページを追加します。良ければ [[_submit]] を押してください。
|RIGHT:|LEFT:|c
|~投稿者|[name]|
|~カテゴリー|[category]|
|~優先順位|[priority]|
|~状態|[state]|
|~ページ名|[_name]|
|~バージョン|[version]|
|~サマリ|[summary]|
|~メッセージ|[body]|
|>|CENTER:[_submit]|

他は、通常のtrackerプラグインと同様です。

パッチ

Index: ja.lng.php
===================================================================
RCS file: /cvsroot/pukiwiki/pukiwiki/ja.lng.php,v
retrieving revision 1.14
diff -c -r1.14 ja.lng.php
*** ja.lng.php	10 Apr 2006 17:36:56 -0000	1.14
--- ja.lng.php	18 Dec 2006 10:06:18 -0000
***************
*** 410,419 ****
--- 410,421 ----
  	'msg_list'   => '$1 の項目一覧',
  	'msg_back'   => '<p>$1</p>',
  	'msg_limit'  => '全$1件中、上位$2件を表示しています。',
+ 	'msg_check'  => '送信内容の確認',
  	'btn_page'   => 'ページ名',
  	'btn_name'   => 'ページ名',
  	'btn_real'   => 'ページ名',
  	'btn_submit' => '追加',
+ 	'btn_check'  => '送信',
  	'btn_date'   => '日付',
  	'btn_refer'  => '参照',
  	'btn_base'   => '基底',
Index: plugin/tracker.inc.php
===================================================================
RCS file: /cvsroot/pukiwiki/pukiwiki/plugin/tracker.inc.php,v
retrieving revision 1.34
diff -c -r1.34 tracker.inc.php
*** plugin/tracker.inc.php	28 Nov 2005 17:48:30 -0000	1.34
--- plugin/tracker.inc.php	18 Dec 2006 10:06:19 -0000
***************
*** 80,89 ****
  }
  function plugin_tracker_action()
  {
! 	global $post, $vars, $now;
  
  	if (PKWK_READONLY) die_message('PKWK_READONLY prohibits editing');
  
  	$config_name = array_key_exists('_config',$post) ? $post['_config'] : '';
  
  	$config = new Config('plugin/tracker/'.$config_name);
--- 80,92 ----
  }
  function plugin_tracker_action()
  {
! 	global $post, $vars, $now, $_tracker_messages, $script;
  
  	if (PKWK_READONLY) die_message('PKWK_READONLY prohibits editing');
  
+ 	$check = FALSE;
+ 	if(array_key_exists('_check', $post)) $check = TRUE;
+ 
  	$config_name = array_key_exists('_config',$post) ? $post['_config'] : '';
  
  	$config = new Config('plugin/tracker/'.$config_name);
***************
*** 92,101 ****
  		return "<p>config file '".htmlspecialchars($config_name)."' not found.</p>";
  	}
  	$config->config_name = $config_name;
- 	$source = $config->page.'/page';
  
  	$refer = array_key_exists('_refer',$post) ? $post['_refer'] : $post['_base'];
- 
  	if (!is_pagename($refer))
  	{
  		return array(
--- 95,102 ----
***************
*** 103,108 ****
--- 104,115 ----
  			'body'=>'page name ('.htmlspecialchars($refer).') is not valid.'
  		);
  	}
+ 
+ 	$source = $config->page.'/page';
+ 	if ($check)
+ 	{
+ 		$source = $config->page.'/check';
+ 	}
  	if (!is_page($source))
  	{
  		return array(
***************
*** 147,156 ****
  	$fields = plugin_tracker_get_fields($page,$refer,$config);
  
  	// Creating an empty page, before attaching files
! 	touch(get_filename($page));
  
  	foreach (array_keys($fields) as $key)
  	{
  		$value = array_key_exists($key,$_post) ?
  			$fields[$key]->format_value($_post[$key]) : '';
  
--- 154,164 ----
  	$fields = plugin_tracker_get_fields($page,$refer,$config);
  
  	// Creating an empty page, before attaching files
! 	if(! $check) touch(get_filename($page));
  
  	foreach (array_keys($fields) as $key)
  	{
+ 		if($check && $key=='_submit') continue;
  		$value = array_key_exists($key,$_post) ?
  			$fields[$key]->format_value($_post[$key]) : '';
  
***************
*** 169,174 ****
--- 177,213 ----
  		}
  	}
  
+ 	if($check)
+ 	{
+ 		$hiddens = '';
+ 		foreach($post as $key=>$value)
+ 		{
+ 			if($key=='_check') continue;
+ 			if(is_array($value)) {
+ 				$value = join(', ',$value);
+ 			}
+ 			$s_name = htmlspecialchars((string)$key);
+ 			$s_value = htmlspecialchars((string)$value);
+ 			$hiddens .= "<input type=\"hidden\" name=\"$s_name\" value=\"$s_value\" />\n";
+ 		}
+ 
+ 		$retval = convert_html(&$postdata);
+ 		$retval = str_replace('[_submit]', '<input type="submit" name="_submit" value="'.$_tracker_messages['btn_submit'].'" />'."\n",$retval);
+ 
+ 		$retval = <<<EOD
+ <form enctype="multipart/form-data" action="$script" method="post">
+ <div>
+ $retval
+ $hiddens
+ </div>
+ </form>
+ EOD;
+ 
+ 		return array(
+ 			'msg'=>'送信内容の確認',
+ 			'body'=>$retval);
+ 	}
+ 
  	// Writing page data, without touch
  	page_write($page, join('', $postdata));
  
***************
*** 223,229 ****
  		'_real'=>'real',    // 実際のページ名
  		'_refer'=>'page',   // 参照元(フォームのあるページ)
  		'_base'=>'page',    // 基準ページ
! 		'_submit'=>'submit' // 追加ボタン
  		) as $field=>$class)
  	{
  		$class = 'Tracker_field_'.$class;
--- 262,269 ----
  		'_real'=>'real',    // 実際のページ名
  		'_refer'=>'page',   // 参照元(フォームのあるページ)
  		'_base'=>'page',    // 基準ページ
! 		'_submit'=>'submit',// 追加ボタン
! 		'_check'=>'check'   // 送信ボタン (確認画面表示)
  		) as $field=>$class)
  	{
  		$class = 'Tracker_field_'.$class;
***************
*** 537,549 ****
  {
  	function get_tag()
  	{
  		$s_title = htmlspecialchars($this->title);
  		$s_page = htmlspecialchars($this->page);
  		$s_refer = htmlspecialchars($this->refer);
  		$s_config = htmlspecialchars($this->config->config_name);
  
  		return <<<EOD
! <input type="submit" value="$s_title" />
  <input type="hidden" name="plugin" value="tracker" />
  <input type="hidden" name="_refer" value="$s_refer" />
  <input type="hidden" name="_base" value="$s_page" />
--- 577,590 ----
  {
  	function get_tag()
  	{
+ 		$s_name = htmlspecialchars($this->name);
  		$s_title = htmlspecialchars($this->title);
  		$s_page = htmlspecialchars($this->page);
  		$s_refer = htmlspecialchars($this->refer);
  		$s_config = htmlspecialchars($this->config->config_name);
  
  		return <<<EOD
! <input type="submit" name="$s_name" value="$s_title" />
  <input type="hidden" name="plugin" value="tracker" />
  <input type="hidden" name="_refer" value="$s_refer" />
  <input type="hidden" name="_base" value="$s_page" />
***************
*** 551,556 ****
--- 592,600 ----
  EOD;
  	}
  }
+ class Tracker_field_check extends Tracker_field_submit
+ {
+ }
  class Tracker_field_date extends Tracker_field
  {
  	var $sort_type = SORT_NUMERIC;

コメント

  • 予想通り、あまり反応ありませんので、状態は却下にしておきます。興味のある方は、上記パッチを参考に、各自で改造してください。 -- 三浦克介 2006-12-24 (日) 11:54:36
  • お疲れ様です :) 興味深いですね。説明を一箇所にまとめていただく事はできますか? (概要とパッチはここにある様に見えますが、テストサイトに行かないと使用方法の説明が無いため) -- henoheno 2006-12-24 (日) 12:24:55
  • たしか、「投稿確認をする」様にすると、一部のスパムを防げるが、実装が単純すぎると効果が無いと聞いたことがあります。 -- henoheno 2006-12-24 (日) 15:25:14
  • henoheno さん、ひじょーに簡単に使用法を記述しました。スパム対策としての効果は考えていませんでした。互換性を損なわないよう、従来通りのデータをpostすると従来通りの動作をするようにしていますので、効果は無いでしょう。従来通りのデータをpostすると確認画面が出るような実装にしておくと、効果があると思います。 -- 三浦克介 2006-12-26 (火) 18:14:37
  • 冒頭への解説の追加ありがとうございます :) 「確認画面を表示する」という機構自体が一つの見識だと思います。 -- henoheno 2006-12-27 (水) 22:45:54

パッチに関するコメント

  • パッチがうまく当てられません・・・CVS版のどのバージョンがパッチの対象でしょうか? -- 西日? 2006-12-26 (火) 11:24:53
    • ja.lng.php: 1.14, tracker.inc.php: 1.34 です。diff の最初の所を見ると書いてあります。いずれも、現在の所、CVS最新版なのですが・・・。どのように、うまくいかないのですかね? 試しに、上記パッチをtracker.patchとしてセーブして、以下のコマンドでCVS最新版に当ててみたところ、問題なく当たりましたけど・・・。 -- 三浦克介 2006-12-26 (火) 17:57:40
      cd <tracker.patch のあるディレクトリ>
      cvs -d:pserver:anonymous@cvs.sourceforge.jp:/cvsroot/pukiwiki login
      <パスワードプロンプトに対してEnterを入力>
      cvs -z3 -d:pserver:anonymous@cvs.sourceforge.jp:/cvsroot/pukiwiki co pukiwiki
      cd pukiwiki
      patch < ../tracker.patch
    • 返答が遅くなって申し訳ありません。GNU PatchV2.1 for Win32を使っているのですが、次のようなエラーメッセージが出てきます。Cygwinインストールしないとだめですかね? -- 西日? 2006-12-29 (金) 13:53:49
      Patching file tracker.inc.php using Plan B...
      Hunk #1 succeeded at 80.
      Hunk #2 succeeded at 95.
      Hmm...  The next patch looks like a new-style context diff to me...
      The text leading up to this was:
      --------------------------
      |**
      |--- 104,115 ----
      |                       'body'=>'page name ('.htmlspecialchars($refer).') is not
       valid.'
      |               );
      |       }
      |+
      |+      $source = $config->page.'/page';
      |+      if ($check)
      |+      {
      |+              $source = $config->page.'/check';
      |+      }
      |       if (!is_page($source))
      |       {
      |               return array(
      --------------------------
    • これって、エラーではなく、単なる情報表示だと思いますけど・・・。 -- 三浦克介 2006-12-30 (土) 03:47:57


トップ   編集 凍結 差分 バックアップ 添付 複製 名前変更 リロード   新規 一覧 検索 最終更新   ヘルプ   最終更新のRSS
Last-modified: 2010-03-08 (月) 13:09: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.189 sec.

OSDN