<?php
-/*
- * PukiWiki BugTrack¥×¥é¥°¥¤¥ó
- *
- * CopyRight 2002 Y.MASUI GPL2
- * http://masui.net/pukiwiki/ masui@masui.net
- *
- * Êѹ¹ÍúÎò:
- * 2002.06.17: ºî¤ê»Ï¤á
- *
- * $Id: bugtrack.inc.php,v 1.22 2005/03/02 13:16:49 henoheno Exp $
- */
+// $Id: bugtrack.inc.php,v 1.23 2005/04/02 15:09:59 henoheno Exp $
+//
+// PukiWiki BugTrack plugin
+//
+// Copyright:
+// 2002-2005 PukiWiki Developers Team
+// 2002 Y.MASUI GPL2 http://masui.net/pukiwiki/ masui@masui.net
+
+define('PLUGIN_BUGTRACK_NUMBER_FORMAT', '%d'); // From 'page/1'
+//define('PLUGIN_BUGTRACK_NUMBER_FORMAT', '%03d'); // From 'page/001'
function plugin_bugtrack_init()
{
- $messages = array(
- '_bugtrack_plugin_priority_list' => array('¶ÛµÞ', '½ÅÍ×', 'ÉáÄÌ', 'Äã'),
- '_bugtrack_plugin_state_list' => array('Äó°Æ', 'Ãå¼ê', 'CVSÂÔ¤Á', '´°Î»', 'ÊÝα', 'µÑ²¼'),
- '_bugtrack_plugin_state_sort' => array('Ãå¼ê', 'CVSÂÔ¤Á', 'ÊÝα', '´°Î»', 'Äó°Æ', 'µÑ²¼'),
- '_bugtrack_plugin_state_bgcolor' => array('#ccccff', '#ffcc99', '#ccddcc', '#ccffcc', '#ffccff', '#cccccc', '#ff3333'),
-
- '_bugtrack_plugin_title' => '$1 Bugtrack Plugin',
- '_bugtrack_plugin_base' => '¥Ú¡¼¥¸',
- '_bugtrack_plugin_summary' => '¥µ¥Þ¥ê',
- '_bugtrack_plugin_priority' => 'Í¥Àè½ç°Ì',
- '_bugtrack_plugin_state' => '¾õÂÖ',
- '_bugtrack_plugin_name' => 'Åê¹Æ¼Ô',
- '_bugtrack_plugin_date' => 'Åê¹ÆÆü',
- '_bugtrack_plugin_body' => '¥á¥Ã¥»¡¼¥¸',
- '_bugtrack_plugin_category' => '¥«¥Æ¥´¥ê¡¼',
- '_bugtrack_plugin_pagename' => '¥Ú¡¼¥¸Ì¾',
- '_bugtrack_plugin_pagename_comment' => '<small>¶õÍó¤Î¤Þ¤Þ¤À¤È¼«Æ°Åª¤Ë¥Ú¡¼¥¸Ì¾¤¬¿¶¤é¤ì¤Þ¤¹¡£</small>',
- '_bugtrack_plugin_version_comment' => '<small>¶õÍó¤Ç¤â¹½¤¤¤Þ¤»¤ó</small>',
- '_bugtrack_plugin_version' => '¥Ð¡¼¥¸¥ç¥ó',
- '_bugtrack_plugin_submit' => 'ÄɲÃ'
+ global $_plugin_bugtrack;
+ static $init;
+
+ if (isset($init)) return; // Already init
+ if (isset($_plugin_bugtrack)) die('Global $_plugin_bugtrack had been init. Why?');
+ $init = TRUE;
+
+ $_plugin_bugtrack = array(
+ 'priority_list' => array('¶ÛµÞ', '½ÅÍ×', 'ÉáÄÌ', 'Äã'),
+ 'state_list' => array('Äó°Æ', 'Ãå¼ê', 'CVSÂÔ¤Á', '´°Î»', 'ÊÝα', 'µÑ²¼'),
+ 'state_sort' => array('Ãå¼ê', 'CVSÂÔ¤Á', 'ÊÝα', '´°Î»', 'Äó°Æ', 'µÑ²¼'),
+ 'state_bgcolor' => array('#ccccff', '#ffcc99', '#ccddcc', '#ccffcc', '#ffccff', '#cccccc', '#ff3333'),
+ 'header_bgcolor' => '#ffffcc',
+ 'base' => '¥Ú¡¼¥¸',
+ 'summary' => '¥µ¥Þ¥ê',
+ 'nosummary'=> '¤³¤³¤Ë¥µ¥Þ¥ê¤òµÆþ¤·¤Æ²¼¤µ¤¤',
+ 'priority' => 'Í¥Àè½ç°Ì',
+ 'state' => '¾õÂÖ',
+ 'name' => 'Åê¹Æ¼Ô',
+ 'noname' => '̵̾¤·¤µ¤ó',
+ 'date' => 'Åê¹ÆÆü',
+ 'body' => '¥á¥Ã¥»¡¼¥¸',
+ 'category' => '¥«¥Æ¥´¥ê¡¼',
+ 'pagename' => '¥Ú¡¼¥¸Ì¾',
+ 'pagename_comment' => '¶õÍó¤Î¤Þ¤Þ¤À¤È¼«Æ°Åª¤Ë¥Ú¡¼¥¸Ì¾¤¬¿¶¤é¤ì¤Þ¤¹¡£',
+ 'version_comment' => '¶õÍó¤Ç¤â¹½¤¤¤Þ¤»¤ó',
+ 'version' => '¥Ð¡¼¥¸¥ç¥ó',
+ 'submit' => 'ÄɲÃ'
);
- set_plugin_messages($messages);
}
+// Add new issue
function plugin_bugtrack_action()
{
- global $post, $vars, $_bugtrack_plugin_title;
+ global $post;
if (PKWK_READONLY) die_message('PKWK_READONLY prohibits editing');
+ if ($post['mode'] != 'submit') return FALSE;
- if ($post['mode'] == 'submit') {
- $page = plugin_bugtrack_write($post['base'], $post['pagename'], $post['summary'],
- $post['name'], $post['priority'], $post['state'], $post['category'],
- $post['version'], $post['body']);
- pkwk_headers_sent();
- header('Location: ' . get_script_uri() . '?' . rawurlencode($page));
- exit;
- }
- return FALSE;
-/*
- else {
- $ret['msg'] = $_bugtrack_plugin_title;
- $ret["body"] = plugin_bugtrack_print_form($vars['category']);
- }
+ $page = plugin_bugtrack_write($post['base'], $post['pagename'], $post['summary'],
+ $post['name'], $post['priority'], $post['state'], $post['category'],
+ $post['version'], $post['body']);
- return $ret;
-*/
+ pkwk_headers_sent();
+ header('Location: ' . get_script_uri() . '?' . rawurlencode($page));
+ exit;
}
function plugin_bugtrack_print_form($base, $category)
{
- global $_bugtrack_plugin_priority_list,$_bugtrack_plugin_state_list;
- global $_bugtrack_plugin_priority, $_bugtrack_plugin_state, $_bugtrack_plugin_name;
- global $_bugtrack_plugin_date, $_bugtrack_plugin_category, $_bugtrack_plugin_body;
- global $_bugtrack_plugin_summary, $_bugtrack_plugin_submit, $_bugtrack_plugin_version;
- global $_bugtrack_plugin_pagename, $_bugtrack_plugin_pagename_comment;
- global $_bugtrack_plugin_version_comment;
- global $script;
+ global $_plugin_bugtrack;
static $id = 0;
++$id;
- $select_priority = '';
- for ($i = 0; $i < count($_bugtrack_plugin_priority_list); ++$i) {
- if ($i < count($_bugtrack_plugin_priority_list) - 1) {
- $selected = '';
- } else {
- $selected = ' selected="selected"';
- }
- $select_priority .= '<option value="' . $_bugtrack_plugin_priority_list[$i] . '"' .
- $selected . '>' . $_bugtrack_plugin_priority_list[$i] . '</option>' . "\n";
+ $select_priority = "\n";
+ $count = count($_plugin_bugtrack['priority_list']);
+ $selected = '';
+ for ($i = 0; $i < $count; ++$i) {
+ if ($i == ($count - 1)) $selected = ' selected="selected"'; // The last one
+ $priority_list = htmlspecialchars($_plugin_bugtrack['priority_list'][$i]);
+ $select_priority .= ' <option value="' . $priority_list . '"' .
+ $selected . '>' . $priority_list . '</option>' . "\n";
}
- $select_state = '';
- for ($i = 0; $i < count($_bugtrack_plugin_state_list); ++$i)
- $select_state .= '<option value="' . $_bugtrack_plugin_state_list[$i] . '">' .
- $_bugtrack_plugin_state_list[$i] . '</option>' . "\n";
+ $select_state = "\n";
+ for ($i = 0; $i < count($_plugin_bugtrack['state_list']); ++$i) {
+ $state_list = htmlspecialchars($_plugin_bugtrack['state_list'][$i]);
+ $select_state .= ' <option value="' . $state_list . '">' .
+ $state_list . '</option>' . "\n";
+ }
if (empty($category)) {
$encoded_category = '<input name="category" id="_p_bugtrack_category_' . $id .
$encoded_category .= '</select>';
}
- $s_base = htmlspecialchars($base);
-
+ $script = get_script_uri();
+ $s_base = htmlspecialchars($base);
+ $s_name = htmlspecialchars($_plugin_bugtrack['name']);
+ $s_category = htmlspecialchars($_plugin_bugtrack['category']);
+ $s_priority = htmlspecialchars($_plugin_bugtrack['priority']);
+ $s_state = htmlspecialchars($_plugin_bugtrack['state']);
+ $s_pname = htmlspecialchars($_plugin_bugtrack['pagename']);
+ $s_pnamec = htmlspecialchars($_plugin_bugtrack['pagename_comment']);
+ $s_version = htmlspecialchars($_plugin_bugtrack['version']);
+ $s_versionc = htmlspecialchars($_plugin_bugtrack['version_comment']);
+ $s_summary = htmlspecialchars($_plugin_bugtrack['summary']);
+ $s_body = htmlspecialchars($_plugin_bugtrack['body']);
+ $s_submit = htmlspecialchars($_plugin_bugtrack['submit']);
$body = <<<EOD
<form action="$script" method="post">
<table border="0">
<tr>
- <th><label for="_p_bugtrack_name_$id">$_bugtrack_plugin_name</label></th>
+ <th><label for="_p_bugtrack_name_$id">$s_name</label></th>
<td><input id="_p_bugtrack_name_$id" name="name" size="20" type="text" /></td>
</tr>
<tr>
- <th><label for="_p_bugtrack_category_$id">$_bugtrack_plugin_category</label></th>
+ <th><label for="_p_bugtrack_category_$id">$s_category</label></th>
<td>$encoded_category</td>
</tr>
<tr>
- <th><label for="_p_bugtrack_priority_$id">$_bugtrack_plugin_priority</label></th>
- <td><select id="_p_bugtrack_priority_$id" name="priority">$select_priority</select></td>
+ <th><label for="_p_bugtrack_priority_$id">$s_priority</label></th>
+ <td><select id="_p_bugtrack_priority_$id" name="priority">$select_priority </select></td>
</tr>
<tr>
- <th><label for="_p_bugtrack_state_$id">$_bugtrack_plugin_state</label></th>
- <td><select id="_p_bugtrack_state_$id" name="state">$select_state</select></td>
+ <th><label for="_p_bugtrack_state_$id">$s_state</label></th>
+ <td><select id="_p_bugtrack_state_$id" name="state">$select_state </select></td>
</tr>
<tr>
- <th><label for="_p_bugtrack_pagename_$id">$_bugtrack_plugin_pagename</label></th>
+ <th><label for="_p_bugtrack_pagename_$id">$s_pname</label></th>
<td><input id="_p_bugtrack_pagename_$id" name="pagename" size="20" type="text" />
- $_bugtrack_plugin_pagename_comment</td>
+ <small>$s_pnamec</small></td>
</tr>
<tr>
- <th><label for="_p_bugtrack_version_$id">$_bugtrack_plugin_version</label></th>
+ <th><label for="_p_bugtrack_version_$id">$s_version</label></th>
<td><input id="_p_bugtrack_version_$id" name="version" size="10" type="text" />
- $_bugtrack_plugin_version_comment</label></td>
+ <small>$s_versionc</small></td>
</tr>
<tr>
- <th><label for="_p_bugtrack_summary_$id">$_bugtrack_plugin_summary</label></th>
+ <th><label for="_p_bugtrack_summary_$id">$s_summary</label></th>
<td><input id="_p_bugtrack_summary_$id" name="summary" size="60" type="text" /></td>
</tr>
<tr>
- <th><label for="_p_bugtrack_body_$id">$_bugtrack_plugin_body</label></th>
+ <th><label for="_p_bugtrack_body_$id">$s_body</label></th>
<td><textarea id="_p_bugtrack_body_$id" name="body" cols="60" rows="6"></textarea></td>
</tr>
<tr>
<td colspan="2" align="center">
- <input type="submit" value="$_bugtrack_plugin_submit" />
+ <input type="submit" value="$s_submit" />
<input type="hidden" name="plugin" value="bugtrack" />
- <input type="hidden" name="mode" value="submit" />
- <input type="hidden" name="base" value="$s_base" />
+ <input type="hidden" name="mode" value="submit" />
+ <input type="hidden" name="base" value="$s_base" />
</td>
</tr>
</table>
function plugin_bugtrack_template($base, $summary, $name, $priority, $state, $category, $version, $body)
{
- global $_bugtrack_plugin_priority, $_bugtrack_plugin_state, $_bugtrack_plugin_name;
- global $_bugtrack_plugin_date, $_bugtrack_plugin_category, $_bugtrack_plugin_base;
- global $_bugtrack_plugin_body, $_bugtrack_plugin_version;
- global $script, $WikiName;
+ global $_plugin_bugtrack, $WikiName;
- if (! preg_match("/^$WikiName$$/",$name)) $name = '[[' . $name . ']]';
if (! preg_match("/^$WikiName$$/",$base)) $base = '[[' . $base . ']]';
+ if ($name != '' && ! preg_match("/^$WikiName$$/",$name)) $name = '[[' . $name . ']]';
+
+ if ($name == '') $name = $_plugin_bugtrack['noname'];
+ if ($summary == '') $summary = $_plugin_bugtrack['nosummary'];
return <<<EOD
-*$summary
+* $summary
--$_bugtrack_plugin_base: $base
--$_bugtrack_plugin_name: $name
--$_bugtrack_plugin_priority: $priority
--$_bugtrack_plugin_state: $state
--$_bugtrack_plugin_category: $category
--$_bugtrack_plugin_date: now?
--$_bugtrack_plugin_version: $version
+- ${_plugin_bugtrack['base' ]}: $base
+- ${_plugin_bugtrack['name' ]}: $name
+- ${_plugin_bugtrack['priority']}: $priority
+- ${_plugin_bugtrack['state' ]}: $state
+- ${_plugin_bugtrack['category']}: $category
+- ${_plugin_bugtrack['date' ]}: now?
+- ${_plugin_bugtrack['version' ]}: $version
-**$_bugtrack_plugin_body
+** ${_plugin_bugtrack['body']}
$body
-----
+--------
#comment
EOD;
$postdata = plugin_bugtrack_template($base, $summary, $name, $priority,
$state, $category, $version, $body);
- $i = 0;
- do {
- ++$i;
- $page = $base . '/' . $i;
- } while (is_page($page));
+ $id = $jump = 1;
+ $page = $base . '/' . sprintf(PLUGIN_BUGTRACK_NUMBER_FORMAT, $id);
+ while (is_page($page)) {
+ $id = $jump;
+ $jump += 50;
+ $page = $base . '/' . sprintf(PLUGIN_BUGTRACK_NUMBER_FORMAT, $jump);
+ }
+ $page = $base . '/' . sprintf(PLUGIN_BUGTRACK_NUMBER_FORMAT, $id);
+ while (is_page($page))
+ $page = $base . '/' . sprintf(PLUGIN_BUGTRACK_NUMBER_FORMAT, ++$id);
if ($pagename == '') {
page_write($page, $postdata);
} else {
$pagename = get_fullname($pagename, $base);
- // ¤¹¤Ç¤Ë¥Ú¡¼¥¸¤¬Â¸ºß¤¹¤ë¤«¡¢Ìµ¸ú¤Ê¥Ú¡¼¥¸Ì¾¤¬»ØÄꤵ¤ì¤¿
if (is_page($pagename) || ! is_pagename($pagename)) {
- $pagename = $page; // ¥Ú¡¼¥¸Ì¾¤ò¥Ç¥Õ¥©¥ë¥È¤ËÌ᤹
+ $pagename = $page; // Set default
} else {
page_write($page, 'move to [[' . $pagename . ']]');
}
return $page;
}
+// #bugtrack: Show bugtrack form
function plugin_bugtrack_convert()
{
global $vars;
$base = $vars['page'];
$category = array();
- if (func_num_args() > 0) {
- $args = func_get_args();
- $category = $args;
- $_base = strip_bracket(array_shift($category));
- $_base = get_fullname($_base, $base);
+ if (func_num_args()) {
+ $category = func_get_args();
+ $_base = get_fullname(strip_bracket(array_shift($category)), $base);
if (is_pagename($_base)) $base = $_base;
}
return plugin_bugtrack_print_form($base, $category);
}
-
-function plugin_bugtrack_pageinfo($page, $no = NULL)
+// Get data from a page (or a page moved from $page)
+function plugin_bugtrack_pageinfo($page, $no = NULL, $recurse = TRUE)
{
- global $WikiName, $InterWikiName, $BracketName;
+ global $WikiName, $InterWikiName, $BracketName, $_plugin_bugtrack;
if ($no === NULL)
$no = preg_match('/\/([0-9]+)$/', $page, $matches) ? $matches[1] : 0;
$source = get_source($page);
+
+ // Check 'moved' page _just once_
+ $regex = "/move\s*to\s*($WikiName|$InterWikiName|\[\[$BracketName\]\])/";
$match = array();
- if (preg_match("/move\s*to\s*($WikiName|$InterWikiName|\[\[$BracketName\]\])/", $source[0], $match))
- return plugin_bugtrack_pageinfo(strip_bracket($match[1]), $no);
+ if ($recurse && preg_match($regex, $source[0], $match))
+ return plugin_bugtrack_pageinfo(strip_bracket($match[1]), $no, FALSE);
$body = join("\n", $source);
- $summary = $name = $priority = $state = $category = 'test';
- $itemlist = array();
foreach(array('summary', 'name', 'priority', 'state', 'category') as $item) {
- $itemname = '_bugtrack_plugin_' . $item;
- global $$itemname;
- $itemname = $$itemname;
- if (preg_match("/-\s*$itemname\s*:\s*(.*)\s*/", $body, $matches)) {
+ $regex = '/-\s*' . preg_quote($_plugin_bugtrack[$item], '/') . '\s*:(.*)/';
+ if (preg_match($regex, $body, $matches)) {
if ($item == 'name') {
- $$item = htmlspecialchars(strip_bracket($matches[1]));
+ $$item = htmlspecialchars(strip_bracket(trim($matches[1])));
} else {
- $$item = htmlspecialchars($matches[1]);
+ $$item = htmlspecialchars(trim($matches[1]));
}
+ } else {
+ $$item = ''; // Data not found
}
}
- if (preg_match("/\*([^\n]+)/", $body, $matches)) {
+ if (preg_match("/\*([^\n]*)/", $body, $matches)) {
$summary = $matches[1];
make_heading($summary);
}
function plugin_bugtrack_list_convert()
{
- global $script, $vars;
- global $_bugtrack_plugin_priority, $_bugtrack_plugin_state, $_bugtrack_plugin_name;
- global $_bugtrack_plugin_date, $_bugtrack_plugin_category, $_bugtrack_plugin_summary;
- global $_bugtrack_plugin_state_sort,$_bugtrack_plugin_state_list,$_bugtrack_plugin_state_bgcolor;
+ global $script, $vars, $_plugin_bugtrack;
$page = $vars['page'];
if (func_num_args()) {
list($_page) = func_get_args();
- $_page = get_fullname(strip_bracket($_page),$page);
+ $_page = get_fullname(strip_bracket($_page), $page);
if (is_pagename($_page)) $page = $_page;
}
}
}
+ $count_list = count($_plugin_bugtrack['state_list']);
+
$table = array();
- for ($i = 0; $i <= count($_bugtrack_plugin_state_list) + 1; ++$i)
+ for ($i = 0; $i <= $count_list + 1; ++$i)
$table[$i] = array();
foreach ($data as $line) {
list($page, $no, $summary, $name, $priority, $state, $category) = $line;
$page_link = make_pagelink($page);
- $state_no = array_search($state, $_bugtrack_plugin_state_sort);
- if ($state_no === NULL || $state_no === FALSE)
- $state_no = count($_bugtrack_plugin_state_list);
- $bgcolor = $_bugtrack_plugin_state_bgcolor[$state_no];
+ $state_no = array_search($state, $_plugin_bugtrack['state_sort']);
+ if ($state_no === NULL || $state_no === FALSE) $state_no = $count_list;
+ $bgcolor = htmlspecialchars($_plugin_bugtrack['state_bgcolor'][$state_no]);
+
$row = <<<EOD
<tr>
<td style="background-color:$bgcolor">$page_link</td>
EOD;
$table[$state_no][$no] = $row;
}
+
+ $bgcolor = htmlspecialchars($_plugin_bugtrack['header_bgcolor']);
$table_html = <<<EOD
<tr>
- <th> </th>
- <th>$_bugtrack_plugin_state</th>
- <th>$_bugtrack_plugin_priority</th>
- <th>$_bugtrack_plugin_category</th>
- <th>$_bugtrack_plugin_name</th>
- <th>$_bugtrack_plugin_summary</th>
+ <th style="background-color:$bgcolor">${_plugin_bugtrack['pagename']}</th>
+ <th style="background-color:$bgcolor">${_plugin_bugtrack['state' ]}</th>
+ <th style="background-color:$bgcolor">${_plugin_bugtrack['priority']}</th>
+ <th style="background-color:$bgcolor">${_plugin_bugtrack['category']}</th>
+ <th style="background-color:$bgcolor">${_plugin_bugtrack['name' ]}</th>
+ <th style="background-color:$bgcolor">${_plugin_bugtrack['summary' ]}</th>
</tr>
EOD;
- for ($i = 0; $i <= count($_bugtrack_plugin_state_list); ++$i) {
+ for ($i = 0; $i <= $count_list; ++$i) {
ksort($table[$i], SORT_NUMERIC);
$table_html .= join("\n", $table[$i]);
}
- return '<table border="1">' . "\n" . $table_html . '</table>';
+ return '<table border="1" width="100%">' . "\n" .
+ $table_html . "\n" .
+ '</table>';
}
?>