OSDN Git Service

Remove media selector, use media query
[pukiwiki/pukiwiki.git] / plugin / bugtrack.inc.php
index e56e24f..62679f7 100644 (file)
 <?php
-/*
- * PukiWiki BugTrack¥×¥é¥°¥¤¥ó
- *
- * CopyRight 2002 Y.MASUI GPL2
- * http://masui.net/pukiwiki/ masui@masui.net
- * 
- * Êѹ¹ÍúÎò:
- *  2002.06.17: ºî¤ê»Ï¤á
- *
- * $Id: bugtrack.inc.php,v 1.7 2003/02/18 00:59:50 panda Exp $
- */
+// PukiWiki - Yet another WikiWikiWeb clone.
+// $Id: bugtrack.inc.php,v 1.27 2011/01/25 15:01:01 henoheno Exp $
+// Copyright (C)
+//   2002-2005, 2007 PukiWiki Developers Team
+//   2002 Y.MASUI GPL2  http://masui.net/pukiwiki/ masui@masui.net
+//
+// BugTrack plugin
+
+// Numbering format
+define('PLUGIN_BUGTRACK_NUMBER_FORMAT', '%d'); // Like 'page/1'
+//define('PLUGIN_BUGTRACK_NUMBER_FORMAT', '%03d'); // Like '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);
 }
 
-function plugin_bugtrack_action()
+// #bugtrack: Show bugtrack form
+function plugin_bugtrack_convert()
 {
-       global $script,$post,$vars,$_bugtrack_plugin_title;
-       
-       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']);
-               header("Location: $script?".rawurlencode($page));
-               die;
-       }
-       else {
-               $ret['msg'] = $_bugtrack_plugin_title;
-               $ret["body"] = plugin_bugtrack_print_form($vars['category']);
+       global $vars;
+
+       if (PKWK_READONLY) return ''; // Show nothing
+
+       $base = $vars['page'];
+       $category = array();
+       if (func_num_args()) {
+               $category = func_get_args();
+               $_base    = get_fullname(strip_bracket(array_shift($category)), $base);
+               if (is_pagename($_base)) $base = $_base;
        }
-       
-       return $ret;
+
+       return plugin_bugtrack_print_form($base, $category);
 }
 
-function plugin_bugtrack_print_form($base,$category)
+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;
-
-       $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_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";
+       global $_plugin_bugtrack;
+       static $id = 0;
+
+       ++$id;
+
+       $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 = htmlsc($_plugin_bugtrack['priority_list'][$i]);
+               $select_priority .= '    <option value="' . $priority_list . '"' .
+                       $selected . '>' . $priority_list . '</option>' . "\n";
        }
