OSDN Git Service

PKWK_READONLY prohibits editing
[pukiwiki/pukiwiki.git] / plugin / bugtrack.inc.php
1 <?php
2 /*
3  * PukiWiki BugTrack¥×¥é¥°¥¤¥ó
4  *
5  * CopyRight 2002 Y.MASUI GPL2
6  * http://masui.net/pukiwiki/ masui@masui.net
7  *
8  * Êѹ¹ÍúÎò:
9  *  2002.06.17: ºî¤ê»Ï¤á
10  *
11  * $Id: bugtrack.inc.php,v 1.21 2005/01/23 07:17:37 henoheno Exp $
12  */
13
14 function plugin_bugtrack_init()
15 {
16         $messages = array(
17                 '_bugtrack_plugin_priority_list' => array('¶ÛµÞ', '½ÅÍ×', 'ÉáÄÌ', 'Äã'),
18                 '_bugtrack_plugin_state_list'    => array('Äó°Æ', 'Ãå¼ê', 'CVSÂÔ¤Á', '´°Î»', 'ÊÝα', 'µÑ²¼'),
19                 '_bugtrack_plugin_state_sort'    => array('Ãå¼ê', 'CVSÂÔ¤Á', 'ÊÝα', '´°Î»', 'Äó°Æ', 'µÑ²¼'),
20                 '_bugtrack_plugin_state_bgcolor' => array('#ccccff', '#ffcc99', '#ccddcc', '#ccffcc', '#ffccff', '#cccccc', '#ff3333'),
21
22                 '_bugtrack_plugin_title'    => '$1 Bugtrack Plugin',
23                 '_bugtrack_plugin_base'     => '¥Ú¡¼¥¸',
24                 '_bugtrack_plugin_summary'  => '¥µ¥Þ¥ê',
25                 '_bugtrack_plugin_priority' => 'Í¥Àè½ç°Ì',
26                 '_bugtrack_plugin_state'    => '¾õÂÖ',
27                 '_bugtrack_plugin_name'     => 'Åê¹Æ¼Ô',
28                 '_bugtrack_plugin_date'     => 'Åê¹ÆÆü',
29                 '_bugtrack_plugin_body'     => '¥á¥Ã¥»¡¼¥¸',
30                 '_bugtrack_plugin_category' => '¥«¥Æ¥´¥ê¡¼',
31                 '_bugtrack_plugin_pagename' => '¥Ú¡¼¥¸Ì¾',
32                 '_bugtrack_plugin_pagename_comment' => '<small>¶õÍó¤Î¤Þ¤Þ¤À¤È¼«Æ°Åª¤Ë¥Ú¡¼¥¸Ì¾¤¬¿¶¤é¤ì¤Þ¤¹¡£</small>',
33                 '_bugtrack_plugin_version_comment'  => '<small>¶õÍó¤Ç¤â¹½¤¤¤Þ¤»¤ó</small>',
34                 '_bugtrack_plugin_version'  => '¥Ð¡¼¥¸¥ç¥ó',
35                 '_bugtrack_plugin_submit'   => 'ÄɲÃ'
36                 );
37         set_plugin_messages($messages);
38 }
39
40 function plugin_bugtrack_action()
41 {
42         global $post, $vars, $_bugtrack_plugin_title;
43
44         if (PKWK_READONLY) die_message('PKWK_READONLY prohibits editing');
45
46         if ($post['mode'] == 'submit') {
47                 $page = plugin_bugtrack_write($post['base'], $post['pagename'], $post['summary'],
48                         $post['name'], $post['priority'], $post['state'], $post['category'],
49                         $post['version'], $post['body']);
50                 pkwk_headers_sent();
51                 header('Location: ' . get_script_uri() . '?' . rawurlencode($page));
52                 exit;
53         }
54         return FALSE;
55 /*
56         else {
57                 $ret['msg'] = $_bugtrack_plugin_title;
58                 $ret["body"] = plugin_bugtrack_print_form($vars['category']);
59         }
60
61         return $ret;
62 */
63 }
64
65 function plugin_bugtrack_print_form($base, $category)
66 {
67         global $_bugtrack_plugin_priority_list,$_bugtrack_plugin_state_list;
68         global $_bugtrack_plugin_priority, $_bugtrack_plugin_state, $_bugtrack_plugin_name;
69         global $_bugtrack_plugin_date, $_bugtrack_plugin_category, $_bugtrack_plugin_body;
70         global $_bugtrack_plugin_summary, $_bugtrack_plugin_submit, $_bugtrack_plugin_version;
71         global $_bugtrack_plugin_pagename, $_bugtrack_plugin_pagename_comment;
72         global $_bugtrack_plugin_version_comment;
73         global $script;
74
75         $select_priority = '';
76         for ($i = 0; $i < count($_bugtrack_plugin_priority_list); ++$i) {
77                 if ($i < count($_bugtrack_plugin_priority_list) - 1) {
78                         $selected = '';
79                 } else {
80                         $selected = ' selected="selected"';
81                 }
82                 $select_priority .= '<option value="' . $_bugtrack_plugin_priority_list[$i] . '"' .
83                         $selected . '>' . $_bugtrack_plugin_priority_list[$i] . '</option>' . "\n";
84         }
85
86         $select_state = '';
87         for ($i = 0; $i < count($_bugtrack_plugin_state_list); ++$i)
88                 $select_state .= '<option value="' . $_bugtrack_plugin_state_list[$i] . '">' .
89                         $_bugtrack_plugin_state_list[$i] . '</option>' . "\n";
90
91         if (empty($category)) {
92                 $encoded_category = '<input name="category" type="text" />';
93         } else {
94                 $encoded_category = '<select name="category">';
95                 foreach ($category as $_category) {
96                         $s_category = htmlspecialchars($_category);
97                         $encoded_category .= '<option value="' . $s_category . '">' .
98                                 $s_category . '</option>' . "\n";
99                 }
100                 $encoded_category .= '</select>';
101         }
102
103         $s_base = htmlspecialchars($base);
104
105         $body = <<<EOD
106 <form action="$script" method="post">
107  <table border="0">
108   <tr>
109    <th>$_bugtrack_plugin_name</th>
110    <td><input name="name" size="20" type="text" /></td>
111   </tr>
112   <tr>
113    <th>$_bugtrack_plugin_category</th>
114    <td>$encoded_category</td>
115   </tr>
116   <tr>
117    <th>$_bugtrack_plugin_priority</th>
118    <td><select name="priority">$select_priority</select></td>
119   </tr>
120   <tr>
121    <th>$_bugtrack_plugin_state</th>
122    <td><select name="state">$select_state</select></td>
123   </tr>
124   <tr>
125    <th>$_bugtrack_plugin_pagename</th>
126    <td><input name="pagename" size="20" type="text" />$_bugtrack_plugin_pagename_comment</td>
127   </tr>
128   <tr>
129    <th>$_bugtrack_plugin_version</th>
130    <td><input name="version" size="10" type="text" />$_bugtrack_plugin_version_comment</td>
131   </tr>
132   <tr>
133    <th>$_bugtrack_plugin_summary</th>
134    <td><input name="summary" size="60" type="text" /></td>
135   </tr>
136   <tr>
137    <th>$_bugtrack_plugin_body</th>
138    <td><textarea name="body" cols="60" rows="6"></textarea></td>
139   </tr>
140   <tr>
141    <td colspan="2" align="center">
142     <input type="submit" value="$_bugtrack_plugin_submit" />
143     <input type="hidden" name="plugin" value="bugtrack" />
144     <input type="hidden" name="mode" value="submit" />
145     <input type="hidden" name="base" value="$s_base" />
146    </td>
147   </tr>
148  </table>
149 </form>
150 EOD;
151
152         return $body;
153 }
154
155 function plugin_bugtrack_template($base, $summary, $name, $priority, $state, $category, $version, $body)
156 {
157         global $_bugtrack_plugin_priority, $_bugtrack_plugin_state, $_bugtrack_plugin_name;
158         global $_bugtrack_plugin_date, $_bugtrack_plugin_category, $_bugtrack_plugin_base;
159         global $_bugtrack_plugin_body, $_bugtrack_plugin_version;
160         global $script, $WikiName;
161
162         if (! preg_match("/^$WikiName$$/",$name)) $name = '[[' . $name . ']]';
163         if (! preg_match("/^$WikiName$$/",$base)) $base = '[[' . $base . ']]';
164
165          return <<<EOD
166 *$summary
167
168 -$_bugtrack_plugin_base: $base
169 -$_bugtrack_plugin_name: $name
170 -$_bugtrack_plugin_priority: $priority
171 -$_bugtrack_plugin_state: $state
172 -$_bugtrack_plugin_category: $category
173 -$_bugtrack_plugin_date: now?
174 -$_bugtrack_plugin_version: $version
175
176 **$_bugtrack_plugin_body
177 $body
178 ----
179
180 #comment
181 EOD;
182 }
183
184 function plugin_bugtrack_write($base, $pagename, $summary, $name, $priority, $state, $category, $version, $body)
185 {
186         global $post;
187
188         $base     = strip_bracket($base);
189         $pagename = strip_bracket($pagename);
190
191         $postdata = plugin_bugtrack_template($base, $summary, $name, $priority,
192                 $state, $category, $version, $body);
193
194         $i = 0;
195         do {
196                 ++$i;
197                 $page = $base . '/' . $i;
198         } while (is_page($page));
199
200         if ($pagename == '') {
201                 page_write($page, $postdata);
202         } else {
203                 $pagename = get_fullname($pagename, $base);
204                 // ¤¹¤Ç¤Ë¥Ú¡¼¥¸¤¬Â¸ºß¤¹¤ë¤«¡¢Ìµ¸ú¤Ê¥Ú¡¼¥¸Ì¾¤¬»ØÄꤵ¤ì¤¿
205                 if (is_page($pagename) || ! is_pagename($pagename)) {
206                         $pagename = $page; // ¥Ú¡¼¥¸Ì¾¤ò¥Ç¥Õ¥©¥ë¥È¤ËÌ᤹
207                 } else {
208                         page_write($page, 'move to [[' . $pagename . ']]');
209                 }
210                 page_write($pagename, $postdata);
211         }
212
213         return $page;
214 }
215
216 function plugin_bugtrack_convert()
217 {
218         global $vars;
219
220         if (PKWK_READONLY) return ''; // Show nothing
221
222         $base = $vars['page'];
223         $category = array();
224         if (func_num_args() > 0) {
225                 $args = func_get_args();
226                 $category = $args;
227                 $_base = strip_bracket(array_shift($category));
228                 $_base = get_fullname($_base, $base);
229                 if (is_pagename($_base)) $base = $_base;
230         }
231
232         return plugin_bugtrack_print_form($base, $category);
233 }
234
235
236 function plugin_bugtrack_pageinfo($page, $no = NULL)
237 {
238         global $WikiName, $InterWikiName, $BracketName;
239
240         if ($no === NULL)
241                 $no = preg_match('/\/([0-9]+)$/', $page, $matches) ? $matches[1] : 0;
242
243         $source = get_source($page);
244         $match  = array();
245         if (preg_match("/move\s*to\s*($WikiName|$InterWikiName|\[\[$BracketName\]\])/", $source[0], $match))
246                 return plugin_bugtrack_pageinfo(strip_bracket($match[1]), $no);
247
248         $body = join("\n", $source);
249         $summary = $name = $priority = $state = $category = 'test';
250         $itemlist = array();
251         foreach(array('summary', 'name', 'priority', 'state', 'category') as $item) {
252                 $itemname = '_bugtrack_plugin_' . $item;
253                 global $$itemname;
254                 $itemname = $$itemname;
255                 if (preg_match("/-\s*$itemname\s*:\s*(.*)\s*/", $body, $matches)) {
256                         if ($item == 'name') {
257                                 $$item = htmlspecialchars(strip_bracket($matches[1]));
258                         } else {
259                                 $$item = htmlspecialchars($matches[1]);
260                         }
261                 }
262         }
263
264         if (preg_match("/\*([^\n]+)/", $body, $matches)) {
265                 $summary = $matches[1];
266                 make_heading($summary);
267         }
268
269         return array($page, $no, $summary, $name, $priority, $state, $category);
270 }
271
272 function plugin_bugtrack_list_convert()
273 {
274         global $script, $vars;
275         global $_bugtrack_plugin_priority, $_bugtrack_plugin_state, $_bugtrack_plugin_name;
276         global $_bugtrack_plugin_date, $_bugtrack_plugin_category, $_bugtrack_plugin_summary;
277         global $_bugtrack_plugin_state_sort,$_bugtrack_plugin_state_list,$_bugtrack_plugin_state_bgcolor;
278
279         $page = $vars['page'];
280         if (func_num_args()) {
281                 list($_page) = func_get_args();
282                 $_page = get_fullname(strip_bracket($_page),$page);
283                 if (is_pagename($_page)) $page = $_page;
284         }
285
286         $data = array();
287         $pattern = $page . '/';
288         $pattern_len = strlen($pattern);
289         foreach (get_existpages() as $page) {
290                 if (strpos($page, $pattern) === 0 && is_numeric(substr($page, $pattern_len))) {
291                         $line = plugin_bugtrack_pageinfo($page);
292                         array_push($data, $line);
293                 }
294         }
295
296         $table = array();
297         for ($i = 0; $i <= count($_bugtrack_plugin_state_list) + 1; ++$i)
298                 $table[$i] = array();
299
300         foreach ($data as $line) {
301                 list($page, $no, $summary, $name, $priority, $state, $category) = $line;
302                 $page_link = make_pagelink($page);
303                 $state_no = array_search($state, $_bugtrack_plugin_state_sort);
304                 if ($state_no === NULL || $state_no === FALSE)
305                         $state_no = count($_bugtrack_plugin_state_list);
306
307                 $bgcolor = $_bugtrack_plugin_state_bgcolor[$state_no];
308                 $row = <<<EOD
309  <tr>
310   <td style="background-color:$bgcolor">$page_link</td>
311   <td style="background-color:$bgcolor">$state</td>
312   <td style="background-color:$bgcolor">$priority</td>
313   <td style="background-color:$bgcolor">$category</td>
314   <td style="background-color:$bgcolor">$name</td>
315   <td style="background-color:$bgcolor">$summary</td>
316  </tr>
317 EOD;
318                 $table[$state_no][$no] = $row;
319         }
320         $table_html = <<<EOD
321  <tr>
322   <th>&nbsp;</th>
323   <th>$_bugtrack_plugin_state</th>
324   <th>$_bugtrack_plugin_priority</th>
325   <th>$_bugtrack_plugin_category</th>
326   <th>$_bugtrack_plugin_name</th>
327   <th>$_bugtrack_plugin_summary</th>
328  </tr>
329 EOD;
330         for ($i = 0; $i <= count($_bugtrack_plugin_state_list); ++$i) {
331                 ksort($table[$i], SORT_NUMERIC);
332                 $table_html .= join("\n", $table[$i]);
333         }
334
335         return '<table border="1">' . "\n" . $table_html . '</table>';
336 }
337 ?>