OSDN Git Service

ぱんだ:[[自作プラグイン]]
[pukiwiki/pukiwiki.git] / plugin / bugtrack.inc.php
1 <?
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.1 2002/12/05 05:02:27 panda Exp $
12  */
13
14 function plugin_bugtrack_init()
15 {
16   global $script;
17   $_plugin_bugtrack_messages = array(
18     '_bugtrack_plugin_priority_list' => array("¶ÛµÞ","½ÅÍ×","ÉáÄÌ","Äã"),
19     '_bugtrack_plugin_state_list' => array("Äó°Æ","Ãå¼ê","CVSÂÔ¤Á","´°Î»","ÊÝα","µÑ²¼"),
20     '_bugtrack_plugin_state_sort' => array("Ãå¼ê","CVSÂÔ¤Á","ÊÝα","´°Î»","Äó°Æ","µÑ²¼"),
21     '_bugtrack_plugin_state_bgcolor' => array("#ccccff","#ffcc99","#ccffcc","#ccffcc","#ffccff","#cccccc","#ff3333"),
22     
23     '_bugtrack_plugin_title' => "\$1 Bugtrack Plugin",
24     '_bugtrack_plugin_base' => "¥Ú¡¼¥¸",
25     '_bugtrack_plugin_summary' => "¥µ¥Þ¥ê",
26     '_bugtrack_plugin_priority' => "Í¥Àè½ç°Ì",
27     '_bugtrack_plugin_state' => "¾õÂÖ",
28     '_bugtrack_plugin_name' => "Åê¹Æ¼Ô",
29     '_bugtrack_plugin_date' => "Åê¹ÆÆü",
30     '_bugtrack_plugin_body' => "¥á¥Ã¥»¡¼¥¸",
31     '_bugtrack_plugin_category' => "¥«¥Æ¥´¥ê¡¼",
32     '_bugtrack_plugin_pagename' => "¥Ú¡¼¥¸Ì¾",
33     '_bugtrack_plugin_pagename_comment' => "<font size=\"1\">¶õÍó¤Î¤Þ¤Þ¤À¤È¼«Æ°Åª¤Ë¥Ú¡¼¥¸Ì¾¤¬¿¶¤é¤ì¤Þ¤¹¡£</font>",
34     '_bugtrack_plugin_version_comment' => "<font size=\"1\">¶õÍó¤Ç¤â¹½¤¤¤Þ¤»¤ó</font>",
35     '_bugtrack_plugin_version' => "¥Ð¡¼¥¸¥ç¥ó",
36     '_bugtrack_plugin_submit' => "ÄɲÃ"
37     );
38   set_plugin_messages($_plugin_bugtrack_messages);
39 }
40
41
42 function plugin_bugtrack_action()
43 {
44   global $command,$vars,$_bugtrack_plugin_default_category,$script,$post;
45   
46   if($post['mode']=='submit') {
47     $ret['msg'] = $_bugtrack_plugin_title_submitted;
48     $page = plugin_bugtrack_write($post['base'], $post['pagename'], $post['summary'], $post['name'], $post['priority'], $post['state'], $post['category'], $post['version'], $post['body']);
49     header("Location: $script?".rawurlencode($page));
50     die;
51   }
52   else {
53     $ret['msg'] = $_bugtrack_plugin_title;
54     $ret["body"] = plugin_bugtrack_print_form($vars['category']);
55   }
56   
57   return $ret;
58 }
59
60 function plugin_bugtrack_print_form($base,$category)
61 {
62   global $_bugtrack_plugin_priority_list,$_bugtrack_plugin_state_list;
63   global $_bugtrack_plugin_priority, $_bugtrack_plugin_state, $_bugtrack_plugin_name;
64   global $_bugtrack_plugin_date, $_bugtrack_plugin_category, $_bugtrack_plugin_body;
65   global $_bugtrack_plugin_summary, $_bugtrack_plugin_submit, $_bugtrack_plugin_version;
66   global $_bugtrack_plugin_pagename, $_bugtrack_plugin_pagename_comment;
67   global $_bugtrack_plugin_version_comment;
68   global $script;
69
70   $select_priority = '';
71   for($i=0; $i<count($_bugtrack_plugin_priority_list); ++$i) {
72     if($i<count($_bugtrack_plugin_priority_list)-1) {
73       $selected = '';
74     }
75     else {
76       $selected = ' selected';
77     }
78     $select_priority .= '<option name="'.$_bugtrack_plugin_priority_list[$i].'"'.$selected.'>'.$_bugtrack_plugin_priority_list[$i]."</option>";
79   }
80   
81   $select_state = '';
82   for($i=0; $i<count($_bugtrack_plugin_state_list); ++$i) {
83     $select_state .= '<option name="'.$_bugtrack_plugin_state_list[$i].'">'.$_bugtrack_plugin_state_list[$i]."</option>";
84   }
85   
86   if(count($category)==0) {
87     $encoded_category = "<input name=\"category\" type=\"text\">";
88   }
89   else {
90     $encoded_category = "<select name=\"category\">";
91     for($i=0; $i<count($category); ++$i) {
92       $encoded_category .= '<option name="'.$category[$i].'">'.$category[$i]."</option>";
93     }
94     $encoded_category .= "</select>";
95   }
96   
97   $body = "<table border=\"0\"><form action=\"$script\" method=\"post\">
98 <tr><th nowrap>$_bugtrack_plugin_name</th><td><input name=\"name\" size=\"20\" type=\"text\"></td></tr>
99 <tr><th nowrap>$_bugtrack_plugin_category</th><td>$encoded_category</td></tr>
100 <tr><th nowrap>$_bugtrack_plugin_priority</th><td><select name=\"priority\">$select_priority</select></td></tr>
101 <tr><th nowrap>$_bugtrack_plugin_state</th><td><select name=\"state\">$select_state</select></td></tr>
102 <tr><th nowrap>$_bugtrack_plugin_pagename</th><td><input name=\"pagename\" size=\"20\" type=\"text\">$_bugtrack_plugin_pagename_comment</td></tr>
103 <tr><th nowrap>$_bugtrack_plugin_version</th><td><input name=\"version\" size=\"10\" type=\"text\">$_bugtrack_plugin_version_comment</td></tr>
104 <tr><th nowrap>$_bugtrack_plugin_summary</th><td><input name=\"summary\" size=\"60\" type=\"text\"></td></tr>
105 <tr><th nowrap>$_bugtrack_plugin_body</th><td><textarea name=\"body\" cols=\"60\" rows=\"6\"></textarea></td></tr>
106 <tr><td colspan=\"2\" align=\"center\"><input type=\"submit\" value=\"$_bugtrack_plugin_submit\">
107 <input type=\"hidden\" name=\"plugin\" value=\"bugtrack\">
108 <input type=\"hidden\" name=\"mode\" value=\"submit\">
109 <input type=\"hidden\" name=\"base\" value=\"$base\">
110 </td></tr>
111 </form></table>";
112   
113   return $body;
114 }
115
116 function plugin_bugtrack_template($base, $summary, $name, $priority, $state, $category, $version, $body)
117 {
118   global $_bugtrack_plugin_priority, $_bugtrack_plugin_state, $_bugtrack_plugin_name;
119   global $_bugtrack_plugin_date, $_bugtrack_plugin_category, $_bugtrack_plugin_base;
120   global $_bugtrack_plugin_body, $_bugtrack_plugin_version;
121   global $script, $WikiName;
122
123   if(!preg_match("/^$WikiName$$/",$name)) {
124     $name = "[[$name]]";
125   }
126   
127   if(!preg_match("/^$WikiName$$/",$base)) {
128     $base = "[[$base]]";
129   }
130
131    return 
132 "*$summary
133
134 -$_bugtrack_plugin_base: $base
135 -$_bugtrack_plugin_name: $name
136 -$_bugtrack_plugin_priority: $priority
137 -$_bugtrack_plugin_state: $state
138 -$_bugtrack_plugin_category: $category
139 -$_bugtrack_plugin_date: now?
140 -$_bugtrack_plugin_version: $version
141
142 **$_bugtrack_plugin_body
143 $body
144 ----
145
146 #comment";
147 }
148
149 function plugin_bugtrack_write($base, $pagename, $summary, $name, $priority, $state, $category, $version, $body)
150 {
151   global $WikiName;
152   
153   $postdata = plugin_bugtrack_template($base, $summary, $name, $priority, $state, $category, $version, $body);
154   $postdata = user_rules_str($postdata);
155
156   $i = 0;
157   do {
158     $i++;
159     $page = "[[$base/$i]]";
160   } while(is_page($page));
161   
162   if($pagename == '') {
163     file_write(DATA_DIR,$page,$postdata);
164   }
165   else {
166     if(!preg_match("/^$WikiName$$/",$pagename)) {
167       $pagename = "[[$pagename]]";
168     }
169     file_write(DATA_DIR,$page,"move to $pagename");
170     file_write(DATA_DIR,$pagename,$postdata);
171   }
172
173   // is_page¤Î¥­¥ã¥Ã¥·¥å¤ò¥¯¥ê¥¢¤¹¤ë¡£
174   is_page($post["refer"],true);
175   
176   return $page;
177 }
178
179 function plugin_bugtrack_convert()
180 {
181         global $script,$weeklabels,$vars,$command,$WikiName,$BracketName;
182         global $_bugtrack_plugin_default_category;
183
184         $args = func_get_args();
185         $base = $vars['page'];
186         $category = array();
187         if(func_num_args() > 0)
188           {
189             $base = $args[0];
190             $category = $args;
191             array_shift($category);
192           }
193         
194         return plugin_bugtrack_print_form($base,$category);
195 }
196
197
198 function plugin_bugtrack_pageinfo($page) {
199   global $WikiName, $InterWikiName, $BracketName;
200
201   $source = get_source($page);
202   if(preg_match("/move\s*to\s*($WikiName|$InterWikiName|$BracketName)/",$source[0],$match)) {
203     return(plugin_bugtrack_pageinfo($match[1]));
204   }
205
206   $body = join("\n",$source);
207   $summary = $name = $priority = $state = $category = 'test';
208   $itemlist = array();
209   foreach(array('summary','name','priority','state','category') as $item) {
210     $itemname = '_bugtrack_plugin_'.$item;
211     global $$itemname;
212     $itemname = $$itemname;
213     if(preg_match("/-\s*$itemname\s*:\s*(.*)\s*/",$body,$matches)) {
214       if($item == "name") {
215         $$item = htmlspecialchars(strip_bracket($matches[1]));
216       }
217       else {
218         $$item = htmlspecialchars($matches[1]);
219       }
220     }
221   }
222
223   global $_bugtrack_plugin_summary;
224   if(preg_match("/\*([^\n]+)/",$body,$matches)) {
225     $summary = htmlspecialchars($matches[1]);
226   }
227   
228   return(array($page, $summary, $name, $priority, $state, $category));
229 }
230
231 function plugin_bugtrack_list_convert()
232 {
233   global $vars, $script;
234   global $_bugtrack_plugin_priority, $_bugtrack_plugin_state, $_bugtrack_plugin_name;
235   global $_bugtrack_plugin_date, $_bugtrack_plugin_category, $_bugtrack_plugin_summary;
236   global $_bugtrack_plugin_state_sort,$_bugtrack_plugin_state_list,$_bugtrack_plugin_state_bgcolor;
237   
238   $page = $vars['page'];
239   if(func_num_args()) {
240     $aryargs = func_get_args();
241     $page = $aryargs[0];
242   }
243   
244   $data = array();
245   $states = array();
246   $filepattern = encode('[['.strip_bracket($page).'/');
247   $filepattern_len = strlen($filepattern);
248   if ($dir = @opendir(DATA_DIR))
249     {
250       while($file = readdir($dir))
251         {
252           if($file == ".." || $file == ".") continue;
253           if(substr($file,0,$filepattern_len)!=$filepattern) continue; 
254           $page = decode(trim(preg_replace("/\.txt$/"," ",$file)));
255           $line = plugin_bugtrack_pageinfo($page);
256           array_push($data,$line);
257           list($page, $summary, $name, $priority, $state, $category) = $line;
258           array_push($states,$state);
259         }
260       closedir($dir);
261     }
262   array_unique($states);
263   $table = array();
264
265   for($i=0; $i<=count($_bugtrack_plugin_state_list)+1; ++$i) {
266     $table[$i] = array();
267   }
268   foreach($data as $line) {
269     list($page, $summary, $name, $priority, $state, $category) = $line;
270     $page_link = make_link($page);
271     $state_no = array_search($state,$_bugtrack_plugin_state_sort);
272     if($state_no===NULL) {
273       $state_no = count($_bugtrack_plugin_state_list);
274     }
275     $bgcolor = $_bugtrack_plugin_state_bgcolor[$state_no];
276     array_push($table[$state_no],"<tr bgcolor=\"$bgcolor\"><td nowrap>$page_link</td><td nowrap>$state</td><td nowrap>$priority</td><td nowrap>$category</td><td nowrap>$name</td><td>$summary</td></tr>");
277   }
278   
279   $table_html = "<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></tr>\n";
280   for($i=0; $i<=count($_bugtrack_plugin_state_list); ++$i) {
281     $table_html .= join("\n",$table[$i]);
282   }
283   return "<table border=1>$table_html</table>";
284 }
285
286 ?>