-       
-       if (count($category) == 0) {
-               $encoded_category = '<input name="category" type="text" />';
+
+       $select_state = "\n";
+       for ($i = 0; $i < count($_plugin_bugtrack['state_list']); ++$i) {
+               $state_list = htmlsc($_plugin_bugtrack['state_list'][$i]);
+               $select_state .= '    <option value="' . $state_list . '">' .
+                       $state_list . '</option>' . "\n";
        }
-       else {
-               $encoded_category = '<select name="category">';
+
+       if (empty($category)) {
+               $encoded_category = '<input name="category" id="_p_bugtrack_category_' . $id .
+                       '" type="text" />';
+       } else {
+               $encoded_category = '<select name="category" id="_p_bugtrack_category_' . $id . '">';
                foreach ($category as $_category) {
-                       $encoded_category .= "<option value=\"$_category\">$_category</option>\n";
+                       $s_category = htmlsc($_category);
+                       $encoded_category .= '<option value="' . $s_category . '">' .
+                               $s_category . '</option>' . "\n";
                }
                $encoded_category .= '</select>';
        }
-       
+
+       $script     = get_script_uri();
+       $s_base     = htmlsc($base);
+       $s_name     = htmlsc($_plugin_bugtrack['name']);
+       $s_category = htmlsc($_plugin_bugtrack['category']);
+       $s_priority = htmlsc($_plugin_bugtrack['priority']);
+       $s_state    = htmlsc($_plugin_bugtrack['state']);
+       $s_pname    = htmlsc($_plugin_bugtrack['pagename']);
+       $s_pnamec   = htmlsc($_plugin_bugtrack['pagename_comment']);
+       $s_version  = htmlsc($_plugin_bugtrack['version']);
+       $s_versionc = htmlsc($_plugin_bugtrack['version_comment']);
+       $s_summary  = htmlsc($_plugin_bugtrack['summary']);
+       $s_body     = htmlsc($_plugin_bugtrack['body']);
+       $s_submit   = htmlsc($_plugin_bugtrack['submit']);
        $body = <<<EOD
 <form action="$script" method="post">
  <table border="0">
   <tr>
-   <th>$_bugtrack_plugin_name</th>
-   <td><input name="name" size="20" type="text" /></td>
+   <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>$_bugtrack_plugin_category</th>
+   <th><label for="_p_bugtrack_category_$id">$s_category</label></th>
    <td>$encoded_category</td>
   </tr>
   <tr>
-   <th>$_bugtrack_plugin_priority</th>
-   <td><select 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>$_bugtrack_plugin_state</th>
-   <td><select 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>$_bugtrack_plugin_pagename</th>
-   <td><input name="pagename" size="20" type="text" />$_bugtrack_plugin_pagename_comment</td>
+   <th><label for="_p_bugtrack_pagename_$id">$s_pname</label></th>
+   <td><input  id="_p_bugtrack_pagename_$id" name="pagename" size="20" type="text" />
+    <small>$s_pnamec</small></td>
   </tr>
   <tr>
-   <th>$_bugtrack_plugin_version</th>
-   <td><input name="version" size="10" type="text" />$_bugtrack_plugin_version_comment</td>
+   <th><label for="_p_bugtrack_version_$id">$s_version</label></th>
+   <td><input  id="_p_bugtrack_version_$id" name="version" size="10" type="text" />
+    <small>$s_versionc</small></td>
   </tr>
   <tr>
-   <th>$_bugtrack_plugin_summary</th>
-   <td><input name="summary" size="60" type="text" /></td>
+   <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>$_bugtrack_plugin_body</th>
-   <td><textarea name="body" cols="60" rows="6"></textarea></td>
+   <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="$base" />
+    <input type="hidden" name="mode"   value="submit" />
+    <input type="hidden" name="base"   value="$s_base" />
    </td>
   </tr>
  </table>
 </form>
 EOD;
-       
+
        return $body;
 }
 
-function plugin_bugtrack_template($base, $summary, $name, $priority, $state, $category, $version, $body)
+// Add new issue
+function plugin_bugtrack_action()
 {
-       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;
-       
-       if (!preg_match("/^$WikiName$$/",$name)) {
-               $name = "[[$name]]";
-       }
-       
-       if (!preg_match("/^$WikiName$$/",$base)) {
-               $base = "[[$base]]";
-       }
-        return <<<EOD
-*$summary
+       global $post;
 
--$_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
+       if (PKWK_READONLY) die_message('PKWK_READONLY prohibits editing');
+       if ($post['mode'] != 'submit') return FALSE;
 
-**$_bugtrack_plugin_body
-$body
-----
+       $page = plugin_bugtrack_write($post['base'], $post['pagename'], $post['summary'],
+               $post['name'], $post['priority'], $post['state'], $post['category'],
+               $post['version'], $post['body']);
 
-#comment
-EOD;
+       pkwk_headers_sent();
+       header('Location: ' . get_script_uri() . '?' . pagename_urlencode($page));
+       exit;
 }
 
 function plugin_bugtrack_write($base, $pagename, $summary, $name, $priority, $state, $category, $version, $body)
 {
-       global $post,$BracketName;
-       
-       $base = strip_bracket($base);
+       global $post;
+
+       $base     = strip_bracket($base);
        $pagename = strip_bracket($pagename);
-       
-       $postdata = plugin_bugtrack_template($base, $summary, $name, $priority, $state, $category, $version, $body);
-       $postdata = user_rules_str($postdata);
-
-       $i = 0;
-       do {
-               $i++;
-               $page = "$base/$i";
-       } while (is_page($page));
-       
-       if ($pagename == '') {
-               page_write($page,$postdata);
+
+       $postdata = plugin_bugtrack_template($base, $summary, $name, $priority,
+               $state, $category, $version, $body);
+
+       $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);
        }
-       else {
-               // ¤¹¤Ç¤Ë¥Ú¡¼¥¸¤¬Â¸ºß¤¹¤ë¤«¡¢BracketName¤Ç¤Ê¤¤(̵¸ú¤Ê)¥Ú¡¼¥¸Ì¾¤¬»ØÄꤵ¤ì¤¿
-               if (is_page($pagename) or !preg_match('/^$BracketName$/',$pagename)) {
-                       // ¥Ú¡¼¥¸Ì¾¤ò¥Ç¥Õ¥©¥ë¥È¤ËÌ᤹
-                       $pagename = $page;
-               }
-               else {
-                       page_write($page,"move to [[$pagename]]");
+       $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; // Set default
+               } else {
+                       page_write($page, 'move to [[' . $pagename . ']]');
                }
-               page_write($pagename,$postdata);
+               page_write($pagename, $postdata);
        }
 
        return $page;
 }
 
