OSDN Git Service

04e347353a122f055138afcabaff4629899f96a4
[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.19 2004/12/25 00:43:22 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 ($post['mode'] == 'submit') {
45                 $page = plugin_bugtrack_write($post['base'], $post['pagename'], $post['summary'],
46                         $post['name'], $post['priority'], $post['state'], $post['category'],
47                         $post['version'], $post['body']);
48                 pkwk_headers_sent();
49                 header('Location: ' . get_script_uri() . '?' . rawurlencode($page));
50                 exit;
51         }
52         return FALSE;
53 /*
54         else {
55                 $ret['msg'] = $_bugtrack_plugin_title;
56                 $ret["body"] = plugin_bugtrack_print_form($vars['category']);
57         }
58
59         return $ret;
60 */
61 }
62
63 function plugin_bugtrack_print_form($base,$category)
64 {
65         global $_bugtrack_plugin_priority_list,$_bugtrack_plugin_state_list;
66         global $_bugtrack_plugin_priority, $_bugtrack_plugin_state, $_bugtrack_plugin_name;
67         global $_bugtrack_plugin_date, $_bugtrack_plugin_category, $_bugtrack_plugin_body;
68         global $_bugtrack_plugin_summary, $_bugtrack_plugin_submit, $_bugtrack_plugin_version;
69         global $_bugtrack_plugin_pagename, $_bugtrack_plugin_pagename_comment;
70         global $_bugtrack_plugin_version_comment;
71         global $script;
72
73         $select_priority = '';
74         for ($i = 0; $i < count($_bugtrack_plugin_priority_list); ++$i) {
75                 if ($i < count($_bugtrack_plugin_priority_list) - 1) {
76                         $selected = '';
77                 }
78                 else {
79                         $selected = ' selected="selected"';
80                 }
81                 $select_priority .= "<option value=\"{$_bugtrack_plugin_priority_list[$i]}\"$selected>{$_bugtrack_plugin_priority_list[$i]}</option>\n";
82         }
83
84         $select_state = '';
85         for ($i = 0; $i < count($_bugtrack_plugin_state_list); ++$i) {
86                 $select_state .= "<option value=\"{$_bugtrack_plugin_state_list[$i]}\">{$_bugtrack_plugin_state_list[$i]}</option>\n";
87         }
88
89         if (count($category) == 0) {
90                 $encoded_category = '<input name="category" type="text" />';
91         }
92         else {
93                 $encoded_category = '<select name="category">';
94                 foreach ($category as $_category) {
95                         $s_category = htmlspecialchars($_category);
96                         $encoded_category .= "<option value=\"$s_category\">$s_category</option>\n";
97                 }
98                 $encoded_category .= '</select>';
99         }
100
101         $s_base = htmlspecialchars($base);
102
103         $body = <<<EOD
104 <form action="$script" method="post">
105  <table border="0">
106   <tr>
107    <th>$_bugtrack_plugin_name</th>
108    <td><input name="name" size="20" type="text" /></td>
109   </tr>
110   <tr>
111    <th>$_bugtrack_plugin_category</th>
112    <td>$encoded_category</td>
113   </tr>
114   <tr>
115    <th>$_bugtrack_plugin_priority</th>
116    <td><select name="priority">$select_priority</select></td>
117   </tr>
118   <tr>
119    <th>$_bugtrack_plugin_state</th>
120    <td><select name="state">$select_state</select></td>
121   </tr>
122   <tr>
123    <th>$_bugtrack_plugin_pagename</th>
124    <td><input name="pagename" size="20" type="text" />$_bugtrack_plugin_pagename_comment</td>
125   </tr>
126   <tr>
127    <th>$_bugtrack_plugin_version</th>
128    <td><input name="version" size="10" type="text" />$_bugtrack_plugin_version_comment</td>
129   </tr>
130   <tr>
131    <th>$_bugtrack_plugin_summary</th>
132    <td><input name="summary" size="60" type="text" /></td>
133   </tr>
134   <tr>
135    <th>$_bugtrack_plugin_body</th>
136    <td><textarea name="body" cols="60" rows="6"></textarea></td>
137   </tr>
138   <tr>
139    <td colspan="2" align="center">
140     <input type="submit" value="$_bugtrack_plugin_submit" />
141     <input type="hidden" name="plugin" value="bugtrack" />
142     <input type="hidden" name="mode" value="submit" />
143     <input type="hidden" name="base" value="$s_base" />
144    </td>
145   </tr>
146  </table>
147 </form>
148 EOD;
149
150         return $body;
151 }
152
153 function plugin_bugtrack_template($base, $summary, $name, $priority, $state, $category, $version, $body)
154 {
155         global $_bugtrack_plugin_priority, $_bugtrack_plugin_state, $_bugtrack_plugin_name;
156         global $_bugtrack_plugin_date, $_bugtrack_plugin_category, $_bugtrack_plugin_base;
157         global $_bugtrack_plugin_body, $_bugtrack_plugin_version;
158         global $script, $WikiName;
159
160         if (!preg_match("/^$WikiName$$/",$name)) {
161                 $name = "[[$name]]";
162         }
163
164         if (!preg_match("/^$WikiName$$/",$base)) {
165                 $base = "[[$base]]";
166         }
167          return <<<EOD
168 *$summary
169
170 -$_bugtrack_plugin_base: $base
171 -$_bugtrack_plugin_name: $name
172 -$_bugtrack_plugin_priority: $priority
173 -$_bugtrack_plugin_state: $state
174 -$_bugtrack_plugin_category: $category
175 -$_bugtrack_plugin_date: now?
176 -$_bugtrack_plugin_version: $version
177
178 **$_bugtrack_plugin_body
179 $body
180 ----
181
182 #comment
183 EOD;
184 }
185
186 function plugin_bugtrack_write($base, $pagename, $summary, $name, $priority, $state, $category, $version, $body)
187 {
188         global $post;
189
190         $base = strip_bracket($base);
191         $pagename = strip_bracket($pagename);
192
193         $postdata = plugin_bugtrack_template($base, $summary, $name, $priority, $state, $category, $version, $body);
194
195         $i = 0;
196         do {
197                 $i++;
198                 $page = "$base/$i";
199         } while (is_page($page));
200
201         if ($pagename == '') {
202                 page_write($page,$postdata);
203         }
204         else {
205                 $pagename = get_fullname($pagename,$base);
206                 // ¤¹¤Ç¤Ë¥Ú¡¼¥¸¤¬Â¸ºß¤¹¤ë¤«¡¢Ìµ¸ú¤Ê¥Ú¡¼¥¸Ì¾¤¬»ØÄꤵ¤ì¤¿
207                 if (is_page($pagename) or !is_pagename($pagename)) {
208                         // ¥Ú¡¼¥¸Ì¾¤ò¥Ç¥Õ¥©¥ë¥È¤ËÌ᤹
209                         $pagename = $page;
210                 }
211                 else {
212                         page_write($page,"move to [[$pagename]]");
213                 }
214                 page_write($pagename,$postdata);
215         }
216
217         return $page;
218 }
219
220 function plugin_bugtrack_convert()
221 {
222         global $vars;
223
224         $base = $vars['page'];
225         $category = array();
226         if (func_num_args() > 0) {
227                 $args = func_get_args();
228                 $category = $args;
229                 $_base = strip_bracket(array_shift($category));
230                 $_base = get_fullname($_base,$base);
231                 if (is_pagename($_base))
232                 {
233                         $base = $_base;
234                 }
235         }
236
237         return plugin_bugtrack_print_form($base,$category);
238 }
239
240
241 function plugin_bugtrack_pageinfo($page,$no = NULL)
242 {
243         global $WikiName, $InterWikiName, $BracketName;
244
245         if ($no === NULL) {
246                 $no = preg_match('/\/([0-9]+)$/',$page,$matches) ? $matches[1] : 0;
247         }
248
249         $source = get_source($page);
250         if (preg_match("/move\s*to\s*($WikiName|$InterWikiName|\[\[$BracketName\]\])/",$source[0],$match)) {
251                 return plugin_bugtrack_pageinfo(strip_bracket($match[1]),$no);
252         }
253
254         $body = join("\n",$source);
255         $summary = $name = $priority = $state = $category = 'test';
256         $itemlist = array();
257         foreach(array('summary','name','priority','state','category') as $item) {
258                 $itemname = '_bugtrack_plugin_'.$item;
259                 global $$itemname;
260                 $itemname = $$itemname;
261                 if (preg_match("/-\s*$itemname\s*:\s*(.*)\s*/",$body,$matches)) {
262                         if ($item == 'name') {
263                                 $$item = htmlspecialchars(strip_bracket($matches[1]));
264                         }
265                         else {
266                                 $$item = htmlspecialchars($matches[1]);
267                         }
268                 }
269         }
270
271         if (preg_match("/\*([^\n]+)/",$body,$matches)) {
272                 $summary = $matches[1];
273                 make_heading($summary);
274         }
275
276         return array($page, $no, $summary, $name, $priority, $state, $category);
277 }
278
279 function plugin_bugtrack_list_convert()
280 {
281         global $script,$vars;
282         global $_bugtrack_plugin_priority, $_bugtrack_plugin_state, $_bugtrack_plugin_name;
283         global $_bugtrack_plugin_date, $_bugtrack_plugin_category, $_bugtrack_plugin_summary;
284         global $_bugtrack_plugin_state_sort,$_bugtrack_plugin_state_list,$_bugtrack_plugin_state_bgcolor;
285
286         $page = $vars['page'];
287         if (func_num_args()) {
288                 list($_page) = func_get_args();
289                 $_page = get_fullname(strip_bracket($_page),$page);
290                 if (is_pagename($_page))
291                 {
292                         $page = $_page;
293                 }
294         }
295
296         $data = array();
297         $pattern = "$page/";
298         $pattern_len = strlen($pattern);
299         foreach (get_existpages() as $page) {
300                 if (strpos($page,$pattern) === 0 and is_numeric(substr($page,$pattern_len))) {
301                         $line = plugin_bugtrack_pageinfo($page);
302                         array_push($data,$line);
303                 }
304         }
305
306         $table = array();
307         for ($i = 0; $i <= count($_bugtrack_plugin_state_list) + 1; ++$i) {
308                 $table[$i] = array();
309         }
310
311         foreach ($data as $line) {
312                 list($page, $no, $summary, $name, $priority, $state, $category) = $line;
313                 $page_link = make_pagelink($page);
314                 $state_no = array_search($state,$_bugtrack_plugin_state_sort);
315                 if ($state_no === NULL or $state_no === FALSE) {
316                         $state_no = count($_bugtrack_plugin_state_list);
317                 }
318
319                 $bgcolor = $_bugtrack_plugin_state_bgcolor[$state_no];
320                 $row = <<<EOD
321  <tr>
322   <td style="background-color:$bgcolor">$page_link</td>
323   <td style="background-color:$bgcolor">$state</td>
324   <td style="background-color:$bgcolor">$priority</td>
325   <td style="background-color:$bgcolor">$category</td>
326   <td style="background-color:$bgcolor">$name</td>
327   <td style="background-color:$bgcolor">$summary</td>
328  </tr>
329 EOD;
330                 $table[$state_no][$no] = $row;
331         }
332         $table_html = <<<EOD
333  <tr>
334   <th>&nbsp;</th>
335   <th>$_bugtrack_plugin_state</th>
336   <th>$_bugtrack_plugin_priority</th>
337   <th>$_bugtrack_plugin_category</th>
338   <th>$_bugtrack_plugin_name</th>
339   <th>$_bugtrack_plugin_summary</th>
340  </tr>
341 EOD;
342         for ($i = 0; $i <= count($_bugtrack_plugin_state_list); ++$i) {
343                 ksort($table[$i],SORT_NUMERIC);
344                 $table_html .= join("\n",$table[$i]);
345         }
346
347         return "<table border=\"1\">\n$table_html</table>";
348 }
349 ?>