OSDN Git Service

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