-function plugin_bugtrack_convert()
+// Generate new page contents
+function plugin_bugtrack_template($base, $summary, $name, $priority, $state, $category, $version, $body)
 {
-       global $vars;
-       
-       $base = $vars['page'];
-       $category = array();
-       if (func_num_args() > 0) {
-               $args = func_get_args();
-               $category = $args;
-               $base = array_shift($category);
-       }
-       
-       return plugin_bugtrack_print_form($base,$category);
-}
+       global $_plugin_bugtrack, $WikiName;
 
+       if (! preg_match("/^$WikiName$$/",$base)) $base = '[[' . $base . ']]';
+       if ($name != '' && ! preg_match("/^$WikiName$$/",$name)) $name = '[[' . $name . ']]';
 
-function plugin_bugtrack_pageinfo($page,$no = NULL)
-{
-       global $WikiName, $InterWikiName, $BracketName;
-       
-       if ($no === NULL) {
-               $no = preg_match('/\/([0-9]+)$/',$page,$matches) ? $matches[1] : 0;
-       }
-       
-       $source = get_source($page);
-       if (preg_match("/move\s*to\s*($WikiName|$InterWikiName|\[\[$BracketName\]\])/",$source[0],$match)) {
-               return plugin_bugtrack_pageinfo(strip_bracket($match[1]),$no);
-       }
-       
-       $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)) {
-                       if ($item == 'name') {
-                               $$item = htmlspecialchars(strip_bracket($matches[1]));
-                       }
-                       else {
-                               $$item = htmlspecialchars($matches[1]);
-                       }
-               }
-       }
-       
-       global $_bugtrack_plugin_summary;
-       if (preg_match("/\*([^\n]+)/",$body,$matches)) {
-               $summary = htmlspecialchars($matches[1]);
-       }
-       
-       return array($page, $no, $summary, $name, $priority, $state, $category);
+       if ($name    == '') $name    = $_plugin_bugtrack['noname'];
+       if ($summary == '') $summary = $_plugin_bugtrack['nosummary'];
+
+        return <<<EOD
+* $summary
+
+- ${_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
+
+** ${_plugin_bugtrack['body']}
+$body
+--------
+
+#comment
+EOD;
 }
 
+// ----------------------------------------
+// BugTrack-List plugin
+
+// #bugtrack_list plugin itself
 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();
+               list($_page) = func_get_args();
+               $_page = get_fullname(strip_bracket($_page), $page);
+               if (is_pagename($_page)) $page = $_page;
        }
-       
+
        $data = array();
-       $pattern = "$page/";
+       $pattern = $page . '/';
        $pattern_len = strlen($pattern);
