Added Text2PDF, a tool which converts text files
[AROS-Contrib.git] / bgui / bugs / bugs.php
blobacb7e9686151867f4174e796f4a648ad76843508
1 <?
2 /*
3 * bugs.php
5 * @(#) $Header$
7 */
9 require($bugs_application_path."bugs_globals.php");
10 require($bugs_application_path."bugs_locale.php");
11 require($bugs_application_path."bugs_database.php");
12 require($bugs_shared_include_file);
13 commonHeader(LocaleText("Bug-Reporting"));
14 echo "<font size=-1>\n";
16 function indent($string, $prefix) {
17 $string = ereg_replace(13, "", $string); /* get rid of Ctrl-M */
18 return $prefix . ereg_replace("\n", "\n$prefix", $string) . "\n";
21 function show_state_options($state, $show_all) {
22 global $bugs_allow_bug_deletion;
24 if ($state) { echo "<option value=\"$state\">",LocaleText($state),"\n"; }
25 if($state!="Open") { echo "<option value=\"Open\">",LocaleText("Open"),"\n"; }
26 if($state!="Closed") { echo "<option value=\"Closed\">",LocaleText("Closed"),"\n"; }
27 if($state!="Assigned") { echo "<option value=\"Assigned\">",LocaleText("Assigned"),"\n"; }
28 if($state!="Analyzed") { echo "<option value=\"Analyzed\">",LocaleText("Analyzed"),"\n"; }
29 if($state!="Suspended") { echo "<option value=\"Suspended\">",LocaleText("Suspended"),"\n"; }
30 if($state!="Duplicate") { echo "<option value=\"Duplicate\">",LocaleText("Duplicate"),"\n"; }
31 if($state!="Delete!" && !$show_all && $bugs_allow_bug_deletion) { echo "<option value=\"Delete!\">",LocaleText("Deleted"),"\n"; }
32 if($state!="All" && $show_all) { echo "<option value=\"All\">",LocaleText("All"),"\n"; }
35 function show_menu($state) {
36 global $PHP_SELF, $bug_type,$bugs_form_submit_method;
38 if(!isset($bug_type)) { $bug_type="Any"; }
39 echo "<form method=$bugs_form_submit_method action=\"$PHP_SELF\">\n";
40 echo "<input type=hidden name=cmd value=\"Display Bugs\">\n";
41 echo "<center><table bgcolor=#aabbcc cellspacing=0><tr><td><input type=submit value=\"",LocaleText("Display"),"\"></td><td><select name=\"status\">\n";
42 show_state_options($state, 1);
43 echo "</select></td><td align=right>",LocaleText("Bugs-of-type"),": </td><td>";
44 show_types($bug_type,1,"bug_type");
46 $fields = array( "id" => LocaleText("Bug-ID"),
47 "bug_type" => LocaleText("Bug-Type"),
48 "email" => LocaleText("Email-address"),
49 "sdesc" => LocaleText("Short-Description"),
50 "ldesc" => LocaleText("Long-Description"),
51 "program_version" => LocaleText("Version"),
52 "os" => LocaleText("Platform"),
53 "status" => LocaleText("Status"),
54 "comments" => LocaleText("Comments"),
55 "ts1" => LocaleText("TimeStamp-1"),
56 "ts2" => LocaleText("Timestamp-2"),
57 "assign" => LocaleText("Assigned"));
59 reset($fields);
60 echo "</td><td align=right>",LocaleText("Order-by"),":</td><td> <select name='order_by_clause'>\n";
61 while(list($field,$name) = each($fields)) {
62 echo "<option value='$field'>$name\n";
64 echo "</select></td><td> <a href=\"bugs_statistics.html\">",LocaleText("Statistics"),"</a></td></tr>\n";
65 echo "<tr><td colspan=3 align=right>",LocaleText("Where-the-bug-description-contains"),":</td>\n";
66 echo "<td colspan=4><input type=text name=\"search_for\"></td></tr>\n";
67 echo "</table></center>\n";
68 echo "<i><center>",LocaleText("Feature-Change-requests-must-be-explicitly-selected-to-be-shown"),"</center></i>\n";
69 echo "</form>\n";
73 function show_types($first_item,$show_any,$var_name) {
74 global $bugs_problem_types;
76 echo "<select name=\"$var_name\">\n<option value=\"$first_item\">",LocaleText($first_item),"\n";
77 if($first_item!="Any") {
78 if($show_any) {
79 echo "<option value=\"Any\">",LocaleText("Any"),"\n";
82 for($i=0;$i<count($bugs_problem_types);$i++) {
83 if($first_item!=$bugs_problem_types[$i]) {
84 if($show_any || $bugs_problem_types[$i]!="Any") {
85 echo "<option value=\"",$bugs_problem_types[$i],"\">",LocaleText($bugs_problem_types[$i]),"\n";
89 echo "</select>\n";
92 function find_password($user) {
93 global $bugs_password_file,$bugs_debug;
95 if(($fp=@fopen($bugs_password_file,"r"))==0)
97 $bugs_debug("Could not open the password file!\n");
98 return("");
100 while(!feof($fp)) {
101 $line=fgets($fp,120);
102 $luser=strtok($line,":");
103 $passwd=strtok(":\n");
104 if($user==$luser) {
105 fclose($fp);
106 return($passwd);
109 fclose($fp);
110 return("");
113 function addlinks($text) {
114 $text = htmlspecialchars($text);
115 $new_text = ereg_replace("(http:[^ \n\t]*)","<a href=\"\1-=-\">\1</a>",$text);
116 $new_text = ereg_replace("(ftp:[^ \n\t]*)","<a href=\"\1-=-\">\1</a>",$text);
117 $new_text = ereg_replace("[.,]-=-\"","\"",$new_text);
118 $new_text = ereg_replace("-=-\"","\"",$new_text);
119 return $new_text;
122 if (isset($cmd) && $cmd == "Send bug report") {
123 if(!ereg("@",$email)) {
124 echo LocaleText("Please-provide-a-valid-email-address"),"<P>\n";
125 commonFooter();
126 exit;
129 if($ebug_type=="-Please-Select-") {
130 echo LocaleText("Please-select-an-appropriate-bug-type"),"<P>\n";
131 commonFooter();
132 exit;
135 show_menu(strtok($status," "));
136 echo "<hr>\n";
138 if((BugsDatabaseConnect($bugs_database_name))<=0)
139 $bugs_debug("Could not connect to the database server!");
140 $ts_date=date(BugsDatabaseDateFormat());
141 $ts_time=date("H:i:s");
142 if(BugsDatabaseSeparateDateTime())
143 $ts="'$ts_date', '$ts_time'";
144 else
145 $ts="'$ts_date $ts_time'";
146 if(BugsDatabaseSupportAutoIncrement())
147 $cid=0;
148 else
150 if(($result=BugsDatabaseQuery("SELECT id FROM serial_numbers"))<=0)
151 $bugs_debug("It was not possible to query the bugs database! (".BugsDatabaseError().")\n");
152 $cid=BugsDatabaseFetchResult($result,0,"id")+1;
153 if(BugsDatabaseQuery("UPDATE serial_numbers SET id=".$cid)<=0)
154 $bugs_debug("It was not possible to query the bugs database! (".BugsDatabaseError().")\n");
156 if(BugsDatabaseQuery("INSERT into bugdb values ($cid,'$ebug_type','$email','$sdesc','$ldesc','$program_version','$os','Open','', $ts, $ts,'','')")<=0)
157 $bugs_debug("It was not possible to query the bugs database! (".BugsDatabaseError().")\n");
158 if(BugsDatabaseSupportAutoIncrement())
159 $cid=BugsDatabaseFetchInsertId();
161 $report = "";
162 echo("<pre>\n");
164 $ldesc = stripslashes($ldesc);
165 $sdesc = stripslashes($sdesc);
166 $report .= LocaleText("From").":\t$email\n";
167 $report .= LocaleText("Platform").":\t$os\n";
168 $report .= LocaleText("Version").":\t".LocaleText($program_version)."\n";
169 $report .= LocaleText("Bug-Type").":\t".LocaleText($ebug_type)."\n";
170 $report .= LocaleText("Bug-description").":\t\n";
171 $ascii_report = indent($report.$ldesc,"");
172 $html_desc = ereg_replace("<", "&lt;", $ldesc);
173 $html_desc = ereg_replace(">", "&gt;", $html_desc);
174 $report .= indent($html_desc, " ");
176 $html_report = ereg_replace("<", "&lt;", $report);
177 $html_report = ereg_replace(">", "&gt;", $html_report);
179 echo $html_report;
181 echo("</pre>\n");
183 if (Mail($bugs_report_destination, LocaleText("Bug")."#$cid: $sdesc", $ascii_report, "From: $email")) {
184 echo "<h2>",sprintf(LocaleText("Mail-sent-to"),$bugs_report_destination),"</h2>\n";
185 echo "<P>",LocaleText("Thank-you-for-your-help"),"</P>";
186 $url="http://".getenv("SERVER_NAME").$PHP_SELF."?id=$cid";
187 echo "<P>",sprintf(LocaleText("bug-submit-message"),"<A HREF=\"$url\">$url</A>"),"</P>";
188 } else {
189 echo "<h2>",LocaleText("Mail-not-sent"),"</h2>\n";
190 echo "<P>",sprintf(LocaleText("Please-send-this-page-to"),"<A HREF=\"mailto:$email\">$email</a>"),"/P>";
193 } elseif(isset($cmd) && $cmd=="Display Bugs") {
194 show_menu(strtok($status," "));
195 echo "<hr>\n";
197 include($bugs_application_path."bugs_table_wrapper.php");
199 function external_processing($fieldname,$tablename,$data,$row)
201 global $PHP_SELF,$bugs_modify_graphic;
203 switch($fieldname) {
204 case "id":
205 print "<a href=\"$PHP_SELF?id=$data\">$data</a>\n";
206 break;
207 case "Originator":
208 print "<a href=\"mailto:$data\">$data</a>\n";
209 break;
210 case "Modify":
211 print "<a href=\"$PHP_SELF?id=${row[id]}&edit=1\">";
212 if($bugs_modify_graphic!="")
213 echo "<img src=\"$bugs_modify_graphic\" border=\"0\">";
214 else
215 echo "~";
216 echo "</a>\n";
217 break;
218 case "bug_type":
219 case "status":
220 case "program_version":
221 echo LocaleText(strtok($data," "));
222 break;
223 default:
224 $data = ereg_replace("<","&lt;",$data);
225 $data = ereg_replace(">","&gt;",$data);
226 print $data;
227 break;
230 function row_coloring($row) {
231 if ($row["bug_type"]=="Feature/Change Request") {
232 return "#aaaaaa";
234 switch($row["Status"]) {
235 case "Open":
236 return "#ffbbaa";
237 break;
238 case "Closed":
239 return "#aaffbb";
240 break;
241 case "Suspended":
242 return "#ffccbb";
243 break;
244 case "Assigned":
245 return "#bbaaff";
246 break;
247 case "Analyzed":
248 return "#99bbaa";
249 break;
250 case "Duplicate":
251 return "#bbbbbb";
252 break;
253 default:
254 return "#aaaaaa";
255 break;
258 $external_processing_function="external_processing";
259 $row_coloring_function="row_coloring";
261 if((BugsDatabaseConnect($bugs_database_name))<=0)
263 $bugs_debug("Could not connect to the database server!");
266 $tables[] = "bugdb";
267 $fields[] = "id";
268 $fields[] = "bug_type";
269 $fields[] = "status";
270 $fields[] = "assign";
271 $fields[] = "program_version";
272 $fields[] = "os";
273 $fields[] = "email";
274 $fields[] = "sdesc";
275 $conversion_table=array(
276 "id"=>LocaleText("ID#"),
277 "bug_type"=>LocaleText("Bug-Type"),
278 "status"=>LocaleText("Status"),
279 "assign"=>LocaleText("Assigned"),
280 "program_version"=>LocaleText("Version"),
281 "os"=>LocaleText("Platform"),
282 "email"=>LocaleText("Email-address"),
283 "sdesc"=>LocaleText("Short-Description"));
284 $pass_on = ereg_replace(" ","+","&cmd=Display+Bugs&status=$status&bug_type=$bug_type");
285 $default_header_color="aaaaaa";
286 $centering["id"] = $centering["Modify"] = $centering["bug_type"] = $centering["status"] = $centering["program_version"] = "center";
287 $dont_link["Modify"]=1;
289 if (!isset($order_by_clause)) {
290 $order_by_clause = "id";
292 if($status=="All" && $bug_type=="Any") {
293 $where_clause = "bug_type<>'Feature/Change Request'";
294 /* nothing */
295 } elseif($status=="All" && $bug_type!="Any") {
296 $where_clause = "bug_type='$bug_type'";
297 } elseif($status!="All" && $bug_type=="Any") {
298 /* Treat assigned and analyzed bugs as open */
299 if($status=="Open") {
300 $where_clause = "bug_type<>'Feature/Change Request' and (status='Open' or status='Assigned' or status='Analyzed')";
301 } else {
302 $where_clause = "status='$status' and bug_type<>'Feature/Change Request'";
304 } else {
305 /* Treat assigned and analyzed bugs as open */
306 if($status=="Open") {
307 $where_clause = "(status='Open' or status='Assigned' or status='Analyzed') and bug_type='$bug_type'";
308 } else {
309 $where_clause = "status='$status' and bug_type='$bug_type'";
312 if(strlen($search_for)) {
313 $where_clause .= " and (sdesc like '%$search_for%' or ldesc like '%$search_for%' or comments like '%$search_for%')";
315 table_wrapper();
316 echo "<br><center><a href=\"$PHP_SELF\">",LocaleText("Submit-Bug-Report"),"</a></center>\n";
317 } else if(!isset($cmd) && isset($id)) {
318 show_menu($status);
319 echo "<hr>\n";
321 if((BugsDatabaseConnect($bugs_database_name))<=0)
323 $bugs_debug("Could not connect to the database server!");
325 if(isset($modify) && $modify=="Edit Bug") {
326 $ok=0;
327 if($user!=$bugs_read_only_user) {
328 $psw=find_password($user);
329 if(strlen($psw)>0) {
330 if(crypt($pw,substr($psw,0,2))==$psw) {
331 if($estatus=="Delete!") {
332 $ok=BugsDatabaseQuery("DELETE from bugdb where id=$id");
333 } else {
334 $ts_date=date(BugsDatabaseDateFormat());
335 $ts_time=date("H:i:s");
336 if(BugsDatabaseSeparateDateTime())
337 $ts="ts2_date='$ts_date', ts2_time='$ts_time'";
338 else
339 $ts="ts2='$ts_date $ts_time'";
340 $ok=BugsDatabaseQuery("UPDATE bugdb set status='$estatus', bug_type='$ebug_type', assign='$eassign', comments='$comments', $ts, dev_id='$user' where id=$id");
342 if(!$ok)
343 $bugs_debug("It was not possible to update the bugs database! (".BugsDatabaseError().")\n");
347 if(!$ok) {
348 echo "<b>",LocaleText("Incorrect-user-password"),"</b><br>\n";
349 if($bugs_report_access_failures!="")
350 Mail($bugs_report_access_failures, sprintf(LocaleText("bugdb-access-failure-message-subject"),$user,$pw), "", "From: bugdb");
351 } else {
352 echo "<b>",LocaleText("Database-updated"),"</b><br>\n";
353 if($estatus=="Delete!") {
354 $text = sprintf(LocaleText("Bug-has-been-deleted"),$id,$user,stripslashes($comments));
355 } else {
356 $text = stripslashes(sprintf(LocaleText("Bug-has-been-updated"),$id,$user,$eemail,$estatus,$ebug_type,$eassign,$comments,"http://".getenv("SERVER_NAME").$PHP_SELF."?id=$id"));
358 $esdesc = stripslashes($esdesc);
359 $subject=sprintf(LocaleText("Bug-updated"),$id,$esdesc);
360 $from="From: $bugs_database_user_name <$bugs_report_destination>";
361 Mail($eemail, $subject, $text, $from);
362 Mail($bugs_report_destination, $subject, $text, $from);
365 if(BugsDatabaseSeparateDateTime())
367 $date_time="ts1_date,ts1_time,ts2_date,ts2_time";
368 $assigned_column=14;
369 $dev_id_column=13;
371 else
373 $date_time="ts1,ts2";
374 $assigned_column=12;
375 $dev_id_column=11;
377 if(($result=BugsDatabaseQuery("SELECT id,bug_type,email,sdesc,ldesc,program_version,os,status,comments,$date_time,dev_id,assign from bugdb where id=$id"))<=0)
378 $bugs_debug("It was not possible to query the bugs database! (".BugsDatabaseError().")\n");
379 if(BugsDatabaseNumberOfRows($result)>0) {
380 $row = BugsDatabaseFetchNextRow($result);
381 echo "<br><h1>",sprintf(LocaleText("Bug-id-#"),$id),"</h1>\n";
382 if(BugsDatabaseSeparateDateTime())
384 $ts1=$row[9]." ".$row[10];
385 $ts1=$row[11]." ".$row[12];
387 else
389 $ts1=$row[9];
390 $ts1=$row[10];
392 echo "<table>\n";
393 if(!isset($edit)) {
394 echo "<tr><th align=right>",LocaleText("Status"),":</th><td>".LocaleText(strtok($row[7]," "))."</td>";
395 echo "<td><a href=\"$PHP_SELF?id=$id&edit=1\"><font size=-1><tt>",LocaleText("Modify"),"</tt></font></a></td>";
396 } else {
397 echo "<form method=$bugs_form_submit_method action=\"$PHP_SELF\">\n";
398 echo "<input type=hidden name=id value=\"$id\">\n";
399 echo "<input type=hidden name=modify value=\"Edit Bug\">\n";
400 echo "<tr><th align=right>",LocaleText("Status"),":</th><td><select name=\"estatus\">\n";
401 show_state_options(strtok($row[7]," "), 0);
402 echo "</select>\n";
403 echo LocaleText("Assign-to"),": <input type=text name=eassign value=\"$row[$assigned_column]\">\n";
405 echo "</tr>\n";
406 echo "<tr><th align=right>",LocaleText("From"),":</th><td><a href=\"mailto:".$row[2]."\">".$row[2]."</a>";
407 echo "<input type=hidden name=eemail value=\"$row[2]\"></td></tr>\n";
408 echo "<tr><th align=right>",LocaleText("Date"),":</th><td>".$ts1."</td></tr>\n";
409 if(!isset($edit)) {
410 echo "<tr><th align=right>",LocaleText("Bug-Type"),":</th><td>".LocaleText(strtok($row[1]," "))."</td></tr>\n";
411 } else {
412 echo "<tr><th align=right>",LocaleText("Bug-Type"),":</th><td>\n";
413 show_types(strtok($row[1]," "),0,"ebug_type");
414 echo "</td></tr>\n";
416 echo "<tr><th align=right>",LocaleText("Platform"),":</th><td>".$row[6]."</td></tr>\n";
417 echo "<tr><th align=right>",LocaleText("Version"),":</th><td></b>".LocaleText(strtok($row[5]," "))."</td></tr>\n";
418 echo "<tr><th align=right>",LocaleText("Assigned-to"),":</th><td></b>".$row[$assigned_column]."</td></tr>\n";
419 $sd = ereg_replace("<","&lt;",$row[3]);
420 $sd = ereg_replace(">","&gt;",$sd);
421 echo "<tr><th align=right>",LocaleText("Short-Description"),":</th><td></b>$sd<input type=hidden name=esdesc value=\"$row[3]\"></td></tr>\n";
422 echo "</table>\n";
423 $text = addlinks($row[4]);
424 echo "<blockquote><blockquote><pre>".$text."</pre></blockquote></blockquote>\n";
425 if(!isset($edit)) {
426 if(strlen($row[8])) {
427 echo "<b><i>[".$ts2."] ",LocaleText("Updated-by")," ".$row[$dev_id_column]."</i></b><br>\n";
428 $text=addlinks($row[8]);
429 echo "<b><pre>".$text."</pre></b>\n";
431 } else {
432 echo "<b><tt>",LocaleText("Developer-Comments"),":</tt></b><br>\n";
433 echo "<textarea cols=60 rows=15 name=\"comments\">".$row[8]."</textarea><br>\n";
434 echo LocaleText("User-id"),": <input type=text size=10 name=user>\n";
435 echo LocaleText("Password"),": <input type=password size=10 name=pw>\n";
436 echo "<input type=submit value=\"",LocaleText("Commit-Changes"),"\">\n";
437 echo "</form>\n";
439 } else {
440 if(isset($modify) && $estatus=="Delete!") {
441 echo "<br><h1>",sprintf(LocaleText("Bug-was-deleted"),$id),"</h1>\n";
442 } else {
443 echo "<br><h1>",sprintf(LocaleText("Bug-does-not-exist"),$id),"</h1>\n";
446 BugsDatabaseFreeResult($result);
447 } else {
448 show_menu(strtok($status," "));
449 echo LocaleText("use-the-form-below");
451 <hr>
452 <form method=$bugs_form_submit_method action="<? echo $PHP_SELF;?>">
453 <input type=hidden name=cmd value="Send bug report">
455 echo LocaleText("message-before-bug-report"),"<P>",LocaleText("more-than-one-bug"),"</P>";
457 <table>
458 <tr>
459 <th align=right><? echo LocaleText("Your-email-address"); ?>:</th>
460 <td colspan="2">
461 <input type=text size=20 name="email" value="<?if(isset($email)) { echo $email; }?>">
462 </td>
463 </tr><tr>
464 <th align=right><? echo LocaleText("Version"); ?>:</th>
465 <td>
466 <select name="program_version">
468 for(Reset($bugs_versions),$version=0;$version<count($bugs_versions);$version++,Next($bugs_versions))
469 echo "<option value=\"",$bugs_versions[Key($bugs_versions)],"\">",LocaleText($bugs_versions[Key($bugs_versions)]),"</option>\n";
471 </select>
472 </td>
474 if(($message=LocaleText("message-after-version"))!="")
477 <td>
478 <font size="-2">
479 <? echo $message; ?>
480 </font>
481 </td>
485 </tr><tr>
486 <th align=right><? echo LocaleText("Bug-Type"); ?>:</th>
487 <td colspan="2">
488 <?show_types("-Please-Select-",0,"ebug_type")?>
489 </td>
490 </tr><tr>
491 <th align=right><? echo LocaleText("Platform"); ?>:</th>
492 <td colspan="2">
493 <input type=text size=20 name="os" value="<?echo isset($operating_system)?$operating_system:"";?>">
494 </td>
495 </tr><tr>
496 <th align=right><? echo LocaleText("Bug-description"); ?>:</th>
497 <td colspan="2">
498 <input type=text size=40 maxlength=79 name="sdesc">
499 </td>
500 </table>
502 <table>
503 <tr>
504 <td valign="top">
505 <? echo LocaleText("Please-supply-any-information"); ?>
506 <ul>
508 for(Reset($bugs_submit_information),$information=0;$information<count($bugs_submit_information);$information++,Next($bugs_submit_information))
509 echo "<li>",LocaleText($bugs_submit_information[Key($bugs_submit_information)]),"</li>\n";
511 </ul>
512 <center>
513 <input type=submit value="<? echo LocaleText("Send-bug-report"); ?>">
514 </center>
515 </td>
516 <td>
517 <textarea cols=60 rows=15 name="ldesc" wrap=virtual></textarea>
518 </td>
519 </tr>
520 </table>
524 </form>
526 <? } ?>
527 </font>
529 commonFooter();