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

メッセージ

概要

必要に迫られて、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;

コメント


パッチに関するコメント



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

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

SourceForge