-       foreach (get_existpages() as $page) {
-               if (strpos($page,$pattern) === 0 and is_numeric(substr($page,$pattern_len))) {
-                       $line = plugin_bugtrack_pageinfo($page);
-                       array_push($data,$line);
-               }
-       }
-       
+       foreach (get_existpages() as $page)
+               if (strpos($page, $pattern) === 0 && is_numeric(substr($page, $pattern_len)))
+                       array_push($data, plugin_bugtrack_list_pageinfo($page));
+
+       $count_list = count($_plugin_bugtrack['state_list']);
+
        $table = array();
-       for ($i = 0; $i <= count($_bugtrack_plugin_state_list) + 1; ++$i) {
-               $table[$i] = array();
-       }
-       
+       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_link("[[$page]]");
-               $state_no = array_search($state,$_bugtrack_plugin_state_sort);
-               if ($state_no === NULL) {
-                       $state_no = count($_bugtrack_plugin_state_list);
-               }
-               
-               $bgcolor = $_bugtrack_plugin_state_bgcolor[$state_no];
+               foreach (array('summary', 'name', 'priority', 'state', 'category') as $item)
+                       $$item = htmlsc($$item);
+               $page_link = make_pagelink($page);
+
+               $state_no = array_search($state, $_plugin_bugtrack['state_sort']);
+               if ($state_no === NULL || $state_no === FALSE) $state_no = $count_list;
+               $bgcolor = htmlsc($_plugin_bugtrack['state_bgcolor'][$state_no]);
+
                $row = <<<EOD
  <tr>
   <td style="background-color:$bgcolor">$page_link</td>
@@ -310,21 +296,59 @@ function plugin_bugtrack_list_convert()
 EOD;
                $table[$state_no][$no] = $row;
        }
-       $table_html = <<<EOD
- <tr>
-  <th>&nbsp;</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>
- </tr>
-EOD;
-       for ($i = 0; $i <= count($_bugtrack_plugin_state_list); ++$i) {
-               ksort($table[$i],SORT_NUMERIC);
-               $table_html .= join("\n",$table[$i]);
+
+       $table_html = ' <tr>' . "\n";
+       $bgcolor = htmlsc($_plugin_bugtrack['header_bgcolor']);
+       foreach (array('pagename', 'state', 'priority', 'category', 'name', 'summary') as $item)
+               $table_html .= '  <th style="background-color:' . $bgcolor . '">' .
+                       htmlsc($_plugin_bugtrack[$item]) . '</th>' . "\n";
+       $table_html .= ' </tr>' . "\n";
+
+       for ($i = 0; $i <= $count_list; ++$i) {
+               ksort($table[$i], SORT_NUMERIC);
+               $table_html .= join("\n", $table[$i]);
+       }
+
+       return '<table border="1" width="100%">' . "\n" .
+               $table_html . "\n" .
+               '</table>';
+}
+
+// Get one set of data from a page (or a page moved to $page)
+function plugin_bugtrack_list_pageinfo($page, $no = NULL, $recurse = TRUE)
+{
+       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 ($recurse && preg_match($regex, $source[0], $match))
+               return plugin_bugtrack_list_pageinfo(strip_bracket($match[1]), $no, FALSE);
+
+       $body = join("\n", $source);
+       foreach(array('summary', 'name', 'priority', 'state', 'category') as $item) {
+               $regex = '/-\s*' . preg_quote($_plugin_bugtrack[$item], '/') . '\s*:(.*)/';
+               if (preg_match($regex, $body, $matches)) {
+                       if ($item == 'name') {
+                               $$item = strip_bracket(trim($matches[1]));
+                       } else {
+                               $$item = trim($matches[1]);
+                       }
+               } else {
+                               $$item = ''; // Data not found
+               }
+       }
+
+       if (preg_match("/\*([^\n]*)/", $body, $matches)) {
+               $summary = $matches[1];
+               make_heading($summary);
        }
-       
-       return "<table border=\"1\">\n$table_html</table>";
+
+       return array($page, $no, $summary, $name, $priority, $state, $category);
 }
-?>
+