必要に迫られて、trackerプラグインに、投稿内容の確認をする画面を強制的にはさむことができるように拡張を行いました。通常のWikiサイトでは無用の長物かと思いますが、中には欲しいと思っている人もいるかもしれませんので、公開します。通常仕様は変更しておりませんので、CVS投入しても害は無いと思いますが・・・。
ここ でテスト中です。
フィールドタイプがfileの場合は使えません。text, textarea, select については動作確認しましたが、他のフィールドタイプについては、未確認です。
#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;
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
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( --------------